李政峰 王青霞 肖昱鋒
(湖南懷化學(xué)院 電氣與信息工程學(xué)院,湖南 懷化418008)
隨著虛擬現(xiàn)實(shí)技術(shù)的迅速發(fā)展,虛擬裝配在產(chǎn)品開發(fā),實(shí)訓(xùn)教學(xué)中得到了廣泛的應(yīng)用。虛擬裝配無需產(chǎn)品或?qū)嶋H物理?xiàng)l件,在實(shí)驗(yàn)的過程中只需要在模型創(chuàng)建的基礎(chǔ)上,對(duì)模型添加動(dòng)畫,在過程中應(yīng)用可視化和數(shù)據(jù)表現(xiàn)方式,利用相關(guān)軟件來輔助與裝配相關(guān)的工作過程[1]。在基于Unity3D 電力設(shè)備的虛擬裝配中,對(duì)多模型的裝配涉及到的碰撞是裝配中的一種重要問題。Unity3D 開發(fā)平臺(tái)提供碰撞體添加功能,用戶可以給設(shè)計(jì)好的模型添加相應(yīng)的碰撞體,確定碰撞檢測區(qū)域,當(dāng)觸發(fā)器碰到碰撞體后觸發(fā)制定的轉(zhuǎn)配操作[2]。
虛擬裝配中,不同的物理模型在裝配的過程中需要碰撞檢測技術(shù)的支持。在模型確定的基礎(chǔ)上,給三維模型添加相應(yīng)的碰撞體,可以實(shí)現(xiàn)碰撞的監(jiān)測。Unity3D 碰撞檢測的算法主要有以下兩種包圍盒算法:
(1)AABB 包圍盒:AABB 包圍盒是平行于坐標(biāo)軸的最小六面體,故描述一個(gè)AABB,僅需六個(gè)標(biāo)量。AABB 構(gòu)造比較簡單,存儲(chǔ)空間小,但緊密性差,尤其對(duì)不規(guī)則幾何形體,冗余空間很大,當(dāng)對(duì)象旋轉(zhuǎn)時(shí),無法對(duì)其進(jìn)行相應(yīng)的旋轉(zhuǎn)。Unity 里面有一個(gè)Bounds 類,里面采用的就是AABB 包圍盒。
(2)OBB 包圍盒:OBB 包圍盒是包含該對(duì)象且相對(duì)于坐標(biāo)軸方向任意的最小的長方體。OBB 最大特點(diǎn)是它的方向的任意性,這使得它可以根據(jù)被包圍對(duì)象的形狀特點(diǎn)盡可能緊密的包圍對(duì)象,但同時(shí)也使得它的相交測試變得復(fù)雜。在Unity 里面,Boxcollider 可以隨著物體的旋轉(zhuǎn)而旋轉(zhuǎn),屬于OBB 包圍盒。本系統(tǒng)在設(shè)計(jì)中采用的是OBB 包圍盒。
在unity3d 中,系統(tǒng)會(huì)默認(rèn)給每個(gè)場景中的對(duì)象添加一個(gè)碰撞組件,能檢測碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種是觸發(fā)器:碰撞器是一群組件,包括很多種類,如Box Collider,Sphere Collider,Capsule Collider,Mesh Collider,Wheel Collider 等,相關(guān)碰撞器可以應(yīng)用到不同場合,只需要加載到需要碰撞檢測的對(duì)象即可,具體類型有Static Collider、Rigidbody Collider、Kinematic Rigidbody Collider、Character Controllers 四種類型選擇;觸發(fā)器在使用的過程中,只需要在unity3d 中的檢視面板中打開配置器組件的Is Trigger 選項(xiàng)即可。兩種檢測語句區(qū)別如下:
MonoBehaviour.OnTriggerEnter(Collider other)當(dāng)進(jìn)入觸發(fā)器
MonoBehaviour.OnTriggerExit(Collider other)當(dāng)退出觸發(fā)器
MonoBehaviour.OnTriggerStay(Collider other)當(dāng)逗留觸發(fā)器
MonoBehaviour.OnCollisionEnter(Collision collisionInfo)當(dāng) 進(jìn)入碰撞器
MonoBehaviour.OnCollisionExit(Collision collisionInfo)當(dāng)退出碰撞器
MonoBehaviour.OnCollisionStay(Collision collisionInfo)當(dāng) 逗留碰撞器
碰撞器根據(jù)物理引擎引發(fā)碰撞,產(chǎn)生碰撞的效果;觸發(fā)器被物理引擎所忽略,沒有碰撞效果。
虛擬裝配是根據(jù)設(shè)計(jì)的模型特征、精度特征,真實(shí)地模擬產(chǎn)品三維裝配工程,并允許用戶以交互方式控制產(chǎn)品的三維裝配過程[3],系統(tǒng)以用戶自主裝配的方式進(jìn)行,操作者自主拾取部件并將其裝配到指定的位置完成模型的裝配。在虛擬裝配設(shè)計(jì)中,選擇的是基于電動(dòng)機(jī)的虛擬裝配實(shí)訓(xùn)項(xiàng)目。首選進(jìn)行電機(jī)設(shè)備的型號(hào)選擇,按照尺寸比例得到具體的數(shù)據(jù);接著進(jìn)行設(shè)備的虛擬建模,建模主要采用CAD,3DMAX,PHOTOSHOP 完成(基本的建模思路是利用CAD 得到零部件路徑圖,導(dǎo)入3DMAX創(chuàng)建模型、ps 貼圖等操作);最后在unity3d 中創(chuàng)建場景,導(dǎo)入模型,按照裝配的需求對(duì)模型進(jìn)行運(yùn)動(dòng)控制(碰撞檢測的具體實(shí)現(xiàn)),完成后按要求輸出打包為不同的格式,整個(gè)設(shè)計(jì)流程如圖1。
圖1 裝配系統(tǒng)設(shè)計(jì)流程圖
電力設(shè)備的相關(guān)模型可以基于CAD 工程圖紙獲得具體的參數(shù),在3DMAX 中根據(jù)倒入的路徑文件通過擠出,車削,倒角等功能完成相關(guān)模型的準(zhǔn)備;在模型創(chuàng)建的基礎(chǔ)上,利用3DMAX 自帶的標(biāo)準(zhǔn)材質(zhì)給對(duì)象進(jìn)行貼圖(貼圖主要應(yīng)用Photoshop 處理)和渲染;最后根據(jù)裝配的需求對(duì)相關(guān)的模型完成裝配動(dòng)畫的設(shè)計(jì)。在模型準(zhǔn)備中需要注意的問題:
(1)因?yàn)閁nity3D 與3DMAX 的單位存在100:1 的現(xiàn)象,在3DMAX 中設(shè)置的單位采用厘米。
(2)相關(guān)模型動(dòng)畫設(shè)計(jì)過程中按照裝配順序進(jìn)行零件的裝配。裝配好的動(dòng)畫對(duì)象導(dǎo)出為FBX 文件,導(dǎo)出路徑為事先創(chuàng)建好的Unity3D 工程文件的資源文件夾。
打開事先建立的Unity3D 工程文件,3DMAX 導(dǎo)出的文件(三維模型、模型貼圖、動(dòng)畫文件等)已經(jīng)自動(dòng)存放在Unity3D 的資源文件夾Assets 中。
場景設(shè)計(jì):根據(jù)組裝的場景需求,應(yīng)用工具中的立方體創(chuàng)建出三面墻,打上燈光并對(duì)燈光參數(shù)進(jìn)行調(diào)整,保證場景的亮度。導(dǎo)入對(duì)象體到虛擬場景中,并對(duì)電動(dòng)機(jī)三維模型進(jìn)行縮放、移動(dòng)、旋轉(zhuǎn)、顯示、隱藏等屬性的設(shè)置。
應(yīng)用Unity3D 開發(fā)平臺(tái)提供的碰撞體添加功能,可以給選定的模型添加相應(yīng)的碰撞體,同時(shí)可以劃定碰撞區(qū)域,當(dāng)觸發(fā)器碰到碰撞體后就觸發(fā)指定的操作。在設(shè)計(jì)中,給虛擬裝配的三維模型添加盒碰撞屬性,對(duì)于外形簡單的零部件模型,直接添加一個(gè)包圍盒就能實(shí)現(xiàn)精確度較高的碰撞觸發(fā)區(qū)域,如果是復(fù)雜的零部件,可以把模型進(jìn)行物理分解,給模型添加多個(gè)碰撞體來提高識(shí)別的精度。在添加包圍盒的基礎(chǔ)上,為了增加控制的精度,可以通過調(diào)節(jié)包圍盒的位置和大小以提高碰撞包圍盒與實(shí)際模型形狀特征的重合度。
裝配過程通過編寫JAVA 腳本實(shí)現(xiàn)。具體的設(shè)計(jì)思路是按照裝配的步驟選定一個(gè)模型作為要裝配的部件,另外一個(gè)模型以不同的顏色顯示作為裝配位置的標(biāo)志物,還有一個(gè)為最終轉(zhuǎn)配好的完整模型。使用者通過單擊按鈕控制對(duì)象的運(yùn)動(dòng),運(yùn)動(dòng)的對(duì)象和標(biāo)志位置的有顏色部件發(fā)生碰撞時(shí),銷毀拾取零件和有色部件,顯示已經(jīng)轉(zhuǎn)配好的完整部件,同時(shí)顯示下一個(gè)進(jìn)行裝配的零部件的位置[4]。按設(shè)定好的裝配順序完成電機(jī)的裝配。
具體的實(shí)現(xiàn)過程:在系統(tǒng)實(shí)現(xiàn)中,主要需要解決的問題是通過按鈕單擊響應(yīng)相應(yīng)的動(dòng)畫播放,動(dòng)畫對(duì)象和設(shè)定的對(duì)象發(fā)生碰撞,給出提示信息完成模型部件的組裝。對(duì)象運(yùn)動(dòng)通過動(dòng)畫控制器Animator 進(jìn)行創(chuàng)建,在動(dòng)畫片段設(shè)置中,需要運(yùn)動(dòng)的對(duì)象的位移要大于給定的參照模型的位移量,保證后面運(yùn)動(dòng)能碰撞到對(duì)象;按鈕通過2D 場景進(jìn)行創(chuàng)建;對(duì)象運(yùn)動(dòng)通過按鈕激活執(zhí)行,在運(yùn)動(dòng)中和預(yù)定的對(duì)象進(jìn)行碰撞后給出提示的信息,部分代碼如下:
系統(tǒng)效果如圖2。
圖2 裝配效果圖
在系統(tǒng)運(yùn)行中,為了使裝配系統(tǒng)具有更好的交互性,可以給整個(gè)場景設(shè)置一個(gè)實(shí)驗(yàn)室環(huán)境;在對(duì)象的運(yùn)動(dòng)中可以給對(duì)象進(jìn)行顏色改變或者添加聲音效果;碰撞的方式有多種方案可以選擇,在碰撞設(shè)置中,可以針對(duì)不同的模型進(jìn)行多碰撞體的設(shè)置,同時(shí)在碰撞的基礎(chǔ)上,可以給出一些具有評(píng)價(jià)性的提示,比如音頻、文字提示等。虛擬拆裝設(shè)備可以通過各種模型的控制完成各種部件的拆裝,學(xué)習(xí)者在學(xué)習(xí)的過程中可以多次重復(fù)使用。