1. 引言
传统无人机起飞方式受风向、地形、遥控器操作失误等问题影响极容易发生事故,而这些,都可以通过起飞优化来改善。且目前无人机起飞设计和优化多针对固定翼无人机,而多旋翼无人机本身就足够灵活、可靠,故起飞设计和优化较少。但多旋翼无人机起飞仍需要一定技巧,如何使多旋翼无人机起飞更加简单、安全,是众多新手的诉求。
在无人机起飞方面,前人已有一些实践。在模型方面,刘云平等人 [1] 给出了动力学模型及推导,改善了四旋翼无人机运动稳定性。何丽莎等人 [2] 研究并解决了环境风对固定翼无人机安全性影响,但仅针对了固定翼无人机建模。闫立安 [3] 给出了自主设计的软件控制,能够使无人机实现基础飞行控制,但其软件需要分步操作,还是比较麻烦。朱家远等人 [4] 设计了自抗扰飞行控制器,提高了飞行过程的抗扰动能力。宗意凯等人 [5] 和孙蓉等人 [6] 均对无人机自主起飞的硬件设计有所研究, [6] 中还给出了无人机自主起降的设计方案。
无人机通信多采用MAVLink协议,在此协议的研究上,吕强等人 [7] 已介绍很详细,并给出了一种硬件移植方案。赖七生保 [8] 设计了无人机系统,基于MAVLink提出了一套无人机通信组网方案。王楠 [9] 设计了支持MAVLink通信协议的微型无人机数传电路,依据此协议进行编码解码。呼云龙等人 [10] 通过MAVLink协议设计了一款植保无人机地面监测终端,具有一定实用性。本文基于MAVLink协议设计了无人机一键起飞算法,实现了无人机的一键起飞即鼠标点击即可使无人机起飞。
2. 研究设计解决的总体思路
2.1. 控制流程
该控制流程所需设备(见图1)包括无人机飞控、数传电台、电脑地面站,其中数传分为地面端和飞控端。选择对应的串口及波特率建立通信后,地面站将飞行指令转换成字节数据包发送给数传,飞控得到数传接收到的数据,执行相应的指令,并按原路径将执行结果返回给地面站,地面站根据Mavlink库解析数据包得到可读结果并根据需求显示出来。

Figure 1. Equipment of control process
图1. 控制流程所需设备
由于无人机的特殊性,需要实时监控无人机的飞行数据,因而地面站需要以较快的频率不停向飞控申请飞行数据,以确保无人机与地面联系的可靠性。
2.2. MAVLink协议设计
MAVLink是无人飞行器与地面站之间通讯,以及无人飞行器之间通讯最常用的协议,此协议已在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试验证。表1是MAVLink协议的数据帧结构,其数据包以FE开头,最后两字节为校验和,其协议数据结构既简短又具安全性。

Table 1. MAVLink data frame structure
表1. MAVLink协议数据帧结构
2.3. MAVLink通用消息集
MAVLink通用消息集包括MAVLink类型枚举(MAVLink Type Enumerations)和MAVLink消息包(MAVLink Messages)。
MAVLink Type Enumerations使飞控和地面站能够以统一的标准分析数据,让每一条参数都变成具有可读性的数据。
MAVLink Messages则是飞控与地面站通信的具体媒介,能够传递飞控与地面站之间的请求与回复信息。
3. 基于MAVLink实现无人机一键起飞算法控制
3.1. 起飞算法思路
无人机起飞需要无人机有正确的起飞状态,不正确的起飞状态会触发开发板中的安全保护,导致一段时间内,无人机无法再次接收指令或对指令无应答。所以,起飞前我们需要做如下的起飞准备(如图2所示)。
第一步,建立通信。此步主要为硬件及驱动支持,正确连接即可建立通信。
第二步,申请数据(参数),并分析呈现。地面端可以根据需要向飞控端发出申请指令申请对应数据(参数),待飞控端返回消息后根据MAVLink协议解析获得对应数值。
第三步,切换飞行模式。解锁飞控需要飞控处于安全的飞行模式,起飞多采用稳定模式,此处我们将飞控模式切换为稳定。
第四步,解锁飞控。飞控解锁后才可以接收各种指令并使其执行对应操作。
第五步,进入引导模式垂直上升。为保证起飞过程的安全,无人机起飞过程中不能接收飞行姿态改变的指令(即遥控器左右摇杆),此时需要将飞控切换为引导模式,让无人机在此模式下完成自动垂直上升操作。
3.2. 算法模型
一键起飞算法流程图如图3所示,其中,我们需要使用到MAVLink提供的一些指令数据结构及数据字节流转换的函数。

Figure 3. Flow diagram of one-button take-off
图3. 一键起飞流程图
3.2.1. 指令数据结构
此处数据结构相对应2.3中所述通用消息集,即不同消息包对应的指令操作是不同的,因而消息包参数含义也会有所改变。指令数据通用模型mavlink_command_long_t如图4所示,param1~param7为7个基本参数,command为具体指令,target_system和target_component用来标识无人机,confirmation用来确认传输信息。

Figure 4. Structure of command message
图4. 指令消息数据结构
3.2.2. 数据读取
接收数据的读取依靠public MAVLinkMessage ReadPacket(Stream BaseStream)函数。此函数简化了我们对串口数据流的操作,使我们无需对照MAVLink协议帧结构一位一位提取流中数据并合成为一个通用消息包类型。我们只需对这个通用消息包强制转换为需要的消息包(即转换成3.2.1中的数据结构),即可获得可视数据。
3.2.3. 数据生成
数据生成依靠public byte[] GenerateMAVLinkPacket10(MAVLINK_MSG_ID messageType, object indata)函数。此函数与读取数据操作相对应,根据我们需要的操作指令,按照MAVLink协议帧结构一位一位的填入数组中,使其变为飞控端可读的数据。其中,数组最后两位为CRC (ITU X.25)生成的校验码,其生成多项式如下方
所示。
3.3. 算法推导
3.3.1. 请求数据流
请求数据流需要使用66号消息包(见图5)
该消息包需要在串口开启时不断向飞控发送以获得返回数据。
target_system和target_component从消息包获得,req_message_rate设置请求频率,start_stop设置起止。
其中req_stream_id中,有12种不同的类型,可以在MAVLink Type Enumerations中的MAV_DATA_ STREAM找到。若需要申请全部数据,此处使用MAV_DATA_STREAM_ALL(枚举值为0)。
设置完这些参数后,就可以用MAVLink库中MavlinkParse类下的GenerateMAVLinkPacket (MAVLINK_MSG_ID messageType, object indata)方法生成对应的消息包发送给飞控。
3.3.2. 获取数据
本系统获取了高度、高度误差、升降速度、模式、GPS数量、地速、空速的参数,对应的获取这些参数,需要得到0号消息(心跳包),24号,66号,74号消息。
以下以74号消息(图6)为例进行分析:
属性含义如下:airspeed——当前空速,roundspeed——当前地速,heading——当前朝向,throttle——当前油门百分比,alt——当前高度,climb——当前垂直速度。
地面站从消息包中读取数据比较容易,首先需要定义一个MAVLink.MAVLinkMessage类型的变量来保存通用的消息类型,然后对获得的消息包进行强制转换到对应的消息包,例如此处74号消息包使用(MAVLink.mavlink_vfr_hud_t)进行强制转换。
3.3.3. 切换模式
切换模式主要需要设置以下三个参数:
base_mode——当前模式
custom_mode——目标模式
target_system——系统id
base_mode可由MAVLink.MAV_MODE_FLAG.CUSTOM_MODE_ENABLED并强制转换为byte类型得到。custom_mode中值为1表示为稳定模式,4表示为引导模式。target_system由收到的消息包的sysid决定。此处我们将custom_mode设为1,切换为稳定模式。
3.3.4. 飞控解锁
首先需要定义一个通用的指令类型MAVLink.mavlink_command_long_t,设置target_system、target_component为1,再将command设为(ushort) MAVLink.MAV_CMD.COMPONENT_ARM_DISARM,最后将第一个参数param1设置为1。(0表示上锁,1表示解锁)
3.3.5. 垂直起飞
首先,同3.3.3,我们将飞控切换为引导模式,然后执行起飞指令。
以下是官方给出的起飞参数(见图7):
我们需要定义一个通用的指令类型MAVLink.mavlink_command_long_t,其中command设为(ushort) MAVLink.MAV_CMD.TAKEOFF。起飞指令中除2,3参数为空,其他参数都有对应的含义,若只是简单的原地垂直起飞,除7参数设为需要的起飞高度,其他参数可都设为0。
4. 验证
地面站主界面如图8所示,使用地面站首先需要选择对应的串口和比特率,然后点击连接串口,才能进行后续操作。如一键起飞,只需再点击飞机图标,无需点击解锁等按钮。

Figure 8. The main interface of ground station
图8. 地面站主界面
第一阶段测试我们并未装上无人机的螺旋桨,点击一键起飞按钮后,无人机解锁并在设定时间后电机全速运转,因为没有螺旋桨,无人机无法上升,此时地面站高度误差慢慢增加,直至稳定在指定飞行高度。此时尝试举高无人机,至指定高度时,电机转速明显变慢,猜测无人机完成任务处于悬停状态。
第二阶段测试,我们装上螺旋桨,在空旷地段测试。测试结果显示无人机可以解锁并在规定时间后起飞,并悬停在指定高度。
5. 分析对比
基于MAVLink采用一键起飞算法后,无人机在起飞便捷性和稳定性上都有了较大提升。既能实时监控飞行数据,也能控制飞行高度的精准。相较于文献 [4] [7] [8] 等从硬件角度改善无人机性能及稳定性,本文从软件出发,以另一种角度对无人机起飞进行研究。
同时相比于文献 [10] 这些本就提供给专业人员使用的偏作业过程的控制软件,此无人机一键起飞地面站简化了起飞步骤,更加适用于非专业人员使用,使操控不熟练的新手也能直接起飞无人机。此设计调用MAVLink官方C#函数库中基本函数,通过上述五步算法设计,加以C#基本组件的按键触发,实现了无人机的一键起飞,可以说对飞行操作和飞行软件设计上的一个补充。
6. 结论
本文介绍了四旋翼无人机一键起飞的设计与实现。该软件基于MAVLink实现,能够实时显示无人机飞行状态,并能够实现无人机的解锁上锁,及一键起飞的功能。无人机的一键起飞,大大简化了无人机起飞的操作,降低了起飞过程中误操作的风险。
多次试验显示,地面站参数显示使无人机实时状态更加直观,且利用地面端一键起飞,降低了无人机操作的复杂性,使无人机在起飞时具有更高的安全性。
致谢
本项目由徐州工程学院(Xuzhou University of Technology)资助,同时由鞠训光(徐州工程学院)老师指导完成。同时,作者要感谢编辑和审稿人的认真负责。徐州市科技计划项目(KC16SS094)、徐州市科技计划项目(KC17078)。