Zenoh与ROS2通信

本文讲述如何使用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没法更换中间件,那么就需要这个桥接程序。

相关推荐
风合星语13 天前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
浅梦语1115 天前
32-1 nav2_map_server实际作用与用法图解
ros2·nav2
米糕闯编程16 天前
鱼香ros2(七)功能包组织C++节点
c++·ros2·cmakelists
米糕闯编程17 天前
鱼香ros2(五)用C++编写节点
c++·ros2·cmakelists·鱼香
blueSatchel19 天前
c++action 编写(ros-humble)
c++·ros2
blueSatchel19 天前
ros-humble仿真-建图-导航
linux·ros2
米糕闯编程21 天前
鱼香ros2(三)Linux操作总结
linux·机器人·ros2
蝙蝠侠的小蝙蝠22 天前
【ROS2 工具】Launch
ros2·launch·多节点启动
某林21222 天前
机器人重启失联:DDS 发现机制与传输层静默故障
人工智能·python·机器人·硬件架构·ros2