APP下载

四旋翼无人机地面站软件系统的设计与实现

2020-06-04金强方春华戚文杰

计算机时代 2020年5期
关键词:遥控器线程串口

金强 方春华 戚文杰

摘  要: 针对我校无人机应用专业学生操作无人机能力强而对地面站的实现原理理解不够深入的情况,以四旋翼无人机地面站为对象,以Qt5.4为开发平台,分别对地面站串口通讯、飞机虚拟仪表、地图浏览器、航点规划,以及数据存储等进行了设计,较完整地实现了地面站的各项功能。此设计具有一定的实用性,有助于加强学生对地面站实现原理的理解,提高他们的学习兴趣,为将来从事无人机工作夯实基础。

关键词: Qt; 无人机; 地面站; 系统设计

Abstract: Aiming at the phenomenon that the students of drone application specialty have strong ability to operate drones, but do not have a deep understanding of the ground station's implementation principles, this paper takes the quad-rotor UAV ground station as the design object and uses Qt5.4 as the development platform, to design the serial communication, aircraft virtual instrumentation, map browser, waypoint planning and data storage etc. of a ground station, which  realizes the most functions of the ground station. The design is practical, and is helpful to students' understanding of the ground station implementation principles and their learning interest, which lays the foundation for the future UAV work.

Key words: Qt; UAV; ground station; system design

0 引言

近年來,我国无人机产业日趋火热,小到航空摄影、航空测绘,大到农业植保、电力巡查、军警侦查等领域,无人机的应用越来越普及,于此同时,无人机地面站的发展也与时俱进,从美、俄等无人机发达国家发展现状和趋势来看,无人机地面站正朝着通用化、智能化、单站多机的方向发展。

无人机地面控制站软件技术是一项融合了图像处理、地理信息系统、数据传输与处理,以及先进控制等多种尖端技术为一体的先进技术[1]。目前多数地面站品牌间不通用,不能跨平台,导致在实际使用上产生诸多不便,考虑到Qt软件在图形界面开发上的优势,可实现“一次编写,随处编译”[2],能在几乎所有的操作系统上运行,本文以Qt5.4为开发平台、以四轴无人机地面控制站主要功能的实现为目标,通过完成设计,加强了我校无人机专业学生对地面站实现方法的理解,提高了他们的学习兴趣,为将来从事无人机工作夯实了基础,具有一定的实用性。

1 地面站总体设计

地面站布局如图1所示,主要由五个模块组成:①地面站与无人机或遥控器串口通讯模块;②地图显示模块;③航点信息模块;④状态显示模块;⑤数据存储模块。本文将围绕五大功能模块进行详细设计。

1.1 通讯模块设计

无人机与地面站实现通讯,有以下几种方案:①无人机使用USB线和地面站进行串口通讯;②无人机通过无线电台与地面站进行无线通讯;③无人机通过WIFI与地面站进行无线通讯等。本设计采用如图2所示的架构,四轴和遥控器分别通过UsbLink链路与地面站通讯,遥控器与四轴之间通过无线RadioLink链路进行通讯,本文重点介绍UsbLink链路的通信设计。

⑴ 串口链路(UsbLink)数据帧格式

RadioLink链路主要是实现遥控器将地面站发送的命令转发给四轴,同时将四轴的姿态信息上传到地面站,四轴平时由遥控器进行飞行控制,UsbLink链路采用虚拟串口通信方式,传输含帧头和校验位的数据包,其数据帧格式如表1所示。

⑵ 串口线程的创建及数据解析

线程也被称为“轻量级进程”,一个线程只有一个内核对象和一个栈,所需内存比较少,所以在编程时经常采用多线程技术来处理实际问题,从而避免因创建新进程而带来的系统资源消耗问题[3],本设计通过Qt的run()函数创建串口子线程的方法来实现串口收发数据,从串口线程内发出的信号,可以与主线程(UI界面)中的槽函数进行连接,从而可以在主线程中对数据进行处理。由于Qt5.4已集成了串口通信类QSerialPort和QSerialPortInfo,前者提供了操作串口的各种接口,后者提供了计算机中可用串口的各种信息,通过创建类的对象和方法很容易实现串口通信,串口子线程创建代码如下:

程序通过start()函数启动线程,在线程中既可以通过创建一个定时器信号(心跳程序)来连接槽函数读取数据,也可以在线程中通过创建串口对象myCom信号来连接槽函数读取数据,方法如下:

从串口读取数据后,通过先创建一个Data_Receive_Prepare函数来预解析数据,将读取的数据进行一次格式解析,格式正确后再创建Data_Receive函数来解析数据,函数中的参数就是符合协议格式的一个数据帧,以下是一行从地面站串口截取到的数据:

按照协议,开头0xAA两字节表示接受数据,01表示功能字,代表采集的数据是飞机姿态信息,0C表示数据的长度为12个字节,其中0xFFEB两个字节代表ROL,0xFFCA代表PIT,0x0D6C代表YAW,0x000002代表飞行相对高度,0x61代表飞行模式,0x0000代表加锁、解锁,求(0xAA+…+0x61+..0x00)之和为0x5F0,取低8位0xF0,正好等于最末一个字节,表示校验和正确。

猜你喜欢

遥控器线程串口
我是“糊涂虫”
浅谈AB PLC串口跟RFID传感器的通讯应用
时间遥控器
爸妈有个“遥控器”
浅谈linux多线程协作
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于并行控制的FPGA多串口拓展实现
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究