MAVLink协议初识

MAVLink主要特性

高效性

MAVLink1每个数据包只有8个字节的开销,包括起始标志和数据包丢弃检测。
MAVLink2只有14个字节的开销(但它是一个更安全且可扩展的协议)。
因为MAVLink不需要任何额外的帧,所以它非常适合通信带宽非常有限的应用程序。

可靠性

自2009年以来,MAVLink一直被用于多种载具、地面站(和其他节点)之间的通信,而这些通信信道中,不乏各种挑战性(如高延迟、噪声)。同时,MAVLink也具备检测数据包丢失、损坏和数据包身份验证的功能。

单个网络上最多可容纳255个并行系统(载具、地面站等)。
支持offboard和onboard通信(例如,地面站和无人机之间的通信(offboard),以及无人机自动驾驶仪与启用MAVLink的无人机摄像头之间的通信(onboard))。

Ardupilot遥测设备的概述比较
MAVLink1.0报头结构

MAVLink 1.0协议头

如图所示,MAVLink V1有8个重要字段。
MAVLink1框架首字母缩略词的解释及其内容
第一个字段是STX,指的是表示MAVLink帧开始的符号。在MAVLink1.0中,STX等于特殊符号0xFE。第二个字节(LEN)表示 以字节为单位的消息长度,编码为1byte。第三个字节(SEQ)表示消息的序列号。它被编码为1字节,取值范围为0~255。一旦达到255,序列号再次重置为0,并在每个生成的消息中递增。用于检测接收端丢失消息的消息序列号。第四个字节SYS表示系统ID,每个无人机系统都应该有自己的系统ID,特别是当它们由一个地面站管理时。系统ID 255通常分配给地面站。
MAVLink 1.0的一个限制是它将一个地面站管理的无人机数量限制为254,因为系统ID以1字节编码。第五字节是组件ID,它标识发送消息的系统组件。有27种硬件类型(即(组件))在MAVLink 1.0。如果没有子系统或组件,则不使用它。第六个字节表示消息ID(MSGID),它指的是嵌入在有效负载中的消息类型。例如,ID=0表示心跳类型的消息,表示系统处于活动状态,每秒发送一次。还有一个消息ID等于到33的例子,它指的是执行无人系统的GPS坐标消息。消息ID是基本信息,它允许解析有效负载并根据消息类型从中提取信息。每个消息包含指定数量和字段和,按照标准规范以特定顺序序列化为二进制格式。有效负载位于消息ID之后,最大长度为255字节。最后,最后两个字节用于校验和。CKA和CKB分别表示通过种子值A和种子值B计算出的CRC(Cyclic Redundancy Check)。CRC确保消息在其传输过程中没有被更改,并且发送者和接收者都有相同的消息。它是使用ITU X.25/SAE AS-4对消息的字节进行哈希计算的,不包括STX字段(哈希是应用于6c和c1字节,额外的是种子值)。当计算CRC时,在消息的末尾添加种子。

MAVLink 2.0协议头

MAVLink 2.0协议头于2017年初发布,是当前的推荐版本。它向后与MAVLink 1.0版本兼容,并在MAVLink 1.0版本上进行了一些改进。我们首先开始呈现MAVLink 2.0协议头;然后我们突出了两个版本之间的主要区别。MAVLink 2.0的报头结构如图所示。
MAVLink 2.0报头
MAVLink 2.0报头与MAVLink 1.0报头共享所有字段,并添加了新的字段,此外还有更改了一些现有字段的大小。第一个字节是文本开始标记,对于MAVLink 2.0其具体值是0xFD(相对于MAVLink 1.0的0xFE)。因此,解析器必须首先识别这个字符,然后才能解析MAVLink 2.0的消息。负载长度是下一个字段,与MAVLink 1.0协议中的相同。MAVLink在消息的序列号(SEQ)之前引入了两个新标志。第一个标志是不兼容标志,它们是影响消息结构的标志。这些标志指示数据包是否包含在解析数据包时必须考虑的一些特征。例如,如果不兼容标志等于0x01,则表示对该报文进行了签名,并且在报文的末尾附加了一个签名。第二个标志是兼容性标志,它不影响消息的结构。它表示如果无法理解可以忽略的标志,并且即使无法解释该标志,它也不会阻止解析器处理消息。例如,这可能指的是表示数据包优先级的标志(例如:(高优先级),因为它不会影响数据包的结构)。其中SEQ(sequence number)、SYSID(System ID)、COMPID(Component ID)与MAVLink中协议头1.0保持一致。但是,消息ID(MSGID)编码为24位,而不是以前版本中的8位,允许MAVLink 2.0中更多的消息类型,达到16777215种可能的类型。Payload字段最多可以占用255字节的数据,这取决于消息类型。校验和与MAVLink 1.0中的检验和类似。最后,MAVLink 2.0使用一个13字节的可选签名字段来确保链路是不可篡改的。该特性显著提高了MAVLink 1.0的安全性,因为它允许对消息进行身份验证,并验证消息是否来自可信源。如果不兼容标志设置为0x01,则附加消息的签名。
消息签名的13个字节包含以下字段:
LinkID:一个字节,表示发送报文的链路(通道)的ID。一个链路或者一个信道可以是WIFI或遥测,也可以组合。每个用于发送数据的通道都应该有自己的LIinkID。它为了使用MAVLink 2.0的多通道无人系统控制提供了一种手段。
时间戳:自2015年1月1日起,以10微秒为单位编码6字节。它会随着通过通道发送的每条消息而增加。它应用于由元组(SystemID,ComponentID,LinkID)定义的每个流。时间戳用于避免重放攻击。
签名:对消息进行6字节的编码,根据完整的消息、时间戳和密钥计算。签名包括应用于MAVLink 2.0消息的SHA-256哈希的前6个字节(48位)(不包括签名,包括时间戳)。密钥是一个32字节的共享对称密钥,存储在两端,即自动驾驶仪和地面站或MAVLink API。
MAVLink 2.0 消息的签名对如何处理传入的MAVLink消息有影响。如果消息是签名的,那么如果(i)收到的消息的时间戳比从(SystemID,ComponentID,LinkID)元组标识的同一流接收到的先前数据包更早,(ii)接收时计算的签名与附加到消息的签名不同,则丢弃该消息。这可以推断消息中的数据更改,(iii)与本地系统时间戳相比,时间戳超过了一分钟。如果消息没有签名,那么数据包的接受/拒绝是待定于实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值