,,
(天津理工大學 海運學院,天津 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.