You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2 Foxy环境下树莓派与PC跨设备节点通信故障求助

ROS2 Foxy跨设备(PC/树莓派)通信故障排查方案

1. 先确认基础网络连通性

  • 双向ping测试:PC ping树莓派IP,树莓派ping PC IP,确保网络无丢包、能正常连通
  • 临时关闭防火墙测试:Ubuntu默认启用ufw,两边都执行以下命令关闭,排除防火墙拦截:
    sudo ufw disable
    
    若关闭后通信正常,再后续配置ROS2相关UDP端口的放行规则

2. 修正ROS2环境变量配置

除了Domain ID,必须确保以下两个变量两边完全一致:

  • 临时生效(当前终端):
    export ROS_DOMAIN_ID=10  # 选0-232之间任意数值,两边保持相同即可
    export ROS_LOCALHOST_ONLY=0  # 关键!设为0允许跨设备通信,1仅限本地
    
  • 永久生效(写入bashrc):
    echo "export ROS_DOMAIN_ID=10" >> ~/.bashrc
    echo "export ROS_LOCALHOST_ONLY=0" >> ~/.bashrc
    source ~/.bashrc
    
    注意:修改bashrc后必须重新打开终端或执行source ~/.bashrc生效

3. 配置Cyclone DDS网络接口(Foxy默认DDS)

ROS2依赖DDS通信,默认Cyclone DDS可能自动选了错误的网络接口:

  • 先查看两边的网卡名称:ip addr,比如树莓派可能是eth0(有线)或wlan0(无线),PC对应自己的网卡名
  • 创建Cyclone DDS配置文件~/.cyclonedds_config.xml,替换成你的网卡名:
    <?xml version="1.0" encoding="UTF-8" ?>
    <CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
      <Domain Id="any">
        <General>
          <NetworkInterfaceAddress>eth0</NetworkInterfaceAddress>
        </General>
      </Domain>
    </CycloneDDS>
    
  • 加载配置文件:
    export CYCLONEDDS_URI=file://$HOME/.cyclonedds_config.xml
    
    同样可以写入bashrc实现永久生效

4. 验证节点发现状态

  • 树莓派启动talker节点:
    ros2 run demo_nodes_cpp talker
    
  • PC上执行节点列表命令,检查是否能发现talker:
    ros2 node list
    
    如果能看到/talker,说明节点发现正常,再测试listener;如果看不到,回到前面步骤逐一排查

5. 同步设备时间

ROS2对时间同步要求较高,两边时间差过大可能导致通信失败:

  • 两边都安装chrony同步时间:
    sudo apt install chrony
    sudo systemctl enable --now chronyd
    
  • 验证时间状态:timedatectl status,确保两边时间误差在1秒以内

内容的提问来源于stack exchange,提问作者hoonle135

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:15:06