报错信息:
[ERROR] [1710409122.654417300] [rcl]: Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_fastdds_cpp'), with error message 'failed to load shared library 'rmw_fastdds_cpp.dll' due to LoadLibrary error: 126, at C:\ci\ws\src\ros2\rcutils\src\shared_library.c:159, at C:\ci\ws\src\ros2\rmw_implementation\rmw_implementation\src\functions.cpp:67', exiting with 1., at C:\ci\ws\src\ros2\rcl\rcl\src\rcl\rmw_implementation_identifier_check.c:145
可能是由以下几个原因造成的:
-
rmw_fastdds_cpp没有正确安装:确保您已经正确安装了包含rmw_fastdds_cpp的ROS 2包。这通常涉及到从源代码构建ROS 2,并且确保启用了FastDDS的支持。
-
环境变量未设置:确保ROS 2相关的环境变量(如
RMW_IMPLEMENTATION
)已经正确设置,并且指向了rmw_fastdds_cpp。 -
路径问题:确保rmw_fastdds_cpp.dll文件的路径已经添加到了系统的PATH环境变量中,或者该文件位于系统能够搜索到的目录(如Windows的System32目录或当前工作目录)。
-
依赖的DLL缺失:rmw_fastdds_cpp.dll可能依赖于其他DLL文件,这些文件可能没有安装或配置正确。使用工具(如Dependency Walker)检查rmw_fastdds_cpp.dll的依赖,并确保所有依赖项都已满足。
如果环境变量设置为未安装支持的 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 实现的支持。
如果要在 RMW 实现之间切换,请验证 ROS 2 守护进程是否未与以前的 RMW 实现一起运行,以避免节点和命令行工具
首先在PowerShell层,输入:
$env:RMW_IMPLEMENTATION="rmw_connext_cpp"
ros2 run demo_nodes_cpp talker
ros2 node list
它将生成一个具有Fast RTPS 实现的守护进程:
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 0
即使您使用正确的 RMW 实现再次运行命令行工具,守护进程的 RMW 实现也不会更改,并且 ROS 2 命令行工具将失败
要解决此问题,只需停止守护进程:
ros2 daemon stop
并使用正确的 RMW 实现重新运行 ROS 2 命令行工具。
还有一点:
当你使用CMD时,用bat文件,
使用PowerShell时,用ps1文件。