1. MAVLink 协议概述:无人机通信的“通用语言”
各位同学,欢迎来到《MAVLink 航点任务:从规划到执行》的第一章。
我是你们这门课的主讲。做了十几年无人机系统,从飞控固件到底层驱动,再到地面站软件,我几乎每天都在跟 MAVLink 打交道。说实话,这协议看着简单,但坑不少。今天咱们先把地基打牢。
1.1 什么是 MAVLink?
MAVLink,全称 Micro Air Vehicle Link。说白了,它就是无人机世界里的一种“通用语言”。
你想想看,一架无人机里有飞控、GPS、数传、摄像头、机械臂……这些部件来自不同厂家,怎么让它们互相听懂?
MAVLink 就是干这个的。它定义了一套标准的数据包格式。飞控说“我当前高度 50 米”,地面站能听懂;地面站说“飞到坐标 (30, 120)”,飞控也能执行。
它的核心特点就几个:
- 轻量级:数据包很小,适合带宽有限的数传链路
- 实时性:毫秒级心跳,适合控制闭环
- 可扩展:你可以自定义消息,不破坏原有结构
- 跨平台:PX4、ArduPilot、QGroundControl 都在用
核心概念:MAVLink 不是飞控固件,也不是地面站软件。它是一条“数据管道”,让无人机系统里的各个模块能顺畅对话。
1.2 发展历史:从实验室到行业标准
MAVLink 的故事,得从 2009 年说起。
那时候苏黎世联邦理工学院的 Lorenz Meier 在做硕士论文。他需要一种轻量协议,让微型飞行器跟地面站通信。当时没有现成方案,他就自己写了一个——这就是 MAVLink v1.0 的雏形。
我最早接触 MAVLink 是在 2013 年。那时候还在用 v1.0,协议栈很简陋,但已经能跑心跳、姿态和 GPS 数据了。说实话,当时觉得这东西挺“玩具”的。
后来 ArduPilot 和 PX4 项目都采用了 MAVLink。社区越来越大,v1.0 的局限性也暴露了:
- 消息 ID 只有 8 位,最多 256 种消息
- 没有安全机制,容易被干扰
- 不支持大 payload 的消息
2017 年,MAVLink v2.0 正式发布。这是一次大升级。
1.3 MAVLink v1.0 vs v2.0:到底差在哪?
很多新手问我:“老师,我该用 v1.0 还是 v2.0?”
我的建议是:新项目直接用 v2.0。除非你要兼容老设备。
咱们直接看对比表:
| 特性 | MAVLink v1.0 | MAVLink v2.0 |
|---|---|---|
| 消息 ID 范围 | 0 - 255(8 位) | 0 - 16777215(24 位) |
| payload 最大长度 | 255 字节 | 255 字节(可扩展) |
| 签名/安全 | 无 | 可选 SHA-256 签名 |
| 兼容性 | 只能解析 v1.0 | 向下兼容 v1.0 |
| 包格式 | 固定 8 字节头 | 可变长度头(含兼容标志) |
| 推荐场景 | 老旧设备、资源受限 MCU | 新项目、需要安全或大量自定义消息 |
这里有个关键点:v2.0 的包格式里有一个 incompat_flags 字段。如果这个字段非零,v1.0 的解析器会直接丢弃该包。所以混用时要小心。
避坑指南:我曾经在一个项目中,飞控刷了 v2.0 固件,但地面站用的旧版 MAVSDK 只支持 v1.0。结果心跳包能收到,但航点上传总是失败。查了两天才发现是协议版本不匹配。嗯,从那以后我每次对接都会先确认双方支持的 MAVLink 版本。
1.4 MAVLink 在无人机生态中的角色
MAVLink 不是孤立存在的。它连接了整个无人机生态链。
我画了一张图,帮你理解它的位置:
你看,MAVLink 处在中间层。它不关心上层业务逻辑,也不管底层硬件差异。它只负责一件事:可靠地传递结构化数据。
具体来说,它在生态里扮演这几个角色:
- 心跳维持:每秒 1 次的心跳包,告诉对方“我还活着”
- 遥测数据:姿态、位置、电池、速度……实时回传
- 任务指令:航点上传、起飞、降落、返航
- 参数读写:PID 调参、传感器校准
- 日志/调试:飞行日志、调试信息
个人经验:我习惯把 MAVLink 比作“USB 协议”。USB 定义了设备怎么枚举、怎么传输数据,但不管你是键盘还是摄像头。MAVLink 也一样——它定义了通信规则,但不管你是四旋翼还是固定翼。
1.5 为什么你要学 MAVLink?
如果你只是用成品无人机飞航点,确实不需要懂 MAVLink。但如果你想:
- 自己写地面站软件
- 开发机载计算机应用
- 定制飞控功能
- 做无人机集群
- 集成自定义传感器
那 MAVLink 就是绕不开的坎。
我记得 2016 年做集群项目时,需要让 5 架无人机同时执行航点任务。如果不懂 MAVLink 的包结构、序列号机制和超时重传逻辑,根本没法做。
这门课会带你从零开始,一步步掌握 MAVLink 航点任务的全流程。从协议原理到代码实现,从单机任务到集群协同。准备好了吗?
咱们开始吧。