基于IData的飞行训练模拟器座舱设备仿真

2013-11-09 01:43姚嘉陵
指挥控制与仿真 2013年6期
关键词:座舱模拟器刻度

范 蓉,姚嘉陵

(空军军训器材研究所,北京 100195)

随着数字航空电子技术的飞速发展和应用,飞机座舱设备不断地向综合化、图形化、数字化发展。为降低飞行训练模拟器座舱设备仿真成本,便于安装、使用和维护,当前在飞行训练模拟器研制生产中,大量采用计算机实时图形仿真仪表(也称为“虚拟仪表”)技术,实时地为飞行员提供导航参数、电气系统参数、发动机参数、飞行参数、空中态势、电磁对抗环境等,以满足飞行训练的需要。工程上,通常使用Visual C++对这些专用的设备和座舱人机界面进行开发,虽然Visual C++是国际上通用的计算机高级语言,但是用来开发专用设备和座舱人机界面,手写代码的工作量非常大,并且随着仪表的综合性越来越强,以手写代码来描述仪表的复杂运动越来越困难,还容易造成仪表的某些特性被忽略,导致人机交互出现差错,编程调试过程中会消耗大量的人力物力和时间,开发的显示形式单一,不能满足日益丰富的需要。因此,一种易于开发的、可快速配置、具有图形化用户界面的虚拟仪表开发软件工具应运而生。本文重点介绍在Windows2000/XP和Visual C++6.0开发环境中,如何使用IData软件平台实现飞行模拟器虚拟仪表的开发设计和关键技术的应用。

1 IData概述

IData是一套提供快速开发动态交互式2D OpenGL的图形工具,能够快捷地创建仪表模型,并能实时响应程序变量和控制事件。其具有的跨平台特性使得它非常适合用来进行嵌入式系统、设备显示和仿真应用的开发。IData无须进行费时的代码生成和编译连接,减少了应用到仿真和其他数据显示及可视化应用中的图形开发和集成时间。

IData利用功能强大的图形用户界面(GUI)编辑器为仪表建模,并使用“byte code”格式保存仪表建模文件,该文件由IData渲染引擎加载和渲染,IData本身不对图形生成源代码,图形显示实现更新不需要生成或者编译任何代码,以利于实时渲染。IData支持纹理几何图形,透明区域、模板遮挡、裁剪、平滑渲染、反走样、高质量的TrueType纹理字体、alpha混合等功能,可以完成可见度控制、动态颜色变化、旋转数字、非线性缩放等任务[4]。它非常适用于飞行模拟器中模拟设备(如开关、模拟仪表等)的图形化;各类综合显示器和平显的图形、字符、数字动态模拟显示;与各类图型的叠加显示等。其特征和优点如表1所示。

表1 IData的特征优势

2 IData开发流程

仿真软件设计主要包括系统建模和显示驱动两部分。系统建模由IData软件实现,显示驱动由Visual C++6.0来完成,主要开发流程如图1所示。图中,方框下面的文字代表该步骤所用到的IData建模工具或APIs。在IData环境下进行系统建模时,首先对显示的图形进行分解,按要求完成图形建模,并对需要动态显示的画面定义其控制变量和属性。然后使用TestData-Generator对所建模型内变量的控制逻辑进行自测,接着在IDataLayout Editor里完成对图形的布局编辑,生成.idd文件。使用VC++6.0完成后台运行的显示驱动程序,该程序通过逻辑转换,将航电主机实时提供的数据转换成IData需要的数据,通过数据传输接口把处理好的数据传输到IData中,从而驱动IData界面中的受控图形和字符显示。

表2详细阐述了开发流程的每一阶段执行的典型任务。

图1 IData软件开发流程

表2 开发流程中各阶段主要任务

3 仿真建模中的关键技术

3.1 测试数据发生器(Test Data Generator)

图2 虚拟仪表地平仪数据测试界面

测试数据发生器是在虚拟仪表开发中,通过驱动IData命名内存变量[4],对仪表中受变量控制的动态部分进行验证和测试。它允许用户添加独立的成员变量来驱动仿真。此外对于添加的变量,可以根据变量实际需要进行变化范围、变化方式等细节设置,从而使仪表中受控的动态部分遍历所有的运动范围和测试边界条件,具体操作如图2所示。图2右侧是使用IData绘制的飞机座舱内地平仪仪表的画面,左侧是用于测试驱动地平仪仪表数据的测试数据发生器的界面。在此界面中,可以设置地平仪的侧滑、俯仰、滚转三个控制变量的运行范围和步长,按下运行后,数据便可按照设定好的方式增加或减少,同时地平仪画面会根据数据变化进行运转。通过这种方式,就可以简单地实现对所绘制的仪表中动态部件运行情况的检测,不需要费时的搭建环境通过网络传数或者编写发数程序来进行测试,也可以缩短联网调试的时间。

3.2 模板遮挡的运用

在进行绘图建模时,有些部件有一定的运动范围,超出该范围就不显示,或者在指定范围外才显示。通过模板遮挡可以按照所设想方式进行显示或隐藏。需要注意的是,在IData绘制图像的时候,左侧树状结构图中下层的画面会遮盖上层的画面,所以无论是设置遮挡模板还是绘图,都要适当地调整画面顺序。如果一幅画面有多个遮挡模板,建模时就需要将遮挡模板进行编号并且清楚与各个遮挡模板相关的画面元素是在遮挡模板的内部显示还是外部显示。具体设置是在IData的Edit shape窗口中Visibility属性单下的Stencil中进行操作。在Index中输入模板的编号,并选择该画面是作为此编号下的新增模板,还是该画面在已经定义好的此编号模板内部显示或者外部显示。

利用模板遮挡和画面元素的运动属性可以解决平显仿真、仪表仿真中的一些技术难点,如平显中刻度带建模、精高表中数字显示窗口等需要表现滚动显示刻度或数字的问题。为了使刻度带画面看起来是在平滑的运动,避免出现画面抖动或刻度跳动显示的问题,建模时需要注意以下几点。

1)刻度带绘制

在平显中,指示空速刻度带是在一定范围内垂直平移显示的。假设飞机的指示空速范围时0~1400km/h,刻度值间隔50km/h。刻度带的长度不可能依次绘制到1400km/h。所以只需要绘制出大于显示范围的画满即可。在绘制刻度带时,要求刻度线之间距离均匀,并且以一个参考点垂直对齐,可以通过右键菜单中Replicate功能简单实现。需要注意绘制刻度带范围上下至少超过显示范围即遮挡模板一个单位刻度的画面。如果出现上述情况则在画面运动时,会发生画面抖动扭曲的现象。

2)属性设置

图3 平显画面建模

我们将绘制好的刻度带画面所有元素在窗口左侧的树状列表中打包命名,双击重命名的Group,在Behaviors属性页中设置运动方式为Scaled translation,添加自定义变量,在坐标系中准确标定它的起始点、终止点和附着点,还要确定起始终止的参数,该刻度带间隔为50,所以参数设置为(0,50)。图3为平显画面中刻度带属性设置界面和设置属性后实时渲染的平显画面。

3.3 隐藏技术的运用

在IData中,可以利用Visibility选项,来控制绘制的画面是否显示。在建模时,把每个需要控制的画面打包成一个group,对每个组的显示与否都关联与同一个变量Vis,并设置属于自己的编号。这样就可以通过控制变量的数值来控制显示哪一个画面,当Vis等于1时,其他的画面隐藏,编号为1的画面显示。

图4 某型飞机座舱内开关面板

利用这个技术,可以实现部件的闪烁,例如在平显画面中,飞行时飞机的迎角达到告警抖动迎角时,迎角显示字符会闪烁。只需要将该字符与自定义变量int flash相关联,设置属性为当flash=1时显示,在程序中控制变量flash在0和1之间变化,即可使该部件闪烁。

同时,还可以动态的模拟出开关的开合和点亮显示灯等效果。图4为利用隐藏技术开发的某型飞机座舱内开关面板的示例。

3.4 逻辑建模

如果需要显示图4所示的效果,还需要为画面中的控制变量添加逻辑关系。IData逻辑建模视图允许用户图形化添加复杂的逻辑图表与IData显示交互,逻辑与图形一起生成bytecode,逻辑可以代替编写插件的源代码,允许用户组织逻辑关系图进行画面的分层控制,图5为逻辑建模界面。逻辑与IData的绘图模型使用的特征紧密相连。逻辑建模界面内可以使用相同的变量,检查受控的事件,甚至调用外部实体函数。

逻辑建模用于做复杂的变量分配,可以完成绘制虚拟仪表时常用的一些受控事件,并且通过简单的点击即可从一个图形用户界面跟随相应画面一同拷贝到另一个界面。对于一些典型的画面跟逻辑,例如:旋钮,开关,刻度带等,IData允许用户创建逻辑模板,并且IData自身也提供一些逻辑模板,这样通过简单的插入,和对画面的颜色、位置、接口的修改即可完成新的对象绘制。

图5 逻辑建模界面

3.5 布局设计

IData布局编辑器用来定义布局文件(.idd)。一个布局文件可以添加多个显示实例。通过布局编辑器,可以对添加的个体实例进行位置排版、大小缩放、图像旋转。IData提供了一个基于OpenGL的渲染程序IDataRL。此程序可以读取并且渲染IData的布局文件。在布局编辑器中,通过渲染窗口性能区域的参数设置,允许用户指定执行文件的窗口大小、位置、全屏或者有无边框等属性。通过添加执行参数,可以在布局文件运行时,将指定的命令行添加到IDataRL中,实现加载外部插件、窗口命名、刷新率限制等功能。

3.6 实时性控制

飞行模拟器虚拟座舱设备主要应用于人在回路的仿真系统[2],为满足人眼连续感知和被仿真对象机动性强的需求,飞行模拟器对该软件的实时性有很高的要求。在软件平台和硬件环境一定的情况下,影响虚拟座舱设备实时显示的主要因素是:为了提高系统性价比和维修性,一般采用多屏驱动技术;为使画面效果逼真,需要增加画面渲染的复杂度。分屏显示实时性控制主要通过多屏显示能力实验和图形更新率设定来实现;降低画面渲染复杂度主要通过添加外部插件、图形纹理、模型优化等制作技巧来实现。

3.7 IData的外部驱动程序

IDataTransport通信库提供了易于使用的接口,使得外部应用程序可以向IData显示画面发送命名数据。例如,把VC中的马赫数数据传递到IData中。

1)首先定义静态变量machName和变量mach:

static unsigned int machName;

float mach;

2)通过下面的语句创建了用户发送给IData渲染引擎的变量句柄。类型可以使整型、浮点型、字符型、双精度浮点型、二进制型。名称应与IData显示中设置的变量匹配。

machName=IDT-CreateSendName("mach",IDATATRANSPORT-TYPE-FLOAT,1,0,0);

3)通过下面的语句,添加一个变量到网络的等候队列,通过网络发送。

IDT-AddFloatToSend(machName,mach,0);

4)当每一帧所有的数据被添加到队列之后,需要调用函数进行刷新。IDT-SendFulcrum();

图6 座舱仪表面板

当虚拟画面有数据需要传出到外部程序,例如开关状态、按键等,通过函数IDT-GetNameAsInt(unsigned int handle,unsigned char arrayIndex)进行操作。

图6是通过使用上述IData虚拟仪表的关键技术实时渲染的画面。

4 结束语

IData软件能够轻松实现人机界面的设计,将开发人员从繁重的程序开发和调试中解放出来,缩短了虚拟仪表仿真软件的开发周期。本文利用IData软件和VC++开发的多型飞行模拟器虚拟仪表、平显仿真等软件,经过飞行员实际飞行训练,证明该套软件具有画面逼真、显示信息完整、软件性能稳定、可扩展性好等特点,可以满足多机型飞行模拟器研制生产要求。

[1] Donald Hearm,等.计算机图形学[M].第3版.北京:电子工业出版社,2010:25-50.

[2] 李林,翁东东,王宝奇,等.飞行模拟器[M].北京:北京理工大学出版社,2012:125-149.

[3] 傅凯.色彩[M].上海:上海科学技术出版社,2012.

[4] 宋青.基于IData的高级座舱显示界面设计方法研究[D].南京:南京航空航天大学,2009.

[5] 王行仁.飞行实时仿真系统及技术[M].北京:北京航空航天大学出版社,2003:44-54.

[6] 刘磊,王江云.虚拟座舱显示系统的设计与仿真[C].2008年系统仿真技术及其应用学术会议论文集.合肥:中国科学技术大学出版社,2008:424-428.

[7] 侯亮,李成贵.飞机综合显示系统中图形填充与字符显示[J].火力与指挥控制,2009,34(1):35-44.

猜你喜欢
座舱模拟器刻度
开放式数字座舱软件平台IndiGO
了不起的安检模拟器
规律:座舱真漂亮
盲盒模拟器
划船模拟器
NDT推出面向下一代智能座舱应用的压感触控解决方案
剪彩带
谁大谁小
谁大谁小
测量三字歌