[Documentation] [TitleIndex] [WordIndex

My question isn't answered here; what do I do?


Where do I get started?

Start by looking at the ROS tutorials.

What is a ROS package?

See Packages. A package is a chunk of code and/or data.

Wait, what about "ros-pkg"? Is that a ROS Package?

No, it's a ROS repository. There are at least 3 notions of the term "package" that arise in using ROS:

  1. ROS repositories are, by convention, named whatever-ros-pkg. This is only a naming convention and nothing more.

  2. ROS has a notion of package (per previous question)

  3. Debian (and most other distributions) also have a notion of package as a unit of installation, and some ROS packages can be installed by installing a Debian package--but Debian packages correspond to ROS stacks, not ROS packages!

How to get started with a mobile platform?

Start by looking at Robot Setup.

How does ROS do real-time control?

ROS itself is not a real-time control library. Willow Garage uses its own solution for real-time on the PR2 robot. Orocos provides a good real-time toolkit that is already integrated with ROS. KU Leuven is currently working on improving that integration.

Our general philosophy is to compartmentalize real-time processing into a small part of the system, where it is strictly necessary, and to use ROS to pass data in and out of real-time. In the case of the PR2, a single real-time process is used for the entire system.

Getting Started/Installing ROS

How do I install prerequisites?

Use the rosdep tool to install external dependencies (e.g. debian packages) for a Package. For example, to get all the system dependencies for the rviz package:

rosdep install rviz

How do I install ROS packages from .deb files?

If you have a mostly .deb based install, but you are trying to build a ROS package from source using rosmake, you may receive errors like

[rospack] couldn't find dependency [control_toolbox] of [flyer_controller]

In this case, if the dependency is available as a .deb, you probably want to install that rather than the source version. The general steps to figure out what to install are:

To recap: To install (using apt-get) a particular ROS package, you need to first determine what ROS stack it lives in, and then install the corresponding Debian package.

How do I build a ROS package?

Use rosmake. It first builds all the package's dependencies, then builds the package itself.

E.g., to build the rviz package:

rosmake rviz

You can do this from anywhere. Alternatively, you can go to the package directory, then run rosmake with no arguments:

roscd rviz

There's no Makefile in the root of ros-pkg! How do I build everything?

ROS packages live in a federated space where's there's no central list of things to be built. For reasons of (disk) space and time, usually you just want to build the things that you're working with. E.g., if you're using the pr2_2dnav_gazebo package, which brings up a navigation stack in simulation, you can build all the pieces you need with rosmake:

rosmake pr2_2dnav_gazebo

Having said that, if you really want to build everything, you can use rosmakeall:


It will build all packages in your ROS_ROOT and ROS_PACKAGE_PATH directories. Note that this will take about 90 minutes and consume about 1GB on disk. As of now, rosmakeall also runs all the tests for each package. It will eventually be modified to not run tests.

Libraries and Tools

How do I find the list of available ROS packages?

Click on the "Browse Software" link about to search for publicly available ROS packages.

How do I find the list of installed ROS packages?

On your running system, you can use rospack:

rospack list-names

How do I run ROS across multiple machines?

Run the ROS master (roscore) on one of the machines. Then set the ROS_MASTER_URI environment variable on all other machines that you want to run ROS nodes on, as described in this tutorial, running ROS across multiple machines.

How do I visualize sensor data (or anything else)?

Use rviz.


My SVN update failed with '''an unversioned directory of the same name already exists'''

This error can happen for a number of reasons. The workaround is to use the --force option when updating. (Alternatively, you can rm the directory (or file) that SVN is complaining about, then repeat the update. Unfortunately, SVN will only complain about one such conflict at a time, so you may have to repeat this rm and update loop multiple times.)

This problem occurs any time that a directory or file was previously autogenerated, but then is checked into SVN. For example, if someone adds some exported Python code to a package that already contained auto-generated message or service code.

My SVN update failed with '''SSL negotiation failed: Secure connection truncated'''

Occasionally, you may get a response like the following when doing an svn up:

svn: PROPFIND of '/svnroot/ros-pkg/!svn/bc/22522/pkg/trunk/calibration/sandbox/pr2_calibration_actions/msg/JointStatesChannelConfig.msg': SSL negotiation failed: Secure connection truncated (https://ros-pkg.svn.sourceforge.net)

This is, as far as we know, a network connectivity problem with the SVN server. SourceForge's servers exhibit this kind of error more often than others, and much more often than we would like.

The workaround is to try the svn up again. If the server is having a particularly bad day, you may need to run the update multiple times.

Any time I try to do anything that uses rospack (rosmake, roscd) it takes a long time to execute - how can I make things faster?

Sometimes old defunct packages - "zombies" - that have had their manifests moved removed or deleted may be making it time-consuming to crawl the directory structure. Try the command rospack profile - this will tell you the time required to crawl your directory structure and will describe your directory structure, including any zombies that may be in the structure. These will be indicated with an asterisk. Getting rid of the zombies may improve your system performance - running the command rospack profile --zombie-only will list these zombies. From this point you can either manually remove the zombies or if it looks to you like the entire list can be safely deleted you can run the command: rospack profile --zombie-only | xargs rm -r. This will remove all of the zombie directories, and can potentially may it quicker to navigate or build your ros directory structure.

What does it take to be a implement my own Node library?

Please see the document on Implementing Client Libraries.

Questions about contributing to ROS/ROS.org

How do I get a Wiki account? Can I edit pages on ROS.org

Anyone can sign up for a ROS.org wiki account. Feel free to start contributing! You can sign up for an account here.

ROS vs. Other Robot Software Frameworks/Middlewares

How does ROS compare in terms of performance?

It is difficult to compare performance directly between systems. In general, there have been few complaints about performance from ROS users, and ROS has even been used on Gumstix and ARM targets. ROS also has optimizations that allow multiple C++ processes to run within a single process for minimal message-passing overhead.

We encourage those considering various robot software frameworks to try developing in each of the frameworks, rather than attempt to choose the one with the best performance. ZeroC's whitepaper on ICE performance notes:

Rather than attempt to fully summarize their paper, we recommend reading the white paper for other evaluation criteria that they recommend when selecting a framework.

We also recommend investigating combinations of frameworks. Many of the current open-source robot software libraries have already been integrated together, and it is often possible to use the strengths from each to better meet your development needs.

Can ROS co-exist with other communication middlewares?

ROS, Player, YARP, Orocos, URBI, OpenRAVE, and IPC have all been used together. In general, using systems together involves converting data types shared between the systems. As it is easy to add new types in ROS, this process is often fairly straightforward.

There should be very little performance penalty when using multiple middlewares. In general, the middlewares have very little overhead, so performance is usually directly related to the number of messages being exchanged.

Can Player and ROS work together?

You can use Player drivers in ROS. We've also designed many of the ROS libraries to be easily embeddable, sans-ROS, inside of other frameworks. We don't have any formal tutorials on using Player drivers in ROS, but you can start here for pointers:


2019-07-13 12:18