宿主机与容器通过 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这个话题。

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

相关推荐
SunnyRivers5 天前
LangChain中间件详解
中间件·langchain
金刚猿5 天前
06_虚拟机中间件部署_xxl-job 部署
中间件·xxl-job·xxl-job-admin
Loo国昌6 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
键盘鼓手苏苏6 天前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
Coder_Boy_7 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
CN-David7 天前
CentOS搭建Mycat中间件
linux·mysql·中间件·centos·mariadb
三水不滴8 天前
消息队列消费性能优化:批量消费 + 手动 ACK 提升吞吐量
经验分享·笔记·中间件·性能优化
nix.gnehc8 天前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang
金刚猿9 天前
05_虚拟机中间件部署_ubuntu 系统 安装 Redis 7.0.15
redis·ubuntu·中间件
GEM的左耳返9 天前
Java面试深度剖析:从JVM到云原生的技术演进
jvm·spring boot·云原生·中间件·java面试·分布式架构·ai技术