夏文文,楊艷芳
(武漢理工大學智能制造與控制研究所,湖北 武漢430063)
門座起重機屬于大型機械裝配體,零部件多、配合關(guān)系復(fù)雜且裝配精度高,使其維修難度高,風險大。如果拆卸路徑不合適或拆卸過程操作錯誤,不但不能排除故障,反而可能造成設(shè)備損壞[1-2]。作為虛擬現(xiàn)實技術(shù)在產(chǎn)品維修領(lǐng)域的應(yīng)用,虛擬拆卸維修以其良好的費效比,已成為復(fù)雜裝備維修訓練的主要方式之一,可以解決維修困難、效率低等問題,使得操作者能夠完全沉浸在虛擬環(huán)境中,并能與之發(fā)生“交互”,進而對起重機實現(xiàn)拆卸,不僅達到虛擬維修訓練的目的[3],而且還能對部分機構(gòu)進行改良設(shè)計以彌補不足。它克服了利用實際設(shè)備進行學習所帶來的時間和安全上的限制,避免因影響效率而帶來的損失。
OSG(OpenSceneGraph)本身能夠提供三維空間中設(shè)計和完成模型所需的工具集,但是門座起重機的模型裝配關(guān)系復(fù)雜,裝配精度要求高,而solidworks以其清晰、直觀的界面,三維功能強大,操作簡單成為三維建模的首選。
對于零部件多、裝配關(guān)系復(fù)雜的起重機,采用自下而上的設(shè)計方式建模:先對門座起重機各個零部件進行建模,然后將有關(guān)聯(lián)的零部件按照裝配與約束的關(guān)系組裝成有特定功能的子裝配體,最后將各子裝配體和零部件組裝成總裝配體。
由于OSG沒有支持“*.asm”文件的插件,先在solidworks2011導出“*.wrl”文件,再在3dmax中將文件打開,對模型進行材質(zhì)設(shè)置、圖片的渲染、模型坐標調(diào)整以及模型各個節(jié)點的命名。最后導出“*.IVE”的文件。虛擬場景模型構(gòu)建過程如圖1所示。
圖1 虛擬場景模型構(gòu)建過程
圖形學軟件OSG是一套基于C++平臺的應(yīng)用程序接口(API)。它提供了高級程序設(shè)計語言的圖形函數(shù)庫,圖形函數(shù)庫又提供了程序設(shè)計語言和硬件之間的軟件接口,這就使得人機交互式虛擬拆卸技術(shù)的實現(xiàn)成為可能。在虛擬拆卸技術(shù)中,涉及的關(guān)鍵技術(shù)有:虛擬實體位姿變換技術(shù)、窗口到視口的變換、投影技術(shù)[4-5]。
位姿變換是虛擬拆卸技術(shù)中的核心。虛擬實體位姿變換包括:平移變換、旋轉(zhuǎn)變換、縮放變換和復(fù)合變換。變換采用齊次坐標系來實現(xiàn)對點的操作,是為了統(tǒng)一平移和其他方式的矩陣表達形式[6],如將三維場景中的點p (x,y,z,1)繞Z軸旋轉(zhuǎn)θ角度到點 p1(x1,y1,z1,1)的 旋 轉(zhuǎn) 變 換 形 式 為p1T=Rz(θ)·pT,其中旋轉(zhuǎn)矩陣
復(fù)合主要是利用基本的R(旋轉(zhuǎn))、S(縮放)和T(平移)矩陣來實現(xiàn)綜合變換,避免連續(xù)的單一變換,以此來提高運行效率。在基于OSG的虛擬拆卸技術(shù)中,位姿變換運動是通過調(diào)用PositionAttitude-Transform類的函數(shù)來實現(xiàn)的,比如調(diào)用setPosition和setAttitude函數(shù)分別實現(xiàn)平移和旋轉(zhuǎn)。
場景圖形在計算機屏幕上的顯示要經(jīng)過窗口到視口的變換。用來“篩選”世界坐標系下圖形的矩形框稱為窗口,用來決定世界坐標系下哪部分圖形被顯示,如同相機的取景框通過移動和旋轉(zhuǎn)取景框來選擇最佳拍攝的景物一樣。視口決定在屏幕的什么位置顯示圖形。改變窗口或視口的大小可以改變圖形的縮放比例。窗口到視口的變換過程為:1)將窗口的左下角點平移至世界坐標系的原點;2)將窗口尺寸縮放到視口大小;3)將已經(jīng)縮放到視口大小的窗口平移到屏幕坐標系視口所在的實際位置。在此過程中,要經(jīng)過從世界坐標系到相機坐標系再到視口坐標系的轉(zhuǎn)換。變換過程如圖2所示。
圖2 變換過程
投影就是將三維物體變換到二維投影平面上。三維世界中的物體需要先經(jīng)過三維裁剪盒的裁剪,然后才能進行投影。在視景體之外的對象將被裁剪,因而不會被投影到二維平面上。投影分為透視投影和平行投影。透視投影比較逼真,但不能反映物體的真實形狀和尺寸,也不能從物體的投影中得出距離。平行投影所生成的視圖真實感較差,卻記錄著物體的實際尺寸,并且平行線的投影也依然保持平行。在基于OSG的虛擬拆卸技術(shù)中,投影變換是通過Camera類的函數(shù)來實現(xiàn)的,比如調(diào)用set-ProjectionMatrixAsFrustum和setProjectionMatrixAsOrtho2D函數(shù)分別實現(xiàn)透視投影和平行投影。在虛擬環(huán)境中顯示文字時,是通過setProjectionMatrix函數(shù)將三維文字圖形投影在二維屏幕上的。三維視圖的投影過程如圖3所示。
圖3 三維視圖的投影過程
本文選用VC++與虛擬現(xiàn)實環(huán)境生成工具OSG相結(jié)合,進行交互式虛擬拆卸仿真技術(shù)的開發(fā)。利用兩種交互技術(shù)對門座起重機進行虛擬拆卸:一種是鍵盤響應(yīng)實現(xiàn)人機交互,另一種是鼠標拖曳實現(xiàn)人機交互。
3.1.1 場景節(jié)點的添加 用OSGMFC打開場景模型,得到如圖4所示場景結(jié)構(gòu)樹。osgFunc2_4∷findNamedNode函數(shù)采用深度優(yōu)先遍歷獲取某一場景節(jié)點。獲取節(jié)點的部分代碼如下[7]。
圖4 門座起重機的場景結(jié)構(gòu)樹
3.1.2 鍵盤響應(yīng) 在OSG中,鍵盤的響應(yīng)是通過事件處理器osgGA∷GUIEventHandler類實現(xiàn)的。它作為OSG鍵盤交互事件的處理終端,提供了可擴展的虛函數(shù)handle,通過類的派生和虛函數(shù)的重構(gòu),實現(xiàn)用戶自定義的交互事件處理工具。handle函數(shù)里面的形參:時間適配器ea,獲取當前傳入此適配器的事件;動作適配器aa,獲取傳入的是當前所用的視圖對象View,可以用來控制視景器的變化。響應(yīng)事件的部分代碼如下:
3.1.3 交互式拆卸的實現(xiàn) 獲取到場景每一個節(jié)點后,為每一節(jié)點創(chuàng)建動畫,節(jié)點的初始和結(jié)束位置是通過控制關(guān)鍵幀Keyframe來實現(xiàn)的,處于相同位置的節(jié)點應(yīng)插入相同的關(guān)鍵幀。接著,將添加了動畫的節(jié)點全部作為Group節(jié)點的子節(jié)點。為了調(diào)整模型顯示的初始狀態(tài),將Group節(jié)點作為PositionAttitudeTransform的子節(jié)點,最后添加到視景器中。在playAnimation時,應(yīng)確保虛擬拆卸的順序能夠滿足實際維修要求,這樣才能達到虛擬維修的目的。交互式拆卸實現(xiàn)如圖5所示。
圖5 起重機的交互式拆卸
實現(xiàn)鼠標拖曳技術(shù)的關(guān)鍵是要理解拖曳器與場景節(jié)點的關(guān)聯(lián)、拖曳器怎樣記錄鼠標移動的位置及鼠標如何響應(yīng),最終實現(xiàn)對門座起重機運行機構(gòu)的拆卸。
3.2.1 拖曳器與場景節(jié)點的關(guān)聯(lián) 將每一個節(jié)點添加到selection節(jié)點下,通過CommandManager類的connect函數(shù)與dragger拖曳器進行關(guān)聯(lián)。用setMatrix函數(shù)將拖曳器的坐標原點移動到子節(jié)點包圍盒的中心,確保拖曳順利。
3.2.2 鼠標的響應(yīng) 鼠標的響應(yīng)和鍵盤的響應(yīng)原理一致,只是在內(nèi)部重寫handle函數(shù)。通過computeIntersections函數(shù)進行鼠標屏幕點求交,所求得的數(shù)據(jù)存放在intersections內(nèi)部。在_pointer內(nèi)記錄當前的相機信息,setCamera函數(shù)實際上就是在鼠標單擊時,用來記錄當時變換矩陣的信息,即鼠標位置和屏幕坐標。然后將所有相交的對象記錄到_pointer內(nèi)部,PointerInfo∷IntersectionList記錄交點以及交點的nodepath。最后,向dragger傳入handle事件。
3.2.3 鼠標拖曳交互的實現(xiàn) 運行得到如圖6所示的場景視圖,實現(xiàn)鼠標拖曳。鼠標拖曳技術(shù)分為觀看模式和拖曳模式,操作人員可通過按下TAB鍵進行模式切換。在觀看模式下,可通過鼠標對場景中的模型進行旋轉(zhuǎn)、縮放等操作;在拖曳模式下,可以通過鼠標對場景中的零件進行移動。
圖6 鼠標拖曳實現(xiàn)拆卸
本文針對門座起重機現(xiàn)實維修的缺點提出了基于OSG的門座起重機虛擬拆卸技術(shù)。利用OSG技術(shù),研究了兩種交互式的拆卸技術(shù),并對場景節(jié)點的添加、拖曳器與場景節(jié)點的關(guān)聯(lián)、鍵盤和鼠標的響應(yīng)以及交互式拆卸的實現(xiàn)等技術(shù)原理進行了描述,同時對人機交互式虛擬拆卸技術(shù)的內(nèi)部原理進行了詳細的闡述。
[1] 原 彬,路慧彪,鄒玉堂.基于Division Mockup的分油機虛擬裝配系統(tǒng)的研究[J].現(xiàn)代制造工程,2013(01):25-27.
[2] 張王衛(wèi),蘇群星,劉鵬遠,等.虛擬維修拆卸路徑規(guī)劃關(guān)鍵技術(shù)研究[J].計算機仿真,2012,29(11):28-33.
[3] 周韶澤,兆文忠,張 軍,等.動車組虛擬維修仿真系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程,2011,37(17):214-216.
[4] 任愛華,謝 淼.計算機圖形學[M].北京:電子工業(yè)出版社,2011.
[5] 石玉玲.虛擬現(xiàn)實技術(shù)與圖形學[J].職大學報,2008(02):90-91.
[6] 任洪海.計算機圖形學理論與算法基礎(chǔ)[M].遼寧:科學技術(shù)出版社,2012.
[7] 王 銳,錢學雷.OpenSceneGraph三維渲染引擎設(shè)計與實踐[M].北京:清華大學出版社,2009.