来源:blog.csdn.net/super_mice/article/details/44836585

之前看了mavlink协议,网上关于mavlink的资料不多。本文大概总结了下对mavlink协议的理解。以下如不说明都是说mavlink v1.0版本。

首先附上mavlink的各个消息的简介https://pixhawk.ethz.ch/mavlink/(这里的内容很多,建议大概了解mavlink后再去浏览),

mavlink协议介绍http://qgroundcontrol.org/mavlink/start

之后会在我的资源里上传一份为初学者准备的mavlink资料(转载)已经上传至笔者资源,免费下载。mavlink 纯小白教程(英文)它用通俗的说法帮助新人理解什么是mavlink,mavlink能干嘛等等。资料只有第一部分,第二部分笔者没有找到(可能是原作者没继续第二部分吧)。

先简单介绍下mavlink协议。Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的 Lorenz Meier 于2009年发布,并遵循LGPL开源协议。Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议,主要应用在微型飞行器(micro aerial vehicle)的通讯上。Mavlink是为小型飞行器和地面站(或者其他飞行器)通讯时常常用到的那些数据制定一种发送和接收的规则并加入了校验 (checksum)功能。

【1】下面开始说介绍mavlink所发送的数据结构。Mavlink传输时的基本单位是消息帧

如图所示,每个消息帧都是上述的结构,除了灰色外,其他的格子都代表了一个字节的数据。
红色的是起始标志位(stx),在v1.0版本中以“FE”作为起始标志。这个标志位在mavlink消息帧接收端进行消息解码时有用处。

第二个格子代表的是灰色部分(payload,称作有效载荷,要用的数据在有效载荷里面)的字节长度(len),范围从0到255之间。在mavlink消息帧接收端可以用它和实际收到的有效载荷的长度比较,以验证有效载荷的长度是否正确。

第三个格子代表的是本次消息帧的序号(seq),每次发完一个消息,这个字节的内容会加1,加到255后会从0重新开始。这个序号用于mavlink消息帧接收端计算消息丢失比例用的,相当于是信号强度。

第四个格子代表了发送本条消息帧的设备的系统编号(sys),使用PIXHAWK刷PX4固件时默认的系统编号为1,用于mavlink消息帧接收端识别是哪个设备发来的消息。

第五个格子代表了发送本条消息帧的设备的单元编号(comp),使用PIXHAWK刷PX4固件时默认的单元编号为50,用于mavlink消息帧接收端识别是设备的哪个单元发来的消息(暂时没什么用) 。

第六个格子代表了有效载荷中消息包的编号(msg),注意它和序号是不同的,这个字节很重要,mavlink消息帧接收端要根据这个编号来确定有效载荷里到底放了什么消息包并根据编号选择对应的方式来处理有效载荷里的信息包。

 最后两)/8];
  • }
  • 其中的magic是一帧的起始标志(FE=254),就是mavlink_stx的值。

    其余的mavlink消息也是类似 的,旧的mavlink代码中有些类型的消息类型可能会找不到,使用时要注意接受和发送方使用的mavlink版本是否兼容。common文件夹中的 common.h里面包含了要用到的数据类型和所有消息的头文件,使用时直接包含进来即可。