ROS2 多机通讯出现服务不能用

DDS不匹配

保持DDS一致

切换 RMW 实现为 Cyclone DDS(备选方案,有时候更友好)​

如果你不想搞 XML 配置,或者 Fast DDS 一直表现不稳定,你可以试试换用 ​​Cyclone DDS​​,它在多网络环境下的兼容性有时更好,而且配置相对简单。

步骤:

  1. 1.​​安装 Cyclone DDS(如尚未安装)​​在 Ubuntu 上可以通过 apt 安装,或者从源码编译。如果你用的是官方 ROS 2 安装方式,可以添加 Cyclone DDS 支持。
  2. 2.​​设置使用 Cyclone DDS 作为 RMW 实现​

在运行节点前,设置环境变量:

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
  1. 1.​​(可选)配置 Cyclone DDS 使用特定网络​

Cyclone DDS 也有类似的配置文件机制,如果你发现它也选错了网络,可以创建一个 Cyclone DDS 的配置文件,比如 cyclonedds.xml,并通过环境变量指定:

export CYCLONEDDS_URI=file://$(pwd)/cyclonedds.xml

里面可以指定网络接口,例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CycloneDDS>
  <Domain>
    <General>
      <Interfaces>
        <NetworkInterface enable="true">192.168.1.100</NetworkInterface>
      </Interfaces>
    </General>
  </Domain>
</CycloneDDS>

这样 Cyclone DDS 也只会使用你指定的网络接口。

域ID不对

echo $ROS_DOMAIN_ID  ## 如果两台主机的的打印不一致,则需要配置为一样的
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容