网络环境下组合夹具虚拟装配平台的构建*
2011-05-28魏园园王君泽
魏园园,瞿 畅,王君泽
(南通大学机械工程学院,江苏 南通 226019)
0 引言
组合夹具是由一套预先定制好的各种不同形式、不同规格尺寸的标准元件和组合件组成。组合夹具的元件数目众多,组合方式多样,装配技术性与经验性要求较高。组合夹具实际装配过程中,需要多次调试,装配周期较长[1]。
Web3D技术的出现,为网络环境下组合夹具的虚拟设计与装配提供了良好的应用基础[2]。目前,Web3D的核心技术是基于VRML、Java、XML、动画脚本及流式传输的技术,其实现技术主要包括VRML、Java3D、Cult3D、Virtools、ViewPoint、EON、WildTangent等。
VRML(Virtual Reality Modeling Language)是一种虚拟现实建模语言,能够在因特网上实现交互式三维多媒体。VRML的基本特点是简单易懂、网络功能强、文件容量小、交互性与可扩充性好、具有人工智能功能,但是VRML本身编程设计能力有限,运用VRML实现复杂的场景动画和交互功能并不容易[3]。基于VRML的优点,同时考虑到Java良好的跨平台性和强大的网络编程功能,文中运用VRML与Java相结合的技术,构建了交互式组合夹具虚拟装配平台,初步实现了组合夹具的交互式网络装配。
1 虚拟装配平台总体框架
虚拟装配平台以IE浏览器作为构建虚拟现实应用的基本框架,由通过编译的Java程序(.class)、HTML文件(.html)、VRML 装配场景(.wrl)、组合夹具元件的VRML模型(.wrl)四部分组成,装配平台界面如图1。操作界面中的相关控件,实现组合夹具元件的导入、平移、旋转、删除、碰撞检测等功能。虚拟装配平台工作原理如图2。
2 虚拟装配平台关键技术
2.1 组合夹具元件模型建立与优化
VRML元件的建模方法有两种:①直接利用VRML编程创建;②利用CAD三维软件(Pro/E、UG、MDT、3ds Max等)建模后转化。VRML三维立体空间模型是由各种原型节点组成的,需要编程实现,建模过程较为繁琐。因此,组合夹具元件模型采用Pro/E三维软件建模,导出后保存为VRML文件(.wrl)。
模型建立完成后,需要对VRML文件进行优化处理,从而减少系统资源的消耗,提高网络环境下的实时交互性能。可以利用VRMLPad附带的压缩功能处理模型文件;也可以利用相关优化软件压缩模型文件,从而减小文件的体积。
2.2 VRML场景原型的定义
采用PROTO定义新的节点原型(part{}),根据组合夹具虚拟装配的功能要求,进一步扩展节点的域和事件接口,在节点体中运用IS语法建立域、可见域、EventIn接口、Event Out接口的路由[4-5]。节点体中通过Transform节点的嵌套实现夹具元件绕X、Y、Z轴的旋转,Anchor节点用于标识零件的名称,嵌入的TouchSensor节点用于实现鼠标单击对零件的拾取,PlaneSensor、Sphere Sensor节点的定义用于实现夹具元件的鼠标拖动与旋转。
在VRML装配场景中采用DEF语句定义零件节点,装配场景采用树型结构,从而实现对单一元件、子装配体以及装配体的有效控制。
2.3 Java实现对VRML场景的控制
VRML提供了应用程序编程接口API(Application Programming Interface),Java对VRML场景的控制通过附加的封装类(corteai.zip、classes.zip)实现,控制方式有两种:一是通过VRML文件内部的Script节点(JSAI,JavaScript Authoring Interface);二是通过外部编程接口(EAI,External Authoring Interface)[6-8]。文中装配平台界面的设置及交互功能的实现主要采用EAI模式。
2.3.1 EAI外部编程接口方式
VRML97标准提供的EAI实现了Java Applet与VRML场景之间的通信。将Java Applet和VRML场景集成到同一个HTML文件中,由Java Applet程序通过事件驱动的模式访问和控制VRML场景中的节点。
EAI中封装了3个与VRML浏览器相关的类包:vrml.external、vrml.external.field、vrml.external.exception。通过EAI控制VRML场景,可以分为三部分内容:(1)访问VRML场景中的节点;(2)向获取的节点发送输入事件;(3)读取与监听场景中的输出事件。基于EAI的交互机理如图3。
Java Applet程序经过编译后作为主窗口类嵌在网页中,通过引用 init()、start()、stop()、destroy()、painting()函数实现控制过程。为了建立Java Applet与VRML之间的通信,必须获得浏览器类(Browser)的引用实例;为了实现对VRML场景的控制,就必须调用场景中的节点,通过getNode()方法可以获取相关节点的控制入口。
图3 Java Applet与VRML交互原理
EAI通信机制下,引用getEventIn()方法向节点发送入事件,再通过调用setValue()方法设置节点中的EventIn接口和相关可见域的域值。引用getEventOut()方法获取节点的出事件,通过调用getValue()方法,可以读取节点中输出事件的当前值。在组合夹具的装配过程中,为了实时获得夹具元件的方位与节点名称,需要采用EventOut监听机制[9]。
2.3.2 Event Out事件监听机制
通过对节点Event Out事件的监听,实时地拾取组合夹具元件,获取元件对应的节点名称、可见域的域值,最终实现对夹具元件的连续控制。EventOut事件监听机制如图4。当所监听节点的eventOut事件发生时,自动调用callback()方法。advise()方法中定义了Event Out Observer接口类的对象实例以及事件触发时的返回值。
图4 Event Out事件监听机制
在EAI通信模式下,如果要操作某一个模型元件,首先必须获得该元件对应节点的控制句柄,所以选择节点的名称作为返回值。在原型节点part{}中,定义了event Out SFBool is Active出事件接口,结合节点体中嵌入的Touch Sensor节点,实现鼠标的单击行为对夹具模型的拾取。在callback()方法中,读取所监听节点可见域的域值,从而获得该模型当前状态;通过addRoute()方法动态的向VRML场景中添加路由,实现 Plane Sensor、Sphere Sensor等传感器的应用。
3 虚拟装配交互控制实现方法
3.1 夹具元件的导入
模型的导入分为两种情况:一是从内部(即夹具模型文件与VRML场景同在一个文件夹内)导入;二是从外部导入。利用VRML中的Inline节点可以将任何VRML文件插入场景中。导入外部元件时,文件(.wrl文件)的名称与目录通过Java内置的File Dialog获取。
经过PROTO定义的part{}节点中定义了节点的可见域(exposed Field)和事件接口(event In、event Out)。其中具有两个输入接口:add Children和remove Children,建立连接节点的路由后,即可对节点发送入事件。在Java Applet中,通过create Vrml From-String()方法动态地向VRML场景内的节点添加VRML程序。为了实现场景中模型的动态删除和场景的清空,创建一个Vector数组v1用来存储create Vrml From String()方法所添加的代码(Node[]数组类型数据)。实现该过程的关键代码如下:
添加内部夹具元件时,点击操作界面中的“添加元件”按钮(图1),弹出“选择夹具元件”窗口,如图5所示。根据提示在下拉列表框中选择夹具元件的类别,选中元件类别后则在相应列表中显示对应的夹具元件代号,选择所需的元件后单击“确定”按钮,弹出“设置初始位移”窗口,如图6。添加外部文件时,通过单击“导入外部元件”按钮(图1),在弹出的“打开夹具元件”对话框中选择所需的装配元件即可实现。在导入场景时须设置元件的初始位置,从而避免导入的元件产生干涉。在文本框中输入适当的位移数值,单击“确定”按钮实现元件初始定位。
图5 选择夹具元件窗口
part原型节点中的可见域name通过IS路由到Anchor节点的description。向name发送入事件(set_name),并设定其域值,实现了夹具元件名称的动态显示,这一应用为夹具元件的删除带来了很大的方便。
图6 初始位移设置窗口
3.2 夹具元件平移与旋转的实现
在装配场景中,通过控制夹具元件模型的平移与旋转运动实现装配过程的仿真,元件模型导入场景后,通过滚动条、文本框设置模型的方向和位置。
模型节点中translation可见域的值指定了原坐标系原点和新坐标系原点在X、Y、Z方向的距离。通过set_translation eventIn设定translation域的值,新的translation值通过可见域的隐含translation_changed eventOut传送出去。设置与读取rotation可见域的值与translation相类似。
Java Applet中,通过添加按钮、文本框、滚动条等对象的事件监听器,实现事件的监听与驱动。装配过程中,采用文本框标识模型的平移坐标与旋转角度。调节滚动条滑块位置或者在文本框中输入相应位移与角度,控制场景中夹具元件的运动。当需要操作已装配好的部件时,点击“操作装配部件”按钮(图1),获得对装配体节点的控制句柄,然后根据滚动条和文本框控制已装配部件的移动与旋转。EventOut事件监听机制的应用,保证了元件模型的实时拾取与控制。
3.3 碰撞检测
碰撞检测是实现虚拟装配的关键技术之一,在装配的过程中用于检测模型元件之间是否发生干涉。碰撞检测的实现方法有两种[9]:一是使用VRML中的Collision节点;二是使用Object-to-Object Collision Detection节点。文中采用第二种方法,当检测到装配元件发生碰撞时,弹出对话框提示操作者元件之间产生干涉。
3.4 夹具元件的删除与场景清空
夹具元件在导入场景时,每个夹具元件的名称依次添加到一个下拉菜单中,并与v1数组中的对象(Node[]数组类型数据)一一对应。当鼠标单击场景中的模型时,调用callback()函数,返回模型节点的名称,同时读取节点中name可见域的域值(即夹具元件的名称)。遍历下拉菜单中的元素,如果name的域值与菜单中某一元素相同,便可以找出点选的模型节点在数组v1中的位置。通过向part{}节点中的removeChildren输入接口发送入事件,并结合setValue()方法实现模型的删除。
在EAI模式下,一次只能够获得一个模型节点的引用。定义一个Vector数组v2用于存储动态添加到场景中的节点名称,这样就可以建立节点与v1数组中元素的映射。清空场景时,只需要遍历场景中的节点,依次删除场景中的夹具元件。
4 应用实例
通过Java对VRML场景的交互控制,可以在网络环境下实现夹具元件的动态装配。以翻转式钻夹具为例,对组合夹具虚拟装配平台的可行性进行了验证。图7为加长空心支撑与简式支撑装配效果图,图8为翻转式钻夹具虚拟装配效果图。
5 结束语
基于VRML与Java技术,构建了组合夹具虚拟装配平台,实现了网络三维环境下组合夹具元件的动态载入、删除以及装配过程中对夹具元件方位的实时性与交互性控制。研究表明,基于VRML与Java的虚拟装配仿真是一条完全可行的研究方向。在此基础之上,结合网络与数据库技术,可以进一步实现组合夹具远程分布式虚拟装配,用于装配过程的远程指导,研究工作为基于网络的虚拟装配技术走向实用化作了有益的探索。
[1]王光斗,王春福.机床夹具设计手册[M].上海:上海科学技术出版社,2000.
[2]Delfina Malandrino,Giuseppina Palmieri,Vittorio Scarano.Visualizing processes on the web[J].Journal of Visual languages and Computing,2007(18):592 -612.
[3]AndreaL.Ames,David R.Nadeau,JohnL.Moreland.VRML资源手册[M].北京:电子工业出版社,1998.
[4]赛博科技工作室.VRML与Java编程技术[M].北京:人民邮电出版社,2002.
[5]Xu Chongxia,Cui Yingling,Feng Dejun,Luo Lufeng.Research on Individual Order System of Virtual Automobile Based on Network[C]//International Conference on Electrical and Control Engineering(ICECE).Wuhan,China:IEEE Computer Society,2010:5502 -5505.
[6]胡新根.VRML与Java的通信机理实现可视化的研究[J].计算机辅助工程,2005,14(1):5 -8.
[7]张刚,李火生,侯强.基于VRML-Java的虚拟装配系统开发[J].计算机工程,2008,34(13):264-266.
[8]王君泽,瞿畅.基于VRML-Java的零件参数化仿真的实现[J].组合机床与自动化加工技术,2004(4):22-24.
[9]晏洪涛.基于VRML与Java的柴油机虚拟装配仿真[D].武汉:武汉理工大学,2005.