APP下载

基于Qt的飞行器通用上位机软件设计

2017-06-05吕伟龙向豪杨雨昕

电子技术与软件工程 2017年7期
关键词:上位机

吕伟龙+向豪+杨雨昕

摘 要 针对飞行器上位机控制器的应用需求,设计了一个适用于桌面、移动端、嵌入式平台等的跨平台飞行器上位机软件。本系统基于Qt5.5框架,运用C++语言编写出主程序,在Qt框架中调用百度地图,实现飞行器的路径规划与显示;采用JSON格式自定义的通信协议,实现上、下位机的数据交换和上位机的命令发布。另外,本文还详细讨论了通信时的界面控制逻辑与飞行器安全飞行的控制方案。

【关键词】多旋翼飞行器 上位机 图形视图框架 数据传输协议

Qt是一个由Trolltech公司开发的,为桌面,移动端,嵌入式设计的跨平台的应用程序框架,支持包括Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等平台。Qt本身不是一种编程语言,它是一个用C++写的框架。预处理器(MOC元对象编译器)被用于利用某些特征(例如信号和槽)来拓展C++语言。在编译步骤中,MOC解析用Qt扩展的C++源文件并从中生成符合标准的C++的源文件。因此框架本身和应用程序/库使用它可以通过任何符合标准的C++编译器例如Clang,GCC,ICC,MinGW和MSVC。

多旋翼飞行器由于其能够垂直起降,并且具有机动灵活的特点,不仅广泛应用于军事、农业、商业等领域,而且近些年逐渐进入大众的视野里,成为普通百姓也能购买、操作的机械“玩具”。但由于多旋翼飞行器的旋翼转速极快,如果误操作或者飞行器失控很容易发生危险;市面上也很少有能够支持多品牌、多种多旋翼飞行器的上位机程序。为了解决这些问题,本文基于Qt平台设计了一种控制简单、操作安全、用户体验较好的通用飞行器上位机系统。

1 通信原理介绍

1.1 数据传输系统

本文采用的是一个主从式的数据传输系统。主设备(上位机)先对数据进行处理,然后再向从设备(下位机)发送所要执行的命令;从设备接收到数据后分析是哪种命令,接着发送已接收到的信号和相关的信息给主设备;主设备接收到从设备已接收的信号后,开始重复第一步,依次循环。数据传输系统的流程图如图1所示。

1.2 数据传输协议

本文采用的通信协议利用的是轻量级数据交换格式JSON,具体交换内容如表1所示。

2 上位机软件设计

上位机软件的主要功能结构图如图2所示。

采用Qt框架,C++语言实现的上位机软件,主要包括以下窗口:

2.1 设置窗口

主要实现通信前对各种相关数据的设置和路径规划,同时也将相关信息在窗口中显示给用户,主要包括以下界面:

2.1.1 基本设置界面

主要实现对通信所需的各个数据的初始化和电量显示,主要包括以下功能(界面如图3所示):

(1)串口设置:通过调用Qt的

串口库来对串口的几个参数(串口号,波特率,数据位,停止位,校验位,流控)进行设置,用户可以在设置好参数后,点击打开串口按钮开始通信。

(2)安全相关提示设置:可在次部分对失控行为,低电量、超低电量提示进行设置,也可以在次部分看到电池电量,保证飞行器的安全。

2.1.2 路径设置界面

主要实现在开始任务前对飞行路径的设置,主要包括以下功能(界面如图4所示):

(1)地图显示:通过调用Qt的库加载在线地图,地图里包括操作手当前位置、飞行器当前位置和飞行器的行动轨迹。

(2)飞行路径设置:用户可以通过点击地图来规划飞行器的飞行轨迹,也可以按下旁边的删除一个/删除全部按钮来对之前点击的轨迹进行修改,主要通过修改.html的代码实现。

2.2 控制窗口

主要实现通信时对各种相关部件的控制,同时也将相关信息在窗口中显示给用户,主要包括以下功能(界面如图5所示):

(1)云台控制:用户可以通过点击其中的按钮,来改变云台的状态(光圈,变倍,焦距,方向)并保存至本地,每次交换数据结束后自动清空此类数据。

(2)任务指令发布:提供8个指令方便用户操控飞行器,当用户点击按钮后,根据用户所要发布的指令,读取相关本地数据,自动构成一个符合JSON要求的字符串并通过串口发送出去。

(3)高度速度控制:用户可以通过滑动控件来改变飞行器的高度和速度。

(4)相关信息显示:在每次交换信息之后,将新传来的关键数据显示出来,方便用户在控制飞行器时实时的获取飞行器的关键信息。

3 关键技术的实现

3.1 地图的导入和交互

要想在Qt框架中导入百度地图,首先要到百度地图API官网上注册一个密钥,可在通过其网站自动生成一个在线地图的.html文件,也可自己编写;然后在Qt设计师界面创建一个QWebView的控件,再将QWebView控件中URL选项填入之前生成的.html文件地址,注意要调用此控件的前提是在.pro文件里添加一行QT +=webkitwidgets;接着可以修改之前的.html文件,通过百度地图的API,设计适合本系统的显示内容(如飞行路径等);最后通过调用库中的evaluateJavaScript()函数和addToJavaScriptWindowObject()函数完成Qt与地图的交互。

3.2 通讯数据的转换和分离

因为本系统调用的是Qt内部的串口库,所以不需要过多的研究底层的通信和解析方式,通过调用次库中的write()和readAll()函数可以直观的用字符串进行通信。我們要做的就是在这个库的基础上,设计一个较为简单直观的通信协议,方便上、下位机转换、分离。

3.2.1 数据的转换

本系统的数据交换量不大,故采用轻量级的数据交换格式JSON。通过Qt内部的JSON库可以很方便的转换数据到本地。

3.2.2 数据的分离

因为串口的数据是每隔一段时间全部读取一次,再加上外界有可能有干扰,由此读取的数据很有可能丢失或出错,所以需要对有用的数据进行分离。本系统利用字符‘&和‘|表示一个命令的开头和结尾,从串口读取数据后,先将数据存入一个数据缓冲区,再将缓冲区里的数据从头开始扫,当描扫到第一个‘&后将‘&前的所有数据删除,再从次位开始扫描,直到出现‘|结束,把中间的数据提出,并转换为有效的数据;若有2个‘&连续出现,则认为是第一个‘&之后的数据错误,将第二个‘&前的所有字符删除。

3.3 通信时的界面控制逻辑

本系统的操作命令一共有如表1所示的9种,其中前8种为手动发出的命令,它们在软件中各有一个按钮可以操控,但是它们的执行有先后次序,例如开始任务命令需要在起飞后才能执行,所以开始命令只能在起飞命令发送并完成后才可以发送。为了防止用户在发送命令时产生误操作,也为了用户能更好的明白本系统的命令执行流程,故在通信过程中,本系统加入了一些限制条件,初始状态下可按的仅有起飞按钮,具体如表2。

3.4 飞行器安全飞行的控制方案

由于多旋翼飞行器的旋翼转速极快,如果误操作或者飞行器失控很容易发生危险,所以安全性问题是必须要解决的问题。因此,本系统设计了以下几点在安全性方面的优化:

(1)低电量提示:可以设置在电池处于低于20%电量的时候,上位机软件跳出提示窗口,提示用户已低于20%电量。默认开启。

(2)超低电量提示:可以设置在电池处于低于10%电量的时候,上位机软件跳出提示窗口,提示用户已低于10%电量,并终止当前命令,执行失控行为。此时本系统不允许用户继续进行操作,用户只能通过遥控器来操作飞行器。默认开启。

(3)失控行为设置:本系统中失控行为可设置的一共分为3种,悬停、返航、降落。默认为悬停。

(4)为了防止用户过快的改变高度/速度使飞行器失控,本系统设置了一个阀值--当用户一次性改变高度/速度超过10米/10米每秒时,本系统会跳出弹窗提示用户不能过快的改变高度/速度,并将改变量返回至原值±10。

4 结束语

文中介绍了一种适用于桌面、移动端、嵌入式平台等的跨平台飞行器上位机软件。对如何在Qt中导入地图以及如何运用Qt框架进行快速开发做了简单的介绍,详细的分析了上、下位机的通信原理、飞行器安全飞行的控制方案和通信时的界面控制逻辑。该软件运用Qt框架大大缩短了软件开发时间并减小了软件开发难度。软件模块功能分明,易于开发和维护且具有控制简单,操作安全的特点,适用于大部分厂商开发的飞行器。

参考文献

[1]黄超.基于Qt的嵌入式GUI的研究与实现[D].吉林大学,2011.

[2]张春艳.基于Qt的嵌入式图形用户界面研究与实现[D].大连海事大学,2008.

[3]邢四为.基于JSON的信息交互系统的研究与实现[D].安徽大学,2013.

[4]柯艳,李杰,孔祥雷,刘吉吉.基于USB2.0的多路数据采集系统上位机软件设计[J].测试技术学报,2010(04):351-356.

[5]孙迪,李沛鸿.百度地图API在WebGIS中的應用[J].河南科技,2013(22):165-166.

[6]百度开发者中心.百度API介绍.http://lbsyun.baidu.com/.2016.

[7]Qt开发者中心.Qt维基.http://wiki.qt.io/Main.2017.

作者简介

吕伟龙(1996-),男,江苏省南京市人。学生,本科大三,研究方向为软件工程系统分析设计,算法研究等。

向豪(1996-),男,湖北省荆门市人。学生,本科大三。

杨雨昕(1995-),男,江苏省镇江市人。学生,本科大三。

作者单位

中南民族大学计算机科学学院 湖北省武汉市 430000

猜你喜欢

上位机
基于单片机的无线液位监测系统
基于单片机的远程控制智能浇水系统