Contents
- My question isn't answered here; what do I do?
- Basics
- Getting Started/Installing ROS
- Libraries and Tools
-
Errors
- My SVN update failed with '''an unversioned directory of the same name already exists'''
- My SVN update failed with '''SSL negotiation failed: Secure connection truncated'''
- 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?
- What does it take to be a implement my own Node library?
- Questions about contributing to ROS/ROS.org
- ROS vs. Other Robot Software Frameworks/Middlewares
My question isn't answered here; what do I do?
Try running roswtf and see if it can diagnose your issue
Search answers.ros.org for the answer.
Search the archives of the appropriate mailing list or post a question.
Post a question to answers.ros.org.
Basics
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:
ROS repositories are, by convention, named whatever-ros-pkg. This is only a naming convention and nothing more.
ROS has a notion of package (per previous question)
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:
Search the ROS software index for the dependency (i.e. control_toolbox in the example). You are looking for a ROS package with this name in the results.
Click on the link in the results. This will lead to the ROS indexer's package details page (in the example, this is here)
Now click on the website link. This will lead you to the package's wiki page (in the example: control_toolbox) (Note: you could always try to jump straight to this step; if the package does indeed have a wiki page then you should be able to)
Finally, click on the link leading to that package's stack (in the example: pr2_controllers). This is at the top of the package wiki page; the link before the colon is the stack, and the links after are the packages in the stack, one of which should be the one you searched for.
Now you know the name of the ROS stack containing the ROS package that you are after. You should then be able to install this stack by installing the Debian package that provides it (confused yet?). Note that underscores might need to be converted to hyphens in the Debian package name:
sudo apt-get install ros-<distro>-<stackname> sudo apt-get install ros-cturtle-pr2-controllers # for our example
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 rosmake
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:
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.
Errors
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:
- "While performance is indeed important and can have a large impact on operating cost, using it as a major evaluation criterion makes sense only if the application indeed requires high performance. However, for many applications, middleware performance matters little, either because the overall load is never high enough to make middleware performance an issue, or because bottlenecks are inherent in the work the application has to do, and no amount of improvement in the middleware would significantly improve things overall... In other words, many benchmarking exercises for middleware are undertaken not because they are necessary, but because they are easy. Having gone through the "evaluation process," participants feel that they have exercised due diligence, even though the results may well be irrelevant."
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:
http://thread.gmane.org/gmane.science.robotics.ros.user/829/focus=832