ROS 2 与 DDS 互操作性:无缝集成实用指南
ROS 2 依赖 DDS 作为底层通信层,但要在原生 DDS 部署与 ROS 2 之间实现完美互操作仍面临微妙挑战。本指南提炼了截至“Bouncy Bolson”(2018 年 7 月)ROS 2 版本被证明有效的实用步骤和配置调整,帮助团队避开常见陷阱,充分发挥 Connext DDS 在 ROS 2 中的威力。
ROS 2 现状
ROS 2 快速演进,未来版本可能引入额外互操作性细节。然而,当您使用 rmw_connext_cpp RMW 层运行 ROS 2 时,您仍在使用原生 Connext DDS 栈。这意味着您保留 Connext 所有高级功能——如细粒度 QoS 控制和多传输支持——同时享受 ROS 2 的高层抽象。
关键互操作性设置
主题名称与分区
ROS 2 将主题的命名空间编码在主题名称或 DDS 分区中。所有 ROS 2 用户主题驻留在“rt”(ROS Topic)命名空间。在 DDS 中表示为:
主题数据类型
当 Connext RMW 层激活时,ROS 2 以通用序列化类型通告每个“rt/*”主题。结果,发布原始强类型数据的纯 DDS 应用将经历 QoS 不匹配而无法连接。
最直接的补救是抑制 ROS 2 参与者的自动类型代码发布。在启动 ROS 2 节点的目录添加 USER_QOS_PROFILES.xml 文件。隐藏类型代码并禁用类型对象共享的最小配置如下:
可根据应用调整可靠性设置;上例以“Best Effort”为起点。
请记住,此 QoS 文件仅适用于从同一目录启动的 ROS 2 节点。若需隔离配置,请在每个节点的启动文件夹旁放置专用 USER_QOS_PROFILES.xml。
传输选择
当 DDS 系统和 ROS 2 系统共享同一网络时,可能出现关于缺失或不支持传输(如仅支持 udpv4 的参与者上 udpv6 不可用)的警告。为避免此类警告并确保可靠连接,显式配置传输偏好。
- 在
USER_QOS_PROFILES.xml中通过在<participant_qos>内添加<transport_builtin>掩码定义允许的传输:
<participant_qos> <transport_builtin> <mask>UDPV4|SHMEM</mask> </transport_builtin> </participant_qos>
- 在启动目录创建
NDDS_DISCOVERY_PEERS文件并列出希望发现的对等地址。禁用多播发现的逗号分隔示例:
localhost,192.168.1.12,shmem://
在 ROS 2 中选择 RMW 层
启动 ROS 2 节点前,始终将 RMW_IMPLEMENTATION 环境变量设为 rmw_connext_cpp:
export RMW_IMPLEMENTATION=rmw_connext_cpp
或在启动节点时内联传递:
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
无界序列与字符串
某些 ROS 2 主题包含无界序列或字符串。若您的 DDS 应用需消费或发布这些主题,请在 DDS 代码生成器中启用“Unbounded Support”。参阅 RTI 文档了解如何在代码生成期间切换此选项。
后续步骤
我们将在本系列下一期介绍当前 ROS 2 功能集中的一个临时空白——主题数据的记录与回放。与此同时,若您准备部署强大的 DDS 支持 ROS 2 解决方案,请联系 RTI 专家。我们将助您微调配置并加速上市。
物联网技术
- 专业重型机械现场服务与维修:快速复工
- 激光打标综合指南:类型、优势与应用
- ROS 机器人:树莓派终端控制导航
- 快速制造:为定制与低量零件加速生产
- 掌握PCB加强筋:柔性PCB完整指南
- OpenDDS 与 RTI Connext DDS:选择正确的数据分发服务解决方案
- 使用 RTI Recording Service 与 DDS 回放 ROS2 LiDAR 数据
- ROS2 Bouncy Bolson 免费捆绑 RTI Connext DDS:提升连接与诊断
- Qt 与 DDS 集成:构建可扩展物联网应用
- AUTOSAR 自适应平台 18.03 发布 DDS 支持——自动驾驶的变革性里程碑
- 物联网革新现场服务:预测性维护驱动更高ROI
- 工业物联网平台选型指南:专家建议与决策清单