基于MAVLink实现无人机一键起飞
Implementation of One-Button Take-Off of UAV Based on MAVLink
DOI: 10.12677/CSA.2019.96117, PDF, HTML, XML, 下载: 809  浏览: 3,228  科研立项经费支持
作者: 费浩彬, 鞠训光*, 张微微, 范亚静:徐州工程学院信电学院,江苏 徐州
关键词: MAVLink无人机地面站一键起飞MAVLink UAV Ground Station One-Button Take-Off
摘要: 手动起飞无人机会有较大误差,尤其受到外界影响时,无人机容易倾斜侧翻。本文就此问题,设计了C#控制无人机的地面站,并通过MAVLink协议联系地面及飞控,实现了无人机一键起飞功能以及无人机基本飞行数据的监测。利用该地面站程序控制无人机一键起飞,降低了无人机起飞难度,减少了错误操作的危险性,并且能够使无人机高度控制更加精准。
Abstract: There will be a large error in manually taking off the UAV, especially when the outside influence is considered, the UAV is easy to tilt and roll over. In this paper, the ground station of C# control UAV is designed, and the ground and flight control are connected through MAVLink protocol, which realizes the one-button take-off function of the UAV and the monitoring of the basic flight data of the UAV. The ground station program is used to control the UAV's one-button take-off, which reduces the difficulty of the UAV taking-off, reduces the risk of erroneous operation, and enables the UAV height control to be more precise.
文章引用:费浩彬, 鞠训光, 张微微, 范亚静. 基于MAVLink实现无人机一键起飞[J]. 计算机科学与应用, 2019, 9(6): 1037-1044. https://doi.org/10.12677/CSA.2019.96117

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所示)。

Figure 2. Preparation for taking off

图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)生成的校验码,其生成多项式如下方 G ( x ) 所示。

G ( x ) = x 15 + x 12 + x 5 + x 1

3.3. 算法推导

3.3.1. 请求数据流

请求数据流需要使用66号消息包(见图5)

Figure 5. Parameter of 66th message

图5. 66号消息包参数

该消息包需要在串口开启时不断向飞控发送以获得返回数据。

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)为例进行分析:

Figure 6. Parameter of 74 message

图6. 74消息包参数

属性含义如下: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):

Figure 7. Parameter of taking off

图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)。

参考文献

[1] 刘云平, 李先影, 王田苗, 张永宏, 梅平. 提高四旋翼无人机起飞/着陆的运动稳定性的研究[J]. 高技术通讯, 2015, 25(10): 927-934.
[2] 何丽莎, 郑耀, 解利军, 刘付平, 蒋寒. 环境风对特定无人机零长发射安全性的影响[J]. 哈尔滨工程大学学报, 2019(5): 1-6.
[3] 闫志安. 无人机自主控制技术研究[J]. 科学技术创新, 2018(30): 46-47.
[4] 朱家远, 杨忠, 许昌亮, 徐浩, 李劲松. 四旋翼无人机自抗扰飞行控制器研究[J]. 应用科技, 2019(1): 29-35+42.
[5] 宗意凯, 曾宪阳, 施子凡, 等. 基于STM32单片机四旋翼无人机自主飞行设计[J]. 电子技术, 2018(6): 84-87.
[6] 孙蓉, 刘洪丹, 权明, 程华, 王春华. 小型固定翼无人机自主起飞控制系统[J]. 实验室研究与探索, 2018, 37(10): 89-93+97.
[7] 吕强, 倪佩佩, 王国胜, 刘峰. DSP的MAVLink微型无人机通信协议移植与应用[J]. 单片机与嵌入式系统应用, 2014, 14(11): 3-5+8.
[8] 赖七生保. 基于MAVLink协议的无人机系统设计[D]: [硕士学位论文]. 杭州: 杭州电子科技大学, 2017.
[9] 王楠. 支持MAVLink通信协议的微型无人机数传电路设计[D]: [硕士学位论文]. 哈尔滨: 哈尔滨工业大学, 2017.
[10] 呼云龙, 胡金山, 丁潇, 林萌萌. 基于Mavlink协议的植保无人机地面监测终端设计[J]. 安徽农业科学, 2018, 46(27): 189-192+204.