有篇文章要学习下:https://index.ros.org/doc/ros2/Concepts/DDS-and-ROS-middleware-implementations/
RWM支持情况
当前活动发行版的ROS 2二进制发行版内置了对一些RMW实现的内置支持(Fast RTPS,RTI Connext Pro,ADLINK OpenSplice和Eclipse Cyclone DDS
)。默认值为Fast RTPS
,它无需任何其他安装步骤即可工作,因为我们将其与二进制软件包一起分发。自Eloquent以来,Cyclone DDS
还与二进制包一起分发。
可以通过安装其他软件包来启用OpenSplice
或Connext
之类的其他软件包,而无需重建任何内容或替换任何现有软件包。也可以通过源码安装RMW。
在许多情况下,您会发现使用不同RMW实现的节点能够通信,但是并非在所有情况下都是如此。支持的供应商之间的通信配置列表即将发布。
默认是Fast RTPS
,如果没安装就安装已安装的RMW的首字字母排序,靠前的那个就是。比如 rmw_opensplice_cpp
和rmw_connext_cpp
两个中,默认就会选 rmw_connext_cpp
要使用指定,就必须提前安装好要用的RMW,参考https://index.ros.org/doc/ros2/Installation/DDS-Implementations/
可以通过环境变量RMW_IMPLEMENTATION
来指定RMW
命令这个样子
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
# Run in another terminal
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_py listener
如果想指定特定的RMW在工作空间,可以通过使用--cmake-force-configure
参数来实现,也可以在编译之前重新设置默认的RMW通过RMW_IMPLEMENTATION
如果将RMW_IMPLEMENTATION
环境变量设置为未安装支持的RMW实现,则如果仅安装一个实现,则会看到与以下内容类似的错误消息:
Expected RMW implementation identifier of 'rmw_connext_cpp' but instead found 'rmw_fastrtps_cpp', exiting with 102.
如果您支持安装多个RMW实施,并且请求使用未安装的实施,则将看到类似以下内容的内容:
Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_connext_cpp'), exiting with 1.
如果发生这种情况,请仔细检查您的ROS 2安装是否包括对您在RMW_IMPLEMENTATION
环境变量中指定的RMW实现的支持。
如果要在RMW实现之间切换,请验证ROS 2守护进程未与先前的RMW实现一起运行,以避免节点和命令行工具(例如)之间出现任何问题。例如,如果您运行:ros2 node
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
和
ros2 node list
它将生成一个具有fast RTPS
实现的守护程序:
要想解决这个问题,结束守护进程,然后用正确的RMW实现启动工具
ros2 daemon stop
我也没MAC,看看就行
如果在OSX上运行RTI Connext
时收到类似以下的错误消息:
[D0062|ENABLE]DDS_DomainParticipantPresentation_reserve_participant_index_entryports:!enable reserve participant index
[D0062|ENABLE]DDS_DomainParticipant_reserve_participant_index_entryports:Unusable shared memory transport. For a more in- depth explanation of the possible problem and solution, please visit https://community.rti.com/kb/osx510.
此错误是由操作系统允许的共享内存段的数量或大小不足引起的。结果,DomainParticipant
无法分配足够的资源并无法计算出导致错误的参与者索引。
您可以临时或永久增加计算机的共享内存资源。
要临时增加设置,您可以以root用户身份运行以下命令:
/usr/sbin/sysctl -w kern.sysv.shmmax=419430400
/usr/sbin/sysctl -w kern.sysv.shmmin=1
/usr/sbin/sysctl -w kern.sysv.shmmni=128
/usr/sbin/sysctl -w kern.sysv.shmseg=1024
/usr/sbin/sysctl -w kern.sysv.shmall=262144
要永久增加设置,您将需要编辑或创建文件/etc/sysctl.conf
。创建或编辑此文件将需要root权限。添加到现有etc/sysctl.conf
文件中或/etc/sysctl.conf
使用以下几行创建:
kern.sysv.shmmax=419430400
kern.sysv.shmmin=1
kern.sysv.shmmni=128
kern.sysv.shmseg=1024
kern.sysv.shmall=262144
修改此文件后,您将需要重新引导计算机以使更改生效。
主要介绍了RMW的使用和排障操作