1. 宇树Go2与ROS2无线通信的核心挑战
作为一款四足机器人开发平台,宇树Go2在ROS2环境下的无线通信和多机协同面临几个关键问题。首先是网络接口的物理限制——Go2 EDU版本默认只配备一个eth0网卡,这个网卡同时承担着与下位机通信(192.168.123.xx网段)和外部通信的双重职责。这种设计在实际部署时会引发严重的网络冲突。
关键发现:当多台Go2连接到同一192.168.123.xx网段时,DDS的自动发现机制会导致控制命令混乱。这是因为宇树未提供下位机的ROS_DOMAIN服务接口,无法通过常规的ROS_DOMAIN_ID隔离解决。
2. ROS2通信架构深度解析
2.1 DDS与RTPS的实质差异
DDS(数据分发服务)和RTPS(实时发布-订阅协议)常被混淆,但它们的定位截然不同:
| 维度 | DDS | RTPS |
|---|---|---|
| 抽象层级 | 高层通信模型 | 底层网络协议 |
| 核心功能 | 定义QoS、数据模型 | 处理数据序列化/传输 |
| 典型实现 | Fast DDS, Cyclone DDS | DDS协议的"有线"部分 |
2.2 ROS2的通信堆栈
ROS2的通信架构采用分层设计:
- 应用层:用户定义的节点和话题
- DDS层:处理参与者(Participant)、发布者/订阅者
- RTPS层:实现数据序列化和发现机制
- 传输层:UDP/TCP/共享内存(SHM)
特别需要注意的是,ROS2强制规定:
- 单个进程只能有一个ROS_DOMAIN_ID
- 每个节点对应唯一Participant
- 不同ROS_DOMAIN的进程无法直接通信
3. 多网卡场景下的实战解决方案
3.1 硬件准备与驱动安装
推荐使用USB无线网卡(如绿联AC1300)创建独立网络环境:
bash复制# 查看可用网卡
lsusb
# 安装驱动
