ROS2官方教程:ROS2中不同的DDS/RTPS vendors

本文阐述了ROS2如何基于DDS/RTPS构建,强调其分布式发现与服务质量特性。介绍了DDS的不同实现,如eProsima FastRTPS、RTI Connext及PrismTech OpenSplice,并解释了ROS2通过RMW接口支持这些实现的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇说明简单讲解了ROS2和DDS/RTPS的关系,以及引出RMW的作用。感觉其中部分句子翻译的不好,而且vendors不知道怎么翻译,用了原词,希望指正。

原文链接:https://index.ros.org/doc/ros2/DDS-and-ROS-middleware-implementations/

ROS2中不同的DDS/RTPS vendors

ROS2是建立在以DDS/RTPS为中间件的基础之上的,DDS/RTPS提供了发现(discovery)、序列化(serialization)以及数据传递(transportation)的功能。这篇文章详细解释了DDS和RTPS实现的机理,总结的说,DDS是一种端对端的中间件,它可以提供ROS系统中的一些相关特性,比如说分布式发现(distributed discovery),非ROS1中的集中式发现方法,以及在不同的质量服务选项(“Quality of Service” options)中控制数据传输。

DDS(Data Distribution Service)是一种工业标准,它由各种不同的vendors实现,比如RTI公司实现的Connext或者是ADLink公司的OpenSplice,RTPS(Real Time Publish Subscribe protocol)是一种使用DDS作为网络通信的协议,没有完全实现全部的DDS API,但已经可以为ROS2提供充足的功能性,比如eProsima实现的Fast RTPS

ROS2支持多种不同的DDS/RTPS实现,这是由于当它选择一个vendor来使用时,并不是完全一致的(one size fits all)。当选择一个中间件实现时,有多种因素需要考虑,比如说后备考虑如license,或者技术考虑如平台兼容性或计算规模。vendors可能专注于不同的需求而提供多于一种的DDS或RTPS实现,比如说,RTI就有多种不同的Connext实现,它们的目的各不相同,比如有些是针对特定处理器平台的,有些是满足不同应用的安全性验证的(当前阶段,ROS2仅支持标准桌面版本)。

为了在ROS2中使用一个DDS/RTPS实现,我们设计了ROS Middleware interface(或简称RMW) 的软件包,它可以实现在使用DDS/RTPS API或工具时对ROS中间件接口的抽象。使用RMW来支持DDS的过程需要做很多实现和维护性工作,但是首先实现对一部分DDS的支持可以保证ROS2的框架代码不再需要尝试其他特殊的实现方法,同时用户也希望能将DDS与他们的应用工程分离开来。

支持的RMW实现

产品名称协议RMW实现当前状态
eProsima Fast RTPSApache 2rmw_fastrtps_cpp完全支持,默认RMW
RTI Connext商业授权、研究授权rmw_connext_cpp完全支持,包括二进制包,但Connext需要单独安装
RTI Connext(dynamic implementation)商业授权、研究授权rmw_connext_dynamic_cpp支持暂停,alpha 8版之前完全支持
PrismTech OpenspliceLGPL(only v6.4)、商业授权rmw_opensplice_cpp部分支持,包括二进制包,但是OpenSplice需要单独安装
OSRF FreeRTPSApache 2-部分支持,开发暂停

部分支持的意思是有一个或多个rmw接口需要的特性没有实现。详细的关于RMW实现的工作,参考Working with multiple RMW implementations

ROS2 通信例程 更新时2024-09-26 19:44:56 说明 unitree_sdk2 基于 cyclonedds 实现了一个易用的器人数据通信制,应用开发者可以利用这一接口实现器人的数据通讯和指令控制(支持Go2、B2、H1和G1)。 ROS2 也使用 DDS 作为通讯工具,因此 Go2、B2 、H1和 G1 器人的底层可以兼容 ROS2,使用 ROS2 自带的 msg 直接进行通讯和控制,而无需通过 SDK 接口转发。 环境配置 系统要求 测试过的系统和ROS2版本 系统 ROS2 版本 Ubuntu 20.04 foxy Ubuntu 22.04 humble 下文以 ROS2 foxy 为例,如需使用其他版本的 ROS2,在相应的地方替换 foxy 为当前的 ROS2 版本名称即可。 note ROS2 不同发行版的 API 可能存在差异,例如 rosbag 的调用方法等,仓库中的例程在 ROS2 foxy 下开发,如果使用的是其他 ROS2 发行版,请参考官方文档进行调整。 ROS2 foxy 的安装可参考: https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html ctrl+alt+T 打开终端,克隆仓库:https://github.com/unitreerobotics/unitree_ros2 git clone https://github.com/unitreerobotics/unitree_ros2 其中 cyclonedds_ws 文件夹为编译和安装 Unitree 器人 ROS2 msg 的工作空,在子文件夹 cyclonedds_ws/unitree/unitree_go和cyclonedds_ws/unitree/unitree_api中定义了 Unitree 状态获取和控制相关的 ROS2 msg。 安装 Unitree ROS2 功能包 1. 安装依赖 sudo apt install ros-foxy-rmw-cyclonedds-cpp sudo apt install ros-foxy-rosidl-generator-dds-idl note 为了方便接口的使用,推荐同时安装 unitree_sdk2 2. 编译 cyclone-dds 由于 G1 使用的是 cyclonedds 0.10.2 版本,因此需要先更改 ROS2DDS 实现。详见:https://docs.ros.org/en/foxy/Concepts/About-Different-Middleware-Vendors.html 我应该如何更改ros2dds的实现
03-11
<think>好的,用户的问题是关于如何在ROS2 Foxy中更改默认的DDS实现为CycloneDDS,以确保与Unitree器人的兼容性。首先,我需要回顾ROS2DDS的作用以及更换DDS的步骤。 ROS2使用DDS作为中件来实现节点的通信,不同DDS实现可能有不同的性能特点和兼容性。用户提到Unitree器人可能需要特定的DDS,比如CycloneDDS,这可能是因为他们的系统配置或依赖库需要与之匹配。 接下来,我需要确认ROS2 Foxy支持的DDS实现。记得Foxy默认支持DDS,比如Fast DDS(原Fast RTPS)和CycloneDDS。用户需要安装CycloneDDS,并设置环境变量来切换默认的DDS。 步骤可能包括安装CycloneDDSROS2包,设置环境变量RMW_IMPLEMENTATION=rmw_cyclonedds_cpp。同时,要提醒用户检查是否安装了必要的依赖,以及可能需要重新编译工作空或启动daemon。 另外,需要考虑到可能存在的一些问题,比如DDS的冲突,或者某些功能包是否与CycloneDDS兼容。用户可能需要测试基本的通信功能,如话题的发布和订阅,来验证配置是否成功。 还要注意引用用户提供的参考内容,特别是关于ROS2去掉主节点,使用DDS实现平等通信的部分,这可以解释为什么DDS的选择对兼容性如此重要。需要将这些引用自然地融入回答中,以增强可信度。 最后,生成的相关问题需要围绕DDS的选择影响、故障排除以及与其他器人硬件的兼容性,这些都是用户可能进一步感兴趣的方面。</think>以下是在ROS2 Foxy中更改默认DDS实现为CycloneDDS的详细步骤: ### 一、DDS实现更换步骤 1. **安装CycloneDDS支持包** ```bash sudo apt install ros-foxy-rmw-cyclonedds-cpp ``` 这将为ROS2 Foxy添加CycloneDDS件支持[^1] 2. **设置环境变量** 在终端或启动脚本中添加: ```bash export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp export CYCLONEDDS_URI=file:///opt/ros/foxy/share/cyclonedds_cpp/conf/cyclonedds.xml ``` 这会将默认中件指定为CycloneDDS[^2] 3. **验证配置** ```bash printenv | grep RMW_IMPLEMENTATION ros2 doctor | grep "Middleware name" ``` 应显示`rmw_cyclonedds_cpp`和`CycloneDDS` ### 二、Unitree兼容性注意事项 1. **网络配置检查** 确保器人系统与主使用相同的DDS发现协议: ```bash export CYCLONEDDS_URI="<path_to_config_file>" ``` 需在Unitree和开发上同步配置 2. **QoS策略调整** 创建`cyclonedds.xml`配置文件: ```xml <CycloneDDS> <Domain> <General> <NetworkInterfaceAddress>eth0</NetworkInterfaceAddress> </General> <Tracing> <Verbosity>config</Verbosity> </Tracing> </Domain> </CycloneDDS> ``` 这确保使用正确的网络接口 ### 三、故障排查方法 1. 使用专用网络交换时: ```bash export ROS_LOCALHOST_ONLY=0 ``` 2. 出现节点不可见时: ```bash ros2 daemon stop ros2 daemon start ``` 3. 性能优化建议: ```bash sudo sysctl -w net.core.rmem_max=2097152 sudo sysctl -w net.core.wmem_max=2097152 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值