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_zephyrfor the Zephyr integration and static ROS 2 build -
rmw_cyclonedds_cfor 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.