目录

2、MAVLink的优势

3、MAVLink信息结构

3.1、MAVLink V1.0

3.2、MAVLink V2.0

4、心跳包(HEARTBEAT MESSAGE)

5、全球定位信息(GLOBAL POSITION MESSAGE)

6、命令信息(COMMAND MESSAGES)

6.1、COMMAND_LONG

6.2、任务项命令(THE MISSION ITEM COMMAND)

6.3、飞行模式(FLIGHT MODES)


在无人机、无人船控制中,由于无人机等控制为切入式设备而地面站为高级计算机(常为Windows或Linux),因此两者之间存在着不同系统的问题,不同系统之间如何进行通信保证互相理解对方发来的信息就成为一个问题。   打一个比方一个中国人和一个日本人进行交流,中国人说汉语,日本人说日语,显然无法沟通。这个时候,全球规定英语为通用语言,中国人和日本人都学习英语后,两者就可以进行有效沟通了。这里英语就好比通信协议,它指定了信息内容表达的方式。而MAVLink指定了无人设备和地面站之间信息内容如何封包,如何解读。   MAVLink全称Micro Air Vehicle Link ,即微型飞行器连接通信协议,于2009年初由Lorenz Meier首次发布。

2、MAVLink的优势

(1)MAVLink基于LGPL开源协议而来,所以作为商业公司可以免费使用,并且相对于GPL要求使用开发的商业软件也必须开源,LGPL并无此要求,所以作为商业公司可以放心使用;   (2)支持不同的传输层和传输媒介 它支持不同类型的传输层和介质。可以通过WiFi、以太网(即或串口遥测低频宽通道,以低于ghz频率运作,即433MHz、868MHz或915MHz。次千兆赫频率允许我们达到大的通信范围,远程控制无人系统。最大imum数据速率可达250kbps,最大范围通常为500m,但高度依赖于环境和噪声水平以及天线设置。下表列出了一些常用的遥测设备。   1   3)高可靠性 MAVLink设定了心跳包机制(见第四点),可用于检测无人设备与地面站之间连通性的检测。众所周知,UDP是一种数据报协议,不需要客户端和服务器之间的连接,也没有机制可以确保可靠地传递消息,但是可以为实时性和丢失提供轻量级的替代方案 容忍的消息流。该机制使得使用UDP通信方式成为可能。  

3、MAVLink信息结构

当前MAVLink结构共有两个版本,分别为V1.0和V2.0

3.1、MAVLink V1.0

  2   3   可见V1.0当0有效载荷为0时,只有8个字节,非常小。 这里面最重要的是信息包编号和有效载荷数据,信息包编号告诉设备这个是什么信息,有效载荷数据是信息的具体内容。 如 滚转角速度、俯仰角速度、偏航角速度、油门 信息编号为59 (这里我附上了MAVLink1.0协议全文)   4  

3.2、MAVLink V2.0

  5   与V1.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的安全性,因为它允许对消息进行身份验证并验证消息源自受信任的源。 如果不兼容标志设置为0x01,则会附加消息的签名;   (5)STX:1.0版本中为0XFE,2.0版本中为0XFD。  

4、心跳包(HEARTBEAT MESSAGE)

查阅V1.0通讯协议,心跳包对应MSG ID值为0   6   HEARTBEAT消息是MAVLink中最重要的消息,其结构上图所示。它表示无人系统存在且处于活动状态。无人系统定期(通常每秒)将心跳消息发送到地面站,以通知GCS它处于活动状态。心跳是必备消息。除报头外,消息有效负载还包含有关无人系统的基本信息。   (1)type:它表示微型飞行器的类型。根据最新规范,在MAV_TYPE中定义了33种预定义类型,包括四旋翼(MAV_TYPE_QUADROTOR = 2),直升机(MAV_TYPE_HELICOPTER = 4),固定翼(MAV_TYPE_FIXED_WING = 1),以及其他几种。   (2)autopilot:自动驾驶的类型。 MAV_AUTOPILOT枚举结构中定义了几种类型。例如,MAV_AUTOPILOT_GENERIC = 0表示通用自动驾驶仪,MAV_AUTOPILOT _ARDUPILOTMEGA = 3表示ArduPilot自动驾驶仪,MAV_AUTOPILOT_PX4 = 12用于PX4自动驾驶仪。   (3)base_mode:指示不同的操作模式。 正确理解心跳消息并从中提取有用信息对理解base_mode至关重要。 它以8位编码。 共有8个预定义的标记。   FLAG= 1:保留供将来使用; FLAG=2:表示已启用测试模式。 此模式用于临时测试,而不用于常规工具; FLAG=4:表示启用了自主模式(AUTO)。 这意味着无人系统通过导航到从地面站发送给它的目标航路点来自主运行。 在自动模式下,任务会加载到自动驾驶仪上。 任务由系统必须导航的一组多个航点组成。 FLAG=8:表示启用了GUIDED模式。 在GUIDED模式下,任务由发送到系统的单个航路点组成。 然后,系统自动导航到指定位置。 FLAG=16:表示系统可以通过自动控制来稳定其姿态(方向和高度)以及可能的位置。 这就需要外部传感器(例如室内环境中的GPS),高度传感器(气压计,LIDAR)或用于室内定位的运动捕捉才能在稳定状态下悬停。 系统需要外部控制输入才能使其移动。 FLAG=32:表示回路仿真器中的硬件已激活,即当内部自动驾驶仪完全运行时,所有电机和电机执行器均被锁定; FLAG=64:表示已启用手动模式,这要求飞行员使用远程控制输入手动控制系统。 在手动控制中,自动驾驶仪不会进行自动控制; FLAG=128:系统处于待命状态,这意味着电动机已启用/正在运行,并且可以启动飞行。 (4)custom_mode:自定义模式,也是必不可少的。 它指示除基本模式外还解释的自动驾驶仪特定标记。 在心跳消息解析中使用它来确定自动驾驶仪系统的飞行模式。 自定义模式有一些预定义的值,其中0表示手动飞行模式,4表示引导模式,10表示自动模式,11表示RTL模式,9表示LAND模式,2表示ALT_HOLD,5表示LOITER。 (5)system_status:一个系统状态的标志。 根据最新规范,已定义: system_status = 0:指未初始化系统或未知状态的系统; system_status = 1:表示系统正在引导; system_status = 2:表示系统正在执行校准。 实际上,传感器校准是一个非常重要的阶段,以确保诸如惯性测量单元(IMU)和通行证这样的飞行传感器保持一致并按预期运行。 system_status = 3:这意味着系统处于待机模式,可以随时启动; system_status = 4:表示电动机已接合并且系统处于活动状态并且可能在空中; system_status = 5:表示潜在的错误,并且系统处于严重状态,尽管它仍然可以导航。 例如,在临时干扰或电池电量不足时,可能会发生这种情况; system_status = 6 :这意味着紧急情况,其中无人驾驶系统失去了对某些零件的控制权,并处于困境中。 系统可能已经崩溃; system_status = 7:表示系统已开始关闭电源过程,现在正在关闭; system_status = 8:表示系统正在终止并结束其飞行。   (6)mavlink_version:表示MAVLink版本。 用户不可编辑,由协议设置。

5、全球定位信息(GLOBAL POSITION MESSAGE)

  7   全球定位消息的id等于33,代表全球定位传感器提供的已过滤GPS坐标。 如图4所示。此消息执行与全球位置相关的无人系统的重要信息,即GPS纬度(lat),经度(lon)以及绝对高度(alt)。 这三个值被编码为四个字节(32位)。 必须将维度(lat)和经度(lon)的值除以10^{7},以获得真正的浮动GPS值。高度以毫米表示。   该消息还包含一个相对高度场(relative_alt),它表示相对于无人机系统的起飞地面点的高度。 它不同于绝对高度。 例如,由于无人机在地面上,福州的绝对高度为7.58米,对应于0米的相对高度。 如果无人机在距地面10米的相对高度处起飞,则其绝对高度为17.58米。 此外,该消息还执行有关无人机系统沿3轴((x,y,z)的线速度)的信息,可从GPS传感器中收集该信息,并也可以从其他传感器(例如惯性测量单元(IMU))中读取。  

6、命令信息(COMMAND MESSAGES)

MAVLink中有许多命令消息,它们可以请求无人系统执行某些操作。 接下来,我将概述了一些最重要的命令。

6.1、COMMAND_LONG

  8   COMMAND_LONG是一个多功能命令,允许根据消息的命令类型及其参数发送不同类型的命令。 COMMAND_LONG消息ID等于76,并用11个字段定义,如图5所示。target_system字段和target_component字段指定将执行命令的系统及其底层件。   command:是指要执行的命令的类型。 它在MAV_CMD命令枚举中定义。 另外,对于每个命令,可以设置与该命令相关的一组参数。例如,带有21的命令ID是指LAND命令,而没有参数。 其他一些命令具有参数,例如起飞命令(ID = 22),该参数必须在param7中指定起飞高度 。 MAV_CMD命令枚举中定义了大约60种命令类型。   confirmation:指示消息是第一次发送的,值为0,其他值表示消息的确认。 param1-7:7个参数取决于命令的类型。 例如,对于LAND命令,所有七个参数均无用。 在起飞命令中,第七个参数代表起飞所需的高度。

6.2、任务项命令(THE MISSION ITEM COMMAND)

任务项目命令的消息ID等于39,允许将航路点发送到无人系统,以便它在GUIDED模式下自动导航到该特定路点。每个任务项目命令消息都有一个序列号,该序列号指定从0开始的任务编号,该序列号指定了起始位置。它还具有三个字段(x,y,z),用于指定路标的坐标。但是,必须相对于参考系指定坐标。因此,该消息具有一个称为框架的字段,该字段指定了航路点的参考坐标框架。该参数很重要,因为解释坐标(x,y,z)的含义至关重要。例如,如果我们相对于全局框架MAV_FRAME_GLOBAL将航路点坐标设置为(24.68773,46.72185,10),这意味着将转到GPS位置(24.68773,46.72185)的航路点,并且绝对高度为10米海平面。例如,在福州,绝对高度为7.58 m,因此这可能是因为目标高度低于地面高度,导致无人机可能坠落并撞到地面。但是,通常情况下,我们要指定相对于地面的位置(例如,离地面10米),为此,我们需要将参考框架指定为全局框架,但相对海拔高度应为MAV_FRAME_GLOBAL_RELATIVE_ALT。

6.3、飞行模式(FLIGHT MODES)

飞行模式见另一篇文章: https://blog.csdn.net/qq_35379989/article/details/104862128