ROS连载系列第21期 硅步ROS大讲堂直播第三期开播+无人机专辑2
转载 2017-09-08 16:42 硅步科学仪器 来源:硅步科学仪器
本期ROS连载系列无人机专辑2将向您详细介绍微型空中飞行器链路通讯协议(MAVLink)。
2017年3月,上海硅步发布了专业教学无人机Gapter EDU,该无人机支持机器人操作系统(ROS),MAVLink协议和MAVROS。ROS很多用户已经非常熟悉,而MAVLink和MAVROS不少人则是第一次听说,那么什么是MAVLink和MAVROS呢?为了使用户能够深入了解Gapter EDU,上海硅步将从本次专辑开始分2期为大家介绍一下MAVLink和MAVROS的概念及其在无人机研究和开发中的应用。
Gapter EDU支持MAVLink通讯协议
MAVLink是Micro Air Vehicle Link(微型空中飞行器链路通讯协议)的简称,是无人飞行器与地面站(Ground Control Station,GCS)之间通讯,以及无人飞行器之间通讯最常用的协议。MAVLink可以高效地在串行通道上将C结构体封装成包并将其发送到地面站。作为MCU/IMU通信以及Linux进程和地面站连接通信的骨干网,它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。
MAVLink生成器在2009年由Lorenz Meier首先发布,遵循LGPL开源协议。MAVLink生成的消息通常与输入的消息规范相同。
1.消息帧
MAVLink传输的基本单位是消息帧,每个消息帧都具有如图1所示的结构:
MAVLink消息帧结构
红色是起始标志位(STX),用于MAVLink消息帧接收端进行消息解码。
第二个格子代表的是PAYLOAD长度(LEN),范围从0到255。在MAVLink消息帧接收端,可以用它和实际收到的有效载荷的长度比较,以验证有效载荷的长度是否正确。
第三个格子代表的是本次消息帧的序号(SEQ),每次发完一个消息,这个字节的内容会加1,加到255后会从0重新开始。这个序号用于MAVLink消息帧接收端计算消息丢失比例用的,相当于是信号强度。
第四个格子代表了发送本条消息帧的设备的系统编号(SYS),使用PIXHAWK刷PX4固件时默认的系统编号为1,用于MAVLink消息帧接收端识别是哪个设备发来的消息。
第五个格子代表了发送本条消息帧的设备的单元编号(COMP),使用PIXHAWK刷PX4固件时默认的单元编号为50,用于MAVLink消息帧接收端识别是设备的哪个单元发来的消息(暂时没什么用)。
第六个格子代表了有效载荷中消息包的编号(MSG),这个字节很重要,MAVLink消息帧接收端要根据这个编号来确定有效载荷里到底放了什么消息包并根据编号选择对应的方式来处理有效载荷里的信息包。
最后两个字节是16位校验位,CKB是高八位,CKA是低八位。校验码由crc16算法得到。
2. MAVLink消息
MAVLink消息有多种类型,这里以“#0”消息为例介绍一下MAVLink消息。
#0号消息叫做心跳包(heartbeat),用来表明发出该消息的设备是活跃的,飞行器和地面站都会发出这个信号(一般以1Hz发送),地面站和飞行器会根据是否及时收到了心跳包来判断是否和飞行器或地面站失去了联系。
心跳包由6个数据组成,第一个是占一个字节的飞行器类型数据(type),这个数据表示了当前发消息的是什么飞行器,比如四旋翼,固定翼等等。Type数值是0时对应于通用飞行器,数值为1时对应于固定翼类型,数值为2时对应于四旋翼。详细的对应关系可在官方的mavlink消息介绍网页上找到(http://mavlink.org/messages/common)。
第二个参数是自动驾驶仪(飞控)类型,比如APM,PPZ,Pixhawk等飞控,具体定义查找和之前查找飞行器类型时的方法一样。同样的,对于发送心跳包的飞行器来说代表了自己的飞控类性,对地面站发出的心跳包来说意义不大。
第三个参数是基本模式(base mode),是指飞控现在处在哪个基本模式,对于发心跳包的地面站来说没有意义,对于发送心跳包的飞控来说是有意义的。这个参数要看各个飞控自己的定义方式,MAVLink介绍网页并不会给出具体的模式。一般情况下都会使用用户模式,普通用户不用关心这个参数。开发者在使用MAVLink修改飞行器模式时需要注意基本模式的设置,具体请看PX4代码(https://pixhawk.org/firmware/source_code)。
第四个参数是用户模式(custom mode),它分为主模式(main mode)和子模式(sub mode):主模式分为3种,手动(manual),辅助(assist),自动(auto)。手动模式类似APM的姿态模式。在辅助模式中,又分为高度控制模式(altctl)和位置控制模式(posctl)两个子模式,高度控制模式就类似APM的定高模式,油门对应到飞行器高度控制上。位置模式控制飞行器相对地面的速度,油门和高度控制模式一样,yaw轴控制和手动模式一样。自动模式里又分为3个子模式,任务模式(mission),留待模式(loiter),返航模式(return),任务模式就是执行设定好的航点任务,留待模式就是GPS悬停模式,返航模式就是直线返回home点并自动降落。在Pixhawk中,前两个字节(低位)是保留的,没有用,第三个字节是主模式,第四个字节是子模式。
3.MAVLink应用
MAVLink自发布以来,受到了众多无人机爱好者、研究者和开发者的支持和青睐,应用越来越广泛。目前使用MAVLink的自动驾驶仪包括:
ArduPilotMega(主要协议)
pxIMU Autopilot(主要协议)
SLUGS Autopilot(主要协议)
FLEXIPILOT(可选协议)
UAVDevBoard/Gentlenav/MatrixPilot(可选协议)
SenseSoar Autopilot(主要协议)
SmartAP Autopilot(主要协议)
AutoQuad 6 AutoPilot(主要协议)
目前使用MAVLink的软件包有:
iDroneCtrl (iOS)
QGroundControl (Windows/Mac/Linux)
HK Ground Control Station (Windows)
APM Planner (Windows/Mac)
QGroundControl w/ AutoQuad MainWidget(Windows/Mac/Linux)
Copter GCS (Android)
AutoQuad GCS (Android)
ROS to MAVLink bridge:https://github.com/mavlink/mavlink-ros
MAVCONN 轻型航空中间层http://pixhawk.ethz.ch/software/middleware/start
oooArk / MAVSimhttp://www.youtube.com/watch?v=-wQVrM5SL2o&fe
MAVLink python bindings
MAVProxy(允许连接多个UDP/串行链路,包括 flightgear):
目前应用MAVLink的项目有:
ArduPilotMegahttp://code.google.com/p/ardupilot-mega/
MatrixPilot UAV DevBoardhttp://code.google.com/p/gentlenav/
PIXHAWKhttp://pixhawk.ethz.ch/
ETH Flying Machine Arenahttp://www.idsc.ethz.ch/Research_DAndrea/FMA
ETH SenseSoar Solar Airplane Projecthttp://www.sensesoar.ethz.ch/doku.php?id=news
ETH Skye Blimp Projecthttp://www.projectskye.ch/
UC Santa Cruz SLUGShttp://slugsuav.soe.ucsc.edu/index.html
ArduCAM OSDhttp://code.google.com/p/arducam-osd/
Sky-Drones - UAV Flight Control Systemshttp://www.sky-drones.com/
AutoQuad - Autonomous Multirotor Vehiclecontrollerhttp://autoquad.org/