1. 引言
装备教学是保障部队装备形成战斗力的重要手段,也是院校教学的关键环节,直接关系到学员岗位和职业能力形成,特别是装备构造原理、检测维修教学一直是困扰相关院校和部队的老大难问题,主要体现在四个方面:一是构造不直观,难以讲解和阐述,教学效率不高;二是实装训练损耗大,装备保障费用高,装备完好率难以保证;三是装备数量少,学员人数多,难以改变一人做多人看的局面;四是实践训练效率低,检测维修故障排除训练时间长等。要解决以上问题,必须借助于信息化教学技术,开发相关的虚拟训练系统,采用虚实结合方式,解决直观性不够、训练效率低、装备损耗大等问题。复杂机械和装备教学训练系统相关院校也有开发,比如文怀兴等发表的《基于Virtools并联机床虚拟装配系统开发》等 [1],李菲等发表的论文《军校电子对抗装备教学问题和对策》等都有相关阐述。但是要实现包括理论学习、装备构造、装备原理、装备使用维护、装备检测、装备维修、实践考核、理论考核等多方面模块内容的虚拟训练系统,需要多种平台软件结合开发,必须具有装备构造拆分、点击查看、部件多角度查看和装配、故障实践操作训练考核等功能,难度较大。下面以笔者开发的某种装备虚拟训练系统为例进行阐述。该型软件针对装备教学和实训需求,开发了包含能够自主学习理论、自主操作和排除故障实训的某型装备虚拟实训系统,主要有概述、构造原理、操作使用、维护保养、分解组装、检测维修等模块。
2. 系统设计需求分析
某型装备保障教学主要培养学员懂构造原理、会使用维护、检测维修的装备保障人才,培养考核合格后,在部队从事装备保障工作。结合装备构造原理复杂、零部件多,拆分训练损耗大,装备数量少和人数众多实际,需要开发一种虚拟实训操作系统。软件基本需求有:一是展示装备构造,通过鼠标控制零部件多角度展示,便于直观学习,开展装备分解组装交互训练;二是开展检测维修训练,采用演示诊断思路和步骤方式,借助于维修工具模拟实装排除故障;三是开展考核,要开展虚拟故障排除、操作实践考核,并且和理论考核结合起来,客观评价学员知识、技能水平。同时要确保虚拟实训系统应提供完整、准确的三维模型,应具备丰富的交互功能、人机界面、运行性。
3. 系统设计方案
本系统以3D Max为建模平台,以Virtools软件为媒介集成开发成一款面向对象的虚拟交互软件。首先通过3D Max创建装备的各个部件、零件三维模型并完成装配、渲染和制作动画,使用Virtools专门为3ds Max开发的插件Max to Virtools导出nmo格式文件,将文件导入至Virtools,Virtools通过BB模块、VSL开发等方式控制,最终完成整个虚拟训练系统。设计总界面如图1所示,系统设计方案如图2所示。

Figure 1. Software interface and function composition
图1. 软件界面和功能组成
4. 3D Max建模实现
进行3D Max建模前必须熟悉装备构造和零部件组成,结合开发软件需要用到的拆解零部件进行建模开发。建模要体现装备零部件的真实性和尺寸匹配性,首先用精度较高的游标卡尺测量零部件尺寸并进行绘制,绘制完毕后需要再建模。虚拟现实中的装备构造三维建模模型相对比较复杂,采用单一的建模方式无法实现对整体的建模。针对该装备结构复杂多样、形状不规则的情况,主要采用多边形建模,配合使用其他多种建模方式,按照由简到繁,由易到难的建模思路 [1]。先从结构比较简单形状比较规则的部件着手,比如面板、传达杆、三脚架等,后期在对结构复杂、形状及其不规则的物体进行建模,比如按钮、齿轮等。另外针对装备内部具有复杂的电路板,因为电路板部件不需要展示其构造组成,只是展示电路原理时候用到关键节点,主要是采用高清照相机拍照片处理后,按照实装位置关系,结合面板叠加嵌套配合生成。模型建模后添加和武器装备颜色一致的材质,从而使装备场景变得真实、生动。添加材质效果见图3示。

Figure 3. Model drawing after equipment rendering
图3. 装备渲染后的模型图
在将3ds Max中的文件导出为Virtools的NMO格式文件的过程中需要注意:1) Mesh转换。模型需要先转换为Mesh对象;2) Reset Xform (重置变换)。为了正确而完整的输出所有3ds Max中的模型到Virtools中,在设置从属关系和制作动画之前必须将所有的模型做Reset XForm (重置变换)。3) Material (材质)数据部分。Virtools可接受的贴图尺寸之长与宽数值最好使用2n (如16 × 16,16 × 32,32 × 64等)像素值,这样可以充分利用Virtools中的内存,在保证贴图清晰度的情况下,尽量少的消耗系统资源。4) Light (灯光)数据部分。所有3ds Max的标准灯光等都可以导入到Virtools中。5) Group (组合)数据。为了能够正确的输出组合数据,必须在3ds Max中将组合(Group)打开,成为开放式的组合(Open Group) [2]。
5. 基于Virtools软件平台集成
Virtools是一套具备丰富的互动行为模块的实时3D环境虚拟实境编辑软件,产品为可视化界面,软件内置600多种Building Blocks模块,包括原型设计、模拟虚拟环境和3D互动等。使用Virtools可以利用拖放的方式,将BB模块赋予在适当的对象或虚拟角色上,以流程图的方式,决定BB行为交互模块的前后处理顺序,从而实现了可视化的交互脚本设计,逐渐编辑成一个完整的交互式虚拟世界 [3] [4]。
Virtools读取3ds Max导出的nmo格式文件,设置灯光、摄像机等效果,利用BB (Building Blocks)和VSL (Virtools Script Language)实现预定功能。本软件集成了8大功能模块,其中装备概况主要以动画、配音演示实现,利用PS软件处理好相关界面和材质;使用维护模块主要以视频形式展示;参考学习模块主要以电路图流程演示,原理展示等方式,并集成了装备许多资料和文字等,在此不做介绍,主要介绍几个关键难点模块。
5.1. 装备构造模块开发
复杂的装备构造模块是教学训练系统的重点,也是学员必须掌握的重难点内容。要掌握逼真的装备构造,必须要实现装备零件拆解、部件展示、部件放大缩小和旋转操作等功能,学员能够利用鼠标进行交互演示和操作,提高装备学习的真实性和交互性,提升学习效果。
本模块利用Virtools实现3维模型的控制和操作展示,实现装备构造的学习。利用鼠标左键控制装备旋转、转动等,利用鼠标右键控制装备的缩小和放大,两者配合实现装备构造的学习。同时鼠标放在或者停留在哪一个部件上,就会显示该部件的名称,并且可以同步放大缩小旋转查看。如果该部件可以拆分,点击相应的工具,就可以拆分,显示其内部构造,如图4所示。

Figure 4. Internal structure display, control and split diagram
图4. 内部构造展示及控制、拆分图
基于易于操作和逼近现实的共同考虑,采用鼠标控制摄像机角度来展示零部件的过程,可以展现出立体的效果,以给用户一个真实的体验。鼠标拖动物体运动的效果可以使用BB实现,但是相对于用VSL编写代码来讲,用BB实现过程较为复杂,可读性差,可移植性差,故采用VSL编程实现鼠标拖动物体的效果。
如以下用来实现检测鼠标拾取到的3D物体的功能。
InputManager im_Mouse=InputManager.Cast(bc.GetManagerByGuid(GetInputManagerGuid()));//生成InputManager对象
im_Mouse.GetMousePosition(pos_Mouse); //获取鼠标位置对象
RenderContextrcx=bc.GetPlayerRenderContext();//获取渲染设备
IntersectionDesc idc;//声明描述交点信息对象
int axis_x = floori(pos_Mouse.x);
int axis_y = floori(pos_Mouse.y);
rcx.Pick(axis_x, axis_y, idc);
ent3d = desc.Object; //拾取3D对象
以下程序用来实现零件随鼠标的滚动而旋转的功能。
Vector mouseRePos; //定义变量
im_Mouse.GetMouseRelativePosition(pos_Mouse);
//得到鼠标的移动量
dragDummy.Rotate(dragNormal, pos_Mouse.z*pi/180/16,NULL,false); //旋转零件
5.2. 装备检测维修模块开发
装备检测维修模块涉及到故障诊断思路、工具使用和操作演示等,对于学员来说,关键是要掌握维修技能,对于教学训练阶段来说,主要是要学会装备模拟故障的排除方法,在岗位上出现类似故障会分析和排除等。所以本模块集成了装备常用的30个故障,采用先原理后操作演示方式对学员进行展示。
以某加温功能为例来说明,按照如图5所示流程图进行故障原理演示。如1) 选取手型工具,打开电源开关;2) 观看目镜加温指示灯,察看是否亮;如果没亮,证明存在故障,关闭电源;3) 选取对应拆装工具,在对应螺丝部位进行拆装;4) 选取手型工具,连接对应转接电缆,选取万用表,在指示灯一段测量是否有2 V电压,如有电压,则更换指示灯;如果没有,则测量电源模块输出是否有27 V,如果有,则更换中间分压电阻等。
故障原理演示完毕后,进入到操作演示阶段,如图6所示,建立模拟修理用的真实场景,构建修理用工具图库和模型库,鼠标单击选择相应的工具后,会显示相应的工具模型,将工具拖动到相应的位置进行操作,例如如果需要用到电压表测量,则点击电压表图库,然后将电压表的表笔拖动放置在相应的测量点,选择相应的电压数值。系统会根据设定的情况显示数值是“0”或者是相应正确的数值,这时候需要操作人员进行下一步的判断。如果选择操作提示模式,这时会显示操作提示步骤,并同步进行相应的操作。

Figure 5. Typical troubleshooting ideas
图5. 典型故障排除思路

Figure 6. Troubleshooting interface and tool display
图6. 故障排除界面及工具展示
5.3. 装备考核模块开发
传统的考核一般只有理论考核,实践考核特别是虚拟考核较难实现。本模块开发了理论模块和实践模块,理论模块有20套题库,主要考核理论掌握情况,满分100分,答题正确数量为最终得分。
实践考核模块分为结构认知模块、故障排除模块。结构认知模块设置100道题,每10道为一组,每题10分。主要是随机抽取一个装备部件名称,如果是面板上的部件,可以通过旋转、缩放等方式操作,直接点击找出;如果是内部部件,需要通过选择相应的工具拆分,在内部找出,并点击找出。正确得分,错误为0,最后统计得分情况。故障排除模块考核主要是前面已经学习的30道故障排除题目,提供题目和工具图库,按照步骤操作,选择工具错误或者操作错误,就会扣分,每一个步骤都有其相应的分值,最后得分为步骤计算分值,满分为100分。如图7为操作错误提示画面。
操作评分系统是此处难点,在系统建立评分数列errorArray,存储错误要点及相应的扣分,错误要点体现在屏幕,扣分直接体现在得分区。评价功能贯穿操作始终。编写 getErrorArray函数实现以上功能。getErrorArray函数的部分代码如下:
void getErrorArray ( int i_errorID )
{String s0,s1,newString;float errorPoint;
getArrayByID (i_errorID, 0 , s0 , errorArray ) ; //获取错误字记录
getArrayByID (i_errorID, 1 , s1 , errorArray ) ; //获取扣分记录
if ( errorYouPoint <= errorMaxPoint )
{
scoreFloat -= errorPoint ;
errorYouPoint += errorPoint ;
newString=newString+ errorYouPoint ;
updateArrayByID(errorID,4, newString,errorArray);//存储扣分记录
} }
在程序的其余地方,直接调用 getErrorArray函数即可,如下面部分代码所示。
if ( testOrder ( DragTarget ) )
setPosition = true ; //执行操作
else
getErrorArray ( 3 ) ; //读取错误
6. 应用及总结
系统集成开发后,以其良好的界面、人机交互性投入到教学使用,学员在课前预习、教员在讲解和考核当中都应用了此系统,解决了新装备教学过程手段匮乏、技术手段不高、装备损耗大、效率不高等问题。该软件教学使用安排如下表1所示。

Table 1. Virtual training teaching arrangement
表1. 虚拟实训教学安排
该软件2017年评为学校优秀教学软件一等奖,2018年、2019年学员利用系统进行强化训练,特别是结合混合教学模式应用时,学员能够利用系统对装备进行自主预习,对照构造展示模块能够自主掌握枯燥的理论和复杂的构造内容,树立直观印象。通过系统学习,学员实践成绩平均提高了15.2%,装备完好率达到100%,装备维修费用有效降低,2019年作为训练资源获优秀教学成果二等奖,说明该系统应用后,助力提升教学效果明显。