本文讲述如何使用zenoh和ros2通信,通过一个简单的例子来讲述这个过程。
ros2版本是Jazzy,其默认使用的rmw是fastdds,可以使用ros2 doctor --report进行查看,

一 安装桥梁程序
zenoh-bridge-ros2dds是一个桥梁程序,用于zenoh和使用dds的ROS之间的通信。
zenoh和ros2 with dds之间是不能直接通信的,因为协议不一样,所以需要这个桥梁程序来互相连通。
打开https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds,有2种安装方法,
1. 使用source list
把zenoh的仓库地址添加到系统的source list里,
bash
curl -L https://download.eclipse.org/zenoh/debian-repo/zenoh-public-key | sudo gpg --dearmor --yes --output /etc/apt/keyrings/zenoh-public-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/zenoh-public-key.gpg] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
然后使用下面命令进行安装,这个是独立的程序
bash
sudo apt install zenoh-bridge-ros2dds
如果是安装插件,那么执行下面命令,
bash
sudo apt install zenoh-plugin-ros2dds
本文安装独立程序zenoh-bridge-ros2dds
2. 手动安装
有时系统有各种限制,无法把zenoh的仓库地址添加到系统的source list里,那么就需要手动安装,
打开release界面,当前最新的版本是1.10.1,如下,点击下载到linux环境里进行安装

第一个debian.zip解压后是2个deb包,

然后apt进行安装,
bash
sudo apt install ./zenoh-bridge-ros2dds_1.10.1_amd64.deb
如果不想安装,就下载第二个standalone.zip包,解压后里面有个可执行程序

可以直接使用
二 测试
需要开启三个终端,第一个终端运行桥梁程序,
bash
zenoh-bridge-ros2dds
第二个终端运行ros2的publisher程序,
bash
source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp talker
可以看到终端会输出publish出去的内容

第三个终端运行zenoh的python程序,需要提前安装zenoh库:pip install eclipse-zenoh
python
import zenoh
import time
def callback(sample):
if sample.key_expr == "chatter":
print("payload:", sample.payload.to_string())
if __name__ == "__main__":
with zenoh.open(zenoh.Config()) as session:
sub = session.declare_subscriber("**", callback)
input()
运行后可以看到会收到ros2发出的内容并打印到终端

此时再看zenoh-bridge-ros2dds的那个终端,可以看到有如下信息,

意思是ros这边的"/chatter"转为了zenoh的"chatter" key,这样在zenoh这边针对"chatter"打印其payload即可
三 小结
本文讲述如何使用zenoh-bridge-ros2dds使得zenoh和ros2 with dds之间通信,如果ros2的rmw中间件是zenoh,那么就不需要这个桥梁程序了,但是有时ros2没法更换中间件,那么就需要这个桥接程序。