3. 通信链路与协议:数传电台与图传原理,MAVLink协议基础,串口通信(UART)配置
地面站跟飞机之间怎么说话?说白了就靠两样东西:数传和图传。一个传数据,一个传画面。再加上底层的串口协议和上层的MAVLink协议,这一整套链路才算完整。
我刚开始接触无人机时,总觉得数传和图传差不多,都是天线对天线嘛。结果有一次在野外调试,图传画面清晰得很,数传却疯狂丢包——这才意识到,这两兄弟虽然住在一起,脾气可完全不一样。
3.1 数传电台与图传原理
3.4 数传电台:可靠才是第一位的
数传电台负责传输飞行数据——高度、速度、GPS坐标、电池电压、遥控信号强度等等。这些数据量不大,但绝对不能丢。你想想看,要是降落时高度数据丢了一帧,后果是什么?
数传电台通常工作在433MHz、915MHz或2.4GHz频段。频率越低,绕射能力越强,传输距离越远,但带宽也越小。我个人习惯在城区或山区用433MHz,开阔场地才上2.4GHz。
| 频段 | 特点 | 典型距离 | 适用场景 |
|---|---|---|---|
| 433MHz | 穿透强、距离远、带宽低 | 5-15km | 山区、城市、远距离飞行 |
| 915MHz | 平衡型、抗干扰好 | 3-10km | 郊区、农田、常规作业 |
| 2.4GHz | 带宽高、距离短、易受WiFi干扰 | 1-5km | 近距离、高数据量、竞速飞行 |
3.2 图传:画面流畅才是王道
图传传输的是摄像头采集的视频流。数据量巨大,但允许偶尔丢帧——你看到的画面卡了一下,总比飞机失联好。
图传主流方案有两种:模拟图传和数字图传。
- 模拟图传:延迟低(<50ms)、价格便宜、穿透力强。但画质差,有雪花点。我早期做FPV穿越机时一直用模拟图传,那种实时感是数字图传给不了的。
- 数字图传:画质高清、抗干扰强、支持双向通信。但延迟稍高(100-200ms),价格贵。大疆的Lightbridge和OcuSync就是典型代表。
这里有个坑——数传和图传的频段不能冲突。我曾经遇到过数传用2.4GHz,图传也用2.4GHz,结果两者互相干扰,飞机飞出去200米就失控了。后来我把数传改到433MHz,问题立刻解决。
3.3 MAVLink协议基础
数传电台传的是数据,但数据怎么组织?怎么保证地面站和飞控能互相理解?这就轮到MAVLink协议上场了。
MAVLink是无人机领域最常用的通信协议。说白了,它定义了一套标准的数据格式——飞控发什么消息、地面站回什么指令,都按这个规矩来。
3.3.1 MAVLink的消息结构
每条MAVLink消息都是一个数据包。我拆开给你看:
起始标识(0xFE) | 负载长度 | 序列号 | 系统ID | 组件ID | 消息ID | 负载数据 | 校验和
- 起始标识:固定为0xFE,告诉接收端“一条新消息来了”。
- 负载长度:后面跟着多少字节的有效数据。
- 序列号:用来检测丢包。如果序列号跳了,说明中间有消息丢了。
- 系统ID和组件ID:区分不同的无人机和不同的设备(飞控、GPS、云台等)。
- 消息ID:这条消息是什么类型——是心跳包、姿态数据、还是遥控指令?
- 负载数据:真正的数据内容。
- 校验和:保证数据在传输过程中没被篡改。
我调试时最常用的消息是HEARTBEAT(心跳包)。飞控每秒发一次,地面站收到就知道链路还活着。如果连续3秒没收到心跳包,地面站就该报警了。
3.3.2 常用MAVLink消息
| 消息ID | 名称 | 内容 | 频率 |
|---|---|---|---|
| 0 | HEARTBEAT | 系统状态、飞行模式、是否已解锁 | 1Hz |
| 24 | GPS_RAW_INT | 经纬度、海拔、地面速度、卫星数 | 5Hz |
| 30 | ATTITUDE | 横滚角、俯仰角、偏航角、角速度 | 10Hz |
| 65 | RC_CHANNELS | 遥控器各通道值 | 10Hz |
| 74 | VFR_HUD | 空速、地速、高度、爬升率 | 5Hz |
3.4 串口通信(UART)配置
数传电台和飞控之间怎么连?图传模块和地面站之间怎么通?答案就是串口(UART)。
UART是无人机系统里最底层的通信接口。飞控、GPS、数传、甚至一些传感器,都通过UART连接。它只有两根数据线——TX(发送)和RX(接收),外加一根地线。
3.4.1 串口参数配置
串口通信需要两边约定好参数,否则就是鸡同鸭讲。主要参数有四个:
- 波特率:每秒传输多少位。常见值:57600、115200、921600。数传一般用57600或115200,图传数据量大,可能用到921600。
- 数据位:通常是8位。
- 停止位:通常是1位。
- 校验位:无校验(N)、奇校验(O)、偶校验(E)。无人机系统一般用无校验。
我遇到过最头疼的问题就是波特率不匹配。飞控设了115200,数传模块默认却是57600。地面站那边死活收不到数据,折腾了半天才发现是波特率没对上。
3.4.2 典型接线方式
飞控和数传模块的连接,记住一个原则:TX接RX,RX接TX。别接反了,接反了数据就飞不出去。
飞控(UART) 数传模块
TX ——————————> RX
RX <—————————— TX
GND —————————— GND
VCC —————————— VCC (5V或3.3V,看模块规格)
3.4.3 地面站串口配置示例(QGroundControl)
以QGroundControl为例,配置串口连接数传模块的步骤:
- 打开QGC,进入设置 → 通信连接。
- 点击添加,选择串口。
- 选择正确的串口号(Windows下是COM口,Linux下是/dev/ttyUSB0或/dev/ttyACM0)。
- 设置波特率(与数传模块和飞控一致)。
- 点击连接。
如果连接成功,QGC的状态栏会显示已连接,并且开始收到心跳包。如果一直显示正在连接,八成是波特率不对或者TX/RX接反了。
3.5 通信链路整体架构
把上面这些串起来,就是一条完整的通信链路。我画了一张图,帮你理清关系:
从这张图可以看得很清楚:飞控通过UART连接数传模块和图传模块,数传模块把MAVLink数据包通过无线链路发给地面站数传接收端,再通过UART或USB传给地面站软件。图传模块则把视频流通过另一条无线链路发给地面站图传接收端,再通过HDMI或USB传给地面站软件。
两条链路互不干扰,各司其职。但一旦其中一条出问题,地面站就会丢失对应的数据——要么看不到画面,要么收不到飞行数据。
3.6 本章小结
通信链路是地面站和无人机之间的生命线。数传负责可靠的数据传输,图传负责流畅的视频传输,MAVLink协议让数据有了统一的语言,UART则是这一切的物理基础。
你只要记住三点:频段别冲突、波特率要一致、TX接RX别接反。做到这三点,通信链路基本就稳了。