MAVLink 开发人员指南


MAVLink是一种非常轻量级的消息传输协议, 用于地面控制终端(地面站)与无人机之间 (以及机载无人机组件之间) 进行通信。

Mavlink 遵循现代混合发布-订阅和点对点设计模式: 数据流作为 topics 发送/发布的, 而配置子协议 (如 路径点协议 参数协议)是基于重传机制的点对点模式。

消息内容定义于与之关联的xml 文件中。 每个xml文件对应一个特定的MAVLink系统,并为该系统定义了专属的消息集(亦被称之为“语支dialect”)。 大部分 地面站和自动驾驶仪所采用的“通用消息集”定义于 common.xml中 (大多数“语支”均是基于“通用消息集“构建 的:即,大多数“语支”所对应的xml文件里,均包含了common.xml) 。

Code generators create software libraries for specific programming languages from these XML message definitions, which can then be used by drones, ground control stations, and other MAVLink systems to communicate. The generated libraries are typically MIT-licensed, and can therefore be used without limits in any closed-source application without publishing the source code of the closed-source application.

基于C封装的MAVLink库,是一个 header-only库, 其针对资源受限系统有限的ram 和闪存,进行了高度优化。 这种库,已经过现场验证, 并部署在许多产品中, 充当不同厂家组件之间的交互性接口。

MAVLink于2009年初由Lorenz Meier首次发布, 目前为止,已拥有数量可观的贡献者


  • 高效性。 MAVLink 1每个数据包只有8个字节的开销, 包括起始标志和数据包丢弃检测。 MAVLink 2只有14个字节的开销 (但它是一个更安全且可扩展的协议)。 因为MAVLink不需要任何额外的帧, 所以它非常适合通信带宽非常有限的应用程序。
  • 可靠性。 自2009年以来, MAVLink一直被用于多种载具、地面站 (和其他节点) 之间的通信,而这些通信信道中,不乏各种挑战性(如高延迟、噪声) 。 同时,Mavlink也具备检测数据包丢失、损坏和数据包身份验证的功能。
  • Many different programming languages can be used, running on numerous microcontrollers/operating systems (including ARM7, ATMega, dsPic, STM32 and Windows, Linux, MacOS, Android and iOS).
  • 单个网络上最多可容纳255个并行系统 (载具、地面站等)。
  • 支持offboard和 onboard通信 (例如,地面站和无人机之间的通信(offboard), 以及无人机自动驾驶仪与启用MAVLink的无人机摄像头之间的通信(onboard))。

Language/Generator List

The sections below lists MAVLink generators and their associated programming languages.

The MAVLink organisation provides (and supports) the mavgen, mavgenerate and rust-mavlink tools.

语言生成器MAVLink v1MAVLink 2Signing备注
Cmavgen这是 MAVLink 项目参考实现。 可基于两个协议版本发布相应的生成库
Python (2.7+, 3.3+)mavgenPython bindings. Library also available on PyPi: pymavlink.
Objective Cmavgen
JavamavgenDronefleet offers a more idiomatic generated library
JavaScript (Stable)mavgenOld mavgen JavaScript binding (has known bugs and no test suite).
JavaScript (NextGen)mavgenNew mavgen JavaScript library. Full test suite, resulting library produces binary compatible output compared to C bindings. Slightly incompatible with previous version, but not hard to migrate.
TypeScript/JavaScriptmavgenTypeScript classes which can be used with node-mavlink.
LuamavgenLua library. Does not support zero trimming of MAVLink 2 messages.
WLua (Wireshark Lua bindings)mavgenNAAllow MAVLink-aware packet inspection in Wireshark. Generated lua scripts should be copied to the Wireshark plugin directory (e.g. wireshark/plugins/mavlink.lua).
Rustrust-mavlinkRust MAVLink generated code. Has tests and docs.

External Generators/Languages

The following generators are delivered by independent projects (and supported by those projects).

LanguageGeneratorMAVLink v1MAVLink 2SigningNotes
CfastMavlinkHighly efficient C library with python code generators. Has docs, examples, test, support for routing and mavgen mimicry.
Clojureclj-mavlinkClojure MAVLink Bindings.
GogomavlibGo library with support for MAVLink 1, 2 and signing, test suite, and documentation
Gogo-mavlink1Golang MAVLink v1
Javadronefleet/mavlinkIdiomatic Java SDK/API for MAVLink. Provides a gradle plugin for the code generator.
TypeScript/JavaScript/npmnode-mavlinkTypeScript code generator for data classes with tools to receive and send messages. Getting started guide and inline JSDoc, along with some examples.
Kotlinmavlink-kotlinUses codegen instead of reflection for performance with Coroutines, RxJava2 and RxJava3 support. Provides a code generator Gradle plugin.


C MAVLink Source Files (only) are auto-generated for the latest versions of all message specifications/dialects (for both MAVLink 1 and 2):

Using C Libraries explains how to use these libraries.


The Support topic contains information about the mailing list, reporting bugs/issues, and joining the dev call.


The Contributing Guide explains the contribution model and the main areas where you can help.


The message definition XML files and the generated C-language version of MAVLink (a header-only library) are made available under the MIT-licence. MAVLink can therefore be used in any closed-source application without publishing the source code of the closed-source application. See the COPYING file for more information.

The MAVLink generator toolchain is licensed under the terms of the Lesser General Public License (version 3) of the Free Software Foundation (LGPLv3).

This documentation is licensed under CC BY 4.0 (Human readable overview | LICENSE).


The MAVLink protocol is hosted under the governance of the Dronecode Project.

Dronecode LogoLinux Foundation Logo


results matching ""

    No results matching ""