1. 无人机遥测系统概述
遥测,说白了就是「远距离测量」。无人机在天上飞,你得知道它飞多高、飞多快、电池还剩多少、GPS信号稳不稳。这些数据怎么从飞机传到地面?靠的就是遥测系统。
我刚开始接触无人机时,总觉得遥测就是个无线传输,没什么技术含量。直到有一次在山区做测试,飞机飞过山脊后信号中断了整整8秒——那8秒里我盯着黑屏的地面站,手心全是汗。从那以后,我对遥测链路的设计再也不敢马虎了。
1.1 遥测技术基础
遥测(Telemetry)由两部分组成:遥是远程,测是测量。核心流程就三步:
- 采集:传感器获取物理量(电压、角度、气压)
- 编码:模拟信号转数字,打包成帧
- 传输:通过无线链路发到地面站
你想想看,一架四旋翼每秒要上报几十个参数:姿态角、加速度、地速、剩余电量、GPS经纬度……这些数据如果一股脑全发,信道早就挤爆了。所以遥测系统必须做两件事——压缩和优先级排序。
核心指标:遥测系统的三个关键参数
- 刷新率:每秒更新次数,通常10Hz~100Hz
- 延迟:从采集到地面显示的时间,理想值<50ms
- 误码率:错误比特占比,一般要求<10⁻⁶
我个人习惯把遥测数据分成三类:
| 类别 | 典型参数 | 刷新率要求 | 重要性 |
|---|---|---|---|
| 飞行状态 | 俯仰角、横滚角、偏航角 | 50~100Hz | 极高 |
| 导航数据 | GPS坐标、高度、地速 | 10~20Hz | 高 |
| 系统健康 | 电池电压、温度、CPU负载 | 1~5Hz | 中 |
嗯,这里要注意:飞行状态数据一旦丢包,飞控可能直接炸机。所以这类数据通常用冗余传输——同一个姿态值在连续两帧里各发一次。
1.2 无人机遥测数据链路
遥测链路,就是飞机和地面站之间的「数据管道」。我习惯把它拆成三段来看:
- 上行链路:地面→飞机,传控制指令、航点更新
- 下行链路:飞机→地面,传遥测数据、视频流
- 心跳链路:双向,维持连接状态
实际项目中,下行链路的数据量通常是上行的10~20倍。为什么?因为飞机要上报几十个参数,而地面只需要发几个控制指令就够了。
避坑指南:我曾经在项目里遇到过上行链路和下行链路共用同一频率的情况。结果飞机在远距离时,地面站的发射功率压过了机载接收机的灵敏度,导致下行数据被「淹死」。后来我强制要求上下行使用不同频段,或者至少错开时隙。
常见的遥测链路方案有这几种:
| 方案 | 频段 | 典型距离 | 数据率 | 适用场景 |
|---|---|---|---|---|
| 2.4GHz WiFi | 2.4~2.4835GHz | 1~5km | 1~10Mbps | 消费级无人机 |
| 433MHz/915MHz | UHF频段 | 10~30km | 100~250kbps | 工业级远距离 |
| 4G/5G蜂窝 | 运营商频段 | 不限(有信号) | 1~50Mbps | 超视距作业 |
| 数图一体链路 | 2.4GHz/5.8GHz | 5~15km | 10~50Mbps | 专业测绘/巡检 |
我个人最常用的是433MHz+2.4GHz双链路方案。433MHz负责遥测,穿透性好、抗干扰强;2.4GHz负责图传,带宽大。两路数据在地面站里做时间戳对齐,效果很稳。
1.3 遥测数据帧结构
数据帧,就是遥测数据的「信封」。飞机把参数装进信封,地面站拆开信封取出数据。帧结构设计得好不好,直接决定了系统的可靠性和实时性。
标准的遥测帧通常包含这几个部分:
+----------------+----------------+------------------+------------------+----------------+
| 帧头 (2字节) | 帧序号 (1字节) | 时间戳 (4字节) | 数据负载 (N字节) | 校验和 (2字节) |
+----------------+----------------+------------------+------------------+----------------+
| 0xAA 0x55 | 0x00~0xFF | 系统运行毫秒数 | 遥测参数打包区 | CRC-16 |
+----------------+----------------+------------------+------------------+----------------+
我来拆开讲讲每个字段的作用:
- 帧头:固定值0xAA55,用于接收端同步。我见过有人用0xAAAA,结果数据里偶尔出现连续AA导致误同步。0xAA55这种交替模式能有效降低误判率。
- 帧序号:每发一帧加1,接收端靠它检测丢帧。如果序号跳了3以上,说明链路有严重丢包。
- 时间戳:飞机端的系统运行时间,单位毫秒。地面站用这个时间戳做数据对齐和回放。
- 数据负载:真正的遥测参数,按固定顺序排列。
- 校验和:CRC-16,检测传输错误。我曾经遇到过校验和只用了简单的异或和,结果连续两个比特翻转没检出来,地面站显示了一个完全错误的姿态角——还好飞手及时发现手动切了悬停。
重要提醒:数据负载的排列顺序必须严格固定。发送端和接收端要维护同一份「参数映射表」。我见过一个团队改了飞控固件后忘了更新地面站的解析表,结果高度显示成了电压值,差点导致炸机。
下面这张图展示了遥测数据从采集到显示的完整流程:
实际项目中,数据负载的排列方式有两种主流方案:
- 固定长度帧:每个参数占固定字节,解析简单,但灵活性差。我早期做Pixhawk二次开发时用的就是这种。
- TLV格式:Type-Length-Value,每个参数带类型和长度标识。灵活,但解析开销大。MAVLink协议就用了类似思路。
我的建议:如果参数数量固定且变化不频繁,用固定长度帧就够了。如果系统需要动态增删参数(比如挂载不同的传感器),TLV格式更合适。我最近一个项目里两种混用——核心参数用固定帧保证实时性,扩展参数用TLV保证灵活性。
最后提一句帧同步的事。接收端怎么知道一帧从哪里开始?靠帧头。但万一数据负载里也出现了0xAA55怎么办?嗯,这里有个小技巧:帧头后面紧跟一个帧长度字段,接收端先找到0xAA55,再读长度,然后按长度截取整帧。如果校验和不对,就丢弃并继续搜索下一个0xAA55。这叫「滑动窗口同步法」,简单可靠。
好了,遥测系统的基本概念就聊到这儿。记住三个核心:链路要稳、帧结构要严、解析要准。后面几章我们会深入每个环节的代码实现和调试技巧。