ROS 2 RMW Selection Decision

Review date: 2026-04-08.

Decision

For the first ROS 2 beta path, validate and ship exactly one middleware implementation: rmw_cyclonedds_cpp (CycloneDDS). Do not widen the supported RMW matrix yet. Treat any second implementation, such as rmw_fastrtps_cpp, as deferred work until the Humble/Jazzy beta path is stable under one RMW first. Treat ROS 2 Kilted the same way for now: experimental/manual-only until the current Humble/Jazzy coverage stays green.

Why CycloneDDS First

  • The current ROS 2 scope is still deliberately narrow: one Python node, one launch file, one rosbag replay fixture, and first-party docs for Humble and Jazzy. One RMW keeps that support envelope testable.
  • CycloneDDS is packaged on both supported distros and is straightforward to install in the companion containers and GitLab colcon jobs.
  • The RR IK beta path benefits more from a predictable, explicitly-selected middleware stack than from claiming an early multi-RMW support matrix that the current CI and launch coverage do not yet exercise.

Where The Selection Applies

  • integrations/ros2/src/zeroproofml_ros/package.xml declares rmw_cyclonedds_cpp as a runtime dependency so rosdep can pull it in.
  • integrations/ros2/src/zeroproofml_ros/launch/rr_ik_strict_inference.launch.py defaults RMW_IMPLEMENTATION to rmw_cyclonedds_cpp.
  • The Humble/Jammy and Jazzy/Noble container recipes install ros-${ROS_DISTRO}-rmw-cyclonedds-cpp and export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp.
  • The GitLab ROS 2 colcon jobs run with the same RMW_IMPLEMENTATION=rmw_cyclonedds_cpp environment.

Deferred Second RMW

Revisit a second implementation only after the current beta path has basic stability:

  • launch/demo docs are unchanged for at least one release cycle,
  • rosbag replay and colcon test coverage stay green on Humble and Jazzy, and
  • there is a concrete need to validate a second stack rather than just relying on whatever the distro default happens to be.

At that point, add the second implementation as an explicit widening of the test matrix instead of silently assuming it is supported.