APP下载

基于VC++/GL Studio 的通用飞行组合虚拟仪表设计及实现

2019-03-25安佳宁

宇航计测技术 2019年1期
关键词:控件刻度油门

安佳宁

(中国人民解放军92419 部队,辽宁兴城125106)

1 引 言

某飞行视景仿真系统为半实物仿真系统,能够实现特定型号无人机的全数字动态仿真,能在虚拟三维场景中显示无人机从起飞前测试到空中飞行的全过程,在此过程中,需要同步显示无人机的各项飞行参数。 通过基于VC++的GUI 编程方案来实现参数的通信、显示较为成熟,但也存在开发的界面相对简单,数据不直观等问题,而通过VC++/GL Studio 的混合编程来开发图形化界面以提升数据可视化效果是较为可行的技术途径[1-3]。

GL Studio 是由美国DISTI 公司开发的专业仪表仿真软件,它运用面向构件的图形化仿真技术,能够把繁杂的程序和数据变成直观的仪表图像进行显示,使得开发人员在建模初期就可以实现所见即所得的效果,使仿真的重心从程序的编写改为对仿真对象的分析和研究[4-6]。

2 飞行组合仪表设计

2.1 组合仪表构成及布局

根据显示需求,组合仪表应显示的信息包括无人机姿态、航向、速度、高度及发动机油门偏度状态。 为此在组合仪表中设计了姿态显示器和水平航向指示器。 速度和高度信息采用刻度条表示,分别用于显示无人机的实时飞行速度和高度信息,发动机油门偏度状态采用仪表刻度盘形式表示。 仪表的布局考虑到视觉可达性,将姿态显示器居中,速度和高度刻度条分别在姿态显示器左右,下方左边为水平方位仪,右边为油门偏度仪表[7]。

2.2 组合仪表详细设计

仪表的配色:仪表背景为黑色,姿态显示器中地面背景为棕褐色,天空背景为蓝色;其它仪表中刻度为白色,当前正在起作用的方式为绿色,刻度指示符为绿色[8]。

姿态显示器提供姿态保护告警,当横滚通道γ ≥30° 时,滚转角指示符显示为黄色,当γ ≥45°时,滚转角指示符显示为红色。

发动机油门偏度仪表刻度盘中,油门小于70%为绿色,大于70%小于90%为黄色,大于90%为红色。

2.3 仪表开发流程

GL Studio 的开发流程如图1所示。

图1 GL Studio 开发流程框图Fig.1 Development flow chart of GL Studio

本项目中,由于无人机没有驾驶座舱,因此无需按照真实座舱和仪表面板进行仿真,省却了从照片开始进行处理的环节。 仪表的开发工作直接从创建组件开始,随后为各组件创建行为属性,生成C++代码,在VC 环境下调试编译运行。

2.4 仪表数据驱动机制

视景仿真系统运行时,飞控计算机以有线通信方式向地面测控站发送下行数据,地面测控站按固定帧周期通过以太网向视景仿真系统主控子程序发送遥测数据,驱动飞机三维模型飞行和仪表显示。

3 组合仪表软件实现

3.1 仪表编程

GL Studio 在用于人机界面开发时,可以各自独立开发可重用软件对象(Reusable Software Object,RSO),然后将其转化成∗. gls 组件,最后予以集成实现组合仪表功能。

3.1.1 速度刻度条

在GL Studio 中新建文件,设置窗口属性,“Create”中通过选择“Inserts a GlsLinear Scale”、“Line Object”等,生成刻度条及对应刻度数值。

在Code 中,为类属性添加float 型成员变量_altitude,定义高度显示函数:

void Altitude(const float& value)

该函数的功能是将输入的高度参数按比例在刻度条中移动,实现高度的动态显示。

关键代码为:

glData 为仪表控件通过网络端口UDP 协议接收到的飞控数据帧。 最后通过“Convert component”将其转化成组件对象。

3.1.2 高度刻度条

高度刻度条控件的设计与速度刻度条类似。

3.1.3 姿态显示器

姿态显示器用于显示无人机的俯仰和横滚角。新建文件,设置窗口属性,“Create”中通过选择“Inserts a GlsLinear Scale”、“Line Object”等,生成俯仰通道刻度条及对应刻度数值。

3.1.3.1 俯仰通道

在Code 中,为类属性添加float 型成员变量_pitch,定义俯仰角显示函数void Pitch(const float&value),实现将输入的角度按比例在刻度条上显示的功能。

temp 为通过飞控数据帧计算出的当前俯仰角值,需要判断正负。

3.1.3.2 滚转通道

在Code 中,为类属性添加float 型成员变量_roll,定义滚转角显示函数void Roll(const float&value),实现将输入的角度按比例在仪表刻度上显示的功能。

部分实现关键代码如下:

temp 为通过飞控数据帧计算出的当前滚转角值,需要判断正负。 最后通过“Convert component”将其转化成组件对象。

3.1.4 水平方位仪

水平方位仪在GL Studio 中新建文件,设置窗口属性,“Create”中通过选择“Inserts a Gls Angular Scale”绘制圆盘刻度,再通过“Line Object”、“Text Box”等生成东南西北及刻度数值。

在Code 中,为类属性添加float 型成员变量_heading,定义航向显示函数void Heading(const float& value),实现将输入的角度按比例在仪表刻度上显示的功能。

glData 为仪表控件通过网络端口UDP 协议接收到的飞控数据帧。 最后通过“Convert component”将其转化成组件对象。

3.1.5 油门偏度

油门偏度控件的设计与水平方位仪类似。

3.1.6 组合仪表的集成

在VC++中新建Standalone AppWizard 工程,进入∗.gls,将以上单独设计的控件分别通过“Inserts a Component”加入组合仪表界面,并按设计界面布局,界面中的文字标注采用贴图实现,最后在Generation 中生成C++代码。

4 组合仪表通信接口设计

Sockets 规范是得到广泛应用的、开放的、支持多种协议的网络编程接口[9],而网络通信中常见的是传输控制协议TCP 和用户数据报协议UDP。 前者面向连接、具有数据确认和重传机制;后者不需要建立连接,实时性较好[10]。 考虑到本项目的实际应用情况,采用了UDP 协议。

组合仪表处于接收端,首先创建套接字,然后将套接字绑定到一个端口,循环接收数据即可。 关键实现代码如下:

在初始化函数Initialize()中加载套接字库:

5 编译调试

在VC 环境下编译调试,根据飞控帧协议对接收的飞控数据进行解析处理,并驱动对应的仪表显示,运行显示如图2所示。

6 结束语

本文采用VC++/GL Studio 混合编程,实现了某无人机飞行仿真系统的仪表显示需求,并通过VC++平台实现了网络通信和数据驱动仪表功能。实际应用表明:该组合仪表人机界面友好,仪表组件可重构性好,工作性能可靠稳定,能够适用于其它同类无人机飞行仿真显示系统和飞行训练系统。

图2 飞行组合仪表效果图Fig.2 Effect picture of flight simulation integrated instrument

猜你喜欢

控件刻度油门
基于C++Builder 的电子邮件接收程序设计*
使用“填表单”微信小程序 统计信息很方便
基于.net的用户定义验证控件的应用分析
驾哥
剪彩带
谁大谁小
谁大谁小
坐诊专家
测量三字歌
Spreadsheet控件在Delphi数据库系统中的编程与应用