Native ROS 2 on Zephyr with Cyclone DDS

Hi,

I have been experimenting with native DDS for ROS 2 on Zephyr and recently got the standard ROS 2 C client stack running on an ESP32-S3 over Wi-Fi.

The current stack is:

rclc -> rcl -> rmw_cyclonedds_c -> Cyclone DDS -> Zephyr

The board joins the DDS/RTPS network directly, without a Micro XRCE-DDS Agent.

The work is split into two repositories:

  • ros2_zephyr for the Zephyr integration and static ROS 2 build

  • rmw_cyclonedds_c for the C RMW implementation and generated Cyclone DDS type support

I tested an ESP32-S3 against stock ROS 2 Lyrical with rmw_cyclonedds_cpp, in both publisher and subscriber directions. The current implementation supports fixed-size messages and best-effort QoS.

I have also been working on Zephyr support for Micro XRCE-DDS and rmw_zenoh_pico, with the longer-term goal of comparing these embedded RMW paths on the same hardware.

I wrote a short note with more details and measurements here:

I will keep extending the native DDS path with Reliable QoS, Transient Local, ROS graph support and eventually DDS Security.

Feedback is very welcome.

3 Likes