3. 遥测遥控信息流与协议体系
无人系统的遥测遥控链路,本质上是一条双向的信息通道:上行把地面操作员的意图变成飞行器能执行的指令,下行把飞行器的状态变成地面能判读的数据。要设计好这条链路,必须先看清信息在这条通道里"长什么样、怎么走、怎么保证不出错"。本节围绕上行遥控指令、下行遥测参数、帧结构、打包方式、校验机制与协议分层六个要点展开。
一、上行遥控指令:从操作意图到可执行报文
上行遥控指令按功能可分为三类:控制类(起飞、返航、航点切换、云台转动)、参数类(修改高度上限、PID 系数、失控保护动作)、管理类(心跳、链路握手、密钥更新)。一条指令报文通常包含:帧头、目标地址、指令标识(Command ID)、参数区、校验字段。
以航点切换指令为例,其参数区可能包含:航点序号(2 字节)、目标纬度(4 字节,单位 1e-7 度)、目标经度(4 字节)、目标高度(2 字节,单位 0.1 米)、期望速度(2 字节,单位 0.1 m/s)。地面站把操作员点击的航点转换为这组二进制字段,再封装成帧发送。飞行器收到后先校验,再解析参数,最后交给飞控执行。
二、下行遥测参数:状态的可观测化
下行遥测是把飞行器内部状态"翻译"成地面可读数据的过程。典型遥测参数包括:姿态(横滚、俯仰、偏航)、位置(经纬高)、速度(三轴)、电池电压与剩余电量、GPS 星数与定位精度、链路信号强度 RSSI、各传感器健康标志位。
遥测参数按更新率分为不同等级:姿态与速度属于高频参数,通常 10~50 Hz;位置与电池属于中频,1~5 Hz;健康标志位与配置信息属于低频,0.2~1 Hz。设计时按更新率分组打包,避免高频参数被低频参数拖累。
三、帧结构与打包方式
帧是链路上传输的最小完整单元。一个典型遥测帧结构如下:
| 字段 | 长度 | 说明 |
|---|---|---|
| 帧头 | 2 字节 | 固定同步字,如 0xEB 0x90 |
| 帧长度 | 1 字节 | 含帧头到校验的总字节数 |
| 序列号 | 1 字节 | 0~255 循环,用于丢帧检测 |
| 消息类型 | 1 字节 | 区分遥测、遥控、ACK、心跳 |
| 载荷 | N 字节 | 实际参数数据 |
| 校验 | 2 字节 | CRC-16 校验值 |
打包方式有两种常见策略:定长打包——每帧载荷长度固定,解析简单,适合参数集合稳定的场景;变长打包——按消息类型动态决定载荷长度,灵活但解析复杂。工程上常采用"定长帧头 + 变长载荷"的折中方案。
四、校验机制
链路中常见的校验方式有:奇偶校验(1 位,检错能力弱)、累加和校验(1 字节,实现简单)、CRC-16(2 字节,检错能力强,适合无线链路)、CRC-32(4 字节,用于高可靠性场景)。
CRC-16 的典型计算过程:对帧头到载荷的所有字节按多项式 0x1021 逐位异或移位,最终得到 16 位校验值。接收端用同样算法计算,与收到的校验字段比对,不一致则丢弃该帧并请求重传。
// CRC-16 计算示例(多项式 0x1021,初值 0xFFFF)
uint16_t crc16(uint8_t *data, uint16_t len) {
uint16_t crc = 0xFFFF;
for (uint16_t i = 0; i < len; i++) {
crc ^= (uint16_t)data[i] << 8;
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x8000) crc = (crc << 1) ^ 0x1021;
else crc <<= 1;
}
}
return crc;
}
五、协议分层
遥测遥控协议通常分为四层:物理层(射频调制、频段、功率)、链路层(帧同步、校验、重传、流控)、网络层(地址路由、多机寻址)、应用层(指令语义、参数编码、状态上报)。
以 MAVLink 为例:物理层是 433 MHz 或 2.4 GHz 射频;链路层负责帧封装与 CRC;网络层用系统 ID 和组件 ID 区分不同飞行器与模块;应用层定义 HEARTBEAT、COMMAND_LONG、GLOBAL_POSITION_INT 等消息。分层的好处是:更换射频模块不影响应用层消息定义,修改指令语义不影响底层校验逻辑。
六、典型协议与工程实践
工程中常用的遥测遥控协议包括:MAVLink(无人机领域事实标准,轻量、支持多机)、STANAG 4586(北约无人机互操作标准)、CCSDS(航天遥测遥控标准,分层严格)、自定义二进制协议(针对特定链路优化)。
选择协议时需权衡:链路带宽、实时性要求、设备兼容性、开发成本。对于小型多旋翼,MAVLink 已足够;对于长航时固定翼或卫星链路,CCSDS 的可靠性与标准化更有优势。
- 上行指令是否定义了 ACK 与重传策略?
- 下行遥测是否按更新率分组打包?
- 帧结构是否包含序列号用于丢帧检测?
- 校验方式是否与链路误码率匹配?
- 协议分层是否清晰,便于后续扩展?
理解信息流与协议体系,是后续进行链路预算、抗干扰设计和故障排查的基础。只有把"指令怎么发、数据怎么回、帧怎么组、错怎么查"这四件事想清楚,链路设计才不会停留在纸面。