一种基于工作站的歼击机着陆训练模拟器的设计与实现
摘 要: 着陆训练是现代歼击机飞行员训练的重要环节,为了训练飞行员依靠平显和仪表的数据显示完成着陆过程,提供成本更低、周期更短、更易普及的训练方法,本文介绍了一种基于PC 的歼击机着陆训练模拟器的总体结构的设计以及各个模块的实现过程,着重就该模拟器系统中建立平显(HUD)和仪表着陆系统(ILS)以及外部三维场景的步骤以及所采用的关键技术进行了阐述,此外还介绍了音响模块的设计及操纵杆的接口程序的实现。
关键词: 着陆 模拟器 虚拟现实(VR) 计算机仿真
1 引言
着陆训练一直是飞行训练的重要环节。飞行模拟器(Flight Simulator)是虚拟现实(VR)技术在工程上的重要应用之一,而目前,装备部队的模拟器多为全任务飞行模拟器,虽功能齐全,但结构复杂,造价高昂,不易进行大规模普及性训练,而象起飞着陆这样的基本科目,也没有必要使用大型模拟器实现普及性模拟训练。在现代高科技战争条件下,为使部队训练手段现代化,提高部队的整体训练质量和训练效益,尽快增强部队的战斗力,保障飞行安全,给飞行人员提供既具有真实的场景,逼真的实时数据显示,又兼顾结构简单,成本低廉,易于普及特点的训练仿真设备是十分必要的,也是非常迫切的。本文提出的这种基于PC 的着陆训练模拟器系统正是针对这一需要而建立的。
2 系统结构
该着陆训练模拟器系统是一个人-机闭环系统,主要用来模拟飞机着陆过程中起落架放下后,飞行员依靠平显数据显示和仪表着陆系统的指示,手动操纵飞机完成着陆的过程。
系统采用计算机实时成象和实时数据显示技术为受训者提供逼真的三维场景,受训者面对显示画面,通过飞行摇杆控制画面中的飞机,完成着陆过程。
该模拟器系统主要组成部分如下:
(1)硬件部分:
配有 Xeon5405 、2GB、250GB SATA、512MB专业卡,支持DirectSound 的声卡一块;
具有油门输入的飞行摇杆一只;
支持1024*768 分辨率的彩色显示器两台;
立体声耳机一只(或有源音响一套)。
(2)软件部分:
Windows2003操作系统,Visual C++ 6.0 开发平台和 VTree SDK 三维软件开发环境。如图1 所示,该系统分为交互模块(摇杆、键盘、鼠标)、飞行仿真模块、视景模块和音响模块四大部分,其中视景模块是该着陆训练模拟器的核心部分,它又分为外部视角和座舱视角两部分,分别使用两个显示器同时实时显示,简洁且直观。
训练过程开始后,受训者通过飞行摇杆向系统发出操纵指令,操纵指令实时传入飞行仿真模块,飞行仿真模块中的数学模型根据输入的操纵杆指令实时做出响应,以此来模拟真实环境中飞机响应舵面输入的过程。根据受训者输入的舵偏指令,飞行仿真模块实时解算运动学和动力学方程得出飞机位置、姿态等数据并实时传给视景和音响模块。视景模块显示飞机平显及仪表着陆系统的数据,并根据数据控制外部场景视角的实时三维显示。音响模块则根据输入实时产生相应的音响效果。操纵人员根据视景画面实时调整操纵杆的输入,如此便构成一个人机闭环的仿真系统。其他观察者(教官)可以通过外部视角显示实时观察到受训者的降落情况,以便给予即使的指正。
本系统各模块之间信号流程和逻辑关系如图1 所示
3 视景模块的实现
3.1 外部三维视景的生成
3.1.1 三维模型的建立
建立三维实时模型的工具软件有很多,本系统采用了DISCREET 公司的3D Studio MAX与Multigen 公司的Creator 相互配合使用的方法来生成系统所需的各种三维实体模型充分发挥了两种出色的建模软件各自的优点,减少建模难度,提高模型精度。
(1)首先是飞机模型的建立,在外部视角中,飞机距离观察者较近,需要较高的精细程度才能给人以逼真的感觉,因此使用了3D Studio MAX 中的Editable Mesh(网格编辑)修改器和NURBS 曲面建模工具进行构造,并使用 #p#page_title#e#UVW Map 贴图技术进行贴图(图2)。
一方面,在模型精细程度上尽可能趋于逼真,但由于是三维实时渲染软件,模型所用的面(Polygons)过多将会使实时显示帧速率降低,甚至出现画面定格,因此,在建模过程中,使用了3D Studio MAX 中的Optimize(最优化)修改器,在不失真的前提下尽可能减少模型的面数,在最终优化过后,使整架飞机所用面数维持在1200 个左右。
(2)地形和地面景观则使用了Multigen Creator 生成,本系统使用了一个大面积地形模型,由于面积很大,对地面细节精细程度的要求相对较低,所以特别适合使用Creator的“地形分块”功能实现。
(3)模型格式转换,由于最终使用的是统一格式模型,需使用VTree SDK 附带的格式转换工具将实体模型转换为统一的图形格式。
3.1.2 三维场景的建立
构件外部场景,本系统采用了CG2 公司的VTree SDK 作为三维开发环境。VTree 是全方位面向对象的开发工具,它的开发效率较高而且与硬件结合得较好,是目前视景仿真市场上的一种跨平台的三维图形软件开发工具,它为本系统提供了快速、方便的方案。
在建立场景过程中,本系统主要注意了以下几方面功能的实现:
(1) 着陆机场位置可选,便于定制着陆航线;
(2) 可以实现白天,黑夜两种环境的着陆训练;
(3) 可以切换全平显着陆和ILS 引导着陆两种训练模式;
(4) 外部视角可实时显示飞机的位置、高度、姿态等数据,便于进行观察和分析;
(5) 可以预先设定着陆初始位置和高度、速度、姿态等数据,提高仿真的灵活性;
(6) 外部视角可以显示飞机降落航迹,便于分析、总结和改进。
3.1.3 着陆航迹和参数的显示
为了便于受训者和其他观察者(如教官)分析并评价整个着陆过程,本系统在外部视角里加入了飞机航迹和飞行参数的实时显示功能,用以显示最佳着陆航迹和飞机实际着陆航迹,以及飞机实时的位置、高度、速度、姿态等参数。
航迹显示的原理是在渲染的每个帧周期内,计算飞机的沿机场纵向和高度的相对位置点,并与上一帧时刻位置点连线,从而形成航迹,本系统使用Vtree SDK 开发环境中的“几何结点”vtGNode 函数来实现航迹的绘制。
最终完成的外部视角效果(白天、夜间)如图所示(图3)。
3.2 舱内视景的生成
3.2.1 飞机控制面板的制作
为增强受训者在训练时的沉浸感,本系统在舱内视角显示部分加入了根据国外某型飞机座舱控制面板绘制的面板实体,增添了系统的逼真效果。制作过程中采用了Adobe 公司的Photoshop 和Multigen 公司的Creator 两种软件相结
图4 座舱面板图
合的方式,采用坐标贴图和透明化处理的方法,使得面板模型既有立体感又不会增加系统的负担,达到了很好的效果(图4)。
在实际应用中,本系统中的座舱模型,可以根据实际军机型号进行更换,以满足不同用户的需要。
3. 2. 2 平视显示器的绘制
平视显示器是该系统视景模块的核心组成部分,是受训者操纵飞机着陆的主要信息来源,在现代歼击机的真实飞行中,平显无论是在起飞着陆、巡航还是在执行战斗任务的过程中都起着至关重要的作用,特别地,现代歼击机绝大多数是全天候歼击机,在夜航和恶劣天气条件下,平显的作用更是无法替代。因此,对平视显示器飞行的仿真训练是非常必要的。
在本系统主要模拟平显在进场/着陆模式下的功能,系统采用了基于VC++的OpenGL 实现对平显的绘制。 本系统采用的平显主要结构如图5 所示。
图5 系统中的平显结构图
OpenGL 是一种硬件图形开发器的软件接口,同时它又是与设备无关的图形开发平台,更重要的是,象VTree SDK, Open GVS 这样的三维软件开发环境都是基于OpenGL 之上的,因此,OpenGL 与这些开发环境结合过程相当完美,非常适合进行平视显示器的仿真。 #p#page_title#e#
在本系统中,使用OpenGL 绘制平显的主要过程和步骤如下:
(1)建立平显模块程序的总体框架;
(2)建立平面坐标系,绘制平显中心点,在本系统中,使用了机炮准星作为整个平显的中心点,其余的各个部分都是以中心点为基准作平移来确定其位置。
(3)绘制各种滚动带部分,在本系统中,主要用到了四个滚动式显示带,分别是:航向带,速带,高度带和俯仰/滚转梯度带。模拟各种滚动带的原理都是使用OpenGL 中的lTranslatef 函数实现滚动,然后再通过限制其滚动带的显示范围来实现的。
图6 平显结构图
(4)实现平显各种数据的显示。
(5)绘制各种状态参数(如起落架的收放状况,着陆模式的选择,燃料状态等)。
经过以上过程,绘制完成后的平显效果图如图6 所示。
3. 2. 3 仪表着陆系统(ILS)的绘制
仪表着陆系统(Instrument Landing System,ILS)是目前最广泛使用的飞机精密着陆指引系统。它的作用是以无线电信号建立一条由跑道指向空中的狭窄“隧道”,飞机通过机载ILS 接收设备,确定自身与“隧道”的相对位置,着陆过程中,飞行员只要让飞机保持在“隧道”央飞行,就可沿正确方向飞近跑道、平稳地下降高度,最终飞进跑道并着陆。仪表着陆系统夜航、恶劣天气条件等低能见度的着陆过程中尤其适用,它的出现大大降低了着陆过程中的事故发生率,保障了飞行人员的安全。
在现代歼击机的座舱中,仪表着陆系统是作为平显的一部分功能来实现的,这也是现代全天候歼击机的重要特征之一。
在本模拟器系统中,同样使用OpenGL 实现仪表着陆系统的仿真。主要步骤如下:
(1)首先建立ILS 的数学模型,ILS 通过水平和垂直的两条线段的位置来指示飞机的正确着陆航迹,飞机通过接收机场指引信号,将机场位置数据和飞机当前位置、高度、速度传给ILS,经过计算,ILS 以水平和垂直两条线段的交点距离平显中心点的相对位置来指示飞机与最佳着陆航迹的差距。
(2)通过OpenGL 实现仿真,在本系统中,主要是通过实时解算飞机当前位置和姿态,计算与最佳航迹(着陆“隧道”的中心线)的相对距离,使用glVertex 函数来实时确定两条ILS 线段各端点的位置,进而实现ILS 的仿真。
3. 2. 4 舱内仪表的绘制
本系统中,绘制了航向表和高度表来辅助飞行员实现着陆过程。主要借助了VTree SDK
仿真开发环境中的仪表类库 VtGauges,使用其中的多种函数来完成仪表的绘制。
综上所述,最终完成的舱内视角效果图(白天、夜间)如图7 所示:
4 音响模块的实现
为了提高整个模拟器系统的沉浸感和逼真度,系统中设立了音响模块。该模拟器系统的音响模块采用了VTree SDK 开发环境提供的音响类库vtSoundFX 来实现,该音响库是基于Microsoft 公司开发的DirectSound 组件之上的。程序运行时需要dsound.lib 库文件支持,该文件可以由WindowsNT4.0 sp3 以上版本或者Windows2000 来提供。
在模拟着陆过程中,音响模块的主要功能是为受训者提供以下种类的音响效果:
1, 飞机发动机引擎声;
2, 起落架放下/锁定声;
3, 起落架着陆接地声;
4, 地面滑跑的颠簸声;
5, 刹车制动声;
6, 着陆过程中地面塔台的语音着陆提示。
音响模块的主要设计和实现过程是:首先通过数字录音设备对飞机着陆过程中的各种声音数据进行采集,并经过加工成为相应格式的音频数据文件。然后,在飞行仿真模块中建立判别在各种不同条件下播放相应声音的函数。并结合Vtree SDK 的vtSoundFX 类库中的一系列函数对声音的播放过程进行调节和控制,如声音播放的频率控制、增益控制、延时、循环(如发动机引擎声的循环播放)等。
在Vtree SDK #p#page_title#e#环境下实现音响的控制和播放的主要步骤为:
vtUInt32 Action(
SoundEvent event,
vtUInt32 eventid = (vtUInt32)-1,
vtFloat pan = Both,
vtInt32 sound = -1,
vtInt32 loopcount = -1,
double gain = 1.0, //增益
vtUInt32 freq = 0, //频率
vtUInt32 priority = 7 );
vtSoundFX.Action(vtSoundFX::Play,(vtUInt32)-1,-0.5,sound2,1,0.5,6); //实际调用过程
5 飞行仿真模块的实现
5.1 操纵杆接口的设计
在该模拟器系统中,除键盘和鼠标外,控制飞机的大部分控制指令由飞行摇杆(JoyStick)发出,而摇杆控制方式的实现主要依赖于摇杆与计算机的接口程序的实现。本系统是通过Microsoft Visual C++ 下的操纵杆接口来实现这一过程。
在Visual C++下运用摇杆的方法可按照以下步骤来完成:
(1)在应用程序框架上,声明两个结构体对象JOYINFOEX info,JOYCAPS caps。
(2)在初始化函数中对操纵杆进行初始化:
if (joyGetNumDevs())
{ joyGetDevCaps(JOYSTICKID1,&caps,sizeof(caps)); // 操纵杆初始设置
info.dwSize=sizeof(info);
info.dwFlags=JOY_RETURNALL;
int joy=joyGetPosEx(JOYSTICKID1,&info);
351
}
(3)在控制实时成象的回调函数中,加入实时读取摇杆指令的语句:
if(joyGetPosEx(JOYSTICKID1,&info)==JOYERR_NOERROR)
{ Ctr.Deltp=255*(65535-info.dwZpos)/65535.0; //油门杆(推力)
Ctr.Deltx=255*info.dwXpos/65535.0; //副翼 (滚转)
Ctr.Delty=255*info.dwRpos/65535.0; //方向舵(偏航)
Ctr.Deltz=255*(65535-info.dwYpos)/65535.0;//升降舵(俯仰)
}
通过以上步骤,模拟器系统可以实时获取摇杆指令,驱动飞行仿真模块实时地做出响应,为视景模块周期性地提供对飞机飞行位置、姿态等的控制数据。
5.2 飞机动力学和运动学仿真
本系统采用六自由度全量飞机模型。该模型精确、全面地反映了飞机的实际运动特征。飞行动力学方程组可参见参考文献[1][3]。
6 系统中使用的关键技术
6.1 nView 多显示屏幕技术
与大型模拟器相比,本系统要实现的模拟过程相对比较简单,为了保证信息既能充分得到显示,同时遵循成本低廉、易于普及的设计原则,本系统没有采用大型模拟器系统普遍采用的多通道显示技术,而是采用了Nvidia 公司的nView 多设备显示技术来实现单显卡-双显示器的显示输出(图8)。
图8 采用了 nView 技术的本模拟器系统外观
nView 显示技术可以支持Span 模式,这种模式可以让桌面扩大一倍。对于想要在多个显示器上显示同样信息的的用户,nView 也可支持 Clone 模式。本系统采用了Span 模式。
6.2 NURBS 曲面建模技术
在3DS MAX 中,有两种建模方式,多边形网格建模和NURBS(Non-Uniform Rational B-Splines非均匀有理B 样条)建模。网格建模常用来创建有棱角的物体,而且很方便。但用它来表现光滑复杂的曲面造型,效果就很不理想,然而这正是NURBS 曲面建模的优势。在三维造型中,曲面物体要多于有棱角的物体,能否表现完美的曲面造型也就成了三维建模的关健。
在本系统的三维造型建模过程中,使用了这一技术来构建某些模型的组成部分(如飞机流线型的机头、座舱盖等),取得了很好的效果。
6.3 光点闪烁技术
在VTree SDK 软件开发环境中,还包含了专门用来显示光点闪烁效果的结点类型vtLightPointNode。它可以通过一系列函数来设置灯光的颜色、亮度、位置以及闪烁特效的各种参数,此类型中提供了显示光晕(Halo)效果的函数SetHaloed(),在实现灯光闪烁的同时,可以实现逼真的光晕效果,提高了灯光模型的逼真程度。在本系统中,使用了此项技术来实现黑夜场景中机场跑道的灯光闪烁效果。
6.4 细节度级别(LOD)技术
在不影响仿真逼真度的前提下,降低场景复杂程度很有必要。细节度级别( #p#page_title#e#Level ofDetail, LOD)技术在这方面有很好的效果。其原理是根据对象与观察者的远近关系,使用不同线框密度的几何模型。在本系统中,采用了两级LOD 对景物进行简化,提高了计算效率,满足了在PC 机上的运行要求。
7 结束语
本系统在整体结构的构建和各个模块的设计和具体实现过程中,一直遵循了“保证效果,易于普及”的设计思想,在视景模块中,综合采用了目前虚拟现实(Virtual Reality)技术和视景仿真(Scene Simulation)技术中多种常用的实体建模、场景管理、图象特效的软件和技术,使系统的整体视景效果达到了期望的真实程度。并加入音响模块,通过模拟飞机着陆过程中的各种声音以及来自地面的语音指示来增强整个系统的沉浸感和逼真度。同时,通过按照一定的层次结构,利用LOD 技术和最优化技术,在不影响画面视觉效果的前提条件下对各种景物模型进行了简化,使计算的效率大大提高,而且,在操纵和飞行仿真模块中,使用了普及型的操纵设备和接口,使整个系统完全可以在PC 平台上正常运行。该系统结构相对简单,而且适合于在飞机实体模型、地形环境、天气条件、平显和ILS 的样式以及飞机的飞行动力学和运动学参数上根据用户实际需要进行各种更改。因此,比较适合于供部队进行普及性初级训练使用。
参考文献
[1] 飞行实时仿真系统及技术 王行仁等著. 北京航空航天大学出版社;
[2] 3DS MAX 动画设计宝典 V.N.CLUB著 清华大学出版社;
[3] 飞行控制系统 张明廉著. 国防工业出版社;
[4] 虚拟现实技术及编程技巧 张秀山 等编著 国防科技大学出版社;
[5] OPENGL 高级编程与可视系统开发 和平鸽工作室著 中国水利水电出版社;
[6] MultiGen Creator’s Desktop Tutor, MultiGen-Paradigm;
[7] Vtree SDK User’S Manual CG-2;