李政峰 王青霞 肖昱鋒
(湖南懷化學院 電氣與信息工程學院,湖南 懷化418008)
隨著虛擬現實技術的迅速發展,虛擬裝配在產品開發,實訓教學中得到了廣泛的應用。虛擬裝配無需產品或實際物理條件,在實驗的過程中只需要在模型創建的基礎上,對模型添加動畫,在過程中應用可視化和數據表現方式,利用相關軟件來輔助與裝配相關的工作過程[1]。在基于Unity3D 電力設備的虛擬裝配中,對多模型的裝配涉及到的碰撞是裝配中的一種重要問題。Unity3D 開發平臺提供碰撞體添加功能,用戶可以給設計好的模型添加相應的碰撞體,確定碰撞檢測區域,當觸發器碰到碰撞體后觸發制定的轉配操作[2]。
虛擬裝配中,不同的物理模型在裝配的過程中需要碰撞檢測技術的支持。在模型確定的基礎上,給三維模型添加相應的碰撞體,可以實現碰撞的監測。Unity3D 碰撞檢測的算法主要有以下兩種包圍盒算法:
(1)AABB 包圍盒:AABB 包圍盒是平行于坐標軸的最小六面體,故描述一個AABB,僅需六個標量。AABB 構造比較簡單,存儲空間小,但緊密性差,尤其對不規則幾何形體,冗余空間很大,當對象旋轉時,無法對其進行相應的旋轉。Unity 里面有一個Bounds 類,里面采用的就是AABB 包圍盒。
(2)OBB 包圍盒:OBB 包圍盒是包含該對象且相對于坐標軸方向任意的最小的長方體。OBB 最大特點是它的方向的任意性,這使得它可以根據被包圍對象的形狀特點盡可能緊密的包圍對象,但同時也使得它的相交測試變得復雜。在Unity 里面,Boxcollider 可以隨著物體的旋轉而旋轉,屬于OBB 包圍盒。本系統在設計中采用的是OBB 包圍盒。
在unity3d 中,系統會默認給每個場景中的對象添加一個碰撞組件,能檢測碰撞發生的方式有兩種,一種是利用碰撞器,另一種是觸發器:碰撞器是一群組件,包括很多種類,如Box Collider,Sphere Collider,Capsule Collider,Mesh Collider,Wheel Collider 等,相關碰撞器可以應用到不同場合,只需要加載到需要碰撞檢測的對象即可,具體類型有Static Collider、Rigidbody Collider、Kinematic Rigidbody Collider、Character Controllers 四種類型選擇;觸發器在使用的過程中,只需要在unity3d 中的檢視面板中打開配置器組件的Is Trigger 選項即可。兩種檢測語句區別如下:
MonoBehaviour.OnTriggerEnter(Collider other)當進入觸發器
MonoBehaviour.OnTriggerExit(Collider other)當退出觸發器
MonoBehaviour.OnTriggerStay(Collider other)當逗留觸發器
MonoBehaviour.OnCollisionEnter(Collision collisionInfo)當 進入碰撞器
MonoBehaviour.OnCollisionExit(Collision collisionInfo)當退出碰撞器
MonoBehaviour.OnCollisionStay(Collision collisionInfo)當 逗留碰撞器
碰撞器根據物理引擎引發碰撞,產生碰撞的效果;觸發器被物理引擎所忽略,沒有碰撞效果。
虛擬裝配是根據設計的模型特征、精度特征,真實地模擬產品三維裝配工程,并允許用戶以交互方式控制產品的三維裝配過程[3],系統以用戶自主裝配的方式進行,操作者自主拾取部件并將其裝配到指定的位置完成模型的裝配。在虛擬裝配設計中,選擇的是基于電動機的虛擬裝配實訓項目。首選進行電機設備的型號選擇,按照尺寸比例得到具體的數據;接著進行設備的虛擬建模,建模主要采用CAD,3DMAX,PHOTOSHOP 完成(基本的建模思路是利用CAD 得到零部件路徑圖,導入3DMAX創建模型、ps 貼圖等操作);最后在unity3d 中創建場景,導入模型,按照裝配的需求對模型進行運動控制(碰撞檢測的具體實現),完成后按要求輸出打包為不同的格式,整個設計流程如圖1。

圖1 裝配系統設計流程圖
電力設備的相關模型可以基于CAD 工程圖紙獲得具體的參數,在3DMAX 中根據倒入的路徑文件通過擠出,車削,倒角等功能完成相關模型的準備;在模型創建的基礎上,利用3DMAX 自帶的標準材質給對象進行貼圖(貼圖主要應用Photoshop 處理)和渲染;最后根據裝配的需求對相關的模型完成裝配動畫的設計。在模型準備中需要注意的問題:
(1)因為Unity3D 與3DMAX 的單位存在100:1 的現象,在3DMAX 中設置的單位采用厘米。
(2)相關模型動畫設計過程中按照裝配順序進行零件的裝配。裝配好的動畫對象導出為FBX 文件,導出路徑為事先創建好的Unity3D 工程文件的資源文件夾。
打開事先建立的Unity3D 工程文件,3DMAX 導出的文件(三維模型、模型貼圖、動畫文件等)已經自動存放在Unity3D 的資源文件夾Assets 中。
場景設計:根據組裝的場景需求,應用工具中的立方體創建出三面墻,打上燈光并對燈光參數進行調整,保證場景的亮度。導入對象體到虛擬場景中,并對電動機三維模型進行縮放、移動、旋轉、顯示、隱藏等屬性的設置。
應用Unity3D 開發平臺提供的碰撞體添加功能,可以給選定的模型添加相應的碰撞體,同時可以劃定碰撞區域,當觸發器碰到碰撞體后就觸發指定的操作。在設計中,給虛擬裝配的三維模型添加盒碰撞屬性,對于外形簡單的零部件模型,直接添加一個包圍盒就能實現精確度較高的碰撞觸發區域,如果是復雜的零部件,可以把模型進行物理分解,給模型添加多個碰撞體來提高識別的精度。在添加包圍盒的基礎上,為了增加控制的精度,可以通過調節包圍盒的位置和大小以提高碰撞包圍盒與實際模型形狀特征的重合度。
裝配過程通過編寫JAVA 腳本實現。具體的設計思路是按照裝配的步驟選定一個模型作為要裝配的部件,另外一個模型以不同的顏色顯示作為裝配位置的標志物,還有一個為最終轉配好的完整模型。使用者通過單擊按鈕控制對象的運動,運動的對象和標志位置的有顏色部件發生碰撞時,銷毀拾取零件和有色部件,顯示已經轉配好的完整部件,同時顯示下一個進行裝配的零部件的位置[4]。按設定好的裝配順序完成電機的裝配。
具體的實現過程:在系統實現中,主要需要解決的問題是通過按鈕單擊響應相應的動畫播放,動畫對象和設定的對象發生碰撞,給出提示信息完成模型部件的組裝。對象運動通過動畫控制器Animator 進行創建,在動畫片段設置中,需要運動的對象的位移要大于給定的參照模型的位移量,保證后面運動能碰撞到對象;按鈕通過2D 場景進行創建;對象運動通過按鈕激活執行,在運動中和預定的對象進行碰撞后給出提示的信息,部分代碼如下:

系統效果如圖2。

圖2 裝配效果圖
在系統運行中,為了使裝配系統具有更好的交互性,可以給整個場景設置一個實驗室環境;在對象的運動中可以給對象進行顏色改變或者添加聲音效果;碰撞的方式有多種方案可以選擇,在碰撞設置中,可以針對不同的模型進行多碰撞體的設置,同時在碰撞的基礎上,可以給出一些具有評價性的提示,比如音頻、文字提示等。虛擬拆裝設備可以通過各種模型的控制完成各種部件的拆裝,學習者在學習的過程中可以多次重復使用。