Skip to main content
Version: ROS 2 Jazzy

Zenoh ROS Middleware

Zenoh Router

In early 2025 a new ROS middleware implementation called Zenoh was released. For a detailed description of Zenoh, please refer to Zenoh's design document.

Zenoh is only available on ROS 2 Jazzy and later; it cannot be used on ROS 2 Humble. See the documentation on the system section of the Clearpath configuration YAML to set the middleware to Zenoh.

Automatically starting the Zenoh Router

By setting the middleware in the system section of the Clearpath configuration file (found in the default Clearpath directory /etc/clearpath/robot.yaml), the Zenoh router start script is added to the generated zenoh-router-start script. This script is ran by the clearpath-zenoh-router service when the clearpath-robot service is started.

Manually starting the Zenoh Router

Alternatively, if the service is not running or has been manually stopped, manually launch the Zenoh router run

bash -e ~/clearpath/zenoh-router-start

This process can also be daemonized and launched via the systemctl command:

source /opt/ros/jazzy/setup.bash
sudo systemctl start clearpath-zenoh-router

Communicating with the Zenoh router from a remote computer

When a user wants to connect a remote computer to communicate with the nodes running on the robot's computer using the Zenoh middleware, the user is recommended to follow these steps on the user's remote computer:

  1. Install the Zenoh ROS Middleware:
sudo apt update && sudo apt install ros-jazzy-rmw-zenoh-cpp
  1. Create an offboard setup folder and copy the robot configuration by following the offboard setup instructions.
  2. Set the Zenoh ROS Middleware in the offboard robot.yaml:
system:
ros2:
middleware:
implementation: rmw_zenoh_cpp
  1. Set the remote computer's Zenoh router endpoint in the offboard robot.yaml under system.bash.env:

    a. Wired Connection: Set the endpoint to the robot's static IP address (192.168.131.1):

    system:
    bash:
    env:
    ZENOH_CONFIG_OVERRIDE: 'mode="client";connect/endpoints=["tcp/192.168.131.1:7447"]'

    b. Wireless Connection: Set the endpoint to the robot's IP address assigned by the Wi-Fi router:

    system:
    bash:
    env:
    ZENOH_CONFIG_OVERRIDE: 'mode="client";connect/endpoints=["tcp/ROBOT_WIFI_IP:7447"]'
  2. Generate and source the offboard setup.bash file:

source /opt/ros/jazzy/setup.bash
ros2 run clearpath_generator_common generate_bash -s ~/clearpath
source ~/clearpath/setup.bash
  1. Connect the remote computer and robot computer to the same network.

    a. Wired Connection: Connect the remote computer to the robot's ethernet port and set the remote computer's IP address in the range 192.168.131.100 to 192.168.131.255.

    b. Wireless Connection: Connect the robot computer to the same WiFi router as the remote computer. Find the IP address that the WiFi router assigned the robot's computer using the ip a command on a terminal on the robot's computer.

If you switch between wired and wireless networking, update the offboard robot.yaml IP and regenerate setup.bash, or edit ~/clearpath/setup.bash directly.

  1. Then make sure to restart the ROS2 daemon on the remote computer before using command line tools:
ros2 daemon stop
ros2 topic list