,,
(天津理工大学 海运学院,天津 300191)
实物拆装训练多采取集中训练的方式,对时间、场地、设备等资源有较多的要求。在航海专业技术仿真培训中,目前国内外广泛应用的有航海模拟器,轮机模拟器,而对拆装仿真训练系统的研究和应用比较少[1]。针对这一情况,考虑结合VRML和Java建立虚拟拆装训练系统模拟实物拆装。
针对船机拆装训练要求,设计虚拟拆装培训系统的主要内容包括船舶产品的结构展示、运动模拟、拆装训练和拆装测试。结构展示的功能是多角度显示产品的各个部件,使学员能够了解船舶机械各部分的组成和在系统中所处的位置,掌握船舶产品的结构。产品运动模拟的功能是使学员能清楚地观看到机械内部的工作情况。在拆装训练中,在拆装信息的引导下,学员利用鼠标,键盘与场景中的零部件交互,学习拆装,熟悉拆装序列,拆装方法。在拆装测试中,学员能够检验自己的学习结果,避免实物拆装产生误操作,同时也为教师提供了考核的依据。
在虚拟拆装培训系统中,采用VRML语言构建虚拟环境,可供采用的三维模型工具有Pro/E,3dMax,Autocat等。Pro/E是非常适用的三维建模工具,如果具有详细的图纸,能够建立精确的三维模型。而一般情况,很难得到产品的详细图纸,作为培训软件,对于零部件的配合要求不是非常严格,在没有确切的零部件图纸的情况下,部分零部件可以采用3dmax作为主要的建模工具。3dmax是非常强大的三维建模工具,它具有为模型设置贴图材质,灯光,动画等强大的功能,而且这些效果可以随着模型一起转换成vrml格式文件,可以取得比较逼真的效果。
机械产品的拆装存在多种可行的拆装过程,在虚拟环境中,需要使得装配体具有现实中装配体的拆装特性,即具有一定的拆装序列,如何对该拆装过程进行模拟是需要解决的问题。
装配体的拆卸和安装是可逆的过程,首先对拆卸过程进行如下分析。
装配体的拆卸过程具有一定的顺序和限制,即某一零件的拆卸必须以另外的零件已经拆卸完成为前提。对零件数量较少的装配体而言,可行拆卸序列数量是有限的,在虚拟拆卸过程中,采用遍历可行拆卸序列来检验拆卸过程是简单可行的。但是对于复杂的装配体,可行拆卸序列数量很多,以上方法很难实现。需要采用一定的算法和数据结构来设计整个拆些过程。
机械产品的拆卸过程是一个有序的过程,可以采用有向图的方式将零部件的拆卸过程表达出来。如图1所示的有向图中,每一个节点表示对某个零件的拆装任务,边(i,j)表示在装配序列中装配任务i在装配任务j的前面。在拆装过程中,只有i任务完成了,才能完成j任务。那么,对机械产品的拆装序列的求解就可以转换成有向图的拓扑排序的求解[2]。
图1 有向图
由图1可知,有向图的拓扑排序的解空间是不惟一的,可以存在多种排序序列。即在求解拆装序列过程中,每一拆装步骤中可选择拆装的零部件可能有多个。设计虚拟拆卸过程是一个动态的过程,存在着学员对拆卸零件的选择。学员通过交互选择在每一拆装步骤中,只能选择一种零件进行拆卸,所以当所有可拆卸的零件都选择完毕后,最终得到一条可行的拆卸序列。
设计虚拟拆装过程中拆卸序列的求解方式如下。
首先,确定拆装有向图的数据结构,采用逆邻接表[3]的方式来记录有向图中的顶点和边的信息,见图2。
图2 有向图的逆邻接表
图2是对图1进行存储的逆邻接表。由图2可知,V1,V2节点不存在需要拆卸的先行节点,所以直接可对其进行拆卸,V3的先行节点是V1,必须先对V1进行拆卸后才能拆卸V3,V4,V5,V6同理。
然后,确定拆装序列。当学员选择拆卸零件进行拆装时,触发拆卸序列求解的具体步骤如下。
1)计算每个顶点的入度;
2)将入度为0的顶点入栈;
3)如果学员选择的顶点为栈内元素,则
①将该顶点放入拆卸序列中;将与其相邻的顶点的入度减1;
②如果有新的入度为0的顶点出现,将其放入栈中;
否则,操作错误。
以上方法解决了复杂装配体中拆卸序列求解的问题,装配体的安装是拆卸的一个逆过程,安装过程的有向图可以由拆卸过程的有向图来改造,只需将所有的边的箭头反向即可。所以安装过程的序列求解方法与拆卸过程相同。并且,安装过程的实现以及安装过程中的信息处理与拆卸方法相同。
VRML文件建立虚拟环境实现对学员输入的监测,拆装过程模拟的功能。JAVA语言实现对拆装序列的检验和确定,以及引导性拆装信息的显示。具体信息处理方式见图3。
图3 拆卸过程信息处理
VRML是由节点组成的语言,通过节点来表达信息。信息处理的VRML部分主要通过节点表达零件模型信息和零件交互控制信息。JAVA部分主要包括获取拆装信息、判断拆装可行性、确定拆装序列、显示拆装信息等。
在虚拟拆装过程中,零件的交互式拆装过程是通过学员的触发作用产生的。零件的虚拟拆装流程如下。
1)当用户点击虚拟环境中的零件时,就意味着要对零件进行拆装操作。这时由VRML部分的零件交互控制节点——接触检测器监测学员的动作,将触发信息转变成JAVA部分可识别的操作参数,传递给JAVA实现部分。
2)JAVA实现部分的Script节点接收到操作参数后,根据设计的确定拆装序列的算法进行推理,判断该零件是否可以拆装。不管是否可拆装,都会将拆装信息显示给用户。
3)如果该零件是可拆装的,则确定该零件为要拆装的零件,将此信息发送到VRML部分中的零件模型信息节点,改变该零件的位置,或是触发该零件的一个拆装动画,完成该零件的拆装。如果零件不可拆装,等待下一个触发。
4)当所有的零件被拆装后,产生一个拆装序列。
机械产品的拆装方式是多种多样的。在拆装方式的表达上,对于简单的连接方式的拆装,例如定位销的拔出,安装,可以通过改变零件的位置来实现,而对于比较复杂的拆装,例如螺钉的螺接,活塞的吊缸等,可以采用拆装动画的形式表现。VRML提供了多种制作动画的方式,可以直接采用动画节点设置零件拆装的动画,也可以将时间触发器,位置插补器,方向插补器等一起应用于设定零件拆装动画。当学员触发可拆装的零件后,VRML的零件交互控制节点可调用该零件的拆装动画,展示零件的拆装方法。通过这种动画的表达,使得学员能够准确地理解零件的拆装方式以及某些专用工具的使用,便于学员更好地掌握拆装知识。动画完成后,零部件到达其拆装后的位置或安装的位置。
虚拟拆装训练系统是通过浏览器和VRML插件显示,所以整体可以通过网页浏览,便于网络远程示教。图4为柴油机拆装训练中的测试部分模块。虚拟环境区是学员可以操作的区域,当学员进行操作时,相应的信息会显示在右侧。拆装练习中,拆装信息提示区会给学员下一步的拆装以合理的提示,学员根据提示可以完成拆装练习。而在拆装测试中,对于学员的每个操作都会有正误的判断,可以检验学员的学习成果。如果学员拆装正确,则将操作的零部件加入拆装序列区,累计正确操作步数和剩余步数;拆装错误,则显示错误信息,并累计错误操作的步数。
图4 柴油机拆装训练中的测试部分模块
该系统是一种可供教学、拆装实验应用的培训系统,为船机拆装的有效展开提供了思路。但对于一个完善的培训系统而言,需要结合培训要求进一步完善设备的种类,丰富拆装的手段和方法,这也是下一步要做的工作。
[1] 史成军,郭 晨,彭水生,等.虚拟现实技术在轮机模拟器中的应用[J].大连海事大学学报,2002(S1):39.
[2] 汪兴谦,牛燕民,邓谆谆.VRML与Java编程实例讲解[M].北京:中国水利水电出版社,2001.
[3] 严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1996:179-180.