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

WSL与树莓派间ROS2网络通信故障排查求助

解决WSL1与树莓派的ROS2跨设备通信问题

问题根源

你遇到的OSError: [Errno 92] Protocol not available报错,本质是WSL1对IPv6多播的支持存在缺陷——ROS2默认优先用IPv6做节点发现和通信,导致WSL端无法解析树莓派发来的IPv6多播包。再加上WSL1本身基于主机共享的网络栈,多播路由配置可能不全,进一步加剧了通信障碍。

解决步骤

  • 强制ROS2使用IPv4通信
    在WSL1和树莓派的终端里,先临时设置环境变量:

    export ROS_DISABLE_IPV6=1
    export ROS_LOCALHOST_ONLY=0
    

    要让配置永久生效,把这两行追加到各自的~/.bashrc文件末尾,执行source ~/.bashrc使改动立刻生效。

  • 修复WSL1的多播路由
    WSL1默认可能未配置多播路由,先执行以下命令检查:

    ip route show table local | grep multicast
    

    如果没有输出,手动添加多播路由(将eth0替换为WSL1的实际网卡名,可通过ip addr命令查看):

    sudo ip route add 224.0.0.0/4 dev eth0 table local
    
  • 验证多播链路连通性
    先在WSL1端启动IPv4多播接收:

    ros2 multicast receive --ipv4
    

    再在树莓派端发送IPv4多播:

    ros2 multicast send --ipv4
    

    若WSL1能收到Received from [树莓派IP] 'Hello World!',说明多播通路已正常。

  • 测试ROS2节点通信
    在树莓派上启动talker节点:

    ros2 run demo_nodes_cpp talker
    

    在WSL1上启动listener节点:

    ros2 run demo_nodes_cpp listener
    

    正常情况下,listener会实时接收并打印talker发送的Hello World!消息。

额外排查点

  • 确认两台设备的ROS_DOMAIN_ID完全一致,比如统一设为10,避免与同网络内其他ROS2设备的通信冲突
  • 关闭WSL1自身的iptables限制(即使主机防火墙已关闭,WSL可能仍有独立规则):
    sudo iptables -F
    sudo iptables -P INPUT ACCEPT
    sudo iptables -P OUTPUT ACCEPT
    sudo iptables -P FORWARD ACCEPT
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:54:54