# 🎉 rmw\_zenoh binaries for Rolling, Jazzy and Humble

**URL:** <https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395>\
**Category:** ROS General\
**Tags:** ros2, rolling, rmw, humble, jazzy\
**Created:** [January 3, 2025, 9:57pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395 "2025-01-03T21:57:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yadunund](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/yadunund/32/12700_2.png) [@Yadunund](https://discourse.openrobotics.org/u/Yadunund)\
**Post date:** [January 3, 2025, 9:57pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/1 "2025-01-03T21:57:27Z")

</div>

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](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/a/f/af3448daa008075872ef675385cbadd9e2797325.gif)

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](https://docs.ros.org/en/jazzy/Installation/Testing.html#deb-testing-repository).

> 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.

```bash
export RMW_IMPLEMENTATION=rmw_zenoh_cpp

```

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

```bash
ros2 run rmw_zenoh_cpp rmw_zenohd

```

For more information on usage, configuration, and known issues please see the [README](https://github.com/ros2/rmw_zenoh). An overview of `rmw_zenoh` along with its capabilities was presented at ROSCon 2024 Odense and the recording is available [here](https://vimeo.com/showcase/11451831/video/1024971621).

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!

---

<div class="post-metadata">

**Author:** ![anilkumarFM](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/anilkumarfm/32/23985_2.png) [@anilkumarFM](https://discourse.openrobotics.org/u/anilkumarFM)\
**Post date:** [January 13, 2025, 11:44am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/2 "2025-01-13T11:44:37Z")

</div>

Finally 🙌 , 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] ?

---

<div class="post-metadata">

**Author:** ![Yadunund](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/yadunund/32/12700_2.png) [@Yadunund](https://discourse.openrobotics.org/u/Yadunund)\
**Post date:** [January 17, 2025, 6:15pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/3 "2025-01-17T18:15:45Z")

</div>

They’ll be out next week!

- [http://discourse.ros.org/t/preparing-for-humble-sync-2025-01-21/](http://discourse.ros.org/t/preparing-for-humble-sync-2025-01-21/)
- [http://discourse.ros.org/t/preparing-for-jazzy-sync-2025-01-20/](http://discourse.ros.org/t/preparing-for-jazzy-sync-2025-01-20/)

---

<div class="post-metadata">

**Author:** ![smac](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/smac/32/6763_2.png) [@smac](https://discourse.openrobotics.org/u/smac)\
**Post date:** [February 13, 2025, 6:14pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/4 "2025-02-13T18:14:29Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![mjohannessen](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/mjohannessen/32/24822_2.png) [@mjohannessen](https://discourse.openrobotics.org/u/mjohannessen)\
**Post date:** [February 13, 2025, 6:42pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/5 "2025-02-13T18:42:41Z")

</div>

Here is a good overview: [https://www.youtube.com/watch?v=fS0\_rbQ6KKA](https://www.youtube.com/watch?v=fS0_rbQ6KKA)

---

<div class="post-metadata">

**Author:** ![Loy](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/loy/32/3182_2.png) [@Loy](https://discourse.openrobotics.org/u/Loy)\
**Post date:** [February 14, 2025, 3:57pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/6 "2025-02-14T15:57:05Z")

</div>

> - 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](https://github.com/LoyVanBeek/neato_ros2/blob/zenoh/docker/robot/zenoh.json5) which talks to my laptop, also running a docker: [neato\_ros2/docker/operator/zenoh.json5 at zenoh · LoyVanBeek/neato\_ros2 · GitHub](https://github.com/LoyVanBeek/neato_ros2/blob/zenoh/docker/operator/zenoh.json5)

---

<div class="post-metadata">

**Author:** ![AlePuglisi](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/alepuglisi/32/31915_2.png) [@AlePuglisi](https://discourse.openrobotics.org/u/AlePuglisi)\
**Post date:** [February 14, 2025, 4:56pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/7 "2025-02-14T16:56:17Z")

</div>

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)](https://www.youtube.com/watch?v=fqlvEyzTQFs&ab_channel=TheConstructRoboticsInstitute). 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.

---

<div class="post-metadata">

**Author:** ![Yadunund](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/yadunund/32/12700_2.png) [@Yadunund](https://discourse.openrobotics.org/u/Yadunund)\
**Post date:** [February 14, 2025, 7:17pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/8 "2025-02-14T19:17:51Z")

</div>

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](https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md) 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](https://github.com/ros2/rmw_zenoh/issues/241) 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](https://github.com/ros2/rmw_zenoh/tree/rolling/rmw_zenoh_cpp/config). These are adapted from the upstream Zenoh [config](https://github.com/eclipse-zenoh/zenoh/blob/main/DEFAULT_CONFIG.json5) 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](https://github.com/ros2/rmw_zenoh/pull/395) aims to add documentation that goes over different ways rmw\_zenoh/zenoh can be configured.  
In the meanwhile, [this repo](https://github.com/ZettaScaleLabs/roscon2024_workshop) which was used for a workshop in ROSCon 2024 can serve as a useful reference!  
Feel free to add suggestion to that ticket!

---

<div class="post-metadata">

**Author:** ![smac](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/smac/32/6763_2.png) [@smac](https://discourse.openrobotics.org/u/smac)\
**Post date:** [February 14, 2025, 8:03pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/9 "2025-02-14T20:03:18Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Yadunund](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/yadunund/32/12700_2.png) [@Yadunund](https://discourse.openrobotics.org/u/Yadunund)\
**Post date:** [February 14, 2025, 8:09pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/10 "2025-02-14T20:09:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![joshnewans](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/joshnewans/32/14191_2.png) [@joshnewans](https://discourse.openrobotics.org/u/joshnewans)\
**Post date:** [February 16, 2025, 10:59pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/12 "2025-02-16T22:59:48Z")

</div>

This is a great idea. In our company we mostly don’t use ROS but are transitioning our custom IPC over to Zenoh and have been trying to define our different use cases, understand the examples, and come up with standard configs so keen to see what others have / contribute where we can.

> [@mjohannessen](#):
>
> Here is a good overview: [https://www.youtube.com/watch?v=fS0\_rbQ6KKA](https://www.youtube.com/watch?v=fS0_rbQ6KKA)

_Ooh, this might be helpful…\<clicks\>_

Every so often I’ll be online and find a link that I hope will teach me something, and it turns out to just be me - the worst part is sometimes it’s something I’ve forgotten and I find it very helpful!!

---

<div class="post-metadata">

**Author:** ![christian](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/christian/32/14876_2.png) [@christian](https://discourse.openrobotics.org/u/christian)\
**Post date:** [February 18, 2025, 10:08am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/13 "2025-02-18T10:08:15Z")

</div>

I tested the binaries (`ros-jazzy-rmw-zenoh-cpp`) and wanted to leave a comment for others struggling with the same default RMW issues. The following is just a quick & dirty test, and I guess there are much better and more extensive evaluations out there.

I tested the `realsense2_camera_node` with `rgb_camera.color_profile` and `depth_module.depth_profile` set to `640x480x60` (60 Hz) and visualised the images in `rqt` as well as check the frequency with `ros2 topic hz`.

tl;dr: In the jazzy default settings, the frequency with `ros2 topic hz` was far away from my 60 Hz target and the visualisation in rqt was very choppy. With `RMW_IMPLEMENTATION=rmw_zenoh_cpp` everything was super smooth and I got the expected target frequency. However, the logging with `ros2 bag record` seemed to be unaffected by this; I got 60 Hz on the image topics with any RMW.

| `RMW_IMPLEMENTATION` | `rqt` | `ros2 topic hz` | comment |
| --- | --- | --- | --- |
| rmw\_fastrtps\_cpp | “choppy” | ~33 | default RMW |
| rmw\_cyclonedds\_cpp | “smooth” | 57 | some connection issues |
| rmw\_zenoh\_cpp | “super smooth” | 59.5 | had to start Zenoh router manually |

I can’t wait for `rmw_zenoh_cpp` to become the default RMW. Having to start the Zenoh router manually is the only drawback at the moment. I really don’t understand why `rmw_fastrtps_cpp` was the default RMW for so long. Even `rmw_cyclonedds_cpp` would have been a better choice.

---

<div class="post-metadata">

**Author:** ![MoffKalast](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/moffkalast/32/6355_2.png) [@MoffKalast](https://discourse.openrobotics.org/u/MoffKalast)\
**Post date:** [February 22, 2025, 8:29pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/14 "2025-02-22T20:29:56Z")

</div>

> the frequency with `ros2 topic hz` was far away from my 60 Hz target

> logging with `ros2 bag record` seemed to be unaffected by this

That’s interesting, I wonder if it has something to do with roscli using python and rosbag2 recording being done with cpp? Rclpy is notoriously high in overhead which causes problems all over the place constantly.

If Zenoh genuinely manages to somehow magically fix the broad rclpy problems then that’s huge in itself.

---

<div class="post-metadata">

**Author:** ![Yadunund](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/yadunund/32/12700_2.png) [@Yadunund](https://discourse.openrobotics.org/u/Yadunund)\
**Post date:** [February 23, 2025, 6:21am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/15 "2025-02-23T06:21:10Z")

</div>

`ros2 bag record` relies on `rclpy` too. The slight performance improvement observed by @christian is likely attributed to the fact that the subscription in `rosbag2_transport` gets the data from the RMW as as [serialized message](https://github.com/ros2/rmw/blob/9aca1dbae5996881d8b5b5855b3ea741230d2e8d/rmw/include/rmw/serialized_message.h#L25-L37) and writes to disk (in a separate thread) without any deserialization whereas the subscriptions in `ros2 topic hz` or `rqt` processes handle data which has been deserialized into ROS msg objects. This deserialization incurs additional overhead.

---

<div class="post-metadata">

**Author:** ![peci1](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/peci1/32/10145_2.png) [@peci1](https://discourse.openrobotics.org/u/peci1)\
**Post date:** [February 23, 2025, 8:06am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/16 "2025-02-23T08:06:00Z")

</div>

Why does topic hz deserialize the messages?

---

<div class="post-metadata">

**Author:** ![MoffKalast](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/moffkalast/32/6355_2.png) [@MoffKalast](https://discourse.openrobotics.org/u/MoffKalast)\
**Post date:** [February 23, 2025, 8:45am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/17 "2025-02-23T08:45:22Z")

</div>

Are you sure that’s the only factor? Wouldn’t deserialization have the same impact regardless of rmw type, which is not what’s observed?

> `ros2 bag record` relies on `rclpy` too

I’m not sure that’s entirely accurate, the rosbag2 repo is 85% cpp in github stats and the 11% that’s python seems to be pybind, not rclpy. I haven’t taken a deep dive into it though.

---

<div class="post-metadata">

**Author:** ![tomoyafujita](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/tomoyafujita/32/6097_2.png) [@tomoyafujita](https://discourse.openrobotics.org/u/tomoyafujita)\
**Post date:** [February 24, 2025, 5:24pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/18 "2025-02-24T17:24:24Z")

</div>

@MoffKalast

> the rosbag2 repo is 85% cpp in github stats and the 11% that’s python seems to be pybind, not rclpy. I haven’t taken a deep dive into it though.

you are right.  
the implementation details such as `Recorder` is written in cpp, `rosbag2_py` provides the type-hinting information for binary Python modules.

but `ros2bag` package still depends on `rclpy`, for example QoS configuration. (maybe that is not important for this context.)

---

<div class="post-metadata">

**Author:** ![tomoyafujita](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/tomoyafujita/32/6097_2.png) [@tomoyafujita](https://discourse.openrobotics.org/u/tomoyafujita)\
**Post date:** [February 24, 2025, 5:45pm UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/19 "2025-02-24T17:45:15Z")

</div>

@peci1

> Why does topic hz deserialize the messages?

i think this is very good question.

the reason `ros2 topic hz` deserializes the message is that `--filter` option support, that only measures messages matching the specified Python expression.

but if that option is not specified, i do not think we need to deserialize the message every time when the message comes in.

instead, we can just calculate the frequency without checking what is inside the message. (the same enhancement can be done for `ros2 topic bw`)

for doing that, we 1st need to have `GenericSubscription` and `create_generic_subscription` in rclpy.

---

<div class="post-metadata">

**Author:** ![Bernd\_Pfrommer](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/bernd_pfrommer/32/11594_2.png) [@Bernd\_Pfrommer](https://discourse.openrobotics.org/u/Bernd_Pfrommer)\
**Post date:** [February 25, 2025, 12:44am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/20 "2025-02-25T00:44:05Z")

</div>

Generations of future ROS2 users will thank you for fixing `ros2 topic hz`. I stopped counting how often I have explained 1st time ROS2 users that for high bandwidth message streams (or messages using compound types), they cannot rely on `ros2 topic hz`.

---

<div class="post-metadata">

**Author:** ![Hugal31](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/hugal31/32/11454_2.png) [@Hugal31](https://discourse.openrobotics.org/u/Hugal31)\
**Post date:** [February 26, 2025, 11:37am UTC](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395/21 "2025-02-26T11:37:36Z")

</div>

I see the UDP transport cargo feature is [disabled](https://github.com/ros2/rmw_zenoh/blob/4fc36b75606911c2bbd2467667827f04edc7254f/zenoh_cpp_vendor/CMakeLists.txt#L18). In addition, I don’t see the Z\_RELIABILITY\_BEST\_EFFORT flag used anywhere.

In my application, I would like to make best\_effort topics use UDP, and reliable topic use TCP. This seems possible in “vanilla” zenoh if I believe [this piece of documentation](https://github.com/eclipse-zenoh/zenoh/blob/6655ed9df49f32af840ddbe9a5e6d4ff7eb17dd7/DEFAULT_CONFIG.json5#L73).

Is it planned to enable the UDP transport and enable best effort topics?

[Next page](https://discourse.openrobotics.org/t/rmw-zenoh-binaries-for-rolling-jazzy-and-humble/41395.md?page=2)
