关于GL Studio在某型飞行模拟器多功能显示器建模与仿真中几点关键问题的探究*

2016-12-13 02:06刘超慧陈雪英
舰船电子工程 2016年11期
关键词:航向模拟器刻度

韩 晨 刘超慧 陈雪英

(1.海军航空兵学院舰载机系 葫芦岛 125001)(2.海军航空兵学院作战指挥系 葫芦岛 125001)



关于GL Studio在某型飞行模拟器多功能显示器建模与仿真中几点关键问题的探究*

韩 晨1刘超慧2陈雪英2

(1.海军航空兵学院舰载机系 葫芦岛 125001)(2.海军航空兵学院作战指挥系 葫芦岛 125001)

使用GL Studio软件结合VC++6.0混合编程的设计方法,可以实现对飞行模拟器多功能显示器的建模与仿真。但是由于多功能显示器显示的信息量较大、交联关系较多、控制逻辑复杂,因此在建模与仿真过程中难度较大。论文就某型飞行模拟器多功能显示器建模与仿真中的几点关键问题进行了研究与分析,并给出了最终的仿真结果。实践证明,论文提出的方法较好地解决了多功能显示器建模与仿真中的几个难点问题。

GL Studio; VC++6.0; 多功能显示器; 控制逻辑; 建模与仿真

Class Number TP391.9

1 引言

随着越来越多的高科技武器被应用到部队,运用虚拟现实技术对武器设备进行仿真是解决使用实际装备训练效率低、维护成本高、安全性差等诸多问题的有效途径。

由于飞行模拟器多功能显示器显示元素多、复杂程度高,无论是使用OpenGL语言,还是使用3Dmax、Creator等软件进行建模,工作量都较大,并且对计算机的硬件设备要求较高[1],使用GL Studio专业的仪表仿真软件,结合VC++6.0的混合编程设计方法,可以明显缩短开发周期,并且达到较好的仿真效果。

本文对多功能显示器的系统结构进行了梳理,介绍了GL Studio软件的开发流程,重点对某型飞行训练模拟器多功能显示器建模与仿真过程中的几点关键问题进行了研究与分析。

2 多功能显示系统构成

多功能显示器中显示的信息包括航行仪表信息、武器外挂信息、编队信息、目标信息,以及机载设备状态信息五大类别[2]。具体内容包括飞机位置、当前航向、待飞距离与时间、外挂武器数量与状态、编队组成、目标分配、目标飞行状态以及机载设备工作检测信息等。

由于多功能显示器显示的元素较多、信息量较大、逻辑关系复杂,因此在对多功能显示器建模与仿真之前,应该对多功能显示器的系统结构进行仔细梳理。多功能显示器具体结构图如图1所示。

图1 MFD结构图

3 GL Studio开发流程

GL Studio是DiSTI公司开发的独立于平台、面向对象的开发工具,软件工具包主要由图形设计器与代码生成器两部分组成,图形设计器支持所有绘图操作,代码生成器被内建到GL Studio设计器中,能够生成可移植的C++代码。开发过程分为组建图形对象和编写行为代码两个部分[3~4]。

为了实现对飞机多功能显示器的建模与仿真,首先应该创建纹理,对多功能显示器的操作控制板进行建模。方法有两种[5~6]:一种是将去除了所有动态图形单元 (例如:按键、开关、旋钮等)的多功能显示器控制面板的真实照片作为纹理;另一种是使用图形编辑软件(例如:PhotoShop),按照GL Studio对纹理制作的要求进行处理后产生纹理。GL Studio提供的纹理制作工具支持BMP、PNG、GIF、TIFF、JPEG等图片格式[1,6~7]。

然后,在图形设计器中创建图形单元,在GL Studio中进行版面设计,将处理好的控制面板和各动态图形单元纹理插入到图形设计窗口中,并为所有的对象命名。在图形设计画布中,使用GL Studio工具栏中的各种图元,分别绘制所有的子画面,绘图程序界面具有“所见即所得”的特点[3~4],设计画布中显示的图元就是最终的显示界面。

最后,在图形用户接口中为各对象编写属性和方法,实现对各图元的动态控制。GL Studio软件将仿真中常见的开关量与模拟量进行了完整的封装[8]。关于按键、旋钮、开关的制作,很多书籍和文章中都有详细的介绍与讲解[1,3~4]。之后使用代码生成器生成源代码,将源代码嵌入到C++应用程序中,编译生成解决方案并链接调试。使用GL Studio的开发流程如图2所示[9~10]。

图2 GL Studio开发流程图

4 建模与仿真过程中的几点关键问题

采用GL Studio结合VC++6.0对多功能显示器进行建模与仿真时,由于多功能显示器显示的子画面众多,控制逻辑复杂,因此在仿真过程中存在几点关键问题,具体情况如下。

4.1 导航界面中航向刻度带的功能实现

航向刻度带在建模时被划分为导航界面的一个类,中间矩形方框中显示飞机当前的实时航向。飞行过程中,界面中的飞机固定不动,航向刻度带以飞机为中心进行旋转,各读数不断变化,并随航向刻度带的旋转而旋转。建模时没有直接绘制360°完整的航向刻度带,而是采用“弧线+角度盘”的模式。GL Studio4.0工具栏提供了角度盘绘制图标“”,以10°为间隔,起始角度为285°,绘制16个角度盘刻度线,弧线弧度为90°,弧线每侧各多出3个角度盘刻度线。建模后如图3所示。

然后,需要解决各图元的驱动问题。

在类属性Class Properties窗口创建float型成员变量currentCourse,并在用户程序中添加代码:

static float scale =-30.0f/30.0f; // 30 logical units, 30 degrees

char output[16], outputLeft[16], outputRight[16], outputLeft1[16], outputRight1[16];

char outputcurrentCourse[16];

_currentCourse = value; //当前航向等于实时取值

int current_course = (int)(_currentCourse + 0.5f); //对当前航向小数点后一位进行四舍五入

float diff;

int center;

center = (int)_currentCourse; //初始化中间航向值

center = center-(center % 30)+15;

sprintf(outputcurrentCourse,"%3d",current_course);

currentCourseReadout->String(outputcurrentCourse); //显示当前航向

if(center<45) //分情况讨论防止航向刻度值出现负数

{

sprintf(outputLeft1,"%3d",center-45+360);

sprintf(outputLeft,"%3d",center-15);

sprintf(outputRight,"%3d",center+15);

sprintf(outputRight1,"%3d",center+45);

leftAzimuth1Readout->String(outputLeft1);

leftAzimuthReadout->String(outputLeft);

rightAzimuthReadout->String(outputRight);

rightAzimuth1Readout->String(outputRight1);

}

else if(center<15)

{此处省略…}

else if(center>345)

{此处省略…}

else if(center>315)

{此处省略…}

else

{此处省略…}

diff = _currentCourse-(float)center;

scaleGroup->DynamicRotate(-diff*scale,Z_AXIS); //刻度带进行旋转

leftAzimuthReadout->DynamicRotate (diff*scale,Z_AXIS); //航向刻度值读数反向旋转

此处省略…

之后,需要将航向刻度带运行显示时多余的部分进行遮挡。

在需要显示的航向刻度带部分上绘制一Polygon命名为clipthis,并隐藏。在类方法Class Methods的Initialize()窗口中添加程序:

SetViewport(clipthis); //显示矩形区域内内容

scaleGroup->GetLocation(startLoc); //获取航向角度盘刻度线及周边度数的初始位置

最后,需要获取当前航向值。

在多功能显示器主界面的类属性Class Properties窗口创建相同的float型成员变量currentCourse,并在用户程序中添加代码:

_currentCourse = value;

ind->currentCourse(_currentCourse); //ind为当前航向刻度带类的名称

将实时获取的当前航向数值传递到当前航向刻度带类中,之后进行编译、调试。

4.2 按键的采集及各子画面之间的显示逻辑问题

多功能显示器周边存在大量控制按键,飞行员通过按压这些按键来查看不同的子画面。因此在建模中存在以下问题。

4.2.1 按键的采集问题

对于虚拟按键、开关及旋钮的建模本文不做太多解释,在采用“实装+模拟”形式的模拟器多功能显示器界面仿真中,各周边键的脉冲触发信号很不稳定,每按压一次都会采集到2~4个脉冲信号,但相应的响应只允许发生一次,针对这一问题,提出以下解决方法:

在MFD主界面file *.h用户程序中为每个周边键分别添加两个int型变量,以d1键为例:

int d1a;

int d1b;

之后在GL Studio软件代码浏览器类方法Class Methods的initialize()代码输入窗口中为变量初始化:

d1a = 1;

d1b = 0;

在类属性Class Properties窗口创建int型成员变量d1,并在用户程序中添加代码:

_d1 = value;

if(_d1 != d1b)

{

d1b=_d1;

if(d1b==1)

{

d1a = d1a+1;

if(d1a % 2 == 0&&d1b==1)

{

*->Visibility(TRUE); //显示需要的类或组

*->Visibility(FALSE); //隐藏需要的类或组

}

if(d1a % 2 > 0)

{

*->Visibility(TRUE);

*->Visibility(FALSE);

}

}

}

之后,运行调试时即可实现周边键的相应功能。

4.2.2 各子画面的显示逻辑问题

由于多功能显示器同一个周边键在不同的画面中作用不同,这就需要对各按键之间的控制逻辑进行分析并通过编程得以实现[2]。

有种方法是将所有页面设计成独立的组件,之后建立一个组(Group),将所有独立组件置于其下。电源的开关属性与组(Group)的可见属性相一致,并且每个页面对应一个索引号,根据索引号控制其是否可见。对于同一按键的不同功能响应,采用虚函数的方法,通过继承使各按键具有多样性[11]。

本文除将较为复杂的导航子界面中各元素划分为几个类外,直接将其余各个子画面建立成一个组,以d1键为例,在MFD主界面file *.h用户程序中添加int型变量:

int _d1button;

在代码浏览器类方法Class Methods的Calculate(double time)代码输入窗口中输入:

_d1button=*->Visible(); //在*画面显示时变量_d1button=1

之后在相应的各按键编程时添加条件语句,实现正确的逻辑显示。该种方法的好处在于将编程过程变得方便、简单、更为灵活。

4.3 各子画面仿真中的几点问题

多功能显示器子画面较多,在建模过程中遇到以下几个问题。

4.3.1 惯导快速对准中加载矩形框的变化速度问题

起初在主界面类方法Class Methods的Calculate(double time)代码输入窗口中使用 rectangle1_x(RampFloat(time*0.5, 0.0f, 340.0f));语句生成随系统时间变化的float型变量rectangle1_x,之后将其赋予矩形右侧的两个顶点,但矩形框变化时速度不稳定。

之后在主界面类方法Class Methods的Calculate(double time)代码输入窗口中输入:

objects->Group::Calculate(time);

if (_l4button>0) //对准画面显示时的条件语句

{

if(_rectangle1_x < 最大值)

_rectangle1_x=_rectangle1_x+time*0.2;

if(_rectangle1_x> 最大值)

_rectangle1_x= 最大值;

Vertex *v ; //声明矩形各顶点

v=rectangle1->Vertices() ; //获取矩形顶点

v[0].x= 0 ;

v[0].y= -矩形宽度一半 ;

v[1].x= 0 ;

v[1].y= 矩形宽度一半 ;

v[2].x= _rectangle1_x;

v[2].y=矩形宽度一半;

v[3].x= _rectangle1_x;

v[3].y= -矩形宽度一半;

}

else

{

rectangle1_x( 0.0f);

Vertex *v ;

v=rectangle1->Vertices() ;

v[0].x= 0 ;

v[0].y= -矩形宽度一半;

v[1].x= 0 ;

v[1].y=矩形宽度一半;

v[2].x= 0;

v[2].y=矩形宽度一半;

v[3].x= 0;

v[3].y= -矩形宽度一半;

}

运行时,很好地解决了变化速度不一致的问题。

4.3.2 汉字的显示问题

GL Studio软件不支持汉字的直接输入,要想完成汉字的显示首先应该使用图形编辑软件(例如:PhotoShop),制作字库贴图纹理。为了保证系统的实时性和充分利用系统资源,必须合理确定纹理的格式和大小。本文采用32像素/厘米,保存为PNG格式。在界面中需要输入汉字的位置上添加一个Polygon,每个汉字对应一个Polygon,英文和数字可以直接使用TEXT元件输入。建模后的惯导快速对准界面如图4所示。

图4 建模后的惯导快速对准界面

5 结语

本文对GL Studio软件结合VC++6.0进行混合编程实现某型飞行模拟器多功能显示器建模与仿真中的几个难点问题进行了研究与分析。经保密处理后的“实装+模拟”形式运行中的多功能显示器导航仿真界面如图5所示。

图5 运行中的MFD导航仿真界面

仿真测试结果表明:多功能显示器各界面清晰稳定、各画面对周边键的响应正确。飞行员实际操作后提供的反馈信息显示多功能显示器的仿真效果逼真,可以以此为基础,对飞行学员开展模拟任务训练。

[1] 高颖,邵亚楠,郑涛,等.GL Studio在飞行座舱模拟器中的仿真研究[J].弹箭与制导学报,2008,28(1):257-260.

[2] 陈曦,李国清,宋吉江,等.某型军机多功能显示系统的仿真[J].系统仿真学报,2006,18(增刊2):257-260.

[3] Distributed Simulation Technology Inc. GL Studio user’s guide Ver4.0[M]. Orlando,FL:Distributed Simulation Technology Inc.,2009.

[4] 于辉,赵经成,付战平,等.GL Studio虚拟仪表技术应用与系统开发[M].北京:国防工业出版社,2010.

[5] 李秀,宋丽梅,周兴明,等.GL Studio在直升机仪表面板仿真中的应用[J].计算机技术与应用,2009,29(2):42-44.

[6] 许颖慧,杨峰.GL Studio在仪表仿真开发中的关键技术研究[J].自动化技术与应用,2008,27(10):76-79.

[7] 王晶.虚拟座舱人机界面仿真[D].北京:北方工业大学硕士学位论文,2013.

[8] 陆志斌,郭广利,魏靖彪,等.GL Studio在飞机模拟器虚拟仪表仿真中的应用[J].电脑编程技术与维护,2012(12):114-116.

[9] 杨大光,常波,孙国庆,等.GL Studio在飞机仪表板仿真中的应用[J].现代电子技术,2010(24):158-160.

[10] 蓝仁恩,刘志成,王志乐,等.机载惯导系统可视化仿真方法研究[J].现代电子技术,2011,34(9):203-205.

[11] 于凤全,李保刚.GL Studio在飞机多功能显示器仿真中的应用[J].数字技术与应用,2011(1):29-3.

Exploration on Several Key Issues in MFD Modeling and Simulation of Some Model Flight Simulator Based on GL Studio

HAN Chen1LIU Chaohui2CHEN Xueying2

(1. Department of Carrier-based Aircraft, Naval Aviation Academy, Huludao 125001)(2. Department of Operational Command, Naval Aviation Academy, Huludao 125001)

Using the design method of hybrid programming with GL Studio software and VC++6.0, the modeling and simulation in MFD of some model flight simulator is realized. But for the reason of more information to be shown, more cross linking relationship and more complicated control logic in MFD, it is more difficult in the process of modeling and simulation. This article studies and analyses several key issues in MFD modeling and simulation of some model flight simulator, and the simulation results are shown in this paper. Practice has proved that the method proposed in this paper solves several difficult problems better in modeling and simulation of MFD.

GL Studio, VC++6.0, MFD, control logic, modeling and simulation

2016年5月7日,

2016年6月19日

2015军事训练科研项目(**模拟训练系统)资助。

韩晨,男,硕士,讲师,研究方向:飞机结构、导航与制导系统、海军飞行。刘超慧,男,硕士,讲师,研究方向:地面领航与指挥引导。陈雪英,女,硕士,讲师,研究方向:地面领航与陆空通话英语。

TP391.9

10.3969/j.issn.1672-9730.2016.11.005

猜你喜欢
航向模拟器刻度
风浪干扰条件下舰船航向保持非线性控制系统
驾驶模拟器转向系统的设计与研究
了不起的安检模拟器
知坐标,明航向
盲盒模拟器
划船模拟器
剪彩带
考虑几何限制的航向道模式设计
谁大谁小
谁大谁小