共计 2594 个字符,预计需要花费 7 分钟才能阅读完成。
MAVLink是一种非常轻量级的消息协议,用于与无人机(以及机载无人机组件)进行通信。
MAVLink遵循现代混合发布-订阅和点对点设计模式:数据流作为主题发送/发布,而配置子协议(如任务协议或参数协议)是点对点重新传输的。
消息在XML文件中定义。每个XML文件都定义了特定MAVLink系统支持的消息集,也称为“方言”。大多数地面控制站和自动驾驶仪实现的参考消息集在common.xml中定义(大多数方言都建立在这个定义之上)。
代码生成器从这些XML消息定义中为特定编程语言创建软件库,然后无人机、地面控制站和其他MAVLink系统可以使用这些库进行通信。生成的库通常是MIT许可的,因此可以在任何闭源应用程序中不受限制地使用,而无需发布闭源应用程序的源代码。
MAVLink由Lorenz Meier于2009年初首次发布,现在有大量贡献者。
主要特点
- 非常高效。MAVLink 1每个数据包只有8字节的开销,包括开始符号和数据包掉落检测。MAVLink 2只有14字节的开销(但是一个更安全、更可扩展的协议)。由于MAVLink不需要任何额外的框架,因此非常适合通信带宽非常有限的应用程序。
- 非常可靠。自2009年以来,MAVLink一直用于在许多不同的车辆、地面站(和其他节点)之间通过不同且具有挑战性的通信渠道(高延迟/噪音)进行通信。它提供了检测数据包丢失、损坏和数据包身份验证的方法。
- 可以使用许多不同的编程语言,在许多微控制器/操作系统(包括ARM7、ATMega、dsPic、STM32和Windows、Linux、MacOS、Android和iOS)上运行。
- 允许网络上多达255个并发系统(车辆、地面站等)
- 启用机外和机上通信(例如,在GCS和无人机之间,以及在无人机自动驾驶仪和启用MAVLink的无人机摄像头之间)。
语言/发电机列表
以下部分列出了MAVLink生成器及其相关编程语言。
MAVLink项目生成器/语言
Language | Generator | MAVLink v1 | MAVLink 2 | Signing | Notes |
---|---|---|---|---|---|
C | mavgen | ✓ | ✓ | ✓ | MAVLink project reference implementation. Generated libraries are also published for both protocol versions. |
C++11 | mavgen | ✓ | ✓ | ✓ | |
Python (2.7+, 3.3+) | mavgen | ✓ | ✓ | ✓ | Python bindings. Library also available on PyPi: pymavlink. |
C# | mavgen | ✓ | ✓ | ||
Objective C | mavgen | ✓ | |||
Java | mavgen | ✓ | ✓ | Dronefleet offers a more idiomatic generated library | |
JavaScript (Stable) | mavgen | ✓ | ✓ | ✗ | Old mavgen JavaScript binding (has known bugs and no test suite). |
JavaScript (NextGen) | mavgen | ✓ | ✓ | ✓ | New 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/JavaScript | mavgen | ✓ | ✓ | ✗ | TypeScript classes which can be used with node-mavlink. |
Lua | mavgen | ✓ | ✓ | ✗ | Lua library. Does not support zero trimming of MAVLink 2 messages. |
WLua (Wireshark Lua bindings) | mavgen | ✓ | ✓ | NA | Allow MAVLink-aware packet inspection in Wireshark. Generated lua scripts should be copied to the Wireshark plugin directory (e.g. wireshark/plugins/mavlink.lua). |
Swift | mavgen | ✓ | |||
Rust | rust-mavlink | ✓ | ✓ | Rust MAVLink generated code. Has tests and docs. | |
Ada | mavgen | ✓ |
预建的MAVLink C库
C MAVLink源文件(仅限)为所有消息规范/方言的最新版本自动生成(适用于MAVLink 1和2):
- c_library_v2(MAVLink 2)
- c_library_v1(MAVLink 1)
使用C库解释了如何使用这些库。
常见问题(FAQ)
MAVLink 的传输效率如何?
MAVLink 是一种高效率的传输协议。 包含起始签名字节和丢包检测在内,MAVLink 1 版本的每个数据包中只有8个字节的额外开销。 MAVLink 2 版本只有14个字节的额外开销(如果使用签名字节的话为27个),但是现已成为可扩展的协议。
MAVLink 可同时支持多少个运载器?
255个运动载体,其 ID 号从1到255(0号 ID 为无效 ID)。
Note: 严格说来,MAVLink 可同时支持 255 个系统, 它们中可以是运动载体,GCS ,天线云台和其它硬件。MAVLink 可用于哪些软硬件上?它可用于多个微控制器和操作系统上, 包括 arm7、atmega、dspic、stm32 等微控制器和 windows、linux、macos、android 和 ios 等操作系统。
MAVLink 的可靠性如何?
很可靠。 自 2009 年以来,MAVLink 已用于多种运载器与地面站(或其它节点)之间使用恶劣的通信信道(大延迟、大噪声)进行通信。 它具有丢包检测功能,并使用完善的 ITU X.25 算法进行坏包检测。MAVLink 的安全性如何?MAVLink 提供了 消息签名,系统可用其来验证是否来源于可信的消息源。 MAVLink 并不对消息进行加密处理。