Open Source
May 2021 comes with many new and exciting changes: easing of COVID-19 restrictions in parts of the world, a warm and eventful Kentucky Derby, and the newest release of ROS2, Galactic Geochelone! Galactic is the 7th release of the new Robot Operating System (ROS) 2.0, built on DDS to be the production grade middleware for robotics with all of the amazing tools you came to love in ROS.
ROS2 was redesigned from the ground up to handle non-ideal networks found in real-world production environments, communicate between multiple robots in a fleet securely, operate on low-power embedded systems, and leverage the real-time capacity of several different DDS vendors. Galactic is another step forward in its journey; extending existing capabilities and expanding new ones!
Released on May 23rd, Galactic provides many improvements that have been in the works for the last year. The expected end of life of Galactic will be November 2022, at which time the next LTS distribution of ROS2 will have been released (codenamed “H-Turtle”). Most notably to Galactic, Cyclone DDS is now the default ROS MiddleWare (RMW) vendor. Eclipse Cyclone DDS [1] is a DDS implementation donated to the Eclipse Foundation by ADLINK, building off of their success with Vortex DDS. It has rapidly developed into a community favorite having a great out-of-the-box experience for users and true zero-copy IPC leveraging Eclipse’s Iceoryx project. Other DDS vendors that have Tier 1 support include eProsima’s Fast-DDS [2] and RTI’s Connext DDS [3]. Both of these DDS implementations are still available as binaries for easy install, unit testing support by Open Robotics, and only require setting a single environmental variable to utilize in your system.
The ROS2 client library and its recursive dependencies have received a Quality Level 1 rating as set out in REP 2004[4], the highest level of quality possible. This translates to high unit and integration test coverage, strict policies regarding the quality of code introduced, process control, and stability. This quality level rating applies not only to rclcpp, but all of its dependencies (e..g rcl, rclc, rmw, etc), marking quality and stability up and down the entire middleware stack. Additionally, ROS2 pushes the default C++ version from C++14 to C++17.
Two particularly great feature updates occurred in Galactic. It is now possible to externally configure Quality of Service (QoS) settings in ROS2 configuration files and rosbag2 has become substantially more reliable. Rather than statically defining QoS settings in your ROS2 code, you can now opt-in to allow for dynamically overriding these settings at run-time with your parameter file to try different profiles or reconfigure for unique use-cases [5]. rosbag2 was notably “buggy” in Foxy and older distributions. Even in high-stress networking environments, Galactic’s rosbag2 was able to successfully record 100% of messages (closer to 30% for Foxy). Many new features were also added including compression, playback control settings, commandline utilities, and regular expression support for topics to record and playback [6].
These contributions, and many more, were brought to fruition due to the establishment of the ROS2 Technical Steering Committee (TSC) [7]. The TSC is a group of research and industry leaders who are contributing to the success of ROS2 and the related ecosystem, including Samsung, LG, Microsoft, Amazon, and many others. Samsung Electronics is a member of this TSC, leading the development of cutting-edge localization and mobile robotics technology.
TSC Member Companies [8]
The driving reason so many users choose ROS isn’t just the middleware, timing, logging, and launch systems-- it is the rich ecosystem of robotics capabilities built on ROS. The vast majority of your favorite projects have already been ported to ROS2, many of which have also received significant upgrades. Even now, major projects like Navigation2 (aka Nav2), MoveIt2, and ROS2 Control are receiving significant attention from industry and the community to create next-generation capabilities.
Nav2 has had a substantial number of updates from Foxy to Galactic, including 3 new algorithms for planning and control, 7 new behavior tree nodes, and overhauls of external APIs [9]. New Hybrid-A*, A*, and Regulated Pure Pursuit controllers enable Ackermann and legged vehicles to have first-class support in Nav2. A new Theta* planner allows for planning to prioritize straight-line any-angle plans quickly through constrained spaces.
The default behavior tree of Nav2 was redesigned to be more responsive to preemption calls and execute a minimum set of recovery behaviors to resolve an issue rather than iterate through all possible behaviors. New behavior tree nodes now make it possible to dynamically change planner, controller, or the new ‘goal checker’ plugins from an external application or in unique behavior tree contexts.
Further, with the introduction of the new Costmap Filters API, we have support for Keepout Zones and Speed Restricted Zones out-of-the-box with tutorials for setup and use [10].
The new Nav2 Waypoint Follower enables basic robot autonomy by following specific waypoints, stopping at each, and executing the new ‘Task Executor’ plugins to do anything from pausing, to taking a photo, to picking up a box with an attached robot arm. Complementary, a new action API was added enabling Navigate Through Poses behavior. Rather than point-to-point navigation or waypoint following, the Navigate Through Poses action will allow you to specify an arbitrary number of intermediate hard-pose constraints for your robot to navigate through and execute the path without stopping at each via-point. When combined with the Smac Hybrid-A* planner, this creates a kinematically feasible and smooth path between any number of intermediate points.
A full list of new features in Nav2 can be found in [9].
Looking into the future, Spring 2022 we can expect the release of the next LTS release of ROS2, HTurtle. By then, a whole new host of exciting features, capabilities, and algorithms will be available to build amazing robot systems using ROS2.
Reference
[1] https://github.com/eclipse-cyclonedds/cyclonedds
[2] https://github.com/eProsima/Fast-DDS
[3] https://www.rti.com/products
[4] https://ros.org/reps/rep-2004.html#quality-level-1
[5] http://design.ros2.org/articles/qos_configurability.html
[6] https://github.com/ros2/rosbag2
[7] https://docs.ros.org/en/foxy/Governance.html
[8] All trademarks are the property of their respective owners.
[9] https://navigation.ros.org/migration/Foxy.html
[10] https://navigation.ros.org/tutorials/index.html