夏文文,楊艷芳
(武漢理工大學智能制造與控制研究所,湖北 武漢430063)
門座起重機屬于大型機械裝配體,零部件多、配合關系復雜且裝配精度高,使其維修難度高,風險大。如果拆卸路徑不合適或拆卸過程操作錯誤,不但不能排除故障,反而可能造成設備損壞[1-2]。作為虛擬現實技術在產品維修領域的應用,虛擬拆卸維修以其良好的費效比,已成為復雜裝備維修訓練的主要方式之一,可以解決維修困難、效率低等問題,使得操作者能夠完全沉浸在虛擬環境中,并能與之發生“交互”,進而對起重機實現拆卸,不僅達到虛擬維修訓練的目的[3],而且還能對部分機構進行改良設計以彌補不足。它克服了利用實際設備進行學習所帶來的時間和安全上的限制,避免因影響效率而帶來的損失。
OSG(OpenSceneGraph)本身能夠提供三維空間中設計和完成模型所需的工具集,但是門座起重機的模型裝配關系復雜,裝配精度要求高,而solidworks以其清晰、直觀的界面,三維功能強大,操作簡單成為三維建模的首選。
對于零部件多、裝配關系復雜的起重機,采用自下而上的設計方式建模:先對門座起重機各個零部件進行建模,然后將有關聯的零部件按照裝配與約束的關系組裝成有特定功能的子裝配體,最后將各子裝配體和零部件組裝成總裝配體。
由于OSG沒有支持“*.asm”文件的插件,先在solidworks2011導出“*.wrl”文件,再在3dmax中將文件打開,對模型進行材質設置、圖片的渲染、模型坐標調整以及模型各個節點的命名。最后導出“*.IVE”的文件。虛擬場景模型構建過程如圖1所示。

圖1 虛擬場景模型構建過程
圖形學軟件OSG是一套基于C++平臺的應用程序接口(API)。它提供了高級程序設計語言的圖形函數庫,圖形函數庫又提供了程序設計語言和硬件之間的軟件接口,這就使得人機交互式虛擬拆卸技術的實現成為可能。在虛擬拆卸技術中,涉及的關鍵技術有:虛擬實體位姿變換技術、窗口到視口的變換、投影技術[4-5]。
位姿變換是虛擬拆卸技術中的核心。虛擬實體位姿變換包括:平移變換、旋轉變換、縮放變換和復合變換。變換采用齊次坐標系來實現對點的操作,是為了統一平移和其他方式的矩陣表達形式[6],如將三維場景中的點p (x,y,z,1)繞Z軸旋轉θ角度到點 p1(x1,y1,z1,1)的 旋 轉 變 換 形 式 為p1T=Rz(θ)·pT,其中旋轉矩陣

復合主要是利用基本的R(旋轉)、S(縮放)和T(平移)矩陣來實現綜合變換,避免連續的單一變換,以此來提高運行效率。在基于OSG的虛擬拆卸技術中,位姿變換運動是通過調用PositionAttitude-Transform類的函數來實現的,比如調用setPosition和setAttitude函數分別實現平移和旋轉。
場景圖形在計算機屏幕上的顯示要經過窗口到視口的變換。用來“篩選”世界坐標系下圖形的矩形框稱為窗口,用來決定世界坐標系下哪部分圖形被顯示,如同相機的取景框通過移動和旋轉取景框來選擇最佳拍攝的景物一樣。視口決定在屏幕的什么位置顯示圖形。改變窗口或視口的大小可以改變圖形的縮放比例。窗口到視口的變換過程為:1)將窗口的左下角點平移至世界坐標系的原點;2)將窗口尺寸縮放到視口大小;3)將已經縮放到視口大小的窗口平移到屏幕坐標系視口所在的實際位置。在此過程中,要經過從世界坐標系到相機坐標系再到視口坐標系的轉換。變換過程如圖2所示。

圖2 變換過程
投影就是將三維物體變換到二維投影平面上。三維世界中的物體需要先經過三維裁剪盒的裁剪,然后才能進行投影。在視景體之外的對象將被裁剪,因而不會被投影到二維平面上。投影分為透視投影和平行投影。透視投影比較逼真,但不能反映物體的真實形狀和尺寸,也不能從物體的投影中得出距離。平行投影所生成的視圖真實感較差,卻記錄著物體的實際尺寸,并且平行線的投影也依然保持平行。在基于OSG的虛擬拆卸技術中,投影變換是通過Camera類的函數來實現的,比如調用set-ProjectionMatrixAsFrustum和setProjectionMatrixAsOrtho2D函數分別實現透視投影和平行投影。在虛擬環境中顯示文字時,是通過setProjectionMatrix函數將三維文字圖形投影在二維屏幕上的。三維視圖的投影過程如圖3所示。

圖3 三維視圖的投影過程
本文選用VC++與虛擬現實環境生成工具OSG相結合,進行交互式虛擬拆卸仿真技術的開發。利用兩種交互技術對門座起重機進行虛擬拆卸:一種是鍵盤響應實現人機交互,另一種是鼠標拖曳實現人機交互。
3.1.1 場景節點的添加 用OSGMFC打開場景模型,得到如圖4所示場景結構樹。osgFunc2_4∷findNamedNode函數采用深度優先遍歷獲取某一場景節點。獲取節點的部分代碼如下[7]。


圖4 門座起重機的場景結構樹
3.1.2 鍵盤響應 在OSG中,鍵盤的響應是通過事件處理器osgGA∷GUIEventHandler類實現的。它作為OSG鍵盤交互事件的處理終端,提供了可擴展的虛函數handle,通過類的派生和虛函數的重構,實現用戶自定義的交互事件處理工具。handle函數里面的形參:時間適配器ea,獲取當前傳入此適配器的事件;動作適配器aa,獲取傳入的是當前所用的視圖對象View,可以用來控制視景器的變化。響應事件的部分代碼如下:


3.1.3 交互式拆卸的實現 獲取到場景每一個節點后,為每一節點創建動畫,節點的初始和結束位置是通過控制關鍵幀Keyframe來實現的,處于相同位置的節點應插入相同的關鍵幀。接著,將添加了動畫的節點全部作為Group節點的子節點。為了調整模型顯示的初始狀態,將Group節點作為PositionAttitudeTransform的子節點,最后添加到視景器中。在playAnimation時,應確保虛擬拆卸的順序能夠滿足實際維修要求,這樣才能達到虛擬維修的目的。交互式拆卸實現如圖5所示。

圖5 起重機的交互式拆卸
實現鼠標拖曳技術的關鍵是要理解拖曳器與場景節點的關聯、拖曳器怎樣記錄鼠標移動的位置及鼠標如何響應,最終實現對門座起重機運行機構的拆卸。
3.2.1 拖曳器與場景節點的關聯 將每一個節點添加到selection節點下,通過CommandManager類的connect函數與dragger拖曳器進行關聯。用setMatrix函數將拖曳器的坐標原點移動到子節點包圍盒的中心,確保拖曳順利。
3.2.2 鼠標的響應 鼠標的響應和鍵盤的響應原理一致,只是在內部重寫handle函數。通過computeIntersections函數進行鼠標屏幕點求交,所求得的數據存放在intersections內部。在_pointer內記錄當前的相機信息,setCamera函數實際上就是在鼠標單擊時,用來記錄當時變換矩陣的信息,即鼠標位置和屏幕坐標。然后將所有相交的對象記錄到_pointer內部,PointerInfo∷IntersectionList記錄交點以及交點的nodepath。最后,向dragger傳入handle事件。
3.2.3 鼠標拖曳交互的實現 運行得到如圖6所示的場景視圖,實現鼠標拖曳。鼠標拖曳技術分為觀看模式和拖曳模式,操作人員可通過按下TAB鍵進行模式切換。在觀看模式下,可通過鼠標對場景中的模型進行旋轉、縮放等操作;在拖曳模式下,可以通過鼠標對場景中的零件進行移動。

圖6 鼠標拖曳實現拆卸
本文針對門座起重機現實維修的缺點提出了基于OSG的門座起重機虛擬拆卸技術。利用OSG技術,研究了兩種交互式的拆卸技術,并對場景節點的添加、拖曳器與場景節點的關聯、鍵盤和鼠標的響應以及交互式拆卸的實現等技術原理進行了描述,同時對人機交互式虛擬拆卸技術的內部原理進行了詳細的闡述。
[1] 原 彬,路慧彪,鄒玉堂.基于Division Mockup的分油機虛擬裝配系統的研究[J].現代制造工程,2013(01):25-27.
[2] 張王衛,蘇群星,劉鵬遠,等.虛擬維修拆卸路徑規劃關鍵技術研究[J].計算機仿真,2012,29(11):28-33.
[3] 周韶澤,兆文忠,張 軍,等.動車組虛擬維修仿真系統的設計與實現[J].計算機工程,2011,37(17):214-216.
[4] 任愛華,謝 淼.計算機圖形學[M].北京:電子工業出版社,2011.
[5] 石玉玲.虛擬現實技術與圖形學[J].職大學報,2008(02):90-91.
[6] 任洪海.計算機圖形學理論與算法基礎[M].遼寧:科學技術出版社,2012.
[7] 王 銳,錢學雷.OpenSceneGraph三維渲染引擎設計與實踐[M].北京:清華大學出版社,2009.