MAVLink通信协议:无人机与机器人系统的轻量级解决方案

百科   2024-11-24 20:05   北京  
MAVLinkMicro Air Vehicle Link是一种轻量级、二进制的消息传输协议,广泛应用于无人机和机器人系统中,用于系统与控制台或地面站之间的通信。MAVLink 最早由Lorenz Meier在2009年开发,并逐渐成为开源无人机控制软件如PX4和ArduPilot的标准通信协议。
一、MAVLink的设计特点:
1.轻量级:MAVLink消息使用小于255字节的包,非常适合带宽有限的无线电链路。
2.可靠性:每条消息都有一个序列号,以帮助接收方检测丢失或重复的消息。
3.灵活性:MAVLink可以承载多种类型的数据,包括传感器读数、导航命令、系统状态、日志信息等。它支持多种消息类型,并且可以根据需要扩展。
4.标准化:MAVLink提供了多种预定义的消息格式,这些格式定义了从位置数据到命令控制的一切信息。
5.跨平台:MAVLink通过广泛的库支持多种编程语言(如 C、C++、Python),使其能够在各种设备和操作系统上运行。
二、PX4和ArduPilot如何使用MAVLink?
PX4 和 ArduPilot都使用MAVLink作为主要的通信协议:
1.PX4使用 MAVLink进行地面站通信、远程控制和状态报告。
2.ArduPilot同样依赖MAVLink进行指令传输和数据反馈,支持与各种地面站的通信。
三、MAVLink的消息格式是如何定义的?
MAVLink的消息格式通过XML文件定义,包含消息ID、消息名称、字段名称和数据类型。这些XML文件用于生成不同编程语言下的MAVLink消息处理代码。每个XML文件定义了特定Mavlink系统支持的消息集,大多数地面站和飞控系统实现的参考消息集在common.xml中定义。

Mavlink协议分为V1.0和V2.0。先看V1.0的协议格式,消息帧结构如下图所示
STX:起始标志位,在v1.0版本中用“FE”表示。用于消息帧接收端进行消息解码。
LEN:代表PAYLOAD的字节长度,取值0~255,用于消息帧接收端验证有效载荷长度是否正确。
SEQ:表示本次消息帧的序号,每发完一次消息,该字节内容会加1,加到255后会从0开始。用于Mavlink消息帧接收端计算消息丢失比,相当于信号强度。
SYS:代表发送本条消息帧的设备的系统编号,用于接收端识别消息来自哪个设备。
COMP:代表发送本条消息帧的设备的单元编号,用于接收端识别消息来自设备的哪个单元。
MSG:表示有效载荷中消息包的编号,与SEQ不同,接收端要根据该字节确定有效载荷里的消息包类型,然后选择对应的方式处理消息包。
PAYLOAD:有效载荷,即要传送的数据,范围0~255字节。
CKA,CKB:这两个字节是16位校验位,CKB是高8位,CKA是低8位。校验码由CRC16算法得到,算法将整个消息(从LEN到PAYLOAD结束,还要额外加上MAVLINK_CRC_EXTRA对应的1个字节)进行CRC16计算,得出一个16位的校验码。每种PAYLOAD都会对应一个MAVLINK_CRC_EXTRA,这是由生成Mavlink代码的xml文件生成的。加入校验是为了应对以下情况:当飞行器和地面站使用不同版本的Mavlink协议时,双方计算的校验码不同。

Mavlink1.0升级到Mavlink2.0,有如下几个变化:
1)INC FLAGS(Incompatibility flags):此标志位会影响报文的结构,该标志指示数据包是否包含一些特殊功能。例如标志等于0x01表示该数据包已签名,并且在数据包的末尾附加了签名;
2)CMP FLAGS(compatibility flags):不影响报文的结构,即使无法解释标志,也不会阻止解析器处理消息;
3)Message ID (MSGID):相较于V1.0版本的8位变为24位,允许在Mavlink 2.0中使用更多类型的消息,最多可以达到16777215种类型;
4)可选用的SIGNATURE。Mavlink 2.0使用可选的13字节签名字段来确保链接被篡改。此功能显著改善了Mavlink 1.0的安全性,因为它允许对消息进行身份验证并验证消息源自受信任的源。如果INC FLAGS设置为0x01,则会附加消息的签名;
5)STX:1.0版本中为0xFE,2.0版本中为0xFD

对应的Mavlink 2.0的消息帧格式如下:
对应wireshark解析报文如下:
Mavlink协议优点:
1)Mavlink基于LGPL开源协议而来,作为商业公司可以免费使用。
2)支持不同的传输层和传输媒介,可以通过WiFi、以太网、遥测低频通道,即433MHz、868MHz或915MHz等物理层承载应用协议。
3)可靠性较高。Mavlink设定了心跳包机制,可用于检测无人设备与地面站之间连通性的检测。

四、在高干扰环境中,如何提高MAVLink的通信可靠性?
在高干扰环境中,提高MAVLink的通信可靠性可以通过:
1.频率选择:选择较少干扰的通信频率。
2.信号增强:使用高增益天线或中继设备增强信号。
3.消息重传:启用必要消息的重传机制,确保关键数据传递成功。
4.数据冗余:发送重要数据的冗余副本,提高数据到达的成功率。

五、MAVLink与MQTT在无人机通信中的优缺点对比如何?
MAVLink的优缺点:
优点:专为无人机和机器人设计,轻量级、实时性强,支持多种控制和反馈消息。
缺点:不支持消息的主题订阅机制,扩展性有限。
MQTT的优缺点:
优点:具有灵活的主题订阅机制,适合传输大量状态更新和传感器数据,扩展性强。
缺点:较大的协议开销,实时性不如MAVLink强。

六、Mavlink协议面临的威胁
尽管Mavlink通信协议很强大,而且使用最广泛,但它缺乏安全机制,使其容易受到一些攻击,如拒绝服务攻击(DDoS)、窃听和中间人攻击。因为Mavlink协议没有对通信中的信息进行加密,这使得Mavlink很容易成为安全攻击的目标,损害了无人机的飞行安全。

无人机和地面站是通过无线信道中承载的通信协议建立的,由于通信协议Mavlink不支持加密通信和认证授权机制程序,这使得其容易受到各种攻击。地面站点通过一个未经认证的信道和没有加密的方式与无人机交换数据,攻击者拥有适当的发射器可以与无人机通信,并轻松地对无人机发起攻击。攻击可以分为截获(损害数据保密性的攻击)篡改(损害数据完整性的攻击)中断(损害数据可用性的攻击)伪造(对真实性的攻击)。如下图所示:
1) 破坏保密性和隐私的攻击。在此类攻击中,攻击者通过截获无人机和地面站之间的数据、命令或信息,在未经授权的情况下获取机密和敏感信息,因此信息的保密性和隐私受到影响。这类攻击涉及窃听、身份欺骗流量分析和未经授权的访问。
2) 破坏完整性攻击。Mavlink的完整性可以通过修改正在发送的数据而遭受破坏。破坏Mavlink完整性有如下攻击:
A. 中间人攻击(Man-in-the-middle)在Mavlink通信协议中,信息是以明文形式发送的, M-I-TM攻击可以在信道中成功建立。攻击者位于无人机和GCS之间,可以截获Mavlink有效载荷的内容并重新建链并发送命令,比如修改控制和遥测数据,并将这些错误的数据发回给GCS或无人机。
B. 劫持。当中间人攻击成功后,攻击者向无人机发送未经授权的命令,从其GCS手中夺取控制权,同时让GCS相信它仍然在控制无人机。一旦获取无人机的控制权限,攻击者就可以扣留无人机。使用Mavlink漏洞劫持无人机有两种方法:(1)利用Mavlink缺乏认证的特点,通过使用airplay-ng软件,注入取消认证信息,强制断开真实用户地面站控制站点与无人机的连接。由于无人机不对用户进行认证,黑客可以很容易地连接到它,并在WIFI连接建立后立即控制该设备。(2)为了通过Mavlink控制无人机,必须设置NetID来连接到无人机。如果入侵者识别了NetID字段,就可以通过NetID的天线轻松劫持无人机,传输恶意的Mavlink数据报文和虚假信息。
C. 重放攻击。由于通信的开放性,Mavlink协议很容易受到重放攻击。恶意攻击者会记录发送到无人机的控制数据,并在以后复制这些数据,以非法控制并使用无人机,产生未经授权的效果。这种攻击可能导致无人机失去控制,并可能坠毁。
D. 篡改消息。攻击者捕获到GCS发送的控制数据,对其进行修改,并将错误的数据发给无人机。结果,GCS的控制数据被无人机忽略或者误解,导致无人机无法控制,控制数据和遥测数据的完整性受到了影响。
E. 位置欺骗:攻击者可以利用数据链路向GCS发送欺骗信息,这些信息含有虚假的无人机位置数据,使用Scapy(一种数据包操纵工具)来欺骗心跳信号,这种攻击使GCS误判无人机的飞行轨迹而做出错误操作。
3) 破坏可用性的攻击。破坏Mavlink可用性的攻击可以通过中断无人机和地面站之间的连接来实现。关于如何进行这种攻击有以下几种手段:
A. 干扰。这种攻击会影响系统的可用性,攻击者通过破坏通信链路中断无人机对GCS控制信号的接收。干扰攻击导致无人机和GCS之间进入失联状态,使飞控系统无法正常工作,从而造成服务的不可用。
B. 拒绝服务(DoS)。攻击者可以利用Mavlink的漏洞,用垃圾数据淹没无人机GCS的通信通道,网络中断导致资源(无人机和GCS)不可用。这种形式的攻击被称为DoS攻击。在这样的攻击中,无人机无法正确接收控制信息。因此,无人机不能保持稳定的状态,任务也不能适当地执行。如果DoS攻击成功,后续会进行中间人攻击。通过进行MITM攻击,攻击者以无限循环的方式向无人机发送未经授权的命令。对无人机成功的DoS攻击使其不再对GCS作出响应。
C. 洪泛攻击。这种攻击的原理是用大量的各种数据包充斥网络,使其瘫痪。一般来说,SYN、UDP、ICMP和Ping类型的数据包被用于这种攻击。为了利用Mavlink协议的漏洞,曾有研究人员进行了一次模拟攻击(ICMP洪泛攻击),攻击者向GCS和无人机发送许多ICMP请求包,GCS和UAV的运行负荷太大,无法对正常命令作出响应。此外,由于ICMP洪泛攻击,维持无人机和GCS之间的心跳信号会出现延时异常,在这种情况下,无人机在没有操作故障安全模式的情况下可能坠毁。
4) 破坏真实性的攻击。真实性攻击试图使GCS/UAV信任伪造的数据的真实性。该攻击包括数据伪造和GCS欺骗。

雨飞工作室
本着“让人有所知,让人有所思”的理念,带你游走在无人机及机器人、智能交通、物联网领域,领略人间芳华,感受百味人生。
 最新文章