1. 无人机遥测系统概述

遥测,说白了就是「远距离测量」。无人机在天上飞,你得知道它飞多高、飞多快、电池还剩多少、GPS信号稳不稳。这些数据怎么从飞机传到地面?靠的就是遥测系统。

我刚开始接触无人机时,总觉得遥测就是个无线传输,没什么技术含量。直到有一次在山区做测试,飞机飞过山脊后信号中断了整整8秒——那8秒里我盯着黑屏的地面站,手心全是汗。从那以后,我对遥测链路的设计再也不敢马虎了。

1.1 遥测技术基础

遥测(Telemetry)由两部分组成:遥是远程,测是测量。核心流程就三步:

  1. 采集:传感器获取物理量(电压、角度、气压)
  2. 编码:模拟信号转数字,打包成帧
  3. 传输:通过无线链路发到地面站

你想想看,一架四旋翼每秒要上报几十个参数:姿态角、加速度、地速、剩余电量、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,检测传输错误。我曾经遇到过校验和只用了简单的异或和,结果连续两个比特翻转没检出来,地面站显示了一个完全错误的姿态角——还好飞手及时发现手动切了悬停。

重要提醒:数据负载的排列顺序必须严格固定。发送端和接收端要维护同一份「参数映射表」。我见过一个团队改了飞控固件后忘了更新地面站的解析表,结果高度显示成了电压值,差点导致炸机。

下面这张图展示了遥测数据从采集到显示的完整流程:

无人机遥测数据流框架图 传感器采集 飞控打包 帧编码+CRC 无线发射 无线链路 地面接收 帧解析+校验 参数解码 显示/存储 说明: 左侧为机载端,右侧为地面端。 数据从传感器采集到地面显示, 典型延迟应控制在50ms以内。 关键点: 帧结构必须包含帧头、序号、 时间戳、负载和CRC校验。

实际项目中,数据负载的排列方式有两种主流方案:

  • 固定长度帧:每个参数占固定字节,解析简单,但灵活性差。我早期做Pixhawk二次开发时用的就是这种。
  • TLV格式:Type-Length-Value,每个参数带类型和长度标识。灵活,但解析开销大。MAVLink协议就用了类似思路。

我的建议:如果参数数量固定且变化不频繁,用固定长度帧就够了。如果系统需要动态增删参数(比如挂载不同的传感器),TLV格式更合适。我最近一个项目里两种混用——核心参数用固定帧保证实时性,扩展参数用TLV保证灵活性。

最后提一句帧同步的事。接收端怎么知道一帧从哪里开始?靠帧头。但万一数据负载里也出现了0xAA55怎么办?嗯,这里有个小技巧:帧头后面紧跟一个帧长度字段,接收端先找到0xAA55,再读长度,然后按长度截取整帧。如果校验和不对,就丢弃并继续搜索下一个0xAA55。这叫「滑动窗口同步法」,简单可靠。

好了,遥测系统的基本概念就聊到这儿。记住三个核心:链路要稳、帧结构要严、解析要准。后面几章我们会深入每个环节的代码实现和调试技巧。