Mavlink简介

共计 2594 个字符,预计需要花费 7 分钟才能阅读完成。

MAVLink是一种非常轻量级的消息协议,用于与无人机(以及机载无人机组件)进行通信。

MAVLink遵循现代混合发布-订阅和点对点设计模式:数据流作为主题发送/发布,而配置子协议(如任务协议参数协议)是点对点重新传输的。

消息在XML文件中定义。每个XML文件都定义了特定MAVLink系统支持的消息集,也称为“方言”。大多数地面控制站和自动驾驶仪实现的参考消息集在common.xml中定义(大多数方言都建立在这个定义之上)。

代码生成器从这些XML消息定义中为特定编程语言创建软件库,然后无人机、地面控制站和其他MAVLink系统可以使用这些库进行通信。生成的库通常是MIT许可的,因此可以在任何闭源应用程序中不受限制地使用,而无需发布闭源应用程序的源代码。

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

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生成器及其相关编程语言。

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库解释了如何使用这些库。

常见问题(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 并不对消息进行加密处理。

 

正文完
 0
评论(没有评论)