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没法更换中间件,那么就需要这个桥接程序。

相关推荐
大雨歌3 天前
笛卡尔坐标 → 自然坐标(Frenet) 逐步推导全解 -2
ros2
米糕闯编程7 天前
鱼香ros2(十七)C++小海龟巡逻
开发语言·c++·机器人·ros2·服务·小海龟
风合星语8 天前
2026 机器人工程实例(七):Nav2 到站了,任务却没完成——AMR 载货导航中的托盘滑移与验收闭环
人工智能·机器人·ros2·机器人仿真·nav2·mujoco·amr
米糕闯编程14 天前
鱼香ros2(十二)C++话题订阅与发布
开发语言·c++·ros2·话题
朝朝辞暮i16 天前
C++ 第 36 课:Action——机械臂/VLA 非常重要
开发语言·c++·算法·ros2
朝朝辞暮i17 天前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
朝朝辞暮i17 天前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
朝朝辞暮i17 天前
C++ 第 38 课:线程、SingleThreadedExecutor、MultiThreadedExecutor、Callback Group
开发语言·c++·算法·ros2
小奇不哭18 天前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
zhangrelay20 天前
机械臂末端规划智能模型的误区演示
linux·笔记·学习·ubuntu·ros2