纳金网

标题: 基于VC++和OpenGL的大型机械装置虚拟教学训练系统的开发 [打印本页]

作者: 驰骋的风    时间: 2011-12-9 09:42
标题: 基于VC++和OpenGL的大型机械装置虚拟教学训练系统的开发

   作者: 贺少华 吴新跃

   来源: 万方数据



 1、引言
  三维虚拟仿真(3D Virtual Simulation)是利用三维建模技术构建现实世界的三维场景,并通过一定的软件环境驱动整个三维场景、响应用户的输入、根据用户的不同动作做出相应的反应、并在三维环境中显示出来[11。现代机械装置往往结构复杂,功能原理深奥,单纯依靠实物进行教学、训练,费用高且效率低,而利用开发的虚拟仿真系统,不需要借助实物就可在计算机上进行日常的教学、训练,费用低廉而且安全,在身临其境的人机交互中,原本复杂深奥的装置构造、原理、拆装、维修知识变得直观易懂。虽然此类虚拟仿真系统已经出现,但还存在诸多的不足,如文献[2]中采用VB+VRML开发的仿真模型仅仅具有单调的颜色和简单的反光特性;三维模型浏览需借助于外部已有的浏览器,而外部的浏览器需要单独安装,这使得整个系统的移植性不强。文献[3]中的VC+VRML系统交互方式单一,拆装、机构运动只能被动的进行动画测览。文献[4]中的Visproducts+ VisMockupVisLab+VisJackVisVSA系统,对开发所需硬件水平要求高;昂贵的图形工作站、三维鼠标、立体眼镜等设备显然不利于其推广使用;文献[5]中的Multigen+OpenGvs+Virtools+OpenGL+XML+ACESS+VC系统开发,开发难度大,周期长,成本高[2。5]。本文为解决此类问题展开了研究,通过分析研究,提出了一种新的基于普通微机和简单交互设备(主要包括二维鼠标和普通彩色显示器)的大型机械装置虚拟仿真系统的开发方案:1-DEAS+OpenGL+VC++。
  桌面式虚拟仿真应用系统的开发一般有两种模式,如图1所示。一种模式是直接使用底层图形接口如OpenGL、Direct3D、Java3D等,另一种模式是使用位于底层图形接口之上的开发平台,如国外著名的商业产品OpenGVS、VEGA、Virtools和开源平台OSG,以及国内图形平台BH.Graph等[5]。第一种模式的特点是可以完全自主控制应用系统的底层细节,灵活性强,可以较好体现应用系统需求方意愿,第二种模式需借助于已有仿真图形平台,系统开发自主性不高。同时,这些仿真平台软件的价格往往比较昂贵,系统开发经济性不高。本文系统开发选择第一种开发模式。
  桌面式虚拟现实系统相对沉浸式和增强型虚拟现实系统,对硬件要求要低得多,本虚拟仿真训练系统开发硬件环境为:


  (1)桌面式个人计算机(Intel Pentium II 450或以上);
  (2)交互硬件:键盘、二维鼠标;
  软件环境为:
  (1)Windows操作系统;
  (2)OpenGL程序应用接口(AVO。本方案选择I-DEAS软件作为建立三维仿真模型的平台。I-DEAS是世界上最著名的机械CAD设计自动化软件,革命性的VGXTM变数式几何系统技术,让使用者以更直觉的方式去雕塑三维实体模型;并直接在电脑三维实体原型上进行修改,如同以双手拼组真实的零件一样[6]。
  运用Vc++与OpenGL联合开发交互图形应用程序是因为:
  (1)同其它编程语言相比,vC对OpenGL的支持最好,能很方便地迸行OpenGL编程,而且其功能十分强大。而Delphi不能对OpenGL提供很好的支持。
  (2)单纯用VC++很难设计出高性能的三维图形工具,目前图形开发包DirectX适于游戏开发以及加强多媒体性能等方面,而OpenGL则可以制作出更顺畅的3D效果,且OpenGL性能优于DirectX。
  (3)OpenGL可以与vc++建立紧密接口,便于实现有关计算和图形算法,可保证算法的正确性和可靠性。
   2、系统模块化设计
  本系统采用模块化结构,模块定义和功能主要根据系统的各种功能需要,这些功能主要包括:
  (1)数据库支持获得接近最优的虚拟拆卸序列,用以指导、提示操作者正确完成拆卸过程;
  (2)三维场景显示模块(主要包括机械装置三维仿真模型、机构仿真动画、材质、光照等),对场景模型的编辑、控制、浏览等;
  (3)友好的用户图形界面(GUI)设计。相应的,设计出本系统的三个模块:拆卸序列规划;虚拟场景交互式浏览、编辑和动画仿真;用户图形界面,如图2所示。


  拆卸序列规划模块利用DCG(disassembly constraint graph)序列生成法和遗传算法得到接近最优的拆卸序列。DCG法能够得到拆卸维修某一部件时的所有合理拆卸序列,然后由遗传算法来选择最优的序列,优化主要考虑拆卸所花的时间,主要影响因素有拆卸工具的变换和拆卸方位的变换。关于这部分功能的具体实现途径在文献[8,9]中已有详细论述,这里不做讨论。虚拟环境模块包含了两个子模块,如图2所示:几何建模模块和场景显示模块。系统仿真对象几何模型的建立和驱动将在后文中详细介绍。GU_I模琰则用来将上述的模块集合在一起成为一个完整的系统。
  3、系统的几个关键技术及实现
  3.1实体模型向3DS表面模型的转换
  I-DEAS采用三维实体模型,‘该种模型文件通常非常大,在基于普通微机的硬件条件下不能满足实时交互的要求。所以,在本方案中,将I-DEAS实体模型转换为结构橱对简单的表面(多边形)模型就成为了必要,在这里选择3DS格式,因为3DS是一种非常普遍的三维图形数据格式黠构相对简单清晰,易于加工处理,如在后文中将要提到的简化和用于程序读取。
  3.2 3DS模型的简化
  将仿真模型从I-DEAS实体格式转换为3DS多边形格式后,虽然文件有所减小,但对于大型复杂机械装置,在较低的图形硬件水平下,模型数据简化仍是必要的。3DS模型简化可以综合采用以下两种方法:
  方法一:由于多边形的数量取决于很多方面。比如由于零件的曲率,一个大部分是平面的5MB的3DS文件创建的三角形数量级会低于同样一个5MB的包含管道及螺杆的3DS文件,所以,在I-DEAS中通过修改原仿真模型来减少数据的大小是简化方法之一。
  方法二:通过Polytrans、3DS iMAX等专业3DS文件处理软件进行修改简化。
  3.3 VC++环境中OpenGL,读入外部模型数据并进行实时交互控制显示
  完成简化并添加了材质、光照、纹理等信息的仿真对象几何模型3DS格式数据,实现OpenGL对其的读取的方法为:首先定义一系列的结构,如对象的材质、材质库、位置矢量、四元数等, 然后通过定义各种类封装对3DS文件中各种对象的处理和读取操作。
  读入模型数据后就可利用OpenGL的常用绘图函数如glVertex3f0进行绘图显示了,而对于模型的放大、缩小、平移、旋转、拾取等交互控制则主要是利用矩阵堆栈和OpenGL的选择拾取和反馈机制来实现。
  3.4通过建立装配约束关系来简化对虚拟拆装中碰撞检测的编程实现
  虚拟拆装是一个成功的虚拟仿真系统所不可或缺的功能,在1-DEAS+OpenGL+VC++开发方案中,用屏幕上的光标来代替拆装虚拟“手”,利用OpenGL的选择拾取机制和结合VC十+编程实现整体装配中单个零部件的拾取和拖动。
  碰撞检测是提高虚拟交互式拆装真实性和实用性的最有效途径,碰撞检测的实现最重要的是研究选择碰撞检测算法的问题,由于现在虚拟物体模型大多采用多面体表示(1-DEAS州)penGL斗Vc++方案中的3DS模型为三角形,三角面片稹型能够很好地满足虚拟现实系统实时性的要求),
  碰撞检测实际上就是电脑计算判断多面体相交的问题,场景中海量的姿态、位置各异的多面体使得上述计算是一项十分复杂耗时的工作,I-DEAS+OpenGL+VC++开发方案基于普通计算机硬件,这就使得对碰撞检测算法的适当简化显得十分必要,其中建立装配约束关系被证明了是一种十分有效的方法,这里的装配约束是指装配体中零件问的位置约束关系,主要从几何方面考虑,如面贴合约束、对齐约束和定向约束等。装配约束本质上可归结为几何元素点、线、面之间的相互关系,它的其体建立由OpenGL编程实现,程序体的功能就是保证用虚拟“手”拖动某一零部件实现拆装时根据实际中该零部件与其他零部件的位置关系(也就是上面说所的点、线、面之间的相互关系)限定其运动的自由度。
  3.5机械机构运动仿真
  OpenGL支持双缓存(Double Buffers)技术,该技术提供了一种生成平滑动画的机制。这使利用OpenGL生成动画非常简单。
  在利用OpenGL设计动画时,时间间隔起着十分重要的作用。时间问隔很大时,将浪费很多系统时间,时间间隔较小时,视频不能进行正确地刷新,将有可能产生帧信息的丢失。在确定时间间隔时,一般应综合考虑系统的视频刷新频率和计算的复杂度等因素。
  在进行机构的运动仿真时,首先要建立运动机构的三维几何模型,并对模型进行各种坐标变换,以确定这些模型在三维空间中的定位和取向,并选定有利的观察点。建立模型以后,接下来可以采用运动的动画显示技术,仿真机构运动,以模拟实际的机构运动情况。因为任何一个运动形式都是由平动和转动组成的,OpenGL正是提供了实现这两种分运动的函数,glRotatef0$1 glTranslatef0,只需将机构运动规律或各运动部件相互的运动约束写成程序语句(当然也可先在外
  部人工计算出各运动部件的绝对运动规律),然后调用上述两个函数,再添加交互控制函数即可制作出交互的机构运动动画,图3所示为调距桨的仿真调距原理动画其中的两帧。


    4、系统运行仿真实例
  系统的用户图形界面设计参考了当今在工业领域被广泛使用的CAD软件的界面设计,使操作者对其更觉友好和熟悉。
  以某型调距桨装置为例来验证该系统的功能,如图4所示。假定操作对象为该调距桨装置的桨壳体部件,在窗口1左上子窗口中的装配关系树上选定该部件,最优拆卸序列生成并显示在窗口3中。选择“开始拆卸”后,“实时拆卸信息显示”窗口给出拆卸每一步的状态,包括目标对象、正在拆卸对象、拆卸所需总步数、已进行步数。图4中正在拆卸对象为前活塞杆,选择主菜单栏上的“拆卸工具”为“工具4”,鼠标形状变化为“工具4”字样,点击选取并拖动拆卸对象实现拆卸动作(该功能主要根据OpertGL的选择拾取机制实现),同时, “实物图片显示”子窗口显示该拆卸对象实物图片,窗口3中显示该对象的功能、结构和下一步拆卸对象等文字信息,加深操作和观赏人员对装置整体及其部件拆卸知识的理解。在拆卸过程中,工具选择错误或拆装顺序错误都将使操作无法继续进行。拆卸完成后,通过点击“RESET”,可以从头开始反复练习拆卸过程。在拆卸过程中,还可以通过配合使用键盘、鼠标来实现对拆卸对象的放大、缩小、平移、旋转的导航控制;“场景编辑”和“显示模式”选择个性化的场景光照、模型材质和点、线框、实体显示模式。


  5、结论
  vc++应用程序打包生成.exe文件或安装文件后可以脱离vc++环境独立安装运行,本文提出的I-DEAS+OpenGL+vC++虚拟仿真系统开发方案有着广泛的适用性;vC++和OpenGL底层开发法,还具有能够实现用户的个性化需求,满足计算机通讯实时性的优点,但它的缺点是要求用户掌握较深的编程知识;机械CAD三维实体模型数据的文件大且结构复杂,直接进行场景驱动对硬件水平要求高,编程困难,利用本文提出的几种方法实现了将机械CAD实体模型进行格式转换和优化,得到了文件格式简单、占用内存少、便于添加渲染效果的3DS表面模型(本文中所举例机械装置在I-DEAS环境中的模型文件大小为800多兆,而最终得到的整个虚拟仿真系统文件大小低于100兆,且模型仿真视觉效果更佳),使得低硬件条件下的场景实时驱动成为可能,从而为从现有机械CAD模型出发进行视觉仿真和交互开辟了一条新途径;最后,通过建立装配约束关系来减少碰撞检测相交测试,效果显著,大大降低了应用程序复杂度。


图4 某型调距浆虚拟拆卸场景



图3 调距浆的仿真调距原理动画



图2  桌面式虚拟现实维修训练系统模块设计



图1 虚拟现实应用的两种开发模式

作者: tc    时间: 2012-1-20 23:30
年年岁岁,岁岁年年,春去春来,转眼间又过了一年,小年到,祝福到,愿你在新的一年事业节节高,生活红火火,拜个早年,提前祝你新年好!

作者: 晃晃    时间: 2012-2-2 23:19
我看看就走,你们聊!

作者: 晃晃    时间: 2012-2-14 23:30
心中有爱,爱咋咋地

作者: 晃晃    时间: 2012-3-11 23:28
精典,学习了!

作者: C.R.CAN    时间: 2012-4-3 13:15
再次路过……

作者: 奇    时间: 2012-4-5 23:29
先垫一块,再说鸟

作者: 奇    时间: 2012-4-16 23:26
你们都躲开,我来顶

作者: tc    时间: 2012-8-12 00:31
呵呵,真得不错哦!!

作者: 晃晃    时间: 2012-8-23 23:59
加精、加亮滴铁子,尤其要多丁页丁页

作者: tc    时间: 2012-9-19 23:29
好可爱的字,学习了

作者: C.R.CAN    时间: 2013-1-27 23:21
我是老实人,我来也!

作者: C.R.CAN    时间: 2013-2-14 23:29
先顶上去,偶要高亮加精鸟!

作者: C.R.CAN    时间: 2013-3-7 23:47
已阵亡的 蝶 随 风 舞 说过  偶尔按一下 CTRL A 会发现 世界还有另一面

作者: 奇    时间: 2013-3-14 23:26
好铁多多发,感激分享

作者: 晃晃    时间: 2013-3-19 23:25
其实楼主所说的这些,俺支很少用!





欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5