Reference implementation of Zenoh-pico to micro-ROS

Zenoh is a new communication middleware that ZettaScale has developed.
At eSOL, we have been porting Zenoh-pico to micro-ROS.
Zenoh-pico is Zenoh’s implementation for microcontrollers.

This post is the announcement of the prototype of Zenoh-pico adaptation to micro-ROS.

Although it is still experimental, we confirmed it would work on the generic (Linux) or Raspbian platforms of micro-ROS.
Ideally, we would have liked to include Zenoh in the transport specification.
However, we treated it as an RTOS equivalent since Zenoh can select TCP, UDP, or serial.

This Zenoh-pico and micro-ROS system is assumed to communicate with “rmw_zenoh” on ROS. It is set as an environment variable, RMW_IMPLEMENTATION.
They can communicate directly with rmw_zenoh; the structure is just agent-less, like using embedded RTPS.

You can use it as a reference implementation. It would be even better if the ZettaScale and micro-ROS communities could discuss it.

Note:
As the previous post was from a personal account, I reposted it from the company account.

5 Likes

So cool! I implemented support for zenoh-pico about four years ago for the first version of the rmw_zenoh implementation, you can still find it in the archived branch of rmw_zenoh

The advantage of my implementation is that it shares as much code as possible with the regular rmw_zenoh, so it should be easier to maintain and keep up with any improvements in rmw_zenoh.

I didn’t need to use micro-ROS at all, I got the whole ROS 2 stack running on a microcontroller running Zephyr (and NuttX? I can’t remember). I can’t remember the specs for the microcontroller, I must have been an STM32 and I’m pretty sure it had at least 1MB of flash memory.

Anyway, really cool to see support for zenoh-pico in ROS! Let me know if there’s anything I can help with, I had a bunch of ideas on how to improve it, but I don’t know if they would work with the current rmw_zenoh, though.

2 Likes