ROS2: The evolution of Robot Operative System (Jose Luis Rivero) [FOSDEM 2020]


ROS (Robotics Operating System) was started in 2007 to avoid re-inventing the wheel all the time in robotics. Different research labs have to deal with the same issues all the time, ROS tries to make it easier to get started on robotics research.

Jose works for Open Robotics, which creates open software and hardware for robotics.

The ROS master takes care of naming and registration. When a device (e.g. a joystick) is added, it is published as a node /joy. To make use of it, another node needs to be added that subsribes to the /joy events and converts them to /cmd_vel events to control velocity. So the components are isolated from eachother and interact through pub-sub APIs. The messages are defined in an IDL. There are some standard semantics, like vectors (2D and 3D). Bindings exist for multiple languages.

A repository contains packages for a lot of devices.

rviz is a visualiser that subscribes to everything and graphically shows it. Introspection allows it to work without knowing the details of custom devices.

Connections are often complicated, e.g. an actuator is connected to a microcontroller which is connected to the RPi running the ROS master over serial.

The above is all true for the original ROS. ROS2 was started to address problems that popped up due to the success and wide use of ROS.

One issue is that ROS1 assumed perfect communication channels. However, if communication is e.g. over WiFi it might not be fully reliable. This can be fixed by changing the transport layer to the DDS standard. Data-Distribution Service Standard is for real-time systems. However, it is not an implementation. Different implementations exist, e.g. Eclipse iceoryx (see next talk).

Another problem is that there is a ROS master. What if you have several robots. One of them is the ROS master. What if its battery dies? ROS2 defines a distributed master system where another master can take over.

In ROS1, a microcontroller was a node that represented all the services it provides as a single rosserial. That is not very flexible. In ROS2, microROS is added that runs on the microcontroller. The underlying OS is NuttX. DDS has a version for small microcontrollers.

A bunch of other small features were added. Realtime capabilities, especially on microcontrollers. Security so you can’t just take over the robot by connecting to the wifi.