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 在无人机生态中的角色 MAVLink 协议 地面站 (GCS) 飞控 (FC) 机载计算机 外设/传感器 MAVLink 是无人机系统的“数据总线” 地面站、飞控、机载计算机、外设之间通过它交换数据

你看,MAVLink 处在中间层。它不关心上层业务逻辑,也不管底层硬件差异。它只负责一件事:可靠地传递结构化数据。

具体来说,它在生态里扮演这几个角色:

  • 心跳维持:每秒 1 次的心跳包,告诉对方“我还活着”
  • 遥测数据:姿态、位置、电池、速度……实时回传
  • 任务指令:航点上传、起飞、降落、返航
  • 参数读写:PID 调参、传感器校准
  • 日志/调试:飞行日志、调试信息

个人经验:我习惯把 MAVLink 比作“USB 协议”。USB 定义了设备怎么枚举、怎么传输数据,但不管你是键盘还是摄像头。MAVLink 也一样——它定义了通信规则,但不管你是四旋翼还是固定翼。

1.5 为什么你要学 MAVLink?

如果你只是用成品无人机飞航点,确实不需要懂 MAVLink。但如果你想:

  • 自己写地面站软件
  • 开发机载计算机应用
  • 定制飞控功能
  • 做无人机集群
  • 集成自定义传感器

那 MAVLink 就是绕不开的坎。

我记得 2016 年做集群项目时,需要让 5 架无人机同时执行航点任务。如果不懂 MAVLink 的包结构、序列号机制和超时重传逻辑,根本没法做。

这门课会带你从零开始,一步步掌握 MAVLink 航点任务的全流程。从协议原理到代码实现,从单机任务到集群协同。准备好了吗?

咱们开始吧。