魏園園,瞿 暢,王君澤
(南通大學機械工程學院,江蘇 南通 226019)
組合夾具是由一套預先定制好的各種不同形式、不同規(guī)格尺寸的標準元件和組合件組成。組合夾具的元件數(shù)目眾多,組合方式多樣,裝配技術(shù)性與經(jīng)驗性要求較高。組合夾具實際裝配過程中,需要多次調(diào)試,裝配周期較長[1]。
Web3D技術(shù)的出現(xiàn),為網(wǎng)絡(luò)環(huán)境下組合夾具的虛擬設(shè)計與裝配提供了良好的應(yīng)用基礎(chǔ)[2]。目前,Web3D的核心技術(shù)是基于VRML、Java、XML、動畫腳本及流式傳輸?shù)募夹g(shù),其實現(xiàn)技術(shù)主要包括VRML、Java3D、Cult3D、Virtools、ViewPoint、EON、WildTangent等。
VRML(Virtual Reality Modeling Language)是一種虛擬現(xiàn)實建模語言,能夠在因特網(wǎng)上實現(xiàn)交互式三維多媒體。VRML的基本特點是簡單易懂、網(wǎng)絡(luò)功能強、文件容量小、交互性與可擴充性好、具有人工智能功能,但是VRML本身編程設(shè)計能力有限,運用VRML實現(xiàn)復雜的場景動畫和交互功能并不容易[3]。基于VRML的優(yōu)點,同時考慮到Java良好的跨平臺性和強大的網(wǎng)絡(luò)編程功能,文中運用VRML與Java相結(jié)合的技術(shù),構(gòu)建了交互式組合夾具虛擬裝配平臺,初步實現(xiàn)了組合夾具的交互式網(wǎng)絡(luò)裝配。
虛擬裝配平臺以IE瀏覽器作為構(gòu)建虛擬現(xiàn)實應(yīng)用的基本框架,由通過編譯的Java程序(.class)、HTML文件(.html)、VRML 裝配場景(.wrl)、組合夾具元件的VRML模型(.wrl)四部分組成,裝配平臺界面如圖1。操作界面中的相關(guān)控件,實現(xiàn)組合夾具元件的導入、平移、旋轉(zhuǎn)、刪除、碰撞檢測等功能。虛擬裝配平臺工作原理如圖2。
VRML元件的建模方法有兩種:①直接利用VRML編程創(chuàng)建;②利用CAD三維軟件(Pro/E、UG、MDT、3ds Max等)建模后轉(zhuǎn)化。VRML三維立體空間模型是由各種原型節(jié)點組成的,需要編程實現(xiàn),建模過程較為繁瑣。因此,組合夾具元件模型采用Pro/E三維軟件建模,導出后保存為VRML文件(.wrl)。
模型建立完成后,需要對VRML文件進行優(yōu)化處理,從而減少系統(tǒng)資源的消耗,提高網(wǎng)絡(luò)環(huán)境下的實時交互性能??梢岳肰RMLPad附帶的壓縮功能處理模型文件;也可以利用相關(guān)優(yōu)化軟件壓縮模型文件,從而減小文件的體積。
采用PROTO定義新的節(jié)點原型(part{}),根據(jù)組合夾具虛擬裝配的功能要求,進一步擴展節(jié)點的域和事件接口,在節(jié)點體中運用IS語法建立域、可見域、EventIn接口、Event Out接口的路由[4-5]。節(jié)點體中通過Transform節(jié)點的嵌套實現(xiàn)夾具元件繞X、Y、Z軸的旋轉(zhuǎn),Anchor節(jié)點用于標識零件的名稱,嵌入的TouchSensor節(jié)點用于實現(xiàn)鼠標單擊對零件的拾取,PlaneSensor、Sphere Sensor節(jié)點的定義用于實現(xiàn)夾具元件的鼠標拖動與旋轉(zhuǎn)。
在VRML裝配場景中采用DEF語句定義零件節(jié)點,裝配場景采用樹型結(jié)構(gòu),從而實現(xiàn)對單一元件、子裝配體以及裝配體的有效控制。
VRML提供了應(yīng)用程序編程接口API(Application Programming Interface),Java對VRML場景的控制通過附加的封裝類(corteai.zip、classes.zip)實現(xiàn),控制方式有兩種:一是通過VRML文件內(nèi)部的Script節(jié)點(JSAI,JavaScript Authoring Interface);二是通過外部編程接口(EAI,External Authoring Interface)[6-8]。文中裝配平臺界面的設(shè)置及交互功能的實現(xiàn)主要采用EAI模式。
2.3.1 EAI外部編程接口方式
VRML97標準提供的EAI實現(xiàn)了Java Applet與VRML場景之間的通信。將Java Applet和VRML場景集成到同一個HTML文件中,由Java Applet程序通過事件驅(qū)動的模式訪問和控制VRML場景中的節(jié)點。
EAI中封裝了3個與VRML瀏覽器相關(guān)的類包:vrml.external、vrml.external.field、vrml.external.exception。通過EAI控制VRML場景,可以分為三部分內(nèi)容:(1)訪問VRML場景中的節(jié)點;(2)向獲取的節(jié)點發(fā)送輸入事件;(3)讀取與監(jiān)聽場景中的輸出事件?;贓AI的交互機理如圖3。
Java Applet程序經(jīng)過編譯后作為主窗口類嵌在網(wǎng)頁中,通過引用 init()、start()、stop()、destroy()、painting()函數(shù)實現(xiàn)控制過程。為了建立Java Applet與VRML之間的通信,必須獲得瀏覽器類(Browser)的引用實例;為了實現(xiàn)對VRML場景的控制,就必須調(diào)用場景中的節(jié)點,通過getNode()方法可以獲取相關(guān)節(jié)點的控制入口。
圖3 Java Applet與VRML交互原理
EAI通信機制下,引用getEventIn()方法向節(jié)點發(fā)送入事件,再通過調(diào)用setValue()方法設(shè)置節(jié)點中的EventIn接口和相關(guān)可見域的域值。引用getEventOut()方法獲取節(jié)點的出事件,通過調(diào)用getValue()方法,可以讀取節(jié)點中輸出事件的當前值。在組合夾具的裝配過程中,為了實時獲得夾具元件的方位與節(jié)點名稱,需要采用EventOut監(jiān)聽機制[9]。
2.3.2 Event Out事件監(jiān)聽機制
通過對節(jié)點Event Out事件的監(jiān)聽,實時地拾取組合夾具元件,獲取元件對應(yīng)的節(jié)點名稱、可見域的域值,最終實現(xiàn)對夾具元件的連續(xù)控制。EventOut事件監(jiān)聽機制如圖4。當所監(jiān)聽節(jié)點的eventOut事件發(fā)生時,自動調(diào)用callback()方法。advise()方法中定義了Event Out Observer接口類的對象實例以及事件觸發(fā)時的返回值。
圖4 Event Out事件監(jiān)聽機制
在EAI通信模式下,如果要操作某一個模型元件,首先必須獲得該元件對應(yīng)節(jié)點的控制句柄,所以選擇節(jié)點的名稱作為返回值。在原型節(jié)點part{}中,定義了event Out SFBool is Active出事件接口,結(jié)合節(jié)點體中嵌入的Touch Sensor節(jié)點,實現(xiàn)鼠標的單擊行為對夾具模型的拾取。在callback()方法中,讀取所監(jiān)聽節(jié)點可見域的域值,從而獲得該模型當前狀態(tài);通過addRoute()方法動態(tài)的向VRML場景中添加路由,實現(xiàn) Plane Sensor、Sphere Sensor等傳感器的應(yīng)用。
模型的導入分為兩種情況:一是從內(nèi)部(即夾具模型文件與VRML場景同在一個文件夾內(nèi))導入;二是從外部導入。利用VRML中的Inline節(jié)點可以將任何VRML文件插入場景中。導入外部元件時,文件(.wrl文件)的名稱與目錄通過Java內(nèi)置的File Dialog獲取。
經(jīng)過PROTO定義的part{}節(jié)點中定義了節(jié)點的可見域(exposed Field)和事件接口(event In、event Out)。其中具有兩個輸入接口:add Children和remove Children,建立連接節(jié)點的路由后,即可對節(jié)點發(fā)送入事件。在Java Applet中,通過create Vrml From-String()方法動態(tài)地向VRML場景內(nèi)的節(jié)點添加VRML程序。為了實現(xiàn)場景中模型的動態(tài)刪除和場景的清空,創(chuàng)建一個Vector數(shù)組v1用來存儲create Vrml From String()方法所添加的代碼(Node[]數(shù)組類型數(shù)據(jù))。實現(xiàn)該過程的關(guān)鍵代碼如下:
添加內(nèi)部夾具元件時,點擊操作界面中的“添加元件”按鈕(圖1),彈出“選擇夾具元件”窗口,如圖5所示。根據(jù)提示在下拉列表框中選擇夾具元件的類別,選中元件類別后則在相應(yīng)列表中顯示對應(yīng)的夾具元件代號,選擇所需的元件后單擊“確定”按鈕,彈出“設(shè)置初始位移”窗口,如圖6。添加外部文件時,通過單擊“導入外部元件”按鈕(圖1),在彈出的“打開夾具元件”對話框中選擇所需的裝配元件即可實現(xiàn)。在導入場景時須設(shè)置元件的初始位置,從而避免導入的元件產(chǎn)生干涉。在文本框中輸入適當?shù)奈灰茢?shù)值,單擊“確定”按鈕實現(xiàn)元件初始定位。
圖5 選擇夾具元件窗口
part原型節(jié)點中的可見域name通過IS路由到Anchor節(jié)點的description。向name發(fā)送入事件(set_name),并設(shè)定其域值,實現(xiàn)了夾具元件名稱的動態(tài)顯示,這一應(yīng)用為夾具元件的刪除帶來了很大的方便。
圖6 初始位移設(shè)置窗口
在裝配場景中,通過控制夾具元件模型的平移與旋轉(zhuǎn)運動實現(xiàn)裝配過程的仿真,元件模型導入場景后,通過滾動條、文本框設(shè)置模型的方向和位置。
模型節(jié)點中translation可見域的值指定了原坐標系原點和新坐標系原點在X、Y、Z方向的距離。通過set_translation eventIn設(shè)定translation域的值,新的translation值通過可見域的隱含translation_changed eventOut傳送出去。設(shè)置與讀取rotation可見域的值與translation相類似。
Java Applet中,通過添加按鈕、文本框、滾動條等對象的事件監(jiān)聽器,實現(xiàn)事件的監(jiān)聽與驅(qū)動。裝配過程中,采用文本框標識模型的平移坐標與旋轉(zhuǎn)角度。調(diào)節(jié)滾動條滑塊位置或者在文本框中輸入相應(yīng)位移與角度,控制場景中夾具元件的運動。當需要操作已裝配好的部件時,點擊“操作裝配部件”按鈕(圖1),獲得對裝配體節(jié)點的控制句柄,然后根據(jù)滾動條和文本框控制已裝配部件的移動與旋轉(zhuǎn)。EventOut事件監(jiān)聽機制的應(yīng)用,保證了元件模型的實時拾取與控制。
碰撞檢測是實現(xiàn)虛擬裝配的關(guān)鍵技術(shù)之一,在裝配的過程中用于檢測模型元件之間是否發(fā)生干涉。碰撞檢測的實現(xiàn)方法有兩種[9]:一是使用VRML中的Collision節(jié)點;二是使用Object-to-Object Collision Detection節(jié)點。文中采用第二種方法,當檢測到裝配元件發(fā)生碰撞時,彈出對話框提示操作者元件之間產(chǎn)生干涉。
夾具元件在導入場景時,每個夾具元件的名稱依次添加到一個下拉菜單中,并與v1數(shù)組中的對象(Node[]數(shù)組類型數(shù)據(jù))一一對應(yīng)。當鼠標單擊場景中的模型時,調(diào)用callback()函數(shù),返回模型節(jié)點的名稱,同時讀取節(jié)點中name可見域的域值(即夾具元件的名稱)。遍歷下拉菜單中的元素,如果name的域值與菜單中某一元素相同,便可以找出點選的模型節(jié)點在數(shù)組v1中的位置。通過向part{}節(jié)點中的removeChildren輸入接口發(fā)送入事件,并結(jié)合setValue()方法實現(xiàn)模型的刪除。
在EAI模式下,一次只能夠獲得一個模型節(jié)點的引用。定義一個Vector數(shù)組v2用于存儲動態(tài)添加到場景中的節(jié)點名稱,這樣就可以建立節(jié)點與v1數(shù)組中元素的映射。清空場景時,只需要遍歷場景中的節(jié)點,依次刪除場景中的夾具元件。
通過Java對VRML場景的交互控制,可以在網(wǎng)絡(luò)環(huán)境下實現(xiàn)夾具元件的動態(tài)裝配。以翻轉(zhuǎn)式鉆夾具為例,對組合夾具虛擬裝配平臺的可行性進行了驗證。圖7為加長空心支撐與簡式支撐裝配效果圖,圖8為翻轉(zhuǎn)式鉆夾具虛擬裝配效果圖。
基于VRML與Java技術(shù),構(gòu)建了組合夾具虛擬裝配平臺,實現(xiàn)了網(wǎng)絡(luò)三維環(huán)境下組合夾具元件的動態(tài)載入、刪除以及裝配過程中對夾具元件方位的實時性與交互性控制。研究表明,基于VRML與Java的虛擬裝配仿真是一條完全可行的研究方向。在此基礎(chǔ)之上,結(jié)合網(wǎng)絡(luò)與數(shù)據(jù)庫技術(shù),可以進一步實現(xiàn)組合夾具遠程分布式虛擬裝配,用于裝配過程的遠程指導,研究工作為基于網(wǎng)絡(luò)的虛擬裝配技術(shù)走向?qū)嵱没髁擞幸娴奶剿鳌?/p>
[1]王光斗,王春福.機床夾具設(shè)計手冊[M].上海:上??茖W技術(shù)出版社,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].北京:電子工業(yè)出版社,1998.
[4]賽博科技工作室.VRML與Java編程技術(shù)[M].北京:人民郵電出版社,2002.
[5]Xu Chongxia,Cui Yingling,F(xiàn)eng 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的通信機理實現(xiàn)可視化的研究[J].計算機輔助工程,2005,14(1):5 -8.
[7]張剛,李火生,侯強.基于VRML-Java的虛擬裝配系統(tǒng)開發(fā)[J].計算機工程,2008,34(13):264-266.
[8]王君澤,瞿暢.基于VRML-Java的零件參數(shù)化仿真的實現(xiàn)[J].組合機床與自動化加工技術(shù),2004(4):22-24.
[9]晏洪濤.基于VRML與Java的柴油機虛擬裝配仿真[D].武漢:武漢理工大學,2005.