You may recall that one of our main motivations in designing ROS 2 with a middleware abstraction is to provide end users with a flexible transport layer supported by a rich ecosystem of vendors. This competitive approach has already yielded dividends such as the FastDDS discovery service, IceOryx zero copy memory passing, and multiple innovations in MicroROS for embedded hardware. While some have called this “The DDS Wars” I prefer to think of it as the “DDS Cambrian Explosion”, as we see more and more vendors of DDS and other middlewares become interested in ROS 2, and how their implementations can bring new features to bear on different parts of the robotics ecosystem.
ROS 2 has long supported multiple middlewares, and will continue to do so. But of course there has to be a default configuration that just works for most users. As discussed in previous posts, starting with Galactic Geochelone the default RMW configuration for each ROS 2 distro will be selected by the ROS 2 Technical Steering Committee (TSC) after a thorough vetting process. It is worth noting that when we say default, we really do mean default, and users can continue to choose non-default RMW configurations. The TSC aims to choose the best default for each distro, but that doesn’t mean that it will be the best choice for every application. Importantly, changing the RMW configuration on your robot is simply a matter of running a handful of commands.
I am happy to announce that after careful consideration the ROS 2 TSC has selected CycloneDDS to be the default RMW for ROS 2 Galactic Geochelone. This vote is the result of a thoughtful review and discussion of the available options by the ROS 2 TSC, including a comprehensive technical evaluation of the Tier 1 RMWs by the team at Open Robotics. That report, including source code and data, is available to all. The report includes performance statistics about each RMW implementation, simulated and real world testing of each RMW, a review of the code quality and responsiveness of each RMW vendor, and a community survey. On balance, the similarities among the Tier 1 RMWs are greater than their differences, and this was a hard decision for the TSC. We hope you make use of the report in selecting your RMW implementation, and feel free to send us your feedback. We intend this report and its future iterations, as well as the tools developed in generating it, to be a neutral source of RMW information for the ROS community.
We’ll start implementing the TSC’s decision soon. We expect the change of the default RMW to CycloneDDS to be merged by late January 2021, and available for testing in Rolling soon after. We realize that this change will impact many users, but we also believe the impacts will be minimal. One important difference is that, whereas Foxy’s default behavior via FastDDS is asynchronous publishing (similar to ROS 1), Galactic’s default behavior via CycloneDDS will be synchronous publishing. This will change the behavior of calls to publish on a Publisher when more data is being sent than the network can handle, and perhaps in other cases; we’ll include more details in the near future (you can also read the report). If you encounter issues related to this or other changes when you update to Galactic, please report them! And remember that, as is the case now with Foxy, you can change your RMW configuration with just a handful of commands. If you would like to help with this process or would like to beta test the latest ROS 2 release (particularly on a larger multi-robot scenario) please contact me or the core dev team.