A ROS 2 RMW implementation based on Zenoh that is written using the zenoh-c bindings.
For information about the Design please visit design page.
- ROS 2: Rolling/Iron
Install latest rustc.
Note: The version of rustc that can be installed via apt is outdated.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shBuild rmw_zenoh_cpp
mkdir ~/ws_rmw_zenoh/src -p && cd ~/ws_rmw_zenoh/src
git clone https://github.com/ros2/rmw_zenoh.git
cd ~/ws_rmw_zenoh
rosdep install --from-paths src --ignore-src --rosdistro <DISTRO> -y # replace <DISTRO> with ROS 2 distro of choice
source /opt/ros/<DISTRO>/setup.bash # replace <DISTRO> with ROS 2 distro of choice
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Make sure to source the built workspace using the commands below prior to running any other commands.
cd ~/ws_rmw_zenoh
source install/setup.bashNote: Manually launching zenoh router won't be necessary in the future.
# terminal 1
ros2 run rmw_zenoh_cpp init_rmw_zenoh_routerNote: Without the zenoh router, nodes will not be able to discover each other since multicast discovery is disabled by default in the node's session config. Instead, nodes will receive discovery information about other peers via the zenoh router's gossip functionality. See more information on the session configs below.
# terminal 2
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
ros2 run demo_nodes_cpp talkerNote: Ignore all the warning printouts.
# terminal 2
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
ros2 run demo_nodes_cpp listenerThe listener node should start receiving messages over the /chatter topic.
Note: Ignore all the warning printouts.
Presently we only support limited ros2cli commands to introspect the ROS graph such as ros2 node list and ros2 topic list.
The default configuration sets up the zenoh sessions with the following main characteristics:
Table:
| Zenoh Config | Default |
|---|---|
| udp_multicast | disabled |
| gossip scouting | enabled |
| connect | tcp/localhost:7447 |
This assumes that there is a zenohd running in the system at port 7447.
A custom configuration may be provided by setting the RMW_ZENOH_CONFIG_FILE environment variable to point to a custom zenoh configuration file.
- Publisher
- Subscription
- Client
- Service
- Graph introspection