APP下载

基于VC和Vega的某型导弹模拟器设计

2014-01-15张千宇

电子设计工程 2014年21期
关键词:模拟训练模拟器线程

张千宇,郭 巍,张 杨

(海军航空工程学院指挥系,山东 烟台 264001)

模拟训练以安全、经济、可控、无风险、不受气候条件和场地空间限制、既能按常规进行操作训练、又能培训处理各种事故的应变能力以及训练的高效率、高效益等独特优势,一直受到各国军方的高度重视,特别面对武器装备日趋复杂化、购买武器费用不断提高的现状,致使世界各国军事部门均将模拟器视为军事训练必不可少的甚至是唯一安全、经济而有效的工具和手段,加以重点发展。美军是世界上最早开展模拟训练研究和应用的。其技术和装备一直居于国际领先地位。长期以来,主要发展各类武器装备的使用操作训练模拟器,据统计,仅1995~2000年用于三军的模拟装备费用就高达36亿美元。俄罗斯同样是世界上的模拟训练的大国和强国。应该说,俄罗斯在发展训练模拟器上是不惜代价的,其数量约占世界之半,仅俄试飞院就拥有昂贵的空中飞行模拟器十余种。他们的先进武器装备几乎都编配有相应的训练模拟器。西欧军事强国(如英、法、德等国)也十分重视模拟训练,模拟训练技术及应用处于世界领先行列。

1 模拟器发展概况

我国是发展和应用模拟训练技术较早的国家之一。二十世纪六十年代初开始研制和使用射击练习器和简易飞行模拟器。二十世纪八十年代以来模拟训练进入了迅速发展阶段,先后研制成功歼-6、歼-7、歼-8D、轰-6C等飞行模拟器,及HQ-2、HQ-7、HQ-6、C-300等防空导弹武器的指挥控制模拟训练系统。相继掌握了计算机成像、图形/图像显示技术、多媒体技术以及精确控制机体和弹体运动平台技术等。二十世纪九十年代在分布式交互仿真(DIS)、虚拟现实(VR)和计算机生成兵力(CGF)技术等方面的研究和应用上获得了跨越式发展。

随着国防现代化的发展,武器系统规模日益庞大,技术更加先进和复杂,系统造价也更加昂贵,虽然训练时出现危险性的可能性降低了,但是一旦操作不当,引起的破坏性和危险性却大为增加。因此,提高训练的经济性、安全性、可靠性至关重要。为了较好的解决这一问题,需要有相应的模拟训练系统能够模拟实际装备的工作环境和工作状况,价格要低廉,能够避免采用实装进行训练时的巨大危险性和高昂代价[1-2]。

2 导弹运动模型

某型导弹运动模型的建立可以为导弹攻击的视景仿真或描述运动轨迹提供数据来源,使系统更加贴近实际,利于提高学习、训练质量。

导弹运动模型的实现要尽量接近实际,以便能够最大可能的反映出不同装订参数下导弹的运动状态、轨迹等,最好能够得到具体导弹的实际模型。

某型导弹的运动可以分解为随质心的移动和绕质心的转动。我们在进行导弹运动的控制时首先应确定其运动的坐标系:

Odxdydzd—表示大地坐标系

Ojxjyjzj—表示舰艇坐标系

OfxfyFzF—表示发射坐标系

O1x1y1z1—表示弹体坐标系

具体的坐标之间的关系如图1所示。

图1 某型导弹运动的坐标系Fig.1 Coordanition system of ship monted missile

有关导弹运动的一些相关参数是可以得到的,有了这些参数,可以利用现有的公式进行导弹速度的求解,得到导弹在任何时刻t的速度矢量,通过对这些速度矢量在各自的坐标轴上的积分,就可以得出导弹在某一时刻t时的运动状态,包括导弹的空间坐标(x,y,z)、以及导弹的姿态角(偏航角、俯仰角、滚转角)、导弹的速度(空速)。

3 导弹模拟器设计

导弹模拟器在整个系统中主要起到近似模拟实际的导弹在射前检查、参数装订、发射控制、目标攻击的过程中的姿态变化,配以一定的环境背景和逼真的视频、音频效果,渲染出临近实战的氛围,有利于激发参训者的战斗意识,提高训练的热情和效率。

本文设计的模拟器在实现导弹运动的过程中所要达到的控制上的要求:

1)接收弹道计算仿真结果并据此控制导弹姿态。

2)仿真系统动画演示及声音媒体表现;

3)可视化驾驭功能,可以不同的视角对导弹状态进行观察。

在导弹模拟器上,主要仿真对象是导弹、舰艇。其中导弹的运动规律根据导弹空间运动模型和导弹导引率编写;敌我舰艇运动假设只是考虑运动学关系,在匀速直线运动的基础上根据来袭导弹的相对距离和方位进行机动。

在程序中为了能响应整个示教系统的各种操作,需要在收到网络数据后,及时的进行判断是否需要本系统做出反应,比如,在收到“开盖”的指令后,若没有设置“开盖故障”,则在三维图像显示画面中控制导弹发射架的盖子打开,打开到位后使“开盖到位”的标志量有效,并将更改后的数据发向网络,而后控制台会根据“开盖到位”标志量点亮控制台面板上的“开盖到位”指示灯,模拟训练系统其它部分的状态显示也会相应地进行更改。当有导弹发射后要边解算导弹的运动模型边驱动三维动画,所以要在Visual C++环境下运行Vega应用程序。

4 Vega的基本框架

Vega是虚拟现实软件MultiGen的一部分。Vega的作用是将Creator制作的三维模型渲染成场景、在场景上浏览、查询、实例演示。Vega由Lynx软件、多种动态联接库(DLL)、函数库(Lib)、应用程序接口(API)组成[3-6]。

在Visual C++中应用Vega首先要对头文件和库文件路径进行如下设置:

1)在 Visual C++的菜单项“Tools”选项中,选择“Directories”标签,将“Show directories for:”选为“Include files”。

2)若“c:paradigmvegainclude”( c:paradigmvegainclude为Vega的安装路径)未出现在列表中,则将其添加进来。

3)再将“Show directories for:”选为“Library files”。

4)若“c:paradigmvegalib”未出现在列表中,则将其添加进来。

Vega应用程序的启动步骤。

1)系统初始化:由函数vgInit Sys()完成初始化Vega系统并创建共享内存以及信号量等。

2)系统定义:由函数 vgDefineSys (“my.adf”)读入 ADF文件,完成应用程序各个类的属性的定义和初始化。

3)系统配置:通过调用函数vgConfigSys()完成配置并启动系统。因此,每一个Vega应用程序都必须包含以下函数语句:

vgInitSys( ) ; //系统初始化

vgDefineSys (“Ddgj.adf”); //系统定义,载入“.adf”文件

vgConfigSys( ); //系统配置

while (1)

{

vgSyncFrame() ; //帧同步

vgFrame(); //帧显示

…… //系统仿真代码或入口

}

Vega应用程序每次执行主循环刷新显示帧时,都要调用vgSyncFrame()和 vgFrame(),vgSyncFrame()函数完成帧同步,vgFrame()函数则完成帧的显示。另外也可以在主循环中加入用户的系统仿真模块。

5 基于MFC的Vega应用程序开发过程

为了产生一个基于MFC的Vega应用程序,首先要生成一个基于MFC的Visual C++单文档应用程序项目,通过AppWizard生成一个单文档应用程序框架完成新项目的建立。

为了将Vega的基本程序框架合理地嵌入到单文档应用程序框架中,必须在适当的时机启动一个Vega线程,由该线程完成虚拟场景的驱动和渲染。可以在CView类和CMyView类之间再插入一个CVegaView类,在这个CVeg aView类中加入Vega线程代码及其启动函数,并在该线程中嵌入Vega的各个相关功能(主要为上述的建立Vega程序的3个步骤)。

由于是派生自CView类,CVegaView就拥有所有CView类的成员函数和消息映射。我们还必须为其添加专门的成员函数以完成建立Vega应用程序的必要步骤。其中最主要的函数就是RunVega(),它的作用就是开启Vega渲染线程和一些必要的初始设置。函数的主要代码如下:

void CVegaView::RunVega(void )

{

vegaThread=afxBeginThread( RunVegaApp, this);

win=vgGetWin( 0 );

chan=vgGetChan( 0 );

obs=vgGetObserv( 0 );

scene=vgGetScene( 0 );

vgProp(win,VGWIN_WINBORDER,0);

}

线程函数RunVegaApp()是一个全局函数,作为启动Vega线程的入口,完成Vega函数“初始化、定义、系统配置”和仿真循环的计算,其基本内容如下:

UINT RunVegaApp(LPVOID pParam )

{

CVegaView*pOwner= (CVegaView*)pParam;

vgInitWinSys( AfxGetInstanceHandle(),

pOwner->GetSafeHwnd() );

vgDefineSys( pOwner->getAdfName() );

vgConfigSys();

while(pOwner->getContinueRunning())

{

vgSyncFrame ();

vgFrame ();

……. //系统仿真的相关运算等操作

}

vgSyncFrame();

return 0;

}

至此,Vega渲染的函数就已经基本完成,为了让场景渲染到MFC的View里,还必须把主程序的View类 (假设为CMyView)的基类改成所引入的CVegaView类,也就是说,MFC的View就是Vega场景渲染区域,这也是我们设计CVegaView类的初衷。更改了基类之后,同时也要把该类的消息映射宏的基类参数进行修改。在各文件中包含了适当的头文件之后,一个完整的基于MFC的Vega应用程序基本完成。

在飞行仿真过程中,可以配合鼠标或键盘使多个视窗在主窗口和辅助窗口中切换,从而使重要视窗更便于观察。由于Vega主循环每循环一次虚拟场景刷新一帧,因此我们在Vega主循环每循环一次时完成一次导弹数学模型的数值求解积分,并由计算求得的导弹空间位置和姿态位置来设置导弹在当前帧中的位置。

该模拟器将基于计算机数值解法的弹道仿真和基于Visual C++的Vega虚拟现实仿真技术有机地结合在一起,实现导弹飞行的可视化。

图2 导弹模拟器的视景仿真效果Fig.2 Scence simulation result of missile simulator

6 结束语

导弹模拟器是快速有效形成战斗力的必需。本文研究了某型导弹的运动模型,提出了某型导弹模拟器的设计思路;建立了基于MFC的Vega应用程序开发过程,实现了某型导弹模拟器的研制。

[1]乔海岩,可伟,姚廷伟.舰船及舰载导弹运动轨迹模拟器设计[J].舰船科学技术,2012(34):30-47.QIAO Hai-yan,KE Wei,YAO Ting-wei.Design of the ships and sea-based missile track simulator[J].Ship Science and Technology,2012(34):30-47.

[2]史震.运动控制系统[M].北京:清华大学出版社,2008.

[3]龚卓蓉.LynX图形界面[M].北京:国防工业出版社,2002.

[4]洪炳镕,蔡则苏,唐好选.虚拟现实及其应用[M].北京 :国防工业出版社,2005.

[5]胡小强.虚拟现实技术[M].北京:北京邮电大学出版社,2005.

[6]孟晓梅,刘文庆.MultiGen Creator教程[M].北京:国防工业出版社,2005

猜你喜欢

模拟训练模拟器线程
了不起的安检模拟器
基于C#线程实验探究
盲盒模拟器
划船模拟器
基于国产化环境的线程池模型研究与实现
模拟训练(二)
浅谈linux多线程协作
模拟训练(十一)
模拟训练(十)
动态飞行模拟器及其发展概述