MAVLink 开发人员指南

Slack

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

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

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

MAVLink工具链 通过读取XML类型的消息定义,可为该MAVLink系统,基于工具链所支持的任一编程语言生成相应的MAVLink库。 无人机、地面站和其他MAVLink系统使用生成的库进行通信。 这些库文件一般是遵循MIT许可的, 因此可以将其自由使用于任何闭源应用程序中, 而无需发布闭源应用程序的源代码。

基于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

MAVLink项目所包含的 mavgenmavgenerate 工具, 可为多种编程语言创建 mavlink 库。 The organisation also includes rust-mavlink for generating Rust MAVLink libraries. Additional generators are delivered by a number of other (independent) projects.

The MAVLink project has not validated and does not provide technical support for generators other than mavgen, mavgenerate, and rust-mavlink.

下表显示了可用的语言/生成器及其对MAVLink v1, MAVLink v2 Message signing 的支持。

语言生成器MAVLink v1MAVLink v2Signing备注
Cmavgen这是 MAVLink 项目参考实现。 可基于两个协议版本发布相应的生成库
C++11mavgen
Python (2.7+, 3.3+)mavgenPython bindings. Library also available on PyPi: pymavlink.
C#mavgen
Objective Cmavgen
Javamavgen
Javadronefleet/mavlinkIdiomatic是基于MAVLink的 java SDK/API。 其可为代码生成器提供分级插件。
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).
Swiftmavgen
Clojureclj-mavlinkClojure MAVLink Bindings.
GogomavlibGo library with support for MAVLink 1, 2 and signing, test suite, and documentation
Gogo-mavlink1Golang MAVLink v1
HaskellHaskMavlink
Rustrust-mavlinkRust MAVLink generated code. Has tests and docs.

预建的基于C语言的MAVLink库

基于C 语言的MAVLink源文件 (仅) 自动生成于最新版本消息 specifications/dialects ( mavlink 1 和 2均可):

使用C Libraries 解释了如何使用这些库。

支持

支持主题,包含有关mailing 列表、报告故障/问题和加入dev呼叫的信息。

参与贡献

贡献指南解释了贡献方式和你可提供帮助的主要领域。加入翻译组请联系微信:253331754。

许可证

定义消息的xml 文件和基于其生成的 C 语言版MAVLink(header-only 库),一般是遵循MIT许可的。 因此, 可以在任何闭源应用程序中 使用 MAVLink, 而无需发布闭源应用程序的源代码。 详情请参阅 COPYING 文件。

MAVLink 生成器工具链 遵循自由软件基金会 (lgplv3) 的" 较小通用许可证 "(第3版) 许可。

本文档遵循CC BY 4.0 (人类可读综述|LICENSE) 许可。

管理

MAVLink协议托管在 Dronecode 项目 下。

Dronecode LogoLinux Foundation Logo

 

results matching ""

    No results matching ""