Modeling and Simulation
Vol.04 No.01(2015), Article ID:14773,5 pages
10.12677/MOS.2015.41003

Design of Flight Virtual Cabin Simulation Instrument Based on GL Studio

Yuanzi Xu, Dengdi Liu, Zhiwei Zhang, Kungang Yuan, Daogang Jiang

Air Force Command College, Beijing

Email: xu_yuanzi@163.com

Received: Jan. 10th, 2015; accepted: Jan. 24th, 2015; published: Feb. 2nd, 2015

Copyright © 2015 by authors and Hans Publishers Inc.

This work is licensed under the Creative Commons Attribution International License (CC BY).

http://creativecommons.org/licenses/by/4.0/

ABSTRACT

In order to display various states of the aircraft in time during flight simulation test, a flight simulation technique which can response timely and can provide a good man-machine interface is needed. In this paper, a flight virtual cabin simulation instrument method based on GL Studio is designed. This paper displays how to model the artificial horizon, altimeter and multi-function display instruments. This paper shows the way to design simulation instruments by GL Studio and VC++ development platform. Practical engineering tests show that the simulation instrument design method can meet the needs of all kinds of flight training and engineering projects.

Keywords:GL Studio, Simulation Instrument, UDP

基于GL Studio的飞行虚拟座舱仿真仪表设计

徐元子,刘登第,张志伟,袁坤刚,蒋道刚

空军指挥学院,北京

Email: xu_yuanzi@163.com

收稿日期:2015年1月10日;录用日期:2015年1月24日;发布日期:2015年2月2日

摘 要

为及时显示飞行仿真试验中飞行器的各种状态,需要飞行仿真仪表及时响应并提供良好的人机交互界面。本文介绍了一种基于GL Studio的飞行虚拟座舱仿真仪表设计方法,对地平仪、高度表、多功能显示器仪表设计建模。本文介绍了通过GL Studio和VC++开发平台设计仿真仪表的实现方法,实际工程检验表明这种仿真仪表设计方法能够满足飞行训练和工程项目的需要。

关键词 :GL Studio,仿真仪表,UDP

1. 引言

随着我国军用飞机的快速发展,座舱仪表的显示方式正向综合电子显示方式转变。飞行座舱仪表仿真对飞行系统仿真至关重要,采用现代化的飞行座舱仪表仿真系统提供照片级的仿真度,给学员真实的感觉。由于飞机设备价格昂贵,受场地、安全因素的限制,学员不能完全实物训练,飞行座舱仪表仿真系统方便了学员的飞行训练,有效提高学员的操作能力和解决问题能力。

飞行座舱仪表数目繁多、结构复杂,GL Studio能够创建实时的、三维的、照片级互动图形界面,是一款独立平台的快速原型工具[1] 。GL Studio可以实现飞机座舱仪表仿真的有效开发和管理,并且有较强实时渲染能力和交互能力,生成的C++代码可以单独运行,也可以嵌入VC++等其他应用中,为系统的开放性提供技术保障[2] 。本文基于“飞控系统仿真平台”课题的研究内容,对飞行座舱仪表仿真系统展开研究,采用GL Studio与Visual C++混合编程,对飞行座舱仪表进行三维建模仿真。

2. GL Studio简介

GL Studio是美国DiSTI公司开发的用于虚拟仪表仿真的旗舰产品,是高逼真度图形和互动控制三维仿真软件,在国防应用中主要用于搭建虚拟座舱,进行仪表仿真。GL Studio软件包括设计器和代码生成器,软件能与HLA/DIS仿真应用相连,生成的C++和OpenGL源代码可以单独运行,可以嵌入其他应用中,能够运行于Window7、Window8、WindowXP、IRIX和Linux操作系统上[1] 。

2.1. GL Studio设计器

设计器是一个直观的用户图形界面,提供十种图元,包括多边形、控件和TrueType文本对象等,可以叠加组合成复杂的仪表结构,转换为各种需要的控件设备。主控窗口包含一个树状结构显示的层级视图,便于浏览控制对象及其相关属性,易于被GL Studio代码生成器使用。

GL Studio具有照片级别图形界面设计器,支持用户在设计窗口直接绘制图形并添加真实的仪表纹理,纹理支持JPEG、BMP、PNG、TIFF等多种图形格式[3] 。用户使用工具可对纹理进行缩放、切分、旋转、翻转等操作,获得理想的效果。图形界面设计器能很快将图形模型化,简单的几何图元通过叠加组合形成复杂的仪表结构,将几何图形转换为各种需要的控件设备,便于快速绘制美观的图形界面,创建复杂的交互式仪表设备[4] 。

2.2. GL Studio代码生成器

GL Studio的代码生成器能够将图形设计器绘制的对象交互生成C++和OpenGL源代码,并将其代码定制为C++类,集成到仿真应用程序中。GL Studio使用运行时间类结构,运行时间类结构提供图形对象,显示列表和用户界面对象的框架。运行时间类是一个独立平台,允许开发人员只写一次代码就能应用到所有运行时间类支持的GL Studio平台。GL Studio软件能够逼真地再现仪表参数的显示、修改、读取等功能,具有图形逼真度高、操作流畅、人机界面友好等特点,适合可视化仿真的项目开发。

3. 仿真仪表设计

飞机座舱仿真仪表非常复杂,这里选择主要仪表显示,包括高度表、地平仪、显示器和多个旋钮和开关。仿真仪表组成结构如图1所示。

仿真仪表使用面板整体布局易于管理。各仪表模块转换为可插入式的元件,通过各自的旋钮调节,使用统一的开关调试并将仪表各参数通过MFD显示。MFD多功能显示器可以显示空速里程、高度里程、方向加速度、信号灯指示等等。使用GL Studio对仿真仪表做纹理设计、仪表控件设计、添加属性和函数,组合各元件并测试运行。

4. 仿真仪表开发

4.1. 开发流程

使用GL Studio开发仿真仪表的流程如图2所示,分为纹理设计、板面设计和测试运行三个步骤。(1) 纹理设计先采集图像,如飞行高度表、地平仪等仪表的图片。处理素材将图像剪贴并保存为PNG格式,因PNG格式支持alpha通道透明度,具有透明反转功能,能更好的用透明纹理设计图形界面。最后制作纹理,将素材按照所需仪表的部件制作成纹理。(2) 面板设计将仪表模块转换为可插入式的独立元件,为仿真仪表添加属性方法和响应函数等交互行为,组合各元件为面板上的仪表控件。(3) 测试运行生成代码,对各仿真仪表进行驱动,调试并运行项目。

本文采用GL Studio与VC++混合编程,VC++环境采用Microsoft Visual Studio 2003,项目的开发流程为以下步骤。(1) 在Microsoft Visual Studio 2003平台上创建一个GL Studio 3.1 Application Wizard项目,建立主面板对象,生成.cpp文件和.h文件。(2) 使用GL Studio 将主面板的各仪表建立独立模型,各仪表

Figure 1. Constitutive structure of simulation instruments

图1. 仿真仪表组成结构

粘贴上制作的纹理贴图,保存设计的图形界面,生成VC++和OpenGL代码。(3) 为每个仪表添加必要的变量、属性和相应函数,实现数据驱动,如指针的转动,旋钮的转动等。保存源代码,添加到VC++工程中。(4) 编译、链接、运行GL Studio 3.1 Application Wizard项目,生成仿真程序。

4.2. 添加仪表属性和交互行为

使用GL Studio可以为创建的仪表添加各种属性和交互行为。本文为了便于修改、重用仪表,将每个仪表制作为独立模型,作为元件插入到主面板中。仪表可以单独运行,如图3所示的高度表。

用户通过使用GL Studio添加代码的窗口设计仪表的属性、方法和回调函数。下面以地平仪、高度表和总控开关为例,介绍对仪表的驱动。

4.2.1. 地平仪

Calculate函数负责数据的接收处理,每一帧画面的渲染之前都自动执行一次Calculate函数,帧循环能够不断的更新数据实现仪表的驱动。改写地平仪的Calculate函数,当主控开关启动时地平仪实现一定角度的转动。

objects->Group::Calculate(time);

//启动开关

if(_opening)

{

Pitch(RampFloat(time/.7,-25,40));

Roll(RampFloat(time/.8,-30,30));

}

4.2.2. 高度表

仿真仪表中高度表的指针会不断旋转,需要定义属性和相应的set,get方法。外部数据使用set,get方法修改和读取指针偏转信息。

Figure 2. Development process of simulation instruments

图2. 仿真仪表开发流程

Figure 3. Altimeter

图3. 高度表

//定义属性

// set 方法

voidHighness(const float& value)

{_highness = value; }

// get 方法

float Highness(){return_highness;}

//对高度表的指针进行驱动

highnessdisplay->Value(_highness);

floathigh_100=(float)fmod(_highness,1000.0f)/100.0f;

needle->DynamicRotate(-(high_100*(360/10)),Z_AXIS);

4.2.3. 总控开关

仿真仪表组合到面板上后需要一个总控开关,控制各仪表的开启和关闭,总控开关实现的回调函数如下。

//变量rval接受回调值

bool rval = false;

//回调函数

if(ObjectEventIs(evDetentVal))

{

Opening(self->DetentVal()==1);

rval = true;

}

return rval;

总控开关通过回调函数控制各仪表的开启和关闭。

//总控开关接受到值

adiDevice->Opening(value);

altimeterDevice-> Opening (value);

mfdDevice->SetResource(Opening,value? TRUE:FALSE);

GL Studio中添加的代码通过自身的驱动函数与VC++关联,生成的源代码嵌入到创建的项目中。

5. 通信接口设计

实现仪表模型逻辑关系仿真后,要将飞行仿真系统产生的数据发送到仿真仪表,实现对高度、空速等参数的实时监控与控制。因为飞行仿真系统产生的数据实时性要求较高[5] ,所以通信采用无连接的UDP形式[6] 。飞行仿真系统发送解算后的仿真数据,仿真仪表负责在每一个循环周期接受数据。

GL Studio中使用WinSock2开发通信程序,已经默认添加了winsock2.h头文件和WS2_32.lib链接[7] ,可以直接调用socket函数进行设计。数据通信接口是飞行仿真系统与各仪表程序交互的接口,由于各仪表独立建立模型,分配id号予以区分。仪表的传输数据可以单独封装,数据通信接口通过各仪表的id识别。形式化表示为:数据通信接口→{(id:仪表1),(id:仪表2),…,(id:仪表n)}。模拟飞行时仿真系统主程序将数据信息经网线传输,通过UDP接口传送给仪表接收,仪表完成驱动,产生动态数字信号,显示动态画面。

Figure 4. Effect chart of simulation instruments

图4. 仿真仪表效果图

6. 仿真结果及分析

本文使用GL Studio和VC++混合编程,通过纹理制作和仿真仪表的面板设计完成了飞行座舱仿真仪表的效果图(图4),各仪表和开关、旋钮等在面板上组合显示。经过编译、链接、运行,生成可执行的虚拟座舱仿真仪表程序。

飞行仿真系统主程序启动后初始化座舱主面板上所有仿真仪表,座舱仿真仪表显示主程序发送的仿真数据。仪表响应用户的界面事件,及时反馈数据到飞行仿真系统主程序,实现座舱仿真仪表与飞行仿真系统的数据交换。通过加载数据测试,时延为3 ms,时延与传输数据量和网络负载相关,传输数据量越大,网络负载越大,时延越长。

本文的设计为便于修改和重用仪表,提高加载速度,将每个仪表存储为如.exe或.dll的独立文件,缩短了加载文件的时间延迟。数据通信接口通过id号识别仪表,单独封装传输的数据,避免仪表参数数据交互混乱。

7. 结论

本文根据GL Studio制作仿真仪表逼真度高、创建效率高、代码移植性好的特点,通过GL Studio设计开发了飞行座舱仿真仪表,在Visual Studio环境下编译运行。本文设计的各仿真仪表可以独立运行,便于修改、重用。飞行座舱仿真仪表面板组合多个仿真仪表,各仪表传输数据单独封装,能够快速响应飞行仿真的飞行状态参数,提供良好的显示界面。飞行座舱仿真仪表设计作为飞控系统仿真平台的重要组成部分,具有较好的响应能力和交互能力,并起到节约训练经费、提高训练质量的作用,是此类问题的有效解决方法。

文章引用

徐元子,刘登第,张志伟,袁坤刚,蒋道刚, (2015) 基于GL Studio的飞行虚拟座舱仿真仪表设计
Design of Flight Virtual Cabin Simulation Instrument Based on GL Studio. 建模与仿真,01,17-22. doi: 10.12677/MOS.2015.41003

参考文献 (References)

  1. 1. 张毅, 王士星, 等 (2010) 仿真系统分析与设计. 国防工业出版社, 北京.

  2. 2. 黄晓雪, 韩端锋, 袁利毫, 等 (2013) 基于GL Studio的船舶驾控台仿真系统的开发. 船舶, 4, 73-77.

  3. 3. 崔小鹏, 邵英, 李万 (2011) 基于GL Studio的电力监控系统设计. 船海工程, 2, 122-124.

  4. 4. 陈怀民, 吴锦雯, 黄晓波 (2013) 基于GL Studio的飞行仿真虚拟仪表软件设计与实现. 测控技术, 5, 89-91.

  5. 5. 王勇, 肖永辉, 王艳 (2013) 基于GL Studio飞机座舱仿真技术研究. 通信与计算技术, 1, 21-26.

  6. 6. 李想, 刘显锋 (2011) 用GL-Studio 软件实现飞行模拟器虚拟座舱.飞行仿真, 4, 6-10.

  7. 7. 石春虎, 姜建芳, 曲红星, 等 (2011) 直升机虚拟座舱中网络通信模块设计. 计算机技术与发展, 8, 185-187.

期刊菜单