1. ROS2多机通信概述
在机器人系统开发中,多机协同工作已成为常态。ROS2作为新一代机器人操作系统,其分布式架构天然支持多机通信,但实际部署时总会遇到各种"玄学"问题。上周调试一套由3台Jetson Xavier组成的多机系统时,就遭遇了节点时而能发现彼此时而离线的情况,最终排查发现是防火墙规则和多播地址配置冲突导致的。
ROS2 Humble Hawksbill作为长期支持版本,默认采用DDS作为底层通信中间件。与ROS1基于TCP/UDP的自定义协议不同,这种架构带来了更高的灵活性,同时也引入了更复杂的网络配置要求。多机通信的核心在于三要素:网络连通性、发现机制、消息序列化。任何一环出现问题,都会导致通信失败。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络基础配置要点
2.1 主机名与IP规划
建议为每台机器设置唯一主机名,避免使用默认的ubuntu或ros2pc这类通用名称。在Ubuntu 22.04上修改主机名:
bash复制sudo hostnamectl set-hostname robot1 # 分别设置robot1/robot2/robot3
在/etc/hosts文件中建立静态映射,例如:
code复制192.168.1.101 robot1
192.168.1.102 robot2
192.168.1.103 robot3
注意:避免使用.local域名,mDNS可能干扰DDS发现机制
2.2 防火墙配置
UFW防火墙默认会阻止DDS通信所需端口,需要放行以下端口范围:
bash复制sudo ufw allow 7400:7500/tcp # Discovery ports
sudo ufw allow 7400:7500/udp
sudo ufw allow 12000:13000/udp # User data ports
如果使用Fast DDS,还需额外开放:
bash复制sudo ufw allow 11811/tcp # Default discovery server port
2.3 多播路由检查
DDS默认使用多播进行节点发现,验证多播路由是否正常:
bash复制ping 239.255.0.1 # 默认的多播地址
如
