宿主机与容器通过 rmw_cyclonedds_cpp中间件进行ros2结点之间的通讯的相关注意事项

宿主机与容器通过 rmw_cyclonedds_cpp中间件进行ros2结点之间的通讯的相关注意事项

rmw_cyclonedds_cpp是什么

一种ros2框架体系中的中间件通讯方式,与之相对的另一种常用的中间件通讯方式是rmw_fastrtps_cpp

Fast DDS (rmw_fastrtps_cpp) 功能很全、可配置性强,但默认依赖多播发现,跨宿主机/容器时容易遇到"发现通但数据不通"的问题,需要手动配置网卡和端口才能稳定.

而 Cyclone DDS (rmw_cyclonedds_cpp) 设计更简洁,对网络环境更友好,几乎开箱即用,在 Docker、不同机器或复杂网络下通信更稳定,因此社区里常推荐 CycloneDDS 做跨设备通信。

最近有一个场景,需要用到rmw_cyclonedds_cpp. 构建宿主机与容器的ros2结点通讯.

构建容器与宿主机之间的ros2结点通讯

我发现几个很有趣的现象

  1. 如果我在宿主机和容器中都设置了export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp,此时尽管任意一方可以通过ros2 topic list查看到/chatter话题
    容器:

    宿主机:

    但是talker发送的消息,listener收不到
    宿主机:

    容器:

    反过来也是如此.在容器中,talker发送消息给/chatter话题,宿主机无法接受到chatter话题中相关的消息.

当只在一方进行export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp的设置,就可以正常接受信息了.

  1. 如果你是希望宿主机端执行export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp命令,需要注意这个命令不能写在宿主机的~/.bashrc中,只能显式地在宿主机控制台进行输入.否则会出现如下情况,容器收不到chatter话题的消息,但是容器知道有chatter这个话题。

这个问题产生的原因我目前也找不到头绪。

相关推荐
Meme Buoy2 天前
13.6其他架构评估方法-中间件
中间件·架构
我是李龙2 天前
第二十六章 全链路监控体系: 服务器资源、中间件状态与业务指标的可视化大屏开发
中间件
别抢我的锅包肉4 天前
FastAPI + Vue3 + Vite 跨域报错全解:从 `Access-Control-Allow-Origin missing` 到彻底修复
中间件·状态模式·fastapi
爱吃烤鸡翅的酸菜鱼4 天前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅
my_styles4 天前
linux系统下安装 tengine / 宝兰德等国产信创中间件和闭坑
linux·运维·服务器·spring boot·nginx·中间件
ZHENGZJM4 天前
Gin 鉴权中间件设计与实现
中间件·gin
开心码农1号4 天前
mq是什么,常用mq的使用场景有哪些?
中间件·rabbitmq
斌味代码4 天前
Next.js 14 App Router 完全指南:服务端组件、流式渲染与中间件实战
开发语言·javascript·中间件
fantasy5_58 天前
从零手写线程池:把多线程、锁、同步、日志讲透
开发语言·c++·中间件
heimeiyingwang8 天前
【架构实战】海量数据存储:分库分表中间件实战
中间件·架构