ROS is an open-source, meta-operating system for your robot. It provides the services you would expect from an operating system, including hardware abstraction, low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management. It also provides tools and libraries for obtaining, building, writing, and running code across multiple computers. ROS is similar in some respects to “robot frameworks”, such as Player, YARP, Orocos, CARMEN, Orca, MOOS, and Microsoft Robotics Studio [1]. The ROS runtime “graph” is a peer-to-peer network of processes (potentially distributed across machines) that are loosely coupled using the ROS communication infrastructure. ROS implements several different styles of communication, including synchronous RPC-style communication over services, asynchronous streaming of data over topics, and storage of data on a Parameter Server. All these things would be explained a bit later.
Important! ROS is not a real-time framework, though it is possible to integrate ROS with real-time code.
Distributed Computation
Many modern robot systems rely on software that spans many different processes and runs across several different computers. For example:
Software Reuse
The rapid progress of robotics research has resulted in a growing collection of useful algorithms for common tasks such as navigation, motion planning, mapping,
and many others. Of course, the existence of these algorithms is only truly useful if there is a way to apply them in new contexts, without the need to reimplement each algorithm for each new system. ROS can help to prevent this kind of pain in at least two important ways.
As a result, developers that use ROS can expect — after, of course, climbing ROS’s initial learning curve — to focus more time on experimenting with new ideas, and less time reinventing wheels.
Rapid Testing
One of the reasons that software development for robots is often more challenging than other kinds of development is that testing can be time-consuming and error-prone. Physical robots may not always be available to work with, and when they are, the process is sometimes slow and finicky. Working with ROS provides two effective workarounds to this problem.
A crucial point for both of these features is that the change is seamless. Because the real robot, the simulator, and the bag playback mechanism can all provide identical (or at least very similar) interfaces, your software does not need to be modified to operate in these distinct scenarios, and indeed need not even “know” whether it is talking to a real robot or not. Of course, ROS is not the only platform that offers these capabilities. What is unique about ROS, at least in the author’s judgment, is the level of widespread support for ROS across the robotics community. This “critical mass” of support makes it reasonable to predict that ROS will continue to evolve, expand, and improve in the future.