基于Qt 的小型无人机地面站软件设计与实现
2015-11-26刘智腾
贾 杰,刘智腾
(南昌航空大学信息工程学院,江西 南昌 330063)
0 引言
无人机地面站(Ground Control Station,GCS),即无人机地面控制系统,是无人机系统的重要组成部分。地面站的主要功能是实时监控飞行器的飞行过程、飞行轨迹、有效载荷、通讯链路以及飞行器的发射和回收,同时也要求能够灵活地克服各种未知的自然与人为因素的不利影响,适应各种复杂的环境,保证全系统整体功能的实现[1]。Qt 作为使用广泛的C++编程环境,界面美观,拥有良好的跨平台能力。因此,本文选取Qt 作为编程工具来实现地面站的各项功能。
1 地面站系统总体设计
综合考虑无人机地面站需要实现的功能,由地面站的功能出发对地面站系统进行总体设计。地面站需要实现的功能有:
1)实时、可靠、高效的数据链路通信;
2)飞行器飞行状态的显示和控制;
3)有效载荷的显示和控制;
4)飞行数据的存储和回放。
根据以上功能需求,可以将系统划分为通信控制与数据传输、数据显示、数据处理模块[2]。图1 为系统结构图。根据系统结构功能图,设计如图2 所示的软件流程图。
图1 系统结构图
图2 软件流程图
2 地面站系统软件设计
由于无人机地面站的功能需要由不同的功能模块来实现,因此,将无人机地面站划分为不同的功能模块来实现。模块分为串口通信模块、电子地图模块、虚拟仪表显示模块、飞行数据存储模块等。系统前台界面采用Qt 编程语言进行开发,后台采用SQLite 数据库对飞行数据进行储存,虚拟仪表使用第三方类库Qwt(Qt Widgets for Technical Application)编程实现。
2.1 数据传输模块
数据传输模块需要实现的功能为:对数据进行缓存和通信控制以实现飞行器与地面监控平台的实时通信[3]。因此,在数据无线传输方面,采用9XStream无线数传电台来实现功能。9XStream 支持RS232 串行接口通信,其接口速率在9 600 bps 和19 200 bps之间,能够满足地面站和飞行器之间遥测数据包的传输[4]。在通信协议方面,参考MAVLink 通信协议,定义如下的通信协议格式[5]:
1)上行通信协议。
图3 上行通信协议
上行通信协议的格式见图3,其一帧数据为40字节,其中控制指令位中的数据主要为角度调节、经纬度、爬升高度等信息。
2)下行通信协议。
图4 下行通信协议
下行通信协议的格式见图4,其一帧数据包含56字节,帧头占1 字节,校验和占1 字节,数据包括无人机飞行状态数据和GPS 数据等,共占54 字节。
在功能的实现方面,采用Qt 的第三方串口通信类Qextserialport 实现所需功能。该类在使用上比较简单,首先创建一个基于Qextserialport 类的对象;其次,定义串口对象,并传递函数,在构造函数里对其进行初始化;再次,以读写方式打开串口;最后关联串口信号和槽函数。当串口缓冲区有数据时,会发出读取串口的信号,之后通过相关联的槽函数对串口进行读取串口操作。代码如下:
2.2 航迹绘制模块
航迹绘制模块需要实现的功能有:电子地图、对飞行器飞行位置进行标注、绘制飞行器的运行轨迹并实现基本的地图放大缩小等操作。考虑到无人机飞行器需要在无网络覆盖的地区进行作业,因此采用离线的Google 地图实现功能。在实现方面,需要先下载Google 瓦片地图到本地,之后使用JavaScript 编程对下载的瓦片地图进行拼接,并做出一个本地化的Html 网页,最后在Qt 上用QWebView 调用该离线版的Html 网页以实现所需功能。
电子地图加载完毕之后,接收从数据传输模块下传解析过后的无人机 GPS 数据信息,调用GoogleMapsAPI 在地图上进行航迹显示工作。航迹绘制流程图如图5 所示。
图5 航迹规划流程图
2.3 虚拟仪表显示模块
Qt 上做虚拟仪表有2 种方法,一种是使用Qt 的2D 绘图类QPainter 绘制,另一种是使用Qwt,它是一个基于LGPL 协议的开源库,拥有封装好的表盘类,能够通过直接调用模板来完成仪表盘的设计[6]。本开发中,考虑到仪表的美观方面,采用Qwt 来实现虚拟仪表,需要使用Qwt 下的QwtDial 类来绘制所需的仪表盘。
要使用Qwt,需要对Qwt 的开发环境进行配置。首先需要用MinGW 对Qwt 库文件进行编译,将编译后的头文件添加到项目文件夹中,然后在工程文件中添加Qwt 路径语句,目的是指明Qwt 库文件的地址,方便主程序调用,最后在头文件中添加进Qwt 的头文件,即可使用Qwt 进行仪表盘的绘制。
Qwt 配置完成之后,在UI 界面上能看到QwtWidget 的控件,将控件直接拖拽进UI 界面上,设置好控件的背景颜色、最小刻度、显示方式等,就能做出一个完整的虚拟仪表盘。仪表盘完成之后,在主程序中添加一个QwtDialNeedle 的指针类对象,并对其初始化后,通过给指针类对象传递数据以达到显示当前飞行数据的目的。制作完成的速度表如图6 所示。
图6 虚拟速度表
2.4 数据存储模块
飞行数据存储模块需要实现的功能有:存储重要的飞行数据,如空速、地速、高度、航迹、航向、滚转、俯仰、经纬度等,用于存储规划飞行路线中的航点信息[7]。本设计中,采用2 种方式来对数据库进行访问。一种是通过访问SQLite 数据库的方式,另一种是通过文本文档方式,对数据进行保存。通过数据库保存数据时,需要在SQLite 数据库中建立多个表格,将飞行数据分类保存在不同的表格中,以备之后的分析和处理。通过文本文档保存数据时,以接收数据的时间作为保存的文件名,方便日后调用。
对于SQLite 数据库,首先建立data 和point 2 张表,分别储存无人机飞行状态数据信息和航点信息,然后通过QtSQL 对建立好的数据库进行链接,最后对数据表进行添加数据以及提取数据的操作。
对于文本文件,使用QTextstream 类来进行,该类将二进制文件以数据流的形式的储存[5]。当串口收到无人机下传的遥测数据包后,建立一个带有当前系统时间信息的文本文档,该文本文档放置在用户指定的目录下。在这之后,通过QTextStream 的txtOutput成员函数将一整帧数据写入文本文档中[5]。
3 地面站控制系统测试结果分析
开发完成的无人机地面站软件主界面如图7 所示。
图7 无人机地面站软件主界面
开发程序已经通过了自行编制的模拟飞行器测试程序的验证。测试表明,地面站控制系统能够完成数据的实时接收、显示、存储、回放、电子地图的读取、飞行器GPS 信息显示、飞行器航迹显示等功能。证明了基于Qt 平台开发的无人机地面站控制系统的可行性。
4 结束语
本文设计了基于Qt 开发平台的无人机控制系统的地面站软件。对所涉及的一些关键技术进行了各模块的分析、实现和验证。无人机地面站能够较为稳定、准确、清晰地监控无人飞行器的飞行状态,为今后的开发奠定了良好的基础。
[1]周焱.无人机地面站发展综述[J].航空电子技术,2010,41(1):1-6.
[2]芦勤桑.无人机遥测遥控地面站系统[D].南昌:南昌航空大学,2012.
[3]马少瑛.小型无人机地面站的研究与设计[D].呼和浩特:内蒙古工业大学,2009.
[4]杨涤.系统实时仿真开发环境与应用[M].北京:清华大学出版社,2002.
[5]Paul G Fahlstrom,Thomas J Gleason.无人机系统导论[M].吴汉平,邵国培译.北京:电子工业出版社,2003:1-2.
[6]卢华伟,秦品健,郑锐.基于Qt/Qwt 的操作监控系统的设计与实现[J].微计算机信息,2010,26(1):72-74.
[7]刘波.某型无人机地面导航站系统的设计与实现[D].西安:西北工业大学,2007.
[8]Bruce K Walker,Norman M Wereley,Luppold Robert H,et al.Effects of redundancy management on reliability modeling[J].IEEE Transactions on Reliability,1989,38(4):475-482.
[9]刘歌群,刘卫国,卢京潮.无人机强实时性串口通讯程序设计[J].计算机应用,2005,25(1):210-212.
[10]Zhou Donghua,Frank P M.Fault diagnostic and fault tolerant control[J].IEEE Transactions on Aerospace and Electronics Systems,1998,34(2):420-427.
[11]徐雷.基于Linux 的无人机地面站设计与实现[D].广州:华南理工大学,2010.
[12]胡华海,廖剑华.VC++中数据接口技术的探讨[J].甘肃科技,2009(15):21-23.
[13]汤彬,李培耀.Windows 下多线程编程技术[J].上海工程技术大学学报,2002,16(4):310-313.
[14]杨紫千,张继永,岳阳.Windows 消息机制及其在软件系统设计中的应用[J].舰船电子工程,2004,24(5):81-84.
[15]宋青,郑冰,李国辉.VC 与数据库接口技术的研究[J].现代电子技术,2007,30(22):72-73.
[16]马少瑛,乌仁格日乐.基于CSerialPortEx 类的无人机地面站串口通信的实现[J].电脑知识与技术(学术交流),2011,7(8):5312-5314.
[17]刘刀桂,孟繁晶.Visual C ++实践与提高—数据库篇[M].北京:中国铁道出版社,2001.