ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

ROS software is not typically distributed and installed in the same way as "traditional" software. A ROS project is made up of several packages, each of which can be distributed and installed separately (to allow reuse in other ways). All the packages for a particular project must be present for that project to work. There will not be just one package because there are core dependencies, such as roscpp, which must be used (unless you intentionally make your own single-workspace distribution).

For general information about ROS packages, see here. In particular, dependencies are described in section 5.

If you are looking for help on how to make your package installable by others using a binary, see this page on releasing packages in ROS using bloom. It is possible to have a top package for your project that specifies all the dependencies it uses, so that when someone installs that top package the package manager automatically installs all the rest of your project as well.

If you want to bundle up an entire project that uses multiple packages into a single thing that someone can install and use, then you could consider using one of the software bundling tools. There are a few options available:

  • Mike Purvis of Clearpath Robotics gave a great talk at last year's ROSCon called "Robust Deployment with ROS Bundles", about making bundles of software into a single installable .deb package. It's all based on ROS and Debian tooling and looks very nice.
  • There is a recent thread on the ROS discourse that describes in great detail how to use Ubuntu Snaps to make easy-to-distribute ROS software.
  • There is a tutorial on the ROS Wiki about [using Docker to create ROS containers] which are easy to distribute.

I haven't used any of the above three methods, but if I were to start using one now, I would probably use the Ubuntu Snaps method, simply because it's described in the most detail.