使用多个ROS 2中间件实现 [待校准@6619]
目录
本页介绍默认RMW实现以及如何指定替代方案。 [待校准@6620]
指定RMW实现 [待校准@6622]
要使用多个RMW实现,您必须已安装ROS 2二进制文件以及特定RMW实现的任何其他依赖项,或者从工作区中具有多个RMW实现的源文件构建ROS 2 (如果满足RMW的编译时依赖关系,则默认情况下,RMW实现包含在构建中)。见 Install DDS implementations 。 [待校准@6623]
C nodes和Python节点都支持环境变量 RMW_IMPLEMENTATION
,允许用户选择运行ROS 2应用程序时使用的RMW实现。 [待校准@6624]
用户可以将此变量设置为特定的实现标识符,例如 rmw_cyclonedds_cpp
、 rmw_fastrtps_cpp
、 rmw_connextdds
或 rmw_gurumdds_cpp
。 [待校准@6625]
例如,要使用ctaltalker和Python侦听器以及Connext RMW实现来运行talker例程: [待校准@6626]
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_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
set RMW_IMPLEMENTATION=rmw_connext_cpp
ros2 run demo_nodes_cpp talker
REM run in another terminal
set RMW_IMPLEMENTATION=rmw_connext_cpp
ros2 run demo_nodes_py listener
将RMW实现添加到您的工作区 [待校准@6627]
假设您已经构建了ROS 2工作区,只安装了快速RTPS,因此只构建了快速RTPS RMW实现。上次构建工作区时,任何其他RMW实现包,例如 rmw_connext_cpp
,都可能找不到相关DDS实现的安装。如果随后安装其他DDS实现 (例如Connext),则需要重新触发对构建Connext RMW实现时发生的Connext安装的检查。您可以通过在下一个工作区构建中指定 --cmake-force-configure
标志来实现这一点,并且您应该看到RMW实现包随后为新安装的DDS实现构建。 [待校准@6628]
可能遇到问题 "rebuilding" 工作区额外RMW实现使用 --cmake-force-configure
选项生成抱怨默认RMW实施更换。要解决此问题,您可以使用 RMW_IMPLEMENTATION
CMake参数将默认实现设置为以前的实现,也可以删除投诉包的构建文件夹,然后继续使用 --start-with <package name>
进行构建。 [待校准@6629]
故障排除
确保特定RMW实施的使用 [待校准@6631]
如果 RMW_IMPLEMENTATION
环境变量设置为未安装支持的RMW实现,如果仅安装了一个实现,您将看到类似于以下内容的错误消息: [待校准@6632]
Expected RMW implementation identifier of 'rmw_connext_cpp' but instead found 'rmw_fastrtps_cpp', exiting with 102.
如果您支持安装多个RMW实现,并且请求使用未安装的实现,您将看到类似于以下内容: [待校准@6633]
Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_connext_cpp'), exiting with 1.
如果这发生,double检查ROS安装包括支持RMW执行指定在 RMW_IMPLEMENTATION
环境变量。 [待校准@6634]
如果要在RMW实现之间切换,请验证ROS 2守护进程未与先前的RMW实现一起运行,以避免节点和命令行工具 (如 ros2 node
) 之间出现任何问题。例如,如果您运行: [待校准@6635]
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
ros2 node list
它将生成具有快速RTPS实现的守护程序: [待校准@6637]
21318 22.0 0.6 535896 55044 pts/8 Sl 16:14 0:00 /usr/bin/python3 /opt/ros/foxy/bin/_ros2_daemon --rmw-implementation rmw_fastrtps_cpp --ros-domain-id 22
即使您使用正确的RMW实现再次运行命令行工具,守护程序的RMW实现也不会改变,ROS 2命令行工具也会失败。 [待校准@6638]
要解决此问题,只需停止守护进程: [待校准@6639]
ros2 daemon stop
并使用正确的RMW实现重新运行ROS 2命令行工具。 [待校准@6640]