双臂机器人通信链路解析
一、整体四层通信分层
- VR 眼镜(人机输入层)
- 上位机(PC / 工控机,ROS2 算法层)
- 机器人主控(嵌入式 Linux,UDP 桥接层)
- 机械臂关节驱动器(底层运动执行层)
二、分段通信协议、实现原理、对应代码逐一详解
1. VR 眼镜 ↔ 上位机(PC/ROS2)通信协议
使用协议:WiFi 无线 + UDP 套接字 / ROS2 DDS(两种主流方案)
- VR 端(Meta/Pico 等):Unity/Unreal 引擎,通过 WiFi UDP 实时发送手部追踪 IMU、关节姿态数据;
- 上位机接收后转为 ROS2 话题消息
RemoteMsgEnd,供运动插值节点使用。
实现流程
- VR 手柄 / 手部传感器采集 6DoF 位姿、手指关节角度;
- VR 引擎打包二进制 UDP 数据包,WiFi 广播到局域网上位机 IP;
- 上位机 UDP 服务接收 VR 原始追踪数据,做坐标转换、运动学映射;
- 转换为双臂 7 关节目标角度数组,发布 ROS2 话题
/remote_cmd(对应代码go.py); - 插值节点(
send_bezier_q_udp_1.py)读取话题,三次样条平滑,输出平滑关节指令。
对应代码支撑
go.py:ROS2 节点订阅 / 发布RemoteMsgEnd,做缓启动插值; send_bezier_q_udp_1.py:接收目标关节,平滑插值生成连续指令。
2. 上位机(ROS2 工控机) ↔ 机器人主控(嵌入式板)通信协议
两层协议嵌套(ROS2 DDS + 自定义 UDP 二进制协议)
上层:ROS2 DDS(进程内 / 跨机器进程通信)
- 协议:ROS2 DDS(Data Distribution Service),分布式实时中间件;
- 交互话题:
/remote_cmd:上位机下发期望关节指令remotemsgend/msg/RemoteMsgEnd;/driver_pvt:主控回传机器人实际关节状态driver_pvt/msg/DriverPVT;
- 作用:多算法节点解耦(插值、轨迹回放、VR 映射、状态可视化),支持时间戳、QoS 实时调度。
下层:自定义 UDP 二进制协议(跨设备以太网 / WiFi)
物理层:以太网 / WiFi;传输层:UDP;应用层:自定义带 CRC 二进制结构体
核心协议规范
- 数据包结构:
固定结构体载荷(无CRC) + CRC16-CCITT校验和(2字节)- 结构体格式
REMOTE_MSG_FMT_NO_CRC:小端序<,包含头标记 0xAA、模式、双臂 7 关节期望角度arm_q_exp_l/r、腰部 / 头部 / 夹爪、底盘控制、使能开关等全部控制字段; - CRC 校验:
binascii.crc_hqx(data,0xFFFF),防止 WiFi / 以太网传输丢包、错包;
- 结构体格式
- 通信端口:上位机 UDP 发送端口 3336,机器人主控监听 3334;
- 频率:50Hz/100Hz 固定周期发送,精确 sleep 控帧率,保障运动平滑;
转发实现代码:udp_remote_sender_new.py
- 订阅 ROS2 话题
/remote_cmd; - 将 ROS2 消息
RemoteMsgEnd逐字段打包为二进制 struct; - 计算 CRC16 追加包尾;
- UDP Socket 发送至机器人主控 IP;
反向回传代码:udp_bridge.py(机器人主控侧)
- 主控开启 UDP 线程,双向收发:
- 接收上位机 UDP 控制包,解析期望关节
q_exp; - 读取底层机械臂实际关节数据,打包 102float+int UDP 包回传上位机;
- 解析回传数据封装为 ROS2 消息
DriverPVT,发布/driver_pvt供上位机读取实际关节位置(go.py订阅用于缓启动)。
- 接收上位机 UDP 控制包,解析期望关节
上位机→主控完整数据流
VR 追踪 → ROS2 插值平滑节点 (send_bezier) → /remote_cmd话题 → udp_remote_sender_new.py UDP 打包(带 CRC) → WiFi / 以太网 → 机器人主控嵌入式板。
3. 机器人主控(嵌入式) ↔ 机械臂关节驱动器通信协议
底层工业实时总线:EtherCAT(主流)/ CAN FD/CANopen(备选)
源码侧佐证:udp_bridge.py内部存储全身关节实际q、期望q_exp、力矩tau,这些数据由 EtherCAT 总线从电机驱动器读取。
1)EtherCAT
- 类型:工业硬实时以太网总线,主从架构,主控为主站,每个关节伺服为从站;
- 周期:1ms~2ms,多轴同步误差 < 1us,满足双臂协同运动;
- 数据流向:
- 主控解析 UDP 收到的双臂 7 关节期望角度
arm_q_exp_l/r; - EtherCAT 主站下发各关节位置指令给伺服驱动器;
- 伺服闭环 PID 控制电机,编码器实时采集实际角度
q、速度qd、力矩tau; - 所有关节状态通过 EtherCAT 回传给主控,存入
robot_data; - 主控打包 UDP 回传给上位机,生成
/driver_pvt状态话题。
- 主控解析 UDP 收到的双臂 7 关节期望角度
2)CAN FD/CANopen
关节数量少、实时性要求低场景使用,总线传输位置、力矩反馈,带宽低于 EtherCAT,延迟更高。
底层闭环控制逻辑
主控只做运动指令转发,真正伺服闭环在关节驱动器内部;EtherCAT 保证双臂多关节同步,避免动作抖动,对应上层代码里的加速度限制、三次样条平滑就是为适配底层总线实时性设计。
三、代码功能分层封装
1. 轨迹生成 / 平滑层(上位机算法)
文件:send_bezier_q_udp_1.py 功能:三次样条 C2 连续插值、腕关节加速度限幅、一阶低通滤波、速度缩放;输出平滑连续关节角度,直接填充 UDP 控制字典。
2. ROS2 指令发布层(VR / 手动控制)
文件:go.py 功能:订阅机械臂实际状态/driver_pvt,带缓启动平滑插值,发布 ROS2 标准控制消息RemoteMsgEnd,解耦算法与底层 UDP 通信。
3. ROS2 转 UDP 桥接层(上位机→主控转发)
文件:udp_remote_sender_new.py 功能:ROS2 话题转自定义 CRC 校验 UDP 二进制包,统一协议封装,所有上位机控制逻辑共用一套 UDP 发送规则。
4. 机器人主控双向 UDP 桥(主控底层)
文件:udp_bridge.py 功能:双向通信:
- 下行:接收上位机 UDP 指令,解析期望关节;
- 上行:读取 EtherCAT 关节实际状态,打包 UDP 回传上位机,并封装为 ROS2 标准
DriverPVT状态话题。
5. 数据回放 / 分析工具(辅助调试)
export_driver_pvt_csv.py:读取 ROS2 录制 db3 数据库,导出关节 q/q_exp 轨迹 CSV;plot_q_vs_qexp.py:绘制期望关节 vs 实际关节曲线,调试跟踪误差;send_csv_q_full_mapping_udp.py:回放 CSV 轨迹,UDP 复现动作;chakandb3.py/test_db3.py:直接解析 ros2 bag 数据库原始二进制数据,离线调试。
四、全链路闭环完整数据流
- VR 采集:VR 眼镜手部追踪 IMU 输出双臂目标位姿 → WiFi UDP 发送上位机;
- 上位机 ROS2 处理
- VR 数据运动学逆解,算出双臂 7 关节目标角度;
go.py发布/remote_cmdROS2 话题;send_bezier_q_udp_1.py三次样条平滑、限加速度滤波;udp_remote_sender_new.py将 ROS2 消息打包带 CRC 自定义 UDP 二进制包;
- 网络传输:WiFi / 以太网 UDP 发送至机器人嵌入式主控;
- 机器人主控解析:
udp_bridge.pyUDP 线程解析期望关节q_exp; - 底层实时总线下发:EtherCAT 总线同步下发各关节位置指令;
- 伺服电机闭环执行:驱动器 PID 控制电机转动,编码器采集实际角度、力矩;
- 状态回传闭环:
- 关节真实状态通过 EtherCAT 回主控;
- 主控打包 UDP 包回传上位机;
- 上位机解析生成
/driver_pvt话题; - 插值节点读取实际关节,实现缓启动、误差补偿,形成完整闭环。
五、各通信协议优缺点总结
| 通信链路 | 协议 | 优势 | 劣势 |
|---|---|---|---|
| VR ↔ 上位机 | WiFi-UDP | 无线低延迟、轻量化、适配 VR 引擎 |
Wi4 Fi 易受干扰,无可靠重传 |
| 上位机内部节点 | ROS2 DDS | 模块化解耦、标准消息、时间戳、QoS | 进程间开销高于原生 UDP |
| 上位机 ↔ 机器人主控 | 以太网 / WiFi + 自定义 UDP (CRC) | 轻量、100Hz 高频、跨设备简单 | 需手动实现 CRC 校验、分包 |
| 主控 ↔ 机械臂关节 | EtherCAT | 微秒级同步、硬实时、多轴协同 | 需要专用硬件从站,成本高 |
| 主控 ↔ 机械臂关节 | CAN FD | 低成本、抗干扰、布线简单 | 周期最低 5ms,多轴同步差 |
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)