🎉 rmw_zenoh binaries for Rolling, Jazzy and Humble

Hi everyone,

New year, new RMW!

We’ve released rmw_zenoh binaries for ROS 2 Rolling, Jazzy and Humble on respective Ubuntu (amd64, arm64) and RHEL (amd64) platforms.

Install rmw_zenoh binaries

The package can be installed with the command sudo apt install ros-<DISTRO>-rmw-zenoh-cpp. (Replace <DISTRO> with either rolling, jazzy or humble).

The binaries will be available after the next package sync for the respective distributions but in the meanwhile, you can get the pre-release binaries from the testing repository by following this guide.

Note: We strongly recommend using rmw_zenoh on Jazzy and Rolling as these versions are feature complete and have been extensively tested. We have not tested the Humble version ourselves and are expecting the community to help maintain it.

Once installed, you’ll be able to switch to rmw_zenoh by setting the RMW_IMPLEMENTATION environment variable to rmw_zenoh_cpp as seen below.

export RMW_IMPLEMENTATION=rmw_zenoh_cpp

Don’t forget to run the Zenoh router in a separate terminal prior!

ros2 run rmw_zenoh_cpp rmw_zenohd

For more information on usage, configuration, and known issues please see the README. An overview of rmw_zenoh along with its capabilities was presented at ROSCon 2024 Odense and the recording is available here.

Finally, a reminder that rmw_zenoh is not yet an official Tier-1 middleware in ROS 2 but our goal is to get there for the Kilted release in May. We hope these binaries will make it easier for the community to switch to rmw_zenoh and provide feedback!

56 Likes

Finally :raised_hands: , this makes it easy for Zenoh integration.

Great to know this, I was wondering if there are any concrete dates for the next package sync [Jazzy and Humble] ?

They’ll be out next week!

2 Likes

I was curious if there were resources around Zenoh configs or examples around. For example:

  • A configuration for using the router to avoid peer-to-peer discovery
  • A configuration for setting to use local host only to not leave the machine (does it respect ROS_LOCALHOST_ONLY?)
  • What the default config looks like for reference
  • A configuration doing some of the more advanced settings like setting TCP/UDP transport, configuring buffer sizes, shared memory, etc.

I think these are valuable starting-point recipes for folks :slight_smile:

2 Likes

Here is a good overview: https://www.youtube.com/watch?v=fS0_rbQ6KKA

  • A configuration for using the router to avoid peer-to-peer discovery

I’ve got a very very minimal config working, between a docker container on a RPi3 controlling an old Neato botvac: neato_ros2/docker/robot/zenoh.json5 at zenoh · LoyVanBeek/neato_ros2 · GitHub which talks to my laptop, also running a docker: neato_ros2/docker/operator/zenoh.json5 at zenoh · LoyVanBeek/neato_ros2 · GitHub

A couple of years ago I saw this interview with Julien Enoch, a Senior Solutions Architect at ZettaScale Technology: Zenoh for ROS2 (ROS Developers Podcast). At the end, there is also a demo with Zenoh. I found this interesting, and maybe it can help to understand the idea behind it.

Hi @smac,

A configuration for using the router to avoid peer-to-peer discovery

This is actually the out-of-the-box configuration in rmw_zenoh. All discovery traffic is limited to peers in the same host but routers between hosts can be bridged to extend discovery (and transport) across multiple hosts. There’s a little bit of information here and the ROSCon talk/slides is a useful reference to understand the topology in rmw_zenoh.

A configuration for setting to use local host only to not leave the machine (does it respect ROS_LOCALHOST_ONLY?)

Again, this is the default configuration in rmw_zenoh. We do not respect dynamic discovery envars yet but there is a ticket to address this .

What the default config looks like for reference

The default configs for the router and session (every ROS context) is found here. These are adapted from the upstream Zenoh config for the topology we’ve adopted in rmw_zenoh.

A configuration doing some of the more advanced settings like setting TCP/UDP transport, configuring buffer sizes, shared memory, etc.

This draft PR aims to add documentation that goes over different ways rmw_zenoh/zenoh can be configured.
In the meanwhile, this repo which was used for a workshop in ROSCon 2024 can serve as a useful reference!
Feel free to add suggestion to that ticket!

Thanks for the info, that’s all really helpful! I think what I’m meaning is config files that a user can copy+paste to work with from example of preconfigured setups of common needs. The docs are a resource, thanks! As part of that, may I suggest adding a few configs for those that like to work from example / recipes?

I think that’s a similar thing as github.com/ros2/demos to see how to use it in a brass-ticks-heres-the-code way to accompany the configuration and explanation docs. Starting with something in the ballpark of what you need and adjusting it over time from a library of example configs has alot less friction IMO. Then the configuration docs of all the params and explanations dovetail in it well for modifying instead of starting from scratch.

1 Like

That’s a great suggestion! I’ll get a ticket going but we’ll likely need help from the community on this!

في الجمعة، ١٤ فبراير ٢٠٢٥، ١٠:٣٠ م Yadunund Vijay via ROS Discourse <notifications@ros.discoursemail.com> كتب: