# Creating a Custom RMF adapter package for Interfacing with realworld hardware without Zenoh bridge. (#652)

**URL:** <https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557>\
**Category:** Open-RMF General\
**Tags:** rmf-github-discuss\
**Created:** [March 28, 2025, 8:53am UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557 "2025-03-28T08:53:29Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [March 28, 2025, 8:53am UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/1 "2025-03-28T08:53:29Z")

</div>

Posted by @rajgavhale52:

Hey all,  
I have already developed a package of RMF using its core functionality and python biddings, My custom robot localized into the RVIZ with help of its TF, i.e position updates are through tf whereas navigation is through NAV2, i am NOT using a free\_fleet as zenoh bridge is again contrain for me.

Now, I want to focus on navigation of robot through RMF and NAV2 so tell me the any of concern/ requiredment / need of package to implement it successfully

Along with that tell me the use of Fleet\_manager in system?

* * *

Edited by @rajgavhale52 at 2025-03-28T08:54:18Z

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 1, 2025, 10:40am UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/2 "2025-04-01T10:40:13Z")

</div>

Posted by @aaronchongth:

Hi @rajgavhale52, if you’d like to integrate RMF and Nav2 without free fleet, you will need to implement a fleet adapter based on your own requirements. You can refer to this as a starting point, [GitHub - open-rmf/fleet\_adapter\_template](https://github.com/open-rmf/fleet_adapter_template).

We have a basic fleet adapter implemented with RMF + Nav2 directly, but only in simulation, [ionic\_demo/fleet\_adapter\_nav2 at main · gazebosim/ionic\_demo · GitHub](https://github.com/gazebosim/ionic_demo/tree/main/fleet_adapter_nav2). Take note that this only works in simulation because we have all the nodes (nav2 + RMF) on the same host, and ROS 2 works relatively well within the same machine. Based on our experience integrating with multiple machines, communication might not be reliable over ROS 2, hence the [proposed architecture of free\_fleet](https://github.com/open-rmf/free_fleet?tab=readme-ov-file#introduction) which relies on the Zenoh router for network discovery and traffic.

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 2, 2025, 12:25pm UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/3 "2025-04-02T12:25:58Z")

</div>

Posted by @rajgavhale52:

But I’m using ROS2 Humble, easy\_full\_control seems to be not available in humble and I need to use Humble only, in such case what should I do?

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 2, 2025, 12:34pm UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/4 "2025-04-02T12:34:34Z")

</div>

Posted by @mxgrey:

The `main` branches of all the RMF repos (besides `rmf_simulation` and `rmf_demos`) are still compatible with humble. You can build those branches from source inside of your 22.04 Humble distro. Many users set up a docker image with this configuration.

The easy full control API isn’t available through the build farm because it’s a new feature that was released after Humble was released.

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 8, 2025, 1:04pm UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/5 "2025-04-08T13:04:10Z")

</div>

Posted by @Oussama-Dallali99:

> Hi @rajgavhale52, if you’d like to integrate RMF and Nav2 without free fleet, you will need to implement a fleet adapter based on your own requirements. You can refer to this as a starting point, [GitHub - open-rmf/fleet\_adapter\_template](https://github.com/open-rmf/fleet_adapter_template).
> 
> We have a basic fleet adapter implemented with RMF + Nav2 directly, but only in simulation, [ionic\_demo/fleet\_adapter\_nav2 at main · gazebosim/ionic\_demo · GitHub](https://github.com/gazebosim/ionic_demo/tree/main/fleet_adapter_nav2). Take note that this only works in simulation because we have all the nodes (nav2 + RMF) on the same host, and ROS 2 works relatively well within the same machine. Based on our experience integrating with multiple machines, communication might not be reliable over ROS 2, hence the [proposed architecture of free\_fleet](https://github.com/open-rmf/free_fleet?tab=readme-ov-file#introduction) which relies on the Zenoh router for network discovery and traffic.

Hi everyone ! ,is it possible and feasible to use the Free Fleet without Zenoh/dds bridge ,and just use the RMW\_ZENOH ?

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 8, 2025, 2:23pm UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/6 "2025-04-08T14:23:02Z")

</div>

Posted by @aaronchongth:

@Oussama-Dallali99 it is possible, but not necessarily feasible. A large advantage of the zenoh bridge is to help with namespacing various topics on the zenoh key expression level, instead of manually namespacing ROS 2 topics for each robot. If `rmw_zenoh` is used, users will need to set up each of their robots to have namespaced ROS 2 topics.

One of the key objectives of `free_fleet` is to require the least number of changes to an existing Nav1/Nav2 robot for the integration to work, so that users with existing and working standalone robots can drop in a bridge and make the integration work immediately, as opposed to manually re-configuring each robot’s navigation stack

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 9, 2025, 2:55pm UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/7 "2025-04-09T14:55:23Z")

</div>

Posted by @davecrawley:

Yes but isn’t that assuming that the robot is using DDS. What if you have a robot that is using Zenoh. Can you use keys to make this easy?

To quote from here [https://www.researchgate.net/publication/373757741\_Zenoh\_Unifying\_Communication\_Storage\_and\_Computation\_from\_the\_Cloud\_to\_the\_Microcontroller#pf4](https://www.researchgate.net/publication/373757741_Zenoh_Unifying_Communication_Storage_and_Computation_from_the_Cloud_to_the_Microcontroller#pf4)

“As an example, a publisher could be defined for a key, such  
as home/kitchen/sensor/C2O2, or for a set of keys, such as,  
home/kitchen/sensor/\* or home/kitchen/**.  
Symmetrically, a subscriber should be thought as a  
sink for resources matching key expression. As an ex-  
ample, a subscriber could be defined for a key, such  
as home/kitchen/sensor/C2O2, or for a set of keys, such as,  
home/**/sensor/”

Also Zenoh supports pretty much all available Topologies - so aren’t there clever things we can do with the topology to make this work well?

* * *

Edited by @davecrawley at 2025-04-09T15:24:35Z

---

<div class="post-metadata">

**Author:** ![Archive-o-matic](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/archive-o-matic/32/26074_2.png) [@Archive-o-matic](https://discourse.openrobotics.org/u/Archive-o-matic)\
**Post date:** [April 10, 2025, 2:47am UTC](https://discourse.openrobotics.org/t/creating-a-custom-rmf-adapter-package-for-interfacing-with-realworld-hardware-without-zenoh-bridge-652/44557/8 "2025-04-10T02:47:42Z")

</div>

Posted by @aaronchongth:

Hi @davecrawley!

> Yes but isn’t that assuming that the robot is using DDS.

Yes the assumption is like that at the moment. We were first looking at supporting robots that were set up according to official documentation of Nav2 (and Nav1), hence the focus on DDS for now.

> What if you have a robot that is using Zenoh. Can you use keys to make this easy?

Absolutely. I see that [Namespace prefix support by DenisBiryukov91 · Pull Request #1792 · eclipse-zenoh/zenoh · GitHub](https://github.com/eclipse-zenoh/zenoh/pull/1792) got merged rather recently, I’ve not managed to try it yet. Theoretically, if I understand this feature correctly, instead of spinning up a Zenoh bridge, users will need a central Zenoh router, then start a Zenoh router on each robot with the correct discovery settings with the main one, and use a `namespace` to allow for differentiating all the key expressions coming in from different robots.

Regarding `rmw_zenoh`, I see that the namespace feature has been ported over just a few days ago. I’m not too sure yet what will the effects of namespacing key expressions be when it is used as an `rmw` client, whether or not it gets parsed properly as a namespaced ROS 2 topic, or will the K.E.\<—\>topic mangling be messed up. I’ll update here when I get the chance to try it out.
