ROSCon 2022 - October, 20th 2022 - Kyoto
How to Make ROS 2 Work at any Scaleand Integrate with Anything
Julien ENOCH

What is ZenohPub / Sub... but not only!
• Pub / Sub (push)Peer
put(room/1/temp, 19)Peerdeclare_subscriber(room/1/temp)

3

Pub / Sub... but not only!
• Pub / Sub (push)

Peer

Peer

declare_subscriber(room/1/temp)

put(room/1/temp, 19)pull()• Pub / Sub (pull)Peerdeclare_subscriber(**/temp).mode(Pull)

3

Pub / Sub... but not only!
• Pub / Sub (push)

Peer

Peerdeclare_subscriber(room/1/temp)

put(room/1/temp, 19)pull()• Pub / Sub (pull)• Pub / Store / Get

Peerdeclare_subscriber(**/temp).mode(Pull)

Peer

Peer

put(room/2/hum, 42)get(room/**/hum)(room/**)

3

Pub / Sub... but not only!
• Pub / Sub (push)

Peer

Peer

declare_subscriber(room/1/temp)

put(room/1/temp, 19)pull()• Pub / Sub (pull)• Pub / Store / Get• Get / Reply

Peer
declare_subscriber(**/temp).mode(Pull)

Peer

Peer

put(room/2/hum, 42)get(room/**/hum)Peerget(elec_consumption)(room/**)

Peer
declare_queryable(elec_consumption)3

Any topology

Any topology
Clique

Mesh

Peer
Peer

Peer-to-peer
Clique and mesh topologies

Peer

Peer

Peer

Peer

Peer

Peer

Peer

Any topology
CliqueClientPeer

Peer-to-peer

Peer

Clique and mesh topologies

Peer

Brokered
Clients communicate
through a router or a peer
RouterClientBrokered

Peer

Peer

Peer

Peer

ClientPeer

ClientMesh

Peer

ClientAny topology
CliqueClientPeer

Peer-to-peer

Peer

Peer

Peer

Peer

Peer

RouterRouterRouterPeer

Clique and mesh topologies

Mesh

Peer

Peer

ClientBrokered
Clients communicate
through a router or a peer

RoutedRouters forward data to andClient

ClientClientClientClientfrom peers and clients
Brokered

RoutedAny topology
CliqueClientPeer

Peer-to-peer

Peer

Clique and mesh topologies

Peer

Peer

Peer

Peer

Peer

RouterRouterClientPeer

RouterBrokered
Clients communicate

Mesh

Peer

RouterRouterthrough a router or a peer
RouterRouterRouterRoutedRouters forward data to andClient

ClientClientClientClientfrom peers and clients
Brokered

RoutedRuns everywhere…

Native libraries and API bindings for many
programming languages
Over various network technologies: fromtransport layer to data link

Transport
Network
Data Link

On embedded and constrained devices
PhysicalFor MCUs: Zenoh Pico (C)6Extensible…

Enhance zenoh with plugins
Interact with other technologies

SSE…

Zenoh / DDS bridge

ROS2 ⬌ DDS ⬌ Zenoh mapping

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DWzenoh-bridge-dds
Sub DR/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imuDRput()

zenoh-bridge-dds
Sub DR/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imurt/imu

Pub DW

rt/imuDRput()

zenoh-bridge-dds
Sub DR/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imuDRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imu
DR

put()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imuDRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel

sub()rt/cmd_vel

9ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imuDRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel

put()

sub()

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imuPub DW

rt/imuDRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel

put()

sub()

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imurt/imuPub DW

DRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel/imu

rt/imu

put()

sub()

rt/cmd_vel

bot1/rt/imu
zenoh-bridge-dds--scope bot1

/cmd_vel/imu

rt/cmd_vel

rt/imubot2/rt/imu
zenoh-bridge-dds--scope bot2

/cmd_vel

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imurt/imuPub DW

DR

put()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel/imu

rt/imu

put()

sub()

rt/cmd_vel

bot1/rt/imu
zenoh-bridge-dds--scope bot1

/cmd_vel
/imu

sub()

rt/cmd_vel

rt/imubot2/rt/imu
zenoh-bridge-dds--scope bot2

/cmd_vel**/rt/imu

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imurt/imuPub DW

DRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel/imu

rt/imu

put()

sub()

rt/cmd_vel

bot1/rt/imu
zenoh-bridge-dds--scope bot1

/cmd_vel
/imu

sub()

rt/cmd_vel

rt/imubot2/rt/imu
zenoh-bridge-dds--scope bot2

/cmd_vel**/rt/imu

rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imurt/imuPub DW

DRput()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel/imu

rt/imu

put()

sub()

rt/cmd_vel

bot1/rt/imu
zenoh-bridge-dds--scope bot1

/cmd_vel
/imu

sub()

rt/cmd_vel

rt/imubot2/rt/imu
zenoh-bridge-dds--scope bot2

/cmd_vel**/rt/imu

rt/cmd_vel

put()bot2/rt/cmd_vel

9

ROS2 ⬌ DDS ⬌ Zenoh mapping/imu

rt/imurt/imuPub DW

DR

put()

sub()

zenoh-bridge-dds
Sub DR/cmd_vel

DW
rt/cmd_vel/imu

rt/imu

put()

sub()

rt/cmd_vel

bot1/rt/imu
zenoh-bridge-dds--scope bot1

/cmd_vel
/imu

sub()

rt/cmd_vel

rt/imubot2/rt/imu
zenoh-bridge-dds--scope bot2

/cmd_vel**/rt/imu

rt/cmd_vel

put()bot2/rt/cmd_vel

9Use cases

10Use cases
FleetManagerzenoh-bridge-dds--scope bot1

zenoh-bridge-dds--scope bot2

Fleet Management

10Use cases
FleetManagerzenoh-bridge-dds--scope bot1

zenoh-bridge-dds--scope bot2

Fleet Management

ZenohrouterReplayzenoh-bridge-dds--scope simu

zenoh-bridge-dds--scope reel

Record / Replay

10

Use cases
FleetManagerzenoh-bridge-dds--scope bot1

zenoh-bridge-dds--scope bot2

Fleet Management

ZenohrouterReplayzenoh-bridge-dds--scope simu

zenoh-bridge-dds--scope reel

Record / Replay

picozenoh-bridge-dds

Pub/Sub with MCUs

10

Use cases
FleetManagerzenoh-bridge-dds--scope bot1

zenoh-bridge-dds--scope bot2

Fleet Management

ZenohrouterReplayzenoh-bridge-dds--scope simu

zenoh-bridge-dds--scope reel

Record / Replay
Zenohrouterpico
zenoh-bridge-dds

Pub/Sub with MCUs

zenoh-bridge-dds

NAT

NAT

zenoh-bridge-dds

Cross-WAN bridging (routed or direct)

10

Use cases
FleetManagerzenoh-bridge-dds--scope bot1

zenoh-bridge-dds--scope bot2

Fleet Management

ZenohrouterReplayzenoh-bridge-dds--scope simu

zenoh-bridge-dds--scope reel

Pub/Sub with MCUs

SSE

zenoh-bridge-dds

Record / Replay

Integrations
Zenohrouterpico
zenoh-bridge-dds

Zenohrouterzenoh-bridge-dds

NAT

NAT

zenoh-bridge-dds

Cross-WAN bridging (routed or direct)

10

DemosFleet teleop
Zenoh
Router
Zenoh
TCP

Web
ServerPluginHTTP

RESTPluginroscon.zenoh.io
bot1/cams/0
zcapture

bot1/rt/cmd_vel
zenoh-bridge-dds

simu/rt/cmd_vel
zenoh-bridge-dds

http://roscon.zenoh.io
12MCU + Gyroscope Teleop
Zenoh
Router

WebServer
PluginHTTP

RESTPluginZenoh
TCP

roscon.zenoh.io
bot1/cams/0
zcapture

bot1/rt/cmd_vel
zenoh-bridge-dds

Zenoh
TCP

ESP32 + MPU-6050

http://roscon.zenoh.io

zenoh-pico
13

Record and Replay(simu/rt/cmd_vel)

get(simu/rt/cmd_vel)

replay-app

put(bot1/rt/cmd_vel)

Zenoh
TCP

Zenoh
Router

WebServer
PluginHTTP

RESTPluginroscon.zenoh.io
bot1/cams/0
zcapture

bot1/rt/cmd_vel
zenoh-bridge-dds

zenoh-bridge-dds

http://roscon.zenoh.io
14

Record and Replay(simu/rt/cmd_vel)

get(simu/rt/cmd_vel)

replay-app

put(bot1/rt/cmd_vel)

Zenoh
TCP

Zenoh
Router

WebServer
PluginHTTPREST
Pluginroscon.zenoh.io
bot1/cams/0
zcapture

bot1/rt/cmd_vel
zenoh-bridge-dds

zenoh-bridge-dds

http://roscon.zenoh.io
14

MQTT integration
Zenoh
Router

WebServer
PluginHTTP

RESTPluginZenoh
TCP

roscon.zenoh.io
bot1/cams/0
zcapture

bot1/rt/cmd_vel
zenoh-bridge-dds

Zenoh
TCP

zenoh-bridge-mqtt

http://roscon.zenoh.io15

Join us at
ZettaScalebooth (#32)• More demos• More info on
ZenohThank You
Find out more in our channels