使用命令ros2 run 包名 节点; RMW中间件报错

本文介绍了在使用ROS2时遇到rmw_fastdds_cpp相关错误的原因,包括安装问题、环境变量设置、依赖关系等,并提供了诊断和修复步骤,如检查环境变量、确认RMW实现支持以及管理守护进程的RMW实现。

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

报错信息:

[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

可能是由以下几个原因造成的:

  1. rmw_fastdds_cpp没有正确安装:确保您已经正确安装了包含rmw_fastdds_cpp的ROS 2包。这通常涉及到从源代码构建ROS 2,并且确保启用了FastDDS的支持。

  2. 环境变量未设置:确保ROS 2相关的环境变量(如RMW_IMPLEMENTATION)已经正确设置,并且指向了rmw_fastdds_cpp。

  3. 路径问题:确保rmw_fastdds_cpp.dll文件的路径已经添加到了系统的PATH环境变量中,或者该文件位于系统能够搜索到的目录(如Windows的System32目录或当前工作目录)。

  4. 依赖的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文件。

### 配置和使用ROS2的`rmw_cyclonedds_cpp` #### 安装依赖 为了确保环境能够支持Cyclone DDS,在Ubuntu上需先更新并安装必要的依赖[^1]。 ```bash sudo apt update && sudo apt install -y \ build-essential \ cmake \ git \ python3-colcon-common-extensions \ python3-pip \ python3-setuptools \ wget ``` #### 创建工作空间并获取源码 创建一个新的ROS2工作区用于构建Cyclone DDS: ```bash mkdir -p ~/ros2_workspace/cyclonedds_ws/src cd ~/ros2_workspace/cyclonedds_ws/src git clone https://github.com/ros2/rmw_cyclonedds.git -b foxy git clone https://github.com/eclipse-cyclonedds/cyclonedds.git -b releases/0.10.x ``` 返回到根目录执行colcon命令来编译项目文件: ```bash cd .. colcon build --packages-select cyclonedds rmw_cyclonedds_cpp source install/setup.bash ``` #### 设置RMW_IMPLEMENTATION 为了让ROS2默认采用Cyclone DDS作为中间件,需要设置环境变量`RMW_IMPLEMENTATION=rmw_cyclonedds_cpp`[^2]: ```bash export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc ``` #### 测试通信功能 启动两个终端窗口分别运行发布者和订阅者的节点程序验证消息传递是否正常。假设已经安装了Foxtrot版本的基础软件,则可以直接调用预定义的例子来进行测试。 在第一个终端输入如下指令启动talker(发送端): ```bash ros2 run demo_nodes_cpp talker ``` 第二个终端里开启listener(接收端),观察是否有来自talker的数据流输出: ```bash ros2 run demo_nodes_cpp listener ``` 如果一切顺利的话,应该可以看到Listener接收到Talker发出的信息提示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值