
本文讲述如何使用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里curl-Lhttps://download.eclipse.org/zenoh/debian-repo/zenoh-public-key|sudogpg--dearmor--yes--output/etc/apt/keyrings/zenoh-public-key.gpgechodeb [signed-by/etc/apt/keyrings/zenoh-public-key.gpg] https://download.eclipse.org/zenoh/debian-repo/ /|sudotee-a/etc/apt/sources.list/dev/nullsudoaptupdate然后使用下面命令进行安装这个是独立的程序sudoaptinstallzenoh-bridge-ros2dds如果是安装插件那么执行下面命令sudoaptinstallzenoh-plugin-ros2dds本文安装独立程序zenoh-bridge-ros2dds2. 手动安装有时系统有各种限制无法把zenoh的仓库地址添加到系统的source list里那么就需要手动安装打开release界面当前最新的版本是1.10.1如下点击下载到linux环境里进行安装第一个debian.zip解压后是2个deb包然后apt进行安装sudoaptinstall./zenoh-bridge-ros2dds_1.10.1_amd64.deb如果不想安装就下载第二个standalone.zip包解压后里面有个可执行程序可以直接使用二 测试需要开启三个终端第一个终端运行桥梁程序zenoh-bridge-ros2dds第二个终端运行ros2的publisher程序source/opt/ros/jazzy/setup.bash ros2 run demo_nodes_cpp talker可以看到终端会输出publish出去的内容第三个终端运行zenoh的python程序需要提前安装zenoh库pip install eclipse-zenohimportzenohimporttimedefcallback(sample):ifsample.key_exprchatter:print(payload:,sample.payload.to_string())if__name____main__:withzenoh.open(zenoh.Config())assession:subsession.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没法更换中间件那么就需要这个桥接程序。