Skip to content

Zenoh's DDS Connector

Luca Cominardi edited this page May 12, 2022 · 8 revisions

⚠️WARNING⚠️

You are reading the old and no longer maintained zenoh wiki.

More recent information can be found on the zenoh website.


Background

The Data Distribution Service (DDS) is a standard for data-centric publish subscribe. Whilst DDS has been around for quite some time and has a long history of deployments in various industries, it has recently gained quite a bit of attentions thanks to its adoption by the Robotic Operating System (ROS2) -- where it is used for communication between ROS2 nodes.

Robot Swarms and Edge Robotics

As mentioned above, ROS2 has adopted DDS as the mechanism to exchange data between nodes within and potentially across a robot. That said, due to some of the very core assumptions at the foundations of the DDS wire-protocol, beside the fact that it leverage UDP/IP multicast for communication, it is not so straightforward to scale DDS communication over a WAN or across multiple LANs. Zenoh, on the other hand was designed since its inception to operate at Internet Scale.

zenoh-plugin-dds

Thus, the main motivations to have a DDS connector for zenoh are:

  • Facilitate the interconnection of robot swarms.
  • Support use cases of edge robotics.
  • Give the possibility to use zenoh's geo-distributed storage and query system to better manage robot's data.

Architecture

zenoh routers provide a plug-in mechanism that allow for extensions to be loaded and activated by its management API. Thus the most natural way to implement a DDS connector for zenoh is to do that as a zenoh router plugin.

This plugin, will essentially:

  • Spoof DDS discovery data and transparently expose DDS writers/readers as zenoh publisher/subscribers
  • Route the data produced by discovered DDS writers to data to matching entities.

Mapping DDS to zenoh

The mapping between DDS and zenoh is rather straightforward. Given a DDS Reader/Writer for topic A in a given partition P with a set of QoS Q, then the equivalent zenoh resource will be named as P/A/*. On the other hand actual writes will be on the resource P/A/sample-key-hash as this allows for zenoh subscriber to easily subscribe to just a specific Topic instance, a set of them or of all of them.

Trying it Out

Zenoh's DDS Plugin is available on the zenoh-plugin-dds repository. Take a look at the repository readme to learn how to get started.