通信综述
概述
机器人是一个分布式系统——传感器、控制器、执行器、上位机之间需要可靠的数据交换。通信协议的选择直接影响系统的实时性、可靠性和扩展性。
通信层次模型
机器人通信可分为四个层次:
graph TB
subgraph 长距离通信
A1[4G/5G]
A2[LoRa]
A3[遥控器 2.4GHz]
end
subgraph 无线局域通信
B1[WiFi]
B2[BLE蓝牙]
B3[ESP-NOW]
end
subgraph 板间通信
C1[UART串口]
C2[CAN总线]
C3[EtherCAT]
C4[RS-485]
end
subgraph 板内通信
D1[SPI]
D2[I2C]
D3[GPIO/PWM]
end
A1 & A2 & A3 --> B1 & B2 & B3
B1 & B2 & B3 --> C1 & C2 & C3 & C4
C1 & C2 & C3 & C4 --> D1 & D2 & D3
style A1 fill:#f9f,stroke:#333
style B1 fill:#bbf,stroke:#333
style C2 fill:#bfb,stroke:#333
style D1 fill:#ffb,stroke:#333
各层典型协议
板内通信(Intra-board)
芯片与外设之间的短距离通信,通常在同一块PCB上。
| 协议 |
速率 |
线数 |
拓扑 |
典型外设 |
| SPI |
1-100 MHz |
4(+CS) |
主从 |
IMU、显示屏、Flash |
| I2C |
100k-3.4M |
2 |
多主多从 |
传感器、OLED、EEPROM |
| GPIO/PWM |
- |
1 |
点对点 |
LED、舵机、蜂鸣器 |
板间通信(Inter-board)
机器人不同模块/板子之间的通信。
| 协议 |
速率 |
距离 |
拓扑 |
典型应用 |
| UART |
115.2k-1M bps |
<15m |
点对点 |
MCU间、GPS、总线舵机 |
| RS-485 |
100k-10M bps |
<1200m |
多点 |
工业传感器、Dynamixel |
| CAN |
1M bps (CAN) / 8M (CAN FD) |
<40m@1M |
总线 |
电机网络、汽车 |
| EtherCAT |
100M bps |
100m/段 |
环形 |
工业机器人关节 |
| USB |
480M (2.0) / 5G (3.0) |
<5m |
星形 |
相机、激光雷达 |
无线局域通信(Wireless LAN)
| 协议 |
速率 |
距离 |
功耗 |
典型应用 |
| WiFi 2.4G |
72-150 Mbps |
~50m |
高 |
图像传输、ROS2通信 |
| WiFi 5G |
433-866 Mbps |
~30m |
高 |
高带宽传感器 |
| BLE 5.0 |
2 Mbps |
~100m |
极低 |
遥控、状态上报 |
| ESP-NOW |
1 Mbps |
~200m |
低 |
ESP32对等通信 |
长距离通信(Long Range)
| 协议 |
速率 |
距离 |
特点 |
| 4G LTE |
50-150 Mbps |
覆盖区 |
高带宽,需SIM卡 |
| 5G |
1-10 Gbps |
覆盖区 |
超低延迟 |
| LoRa |
0.3-50 kbps |
2-15 km |
极低功耗,小数据量 |
| 遥控器(2.4G) |
~100 kbps |
1-2 km |
实时控制,低延迟 |
带宽 vs 延迟 vs 可靠性
三角权衡
不同应用对通信的三个核心指标有不同侧重:
| 应用 |
带宽需求 |
延迟要求 |
可靠性要求 |
| 电机控制 |
低(几十字节) |
极高(<1ms) |
极高 |
| IMU数据 |
低-中 |
高(<5ms) |
高 |
| 激光雷达 |
高(MB级) |
中(<50ms) |
高 |
| 相机图像 |
极高(数十MB/s) |
中(<100ms) |
中 |
| 遥控命令 |
极低 |
高(<20ms) |
高 |
| 远程监控 |
中 |
低(<1s) |
中 |
| 地图数据 |
高 |
低 |
高 |
实时性分级
| 等级 |
延迟 |
抖动 |
协议 |
| 硬实时 |
<1ms |
<10μs |
EtherCAT, CAN |
| 软实时 |
<10ms |
<1ms |
CAN, RS-485, UART |
| 准实时 |
<100ms |
<10ms |
WiFi, USB |
| 非实时 |
>100ms |
不限 |
4G, LoRa, HTTP |
机器人通信架构示例
小型轮式机器人
遥控器(2.4G/BLE)
↓
主控(ESP32)
├── UART ──→ 激光雷达
├── I2C ───→ IMU + OLED
├── PWM ───→ 舵机 × 2
└── GPIO+PWM → 电机驱动板 → 电机+编码器
六轴机械臂
上位机(PC/ROS2)
│ EtherCAT / CAN
↓
控制器(嵌入式Linux)
├── CAN ──→ 关节1驱动器 ──→ BLDC + 编码器
├── CAN ──→ 关节2驱动器 ──→ BLDC + 编码器
├── CAN ──→ ... (关节3-6)
├── RS-485 → 末端执行器
└── Ethernet → 视觉系统
四足机器人
WiFi/4G ──→ 上位机(Jetson)
├── Ethernet ──→ 深度相机
├── USB ────────→ 激光雷达
├── SPI ────────→ IMU(高速)
└── CAN总线
├── 关节1(髋) CAN ID=0x01
├── 关节2(膝) CAN ID=0x02
├── 关节3(踝) CAN ID=0x03
└── ... (×4条腿 = 12个关节)
协议选择决策
graph TD
A[通信需求] --> B{同一块板上?}
B -->|是| C{速度要求?}
C -->|高 >1MHz| D[SPI]
C -->|低-中| E[I2C]
B -->|否| F{有线还是无线?}
F -->|有线| G{多少个节点?}
G -->|2个点对点| H[UART]
G -->|多个节点| I{实时性要求?}
I -->|硬实时| J[EtherCAT]
I -->|中等| K[CAN总线]
F -->|无线| L{距离?}
L -->|<100m| M{带宽需求?}
M -->|高| N[WiFi]
M -->|低| O[BLE/ESP-NOW]
L -->|>1km| P[4G/LoRa]
style D fill:#ffb,stroke:#333
style E fill:#ffb,stroke:#333
style H fill:#bfb,stroke:#333
style J fill:#f9f,stroke:#333
style K fill:#bfb,stroke:#333
style N fill:#bbf,stroke:#333
style O fill:#bbf,stroke:#333
style P fill:#fbb,stroke:#333
通信安全考虑
常见问题
| 问题 |
影响 |
对策 |
| 数据丢失 |
指令未执行 |
CRC校验、重传机制 |
| 延迟抖动 |
控制不稳定 |
实时协议、优先级 |
| 电磁干扰 |
数据错误 |
差分信号(CAN/RS-485)、屏蔽线 |
| 信号衰减 |
通信中断 |
适当传输距离、信号增强 |
| 地线环流 |
信号偏移 |
光耦隔离、差分传输 |
错误处理策略
- CRC校验:检测传输错误(CAN内置)
- 超时重传:丢包后自动重发
- 心跳机制:定期检测连接状态
- 看门狗:通信中断后自动进入安全状态
小结
- 机器人通信分为板内、板间、无线局域和长距离四个层次
- 每层有对应的最佳协议选择
- 电机控制需要硬实时(CAN/EtherCAT),传感器采集需要中等实时性
- 带宽、延迟、可靠性三者需要权衡
- 通信架构设计要与机器人整体架构匹配
- 抗干扰和错误处理是实际系统可靠运行的关键