虚拟维修教学系统仿真

  • 格式:docx
  • 大小:1.21 MB
  • 文档页数:17

*****学科专业:机械工程1408班学号:*************任课教师:***武汉理工大学2015年6月摘要:本文通过对虚拟维修教学系统的研究与开发,重点描述了虚拟维修教学系统中关键技术的研究以及功能模块的实现。

主要研究了虚拟场景建模技术,人机交互界面的设计,碰撞仿真的检测,自由漫游运动的实现等方面内容,并基于OSG平台完成上述要求。

关键词:OSG;虚拟维修;人机交互;碰撞检测Virtual maintenance teaching system simulationAbstract:In this paper, the research and development of virtual maintenance teaching system, the key technology research and function module of the virtual maintenance teaching system are described in detail. In this research, the virtual scene modeling technology, the design of the human computer interaction interface, the detection of the collision simulation, the realization of the free roaming, and the above requirements are completed based on the OSG platform.Keywords:OSG; virtual maintenance; human computer interaction; collision detection1绪论1.1引言设备的维修在设备生命周期中占有非常重要的地位。

在设备的使用过程中,使用引起的有形磨损等各种有害现象的不断累积增加,对于使用单位,会造成多方面的经济损失。

随着虚拟现实技术的蓬勃发展及其广泛应用, 虚拟维修仿真成为了当前研究热点。

虚拟现实技术是在计算机图形学、计算机仿真技术、人机接口技术、多媒体技术以及传感技术的基础上发展起来的交叉学科[1]。

近年来,虚拟维修仿真技术已经从单一的机械产品开发延伸到军工,航天等领域,仿真对象也从简单的机械设备扩展到复杂系统。

根据研究的目的不同,虚拟维修仿真可以应用到以下三个领域:维修性设计、保障性规划、人员培训[2]。

本文所搭建的是一个主要以人员培训为主的虚拟维修教学仿真系统,该类虚拟维修仿真充分利用虚拟现实技术营造逼真的训练环境,利用计算机仿真技术来模拟再现维修过程,从而向培训者提供直观可信的专业知识,使受训人员得到全方位的培训,获取现实般的维修经验。

1.2国内外现状作为虚拟维修在实际应用中最成功的案例就是哈勃太空望远镜的虚拟维修训练工程[3]。

在哈勃望远镜工作不久,管理人员发现其光学系统出现了问题,无法完成既定任务。

经过调研,美国宇航局决定不把它带回地球维修,而是派宇航员去太空对其进行维修,这就需要在地面运用虚拟现实技术,搭建一个虚拟维修平台以供维修人员进行修理学习。

经过几个月的训练后将维修人员送入太空,并且圆满的完成了任务。

南洋理工大学机械与宇航工程学院的Li JingRong提出了一种面向虚拟样机的桌面虚拟维修仿真系统,集成了一种新型拆装序列规划技术和优化算法,并以离心泵系统的维修为例展示了该系统进行拆卸维修培训的良好性能[4]。

德国的Eberhard Bluemel等人,为了给维修人员提供多层次的训练,开发了一套交互式虚拟维修训练系统。

该系统提供了四种不同层次的训练模式,通过循序渐进的学习,根据不同的学习层次,设置不同的人机交互难度。

该系统实用性强,训练效果良好[5]。

VDV AS系统,是由浙江大学开发的虚拟装配设计系统,此系统实现了虚拟环境中可以直接修改所有零部件的几何模型和产品设备的装配操作[6]。

哈尔滨工业大学的黄忠念等人,为了弥补传统鱼雷维修培训存在的不足,设计了一个面向鱼雷的虚拟维修训练系统。

该系统能实现鱼雷模型和虚拟环境的实时渲染功能,并且鱼雷的零部件都可以完成拆装功能[7]。

2 虚拟维修教学系统框架虚拟维修教学系统主要包括三维建模、运动建模、虚拟拆装、交互控制、故障诊断、维修教学等,其总体框架如图1所示。

图1 虚拟维修系统总体框架2.1仿真引擎OSG本系统所使用的图形引擎为OSG,其全称为Open Scene Graph,它是基于OpenGl技术开发,是一套基于C++平台的应用程序接口API。

OSG是一个开源系统,其开发的目的在于将3D场景定义为空间中一系列连续的对象,进行三维世界的管理。

它围绕场景图形的概念,并为图形应用程序的开发提供许多附加的实用工具,使开发人员从实现和优化底层图形的调用中解脱出来[8]。

作为图形开发工具,OSG有着自身的优点:(1)高效性,其支持多种虚拟场景裁剪剔除技术、顶点缓冲对象、多线程渲染、场景动态更新、LOD技术等,进行高效的场景渲染[9];(2)快速开发,OSG封装了OpenGL的大部分功能,开发者不需在关注底层代码,只用理解和掌握其实质内容,懂得操控使用这些库函数就可以实现快速开发[10];(3)支持多种数据格式,OSG核心库中有个osgDB类,提供文件读写接口,支持多种格式的3D模型文件、常见的音频文件、图形图像文件、字体文件等,若用户有需求,还可以加载用户自定义的文件格式;(4)可扩展性,基于场景图形内核,因此具有强大的可扩展能力,应用程序窗口的无关性对用户自主开发界面提供了更大的空间。

OSG可以被应用于不同领域,并根据不同需要进行二次开发。

2.2数据库搭建数据库技术在虚拟维修教学系统中起着重要的作用,作为系统的数据支撑层,提供了系统仿真所需的所有多媒体资源及数据资源。

我将其分为了维修模型库和维修数据库。

维修模型库应包含虚拟场景的建模,即用户在仿真操作时周边的环境,维修场所及场所中的工具、环境等;虚拟样机的三维模型,既有总装体,也有各个零部件,同时还应该包括处于故障状态下的三维模型;声音及粒子特效用于设备运转的真实场景。

在维修教学时的拆卸与安装步骤中提供各个零部件的模型,除此之外还应该包括维修时的工具的模型库。

图2 小电机模型维修数据库主要包括维修工艺,故障库和试题库。

维修工艺即使对维修过程的工艺规划,如应该先拆卸哪个零件,在拆卸过程应该注意的事项等,其可以通过影音和文本教学相结合的形式,通过调用视频文件或者维修工艺卡的方式进行讲解;故障库是用于展示维修样机的故障状态,可以使用图片或者3D 模型的形式保存,在需要使用时调用即可;试题库则是用于进行教学后的考核,可以安排如选择题,操作题等多种题型,设定某一需要维修部件的拆卸/装配操作顺序,考察操作人员是否可以按照操作流程进行维修,若出现了错误则可以及时的反馈并做出相应的记录,最后进行总的测评,进行维修教学效果的评价。

2.3图形用户界面图形用户界面是为了简化用户和计算机交互而设计的计算机窗口[11]。

该窗口上的每一个选项都是一个具有相关功能的对象,它是最直观,最高效的与用户交互的方式。

GUI的开发方案有很多种,比如在Windows系统中使用MFC开发的框架,在开源系统中使用QT等。

本文中虚拟维修教学系统的界面使用Visual Studio开发,开发语言为C#,如图3所示为用户注册界面,培训人员在进入系统之前要先进行注册,注册信息会保存到数据库中。

图3 系统用户注册界面进入系统后,可以选择要进行维修教学的模型,如图4所示。

图4 系统的模型选择界面维修教学的界面使用了与OSG结合很好的CEGUI,这是一款开源的UI引擎,它允许用户使用自定义的图片描述通用控件,达到美化界面的要求。

这里我们使用CEGUI和OSG相结合达到鼠标键盘控制维修过程的目的,这是一种非沉浸式的虚拟维修,主要利用CEGUI图形界面库集成到鼠标键盘拆卸技术中, 实现了更加友好的人机操作界面,利用CEGUI对零件的拆卸顺序进行了优化,同时零件节点树为用户提供了很好的拆卸导航。

在拆卸界面上,用户可直接选取某一零件,选中后零件的名称会在图形界面上高亮显示,此时用户可以利用键盘上相应按键实现拖曳。

其实现效果如图5所示。

图5 结合CEGUI和OSG的虚拟维修在OSG中,键盘的响应是通过事件处理器osgGA::GUIEventHandler类实现的,它作为OSG键盘交互事件的处理终端,提供了可扩展的虚函数handle,通过类的派生和虚函数的重构,实现用户自定义的交互事件处理工具。

handle 函数里面的形参:时间适配器ea:获取当前传入此适配器的事件;动作适配器aa:获取传入的是当前所用的视图对象View,可以用来控制视景器的变化。

响应事件的部分代码如下:bool MoveHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, osg::Object*, osg::NodeVisitor*){…switch (ea.getEventType()){case osgGA::GUIEventAdapter::KEYDOWN: //是否按下了键盘{if (ea.getKey() == osgGA::GUIEventAdapter::KEY_Left){…} //响应左键else if (ea.getKey() == osgGA::GUIEventAdapter::KEY_Right){…} //响应右键…}}}而鼠标的交互则分为两种:一是OSG自带的Dragger类的实现,二则是使用CEGUI实现。

利用OSG中的Dragger类进行拖曳拆卸,拖曳技术它可以在XYZ轴三个方向对零件进行平移操作。

将拖曳器与零件节点共同添加到父节点中,即可实现对该零件的拖曳。

该技术使操作人员手动模拟对各个零件进行拆卸,使操作人员对拆卸过程和顺序有更清楚地练习和熟知,实现的效果如图6所示。

图6鼠标拖曳其实现的部分代码如下://selection为MatrixTransform类型变量,scene为零件节点selection->addChild(scene);//根据name产生拖曳器osgManipulator::Dragger* dragger = createDragger(name);osg::Group* root = new osg::Group;//将零件节点和拖曳节点置于同一父节点root->addChild(selection);root->addChild(dragger);最后将root变量返回并添加到场景中即可实现对零件的拖曳。