基于GL Studio的无人直升机飞行监控软件设计
2020-06-12罗琼
罗琼
(中航工业直升机设计研究所无人机部 江西省景德镇市 333001)
为了实时监控无人直升机任务过程中的飞行状态,地面站飞行监控软件需要具备实时显示下传的无人直升机飞行参数、飞行模态和机载设备工作参数等信息,并且发送无人直升机飞行控制指令的功能。对于无人直升机来说,其任务过程中需要实时监控的状态参数数量庞大,运用图形化仿真技术,能够把复杂的数据变成直观的仪表图像显示。GL Studio[1]作为一款专业的仪表仿真软件[2]~[4],且以C++/OpenGL为底层,具有丰富的外部程序接口,能够创建实现进程间通信的人机交互界面,具有建模难度低、开发周期短等特点。本文利用QT搭建无人直升机地面站[5][6]飞行监控软件运行框架,加载GL Studio编制的虚拟仪表模块,且基于UDP通信原理,实现软件对外通信[7]。
1 软件架构
无人直升机飞行监控软件采用QT Creator和GL Studio进行设计与开发。软件采用模块化设计,具有良好的复用性和扩展性。软件架构如图1所示。软件包含界面显示、数据解析、多线程网络通信和XML协议读取等四个软件模块。
其中界面显示中的主页面虚拟仪表部分主要由GL Studio进行开发,其余参数显示和通信设置、数据存储、数据回放、协议设置等子页面由QT Creator开发。
2 基于GL Studio的虚拟仪表设计
软件中的虚拟仪表模块主要用于显示无人直升机飞行姿态、发动机状态和飞行控制系统状态等需使用图像形式显示的参数,由GL Studio开发,以动态链接库形式被QT开发的主程序调用。
图1:基于GL Studio的飞行监控软件架构图
图2:基于GL Studio的监控界面开发步骤流程图
图3:监控界面功能控件设计图
GL Studio是由美国DISTI公司开发,目前世界上最先进的面向对象的界面开发工具之一,用于创建实时的、三维的、照片级的交互图形界面,有效率高及使用简便的特点。其使用的是面向对象的方法,能自动生成高质量的代码,具有OpenGL的渲染技术。GL Studio在Windows下的编译环境为Microsoft Visual Studio,在其安装过程中将自动检测Visual Studio的版本并匹配相应的工程创建向导。因此本文采用GL Studio在Visual Studio 2010环境下进行开发,具体分为以下几个步骤,流程图如图2所示。
(1)利用Visual Studio 2010创建GL Studio工程,在工程目录下会存在一个GL Studio (*.gls)文件,可以在这个文件中进行界面编制;
(2)根据需求设计界面整体布局;
(3)针对涉及的显示参数制作需要使用的贴图纹理及功能元件;
(4)将当前制作的图形及功能元件转换成C++源代码,并添加通信代码;
(5)测试与集成。
2.1 创建工程和界面布局
利用Visual Studio 2010开发工具创建一个GL Studio工程。在绘制界面之前需要对整个.gls文件的一些属性进行设置,如定义界面窗口的名称、生成代码的类名及代码文件的路径等。
根据需求,操作人员在地面需要监测无人直升机的飞行姿态、发动机状态、无人直升机的位置信息和飞行控制系统运行状态等。飞行姿态所涉及的参数有俯仰角、滚转角、航向角、高度、速度等,这些参数可用虚拟地平仪显示。发动机状态相关的参数有发动机转速、旋翼转速、发动机开车停车状态、压力、温度等,这些参数可以用虚拟发动机仪表、温度计和压力计显示。无人直升机位置信息可以使用简易地图或者表示与地面站相对位置的图形示意上显示。飞行控制系统运行状态主要为一些参数状态,可以使用状态切换控件和数值显示控件表示。
因此将监控界面划分为飞行姿态区域、发动机状态区域、位置信息区域和飞控系统参数区域四个部分。
2.2 制作功能元件
首先制作功能元件的贴图纹理,添加贴图纹理是提高功能元件直观真实的有效方法。贴图纹理有两种制作方法,一种是利用Photoshop等常用的图形编辑软件制作,还有一种是利用GL Studio自带的图形渲染技术进行绘制。由于本文监控界面中涉及的显示参数比较简单常见,因此采用第二种方法绘制贴图纹理。其次命名对象,即对贴有纹理或需要接收数据等重要图元命以恰当的名字,以便更方便的管理、分组、查找和编辑。最后添加相应的功能,为实现虚拟仪表的功能,即能够将收到的数据实时地、动态地在界面上显示和响应,如发动机指针的旋转、参数的显示、高度表的移动、压力计的伸缩等功能,则需要在代码编辑区中编写实现各个部分响应的代码。利用GL Studio提供的诸如实现图元移动、旋转、比例缩放、闪烁、切换及文本输出等API函数,可有效实现以上功能。本文监控界面中制作的主要功能元件如下,效果图如图3所示。
2.2.1 地平仪
地平仪主要显示无人直升机的俯仰角、滚转角和航向等参数。利用函数DynamicTranslate (float x,float y,float z,bool relative=false)控制俯仰角刻度的移动;函数DynamicRotate (float x,float y,float z) 可以控制地平仪图元以及航向角图元的旋转。
2.2.2 高度表和速度表
高度表和速度表的原理相同,都是通过使用函数DynamicTranslate (float x,float y,float z,bool relative=false)控制刻度的上下移动,并在移动超出刻度表长度范围时利用String()函数改变刻度表上的数值,以此显示更大范围的数据。
2.2.3 发动机仪表盘
发动机仪表盘显示的是发动机的转速,通过使用函数DynamicRotate (float x,float y,float z)来控制发动机仪表盘指针的旋转。
2.2.4 压力计
压力计的原理同发动机仪表盘,压力计下的数值显示是通过String()函数来实现的。
2.2.5 温度计
通过使用函数DynamicScale(float x,float y,float z)来控制温度计图元的按比例伸缩,并通过函数DynamicTranslate (float x,float y,float z,bool relative=false)移动伸缩后的图元到正确位置。温度计上数值的显示原理同压力计。
2.3 代码生成和编译执行
GL Studio的代码生成器能够将当前制作的界面转换成高质量的C++源代码。将生成的源代码添加到GL Studio工程中,并且编译执行。若需要修改可重复功能元件设计、添加和生成代码以及编译执行的步骤。最终编译执行后得到一个以.dll为后缀的动态链接库文件。如图4所示。
图4:监控界面执行图
3 软件集成
在包括虚拟仪表模块在内的软件模块设计完成后,使用QT Creator进行软件集成框架开发,完成软件数据交互和硬件适配。根据前期的需求和接口设计,本飞行监控软件采用UDP组播的形式进行外部数据交互。硬件适配则是根据软件运行的硬件环境,选择对应的运行支撑库进行添加。
4 应用实例
飞行监控软件应用于无人直升机地面站人机交互席位上。在软件首次使用前,根据实际的使用情况设置好通信参数和协议版本。在经过以上配置后,软件在运行过程中将自动开启对应的数据接收线程,以及读取对应的协议文件,以适应当前型号的使用要求。在软件实际使用过程中,接收站内转发的无人直升机下传数据,并将其解析显示在软件界面上,如图5所示。经模拟验证,本软件运行稳定,能够对无人直升机下行遥测数据进行实时解析和显示。
图5:飞行监控软件-监测部分
5 结束语
本文详细介绍了基于GL Studio的无人直升机地面站飞行监控软件的编制过程。用本文方法编制的监控软件,经模拟无人直升机下传数据验证,该类监控软件能够实时监控并动态显示无人直升机的各种参数,具有直观、方便使用等特点,为无人直升机的飞行提供了一定的帮助。今后可以从提高监控界面的开发效率及其通用性的角度,将功能元件模块化,达到进行简单的组装就可编译集成的效果。