[摘要] 在最短的时间内,开发出质优、价廉的产品是对现代企业生存和发展的必然要求。虚拟装配技术的运用缩短了产品的开发周期,提高了企业的经济效益。本文在系统阐述虚拟装配的有关概念、VRML语言、装配仿真等问题的基础上,以单级减速器为例对运行在个人PC上的基于VRML 的网络虚拟装配平台结构、实现方法等进行了研究。
[关键词] 虚拟装配;VRML;单级减速器
随着全球市场竞争的日益激烈,市场对制造企业提出了更高的要求,即要求制造企业以最短的产品开发时间、开发出市场适应性好,质优价廉的产品,以提升企业竞争力。虚拟装配技术为减少设计与制造所需的时间与成本,提高设计与制造的效率与质量提供了可能。
产品虚拟装配是目前研究的热点,它是虚拟现实技术在CAD领域的重要应用。本文利用交互式可视化手段研究和解决产品的可装配性问题,对基于VRML的虚拟装配技术理论进行研究,利用虚拟现实建模语言VRML,结合Java 语言和JavaScript 语言,在Cortona浏览器上构建可视的交互虚拟装配平台,并给出了单级减速器的虚拟装配过程实例。 1 基于 VRML的虚拟装配平台构建 1.1 平台功能平台功能具体包括以下方面:(1) 从零件库中选取需要装配的零部件,并将其调入到虚拟装配环境当中;(2) 对等待进行装配的零部件进行位置和姿态调整,完成装配操作;(3) 在装配过
程中进行实时碰撞检测,并输出碰撞信息;(4) 输出实际进行装配的零部件顺序文件,达到装配序列规划目的。 1.2 开发工具在开发过程中,采用网络虚拟现实建模语言VRML (Virtual Reality Modeling Language)作为开发虚拟装配平台工具。应用 Java Applet 作为开发网络虚拟装配环境界面工具,确保环境有良好的跨平台性。
VRML是一种用于建立真实世界的场景模型或人们虚构的三维世界的场景建模语言,具有平台无关性,性易扩展性、在低带宽上具有良好的运行能力等优势;VRML 文件在浏览器上产生的不是静态的平面结构,而是动态的立体场景。采用基于客户/ 服务器模式(Client /Server Mode) 的访问方式,服务器提供 VRML 文件及支持资源(图象、声音、视频等),客户端通过网络下载希望访问的文件,VRML 源程序文件不必进行编译连接等处理,只需通过本地平台上的 VRML 浏览器客户插件运行该程序,就可以生成虚拟现实三维场景从而实现客户端的呈现与动态交互[1]。
现在几乎所有的三维建模软件都支持VRML 的文件格式。如UG,Pro/Engineer等软件都具有VRML输出接口,可以直接输出VRML 格式的文件,即使不支持VRML的软件也可以存储成IGES等文件然后再转换成VRML 格式的文件。
在支持最新 EAI(External Authoring Interface) 功能的 VRML 浏览器——Cortona 浏览器客户插件的基础上建立可视的交互的虚拟装配环境,整个装配过程将在 Cortona4.2 浏览器插件中进行显示,通过配合以同一 web 页面中 Java Applet 的装配控制,实现实时交互装配,并且利用 Cortona 的浏览模式(主要有 walk 、fly 和 study 三种模式)变换功能可以进行场景漫游。最后将在 Cortona 的三维浏览器环境中得到产品的虚拟装配体[2]。
除此之外,三维装配零件还可以使用 VrmlPad 软件直接编辑生成
在装配过程中的碰撞检测功能则可以通过调用JavaScript 脚本程序来实现。图1是基于网络的虚拟装配平台的总体设计构想。
图1 基于VRML 的虚拟装配平台设计方案 1.3 具体实现过程 1.3.1 零件建模及零件库建立用Pro/ENGINEER Wirdfire3.0建立平台零件库的所有零件模型并导出为 VRML (.wrl) 文件。 1.3.2 VRML 场景文件建立同样应用 VrmlPad 开发软件编写 VRML 场景文件。
1、虚拟装配环境技术特征
考虑到网络异地操作 VRML 场景,初始嵌入 web 页面中的 VRML文件只定义了基本的视点、背景等,而对于场景中将要包含的物体只是给出了一系列定义好的组节点的初始化位置即装配坐标系和元件坐标系,这样装配者通过Java Applet 与 VRML 场景进行交互时,可以向场景中添加和删除零件,同时能获得新添入场景中零件的控制权[3]。场景文件部分程序代码:
#VRML V2.0 utf8
Background { skyColor .3 .5 .6 }
Viewpoint { position 2.5, 2, 12 }
DEF Assemble Transform { //定义装配坐标系
translation 0 0 0
children [
DEF Gear1 Transform {} //定义元件坐标系]}
2 碰撞检测功能
VRML 虚拟装配环境中,利用面向对象的方法以 VRML 脚本程序(Script节点)建立 Collision 碰撞对象,实现了装配过程中的碰撞检测功能。并通过事件路由机制将装配过程中动态改变的碰撞信息数据输出到控制界面上。 1.3.3异地虚拟装配的实现异地虚拟装配由 Java Applet 控制来实现,可以实现向 VRML 场景中添加待装配零件、装配零件位姿调整等功能全部,保证了装配设计者的主动控制权。在 Java Applet 中通过 EAI 获得 VRML 装配场景中一系列已定义组节点的 addChildren 等事件出口,然后调用 createVrmlFromURL ( ) 方法来向VRML 场景中添加已经设计完成的 VRML 零件模型,通过控制已定义组节点的属性来控制被添加零件的属性和位置。其中 createVrmlFromURL ( ) 方法将一个 .wrl 文件通过URL (Uniform Resource Locators)读入虚拟场景,Web 上的文件使用它的 URL 寻址,这一方面满足了我们异地调用零部件的要求。由于目前大多数浏览器还不支持 java.swing,因此在 Java Applet 的设计中选用 java.awt 来设计控制面板的界面[4,5]。Java Applet 程序与 VRML 场景交互的主要部分代码:
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import vrml.external.*;
import vrml.external.field.*;
import vrml.external.exception.*;
import vrml.external.field.EventOutObserver;
public class ass1 extends Applet implements ActionListener,AdjustmentListener{
Browser b=null; //定义浏览器对象
Node mydGear=null; // 定义VRML 场景节点
EventInMFNode addChildren;//定义要获得的场景节点事件入口
EventInSFVec3f set_translation1;
EventInSFRotation set_rotation1;
public void init(){
b= Browser.getBrowser (this);//获得当前浏览器的句柄
mytdGear= b.getNode ("dGear");}
public void actionPerformed(ActionEvent e){//向 VRML 场景中动态添加所选择的待装配零件模型
if(e.getSource()==addbutt){
if(changeSring= ="输出轴")
{ addChildren=(EventInMFNode)myt01g.getEventIn("addChildren");
try{ b.createVrmlFromURL(s1,mdGear,"addChildren");}
catch(Exception ex){ ex.printStackTrace();}}
… …}//响应滚动条事件
public void adjustmentValueChanged(AdjustmentEvent e)
{ //取得位移滚动条的值
if(e.getAdjustable()==sb1[0]||e.getAdjustable()==sb1[1]||e.getAdjustable()==sb1[2]