Skip to main content

Zenoh Communication

Starting from ROBOTIS Hand version 1.0.0, ROBOTIS Hand changes its default ROS 2 middleware from Fast DDS to Zenoh RMW. This enables more stable communication between robot-side nodes, Docker containers, and external PCs. This page explains Zenoh and how rmw_zenoh fits into the ROS 2 communication stack.
warning

At least one Zenoh daemon must be running in the communication network. If no Zenoh daemon is running, ROS 2 nodes cannot discover or communicate with each other.

To start the Zenoh daemon manually, run zenohd in a terminal.

What is rmw_zenoh?

rmw_zenoh is the ROS 2 RMW (ROS Middleware) implementation for Zenoh. The implementation package is rmw_zenoh_cpp, and it maps the ROS 2 middleware API onto Zenoh APIs. Existing ROS 2 publishers, subscribers, services, clients, parameters, and command-line tools can keep using normal ROS 2 interfaces while Zenoh handles discovery and transport.

Zenoh is a pub/sub/query protocol designed to move data efficiently across local processes, robot networks, edge computers, and cloud systems. For the ROBOTIS Hand, this means the robot control software can use normal ROS 2 topics while Zenoh provides a lightweight communication layer that is easier to route across containers and hosts than multicast-heavy DDS discovery.

Main Components

ComponentRole
rmw_zenoh_cppROS 2 RMW implementation selected by RMW_IMPLEMENTATION=rmw_zenoh_cpp.
rmw_zenohdZenoh router executable packaged with rmw_zenoh_cpp. It provides discovery information and host-to-host routing.
Zenoh sessionCommunication session used internally by ROS 2 contexts. Publishers, subscribers, services, and clients share the session.
Zenoh router configurationControls how routers listen, connect, and bridge communication between containers, the robot, and remote PCs.

How Communication Works

  • ROS 2 nodes continue to publish and subscribe to normal topics such as /joint_states, /tf, or controller command topics.
  • rmw_zenoh_cpp converts the ROS 2 middleware calls into Zenoh operations.
  • A local Zenoh router is normally started so nodes can discover each other.
  • On the same host, message data can use direct peer-to-peer paths instead of forcing every sample through the router.
  • Across multiple hosts, configure the external PC container as a Zenoh client connected to the robot's Zenoh router endpoint.

Quick Checks

Use these commands inside the robotis_hand container to confirm that Zenoh RMW is active and that the ROS graph is visible:

echo $RMW_IMPLEMENTATION
ros2 node list
ros2 topic list
ros2 topic echo /joint_states

If topics appear but messages are not flowing, check that:

  • The robot and external PC are on the same reachable network.
  • Port 7447 is reachable from the external PC.
  • The robotis_hand container is running with the expected network configuration.
  • Old ROS 2 daemon state has been stopped with ros2 daemon stop.

References