关于 mavlink 协议(Ver1.0),略谈几句

时间:2024-03-24 19:50:27

关于 mavlink 协议(Ver1.0),略谈几句

mavlink目前已经更新到2.0版本,但由于我对2.0没有深入研究,故以下阐述均基于1.0展开。(mavlink协议官网:https://mavlink.io/en/

 

关于 mavlink 协议(Ver1.0),略谈几句
mavlink1.0 数据帧(message)基本结构

 

mavlink 是我目前见过最好,最适用于中小型无人系统的通讯协议。这是建立在前些年接触过一些北航、西工大无人机通讯协议设计,后来又研究了下APM(就是mavlink)、PPZ的协议基础之上得出的结论。mavlink的优秀体现在以下方面:

1、协议功能极其强大。从下行遥测到上行控制、遥控。从单纯数值类数据到握手确认类数据到流数据类全覆盖。已有数据帧(Message)设计基本覆盖了研发过程全领域,从调试到正常使用阶段可能用到的数据mavlink基本均已预置。

2、协议可扩展性强,扩展灵活方便。mavlink1.0协议中,原生数据帧(Message)只占了协议内容的一部分,留有大量空白Message供用户自定义扩展使用。用户可完全自定义Message的名称、field名称、类型,长度等特性。实际上,现有Pixhawk协议就是在mavlink基础上加入了一部分自有Message形成的。更为难能可贵的是,mavlink为用户提供了简便但却功能强大的自定义message生成工具mavgenerate。用户通过简单编辑xml属性配置文件即可生成mavlink体系下所有必须的代码文件,从功能实现到功能测试。

关于 mavlink 协议(Ver1.0),略谈几句
自定义 mavlink1.0 message

 

3、协议设计可靠。mavlink数据校验采用CRC校验,相比之下,很多无人系统仅仅采用了简单的奇偶校验。另外,mavlink对于重要的上行控制message,如航点上传或参数上传,均设计了可靠的确认回报机制,为实施可靠的上行控制提供了强有力的保证。

4、代码文档简洁高效。mavlink代码实现堪称教科书级别,跨平台移植非常简单,在AVR 单片机、Stm32单片机、windows平台间,代码移植所需修改的代码可能就是1、20行这个量级。另外,mavlink文档极其简洁且高效。代码之外的文档只需要有message定义说明(https://mavlink.io/en/messages/common.html,现在是2.0了,内容之多看上去有点吓人,不过不要紧的 :)),航点(way point)及参数传输状态机即可。除此之外,看代码内部的注释以及demo(testsuite.h)足矣!

 

关于 mavlink 协议(Ver1.0),略谈几句
航点、参数传输状态机

 

衷心的向mavlink的开发者致敬!!!
 

个人以为mavlink1.0的不足有以下两点:
1、代码学习有一定难度,学习曲线比较陡峭。但只要坚持攀爬,上去了就是一马平川。
2、缺乏上行数据的签名与验证机制,存在被劫持伪造的可能(2.0已实现数据签名机制)。