吳 波,陳春曉,徐勁力
(武漢理工大學(xué)機(jī)電工程學(xué)院,湖北 武漢430070)
隨著計(jì)算機(jī)圖像處理與識別等技術(shù)的發(fā)展,選擇使用Unity游戲引擎作為虛擬裝配系統(tǒng)開發(fā)工具的研究成為了當(dāng)前的熱門,再加上HoloLens頭戴式顯示器的出現(xiàn),已經(jīng)有越來越多的學(xué)者開始使用Unity來探索HoloLens在虛擬裝配系統(tǒng)中可發(fā)揮的潛能。文獻(xiàn)[1]使用Unity來構(gòu)建應(yīng)用程序?qū)oloLens的虛擬裝配能力進(jìn)行了評估,并表明雖然HoloLens是一個具有虛擬裝配能力前景的設(shè)備,但是要將其應(yīng)用在工廠的組裝環(huán)境中,某些領(lǐng)域還需要進(jìn)一步的改進(jìn),比如追蹤的準(zhǔn)確性等;文獻(xiàn)[2]使用Unity和HoloLens實(shí)現(xiàn)了一個允許用戶與虛擬物體交互時(shí)不需要將其視線從物理環(huán)境中移開的增強(qiáng)現(xiàn)實(shí)系統(tǒng);文獻(xiàn)[3]基于Unity和Holo-Lens開發(fā)了一套虛實(shí)結(jié)合的船舶輔機(jī)拆裝系統(tǒng);文獻(xiàn)[4]設(shè)計(jì)并實(shí)現(xiàn)了基于HoloLens的基站線束設(shè)備AR輔助布線系統(tǒng);文獻(xiàn)[5]提出一種基于HoloLens的核電站設(shè)備維修輔助系統(tǒng)應(yīng)用構(gòu)想。
另外,在對虛擬裝配進(jìn)行研究的同時(shí)必不可少的需要對其所包含的關(guān)鍵技術(shù)進(jìn)行詳細(xì)的探究。文獻(xiàn)[6]在開發(fā)虛擬吊裝訓(xùn)練系統(tǒng)的同時(shí)對零件實(shí)體的表達(dá)和顯示、自由度規(guī)約運(yùn)動導(dǎo)航和實(shí)時(shí)碰撞檢測等關(guān)鍵技術(shù)進(jìn)行了研究;文獻(xiàn)[7]通過探究人機(jī)交互、裝配序列規(guī)劃、碰撞檢測等虛擬裝配過程中的關(guān)鍵技術(shù)開發(fā)了主軸箱的虛擬裝配系統(tǒng)。
針對上述內(nèi)容,以Unity為三維引擎,結(jié)合HoloLens設(shè)備,對汽車主減速器虛擬裝配中的著色器、碰撞檢測和人機(jī)交互等關(guān)鍵技術(shù)進(jìn)行深入的研究,為進(jìn)一步實(shí)現(xiàn)主減速器虛擬裝配系統(tǒng)奠定堅(jiān)實(shí)的基礎(chǔ)。
著色器技術(shù)是通過對三維模型進(jìn)行渲染來使用戶可以觀察到各種各樣的圖像顯示效果,目前Unity中比較常用的是頂點(diǎn)/片元著色器。
光照模型是對真實(shí)世界中復(fù)雜光照進(jìn)行一定簡化后的理想模型,可以模擬光從發(fā)射到與物體相交再到人眼中的效果,是影響虛擬場景中模型渲染效果的關(guān)鍵因素之一。
2.1.1 漫反射與Lambert光照模型
由于漫反射光照符合Lambert定律,即反射光線的強(qiáng)度與入射點(diǎn)表面法向和光源方向之間夾角的余弦成正比。為此可將Lambert漫反射光照方程寫為式(1)所示:
式中:Idiff—漫反射的光照強(qiáng)度;kd(0<kd<1)—漫反射系數(shù);Il—點(diǎn)光源的光照強(qiáng)度;N—入射點(diǎn)表面的單位法向量;L—從入射點(diǎn)指向光源的單位方向向量;另外,為了防止的N與L之間夾角的余弦值為負(fù)從而避免物體被從后面來的光源照亮,使用max函數(shù)來將其最小值截取到0。
在Unity中選擇頂點(diǎn)/片元著色器并使用Cg/HLSL語言構(gòu)建Lambert光照模型,得到其材質(zhì)球如圖1(a)所示,將其應(yīng)用于主減速器零部件中的主動齒輪上渲染效果,如圖1(b)所示。
圖1 Lambert光照模型的材質(zhì)球及其渲染效果Fig.1 Material of Lambert Lighting Model and Its Rendering Effect
從上圖中可以看出,雖然Lambert光照模型可以表現(xiàn)出主動齒輪的光照現(xiàn)象,但是對其表面上的金屬光澤效果卻顯得力不從心,為此,可在漫反射的基礎(chǔ)上加上鏡面反射從而得到渲染效果更好的Phong光照模型。
2.1.2 鏡面反射與Phong光照模型
鏡面反射的光照強(qiáng)度與反射光線和觀察視線之間的夾角有關(guān),其光照模型,如式(2)所示:
式中:Ispec—鏡面反射的光照強(qiáng)度;ks表示鏡面反射系數(shù);ns—高光指數(shù);V—從入射點(diǎn)指向視點(diǎn)的單位觀察向量。
所以綜合考慮漫反射和鏡面反射兩個因素,可得出式(3)所示的光照方程:
在Unity中以同樣的方法構(gòu)建Phong光照模型,得到其材質(zhì)球如圖2(a)所示,將其應(yīng)用于主動齒輪上渲染效果,如圖2(b)所示。
圖2 Phong光照模型的材質(zhì)球及其渲染效果Fig.2 Material of Phong Lighting Model and Its Rendering Effect
從圖中可以看出,Phong光照模型已經(jīng)可以實(shí)現(xiàn)主動齒輪表面上的金屬光澤,但是其渲染效果依舊不夠明顯。為此,提出Blinn-Phong光照模型。
2.1.3 Blinn-Phong光照模型
Blinn-Phong的基本思想是引入L和V的中間向量H,從而將Phong光照模型的表達(dá)式改為,如式(4)所示:
綜合考慮漫反射和鏡面反射兩個因素,可得出式(5)所示的光照方程:
在Unity中以同樣的方法構(gòu)建Blinn-Phong光照模型,得到其材質(zhì)球效果如圖3(a)所示,將其應(yīng)用于主動齒輪上效果,如圖3(b)所示。
圖3 Blinn-Phong光照模型的材質(zhì)球及其渲染效果Fig.3 Material of Blinn-Phong Lighting Model and Its Rendering Effect
從上圖中可以看出,Blinn-Phong光照模型對于主動齒輪表面上的金屬光澤渲染效果要比Phong光照模型更加明顯與自然。
對于上述所實(shí)現(xiàn)的光照模型著色器來說,在光照無法到達(dá)的區(qū)域,其所渲染的主動齒輪外觀通常是全黑的,沒有任何的明暗變化效果,因此這會使主動齒輪的背光面失去所有的細(xì)節(jié)表現(xiàn)。為此,可在原Lambert光照模型的基礎(chǔ)上進(jìn)行一個簡單的修改,即引入Half Lambert光照模型,從而來克服模型背光面明暗一樣的問題。根據(jù)文獻(xiàn)[8]在《Unity Shader入門精要》中對Half Lambert光照模型的敘述,可將廣義的Half Lambert光照模型公式概括,如式(6)所示:
在絕大多數(shù)情況下,α和β的值均為0.5,因此,式(6)可進(jìn)一步改寫式(7)為:
從式(7)中可以看出Half Lambert光照模型將N·L的結(jié)果范圍從[-1,1]映射到[0,1]范圍內(nèi),也就是說,對于模型的背光面,Lambert光照模型將點(diǎn)積結(jié)果都映射在同一個值,即0值處,而在Half Lambert光照模型中,不同的點(diǎn)積結(jié)果會映射在不同的值上,因此,背光面也出現(xiàn)相應(yīng)的明暗變化。
最后,可將綜合考慮Half Lambert和Blinn-Phong模型的光照方程表達(dá)式,如式(8)所示:
在Unity中以同樣的方法構(gòu)建Half Lambert和Blinn-Phong相結(jié)合的光照模型,得到其材質(zhì)球如圖4(a)所示,將其應(yīng)用于主動齒輪上效果,如圖4(b)所示。
圖4 Half Lambert和Blinn-Phong光照模型的材質(zhì)球及其渲染效果Fig.4 Material of Half Lambert & Blinn-Phong Lighting Model and Its Rendering Effect
從圖中可以看出,Half Lambert和Blinn-Phong相結(jié)合的光照模型不僅改善了主動齒輪背光區(qū)域的明暗效果,使其具有相應(yīng)的細(xì)節(jié)表現(xiàn),同時(shí)在需要有金屬光澤的材質(zhì)表面上也有很好的渲染效果。為此,可將基于Half Lambert和Blinn-Phong光照模型的著色器技術(shù)作為主減速器虛擬裝配中三維模型的渲染方式,以便可以獲取到高真實(shí)度的虛擬場景。
碰撞檢測的本質(zhì)就是在同一時(shí)刻檢測虛擬環(huán)境中是否有兩個或者多個虛擬物體占據(jù)同一個空間區(qū)域,從而來判斷虛擬物體之間是否產(chǎn)生了碰撞。
Unity中的碰撞檢測機(jī)理使用的是基于層次包圍盒的算法。層次包圍盒方法的核心思想是用體積略大而幾何特性簡單的包圍盒來近似地描述復(fù)雜的幾何對象,從而只需對包圍盒重疊的對象進(jìn)行進(jìn)一步的相交測試[9],這樣可以大大提高碰撞檢測的速度從而快速篩選出產(chǎn)生碰撞的物體。
在Unity中如果想要實(shí)現(xiàn)模型對象之間的碰撞檢測,首先必須要給其添加合適的Collider(碰撞器)。目前,Unity提供了6種碰撞器,分別是適用于規(guī)則六面體的Box Collider(盒子碰撞器)、適用于球體或者旋轉(zhuǎn)物體的Sphere Collider(球體碰撞器)、適用于類似橢圓物體的Capsule Collider(膠囊碰撞器)、適用于形狀復(fù)雜物體的Mesh Collider(網(wǎng)格碰撞器)、適合在車輪與其他物體碰撞時(shí)使用的Wheel Collider(車輪碰撞器)和適用于地形表面的Terrain Collider(地形碰撞器)。其中,盒子碰撞器、球體碰撞器和膠囊碰撞器作為基本碰撞器,其結(jié)構(gòu)簡單、檢測效率高,但是密封性較差;而網(wǎng)格碰撞器雖然可以通過物體的網(wǎng)格構(gòu)建適合任何形狀對象的碰撞器,從而可以實(shí)現(xiàn)很高的檢測精度,但是兩個網(wǎng)格碰撞器之間通常不會發(fā)生碰撞,即便將網(wǎng)格碰撞器標(biāo)記為Convex(凸起的),其在使用時(shí)仍具有很大的限制。
此外,在Unity中要實(shí)現(xiàn)碰撞檢測還需要為物體添加Rigidbody(剛體)組件,剛體組件可以使物體具有重力、摩擦力等物理屬性并能夠在約束條件和物理影響下發(fā)生運(yùn)動[10]。
綜上所述,為了能夠在本系統(tǒng)中實(shí)現(xiàn)碰撞檢測,并且盡可能提高檢測精度和效率,可結(jié)合基本碰撞器和網(wǎng)格碰撞器的使用特點(diǎn)設(shè)計(jì)出一種針對于主減速器虛擬裝配系統(tǒng)的碰撞檢測方法,如圖5所示。
圖5 基于主減速器虛擬裝配的碰撞檢測方法Fig.5 Collision Detection Method Based on Virtual Assembly of Main Reducer
(1)對于裝配過程中不需要發(fā)生位移的物體,例如主夾具和某些輔助工具等,可直接對其添加網(wǎng)格碰撞器;
(2)對于待裝配零部件等裝配過程中需要發(fā)生位移的物體,可對其同時(shí)添加網(wǎng)格碰撞器和基本碰撞器,當(dāng)待裝配零部件未到達(dá)裝配工位上時(shí),可在腳本中通過使用GetComponent函數(shù)來獲取該物體上的網(wǎng)格碰撞器并將其設(shè)置為false,從而由基本碰撞器發(fā)揮功能,反之,則由網(wǎng)格碰撞器發(fā)揮功能;
(3)對于基本碰撞器的使用,為了達(dá)到更好的密封性,可對形狀比較復(fù)雜的對象添加若干個基本碰撞器的組合從而使其更加符合物體的幾何外觀;
(4)由于本系統(tǒng)只需對場景中是否有碰撞的發(fā)生做出檢測,而并不想在場景中看到由于碰撞發(fā)生所產(chǎn)生的效果,因此需要勾選基本碰撞器中的Is Trigger(觸發(fā)器)選項(xiàng),從而將碰撞檢測改為觸發(fā)檢測使用;
(5)由于本系統(tǒng)中沒有將對象的網(wǎng)格碰撞器標(biāo)記為凸起的,所以需要在剛體組件下勾選Is Kinematic(運(yùn)動學(xué)剛體)選項(xiàng),用以保證網(wǎng)格碰撞器可以正常使用。
根據(jù)上述碰撞檢測方法依次給主減速器的零部件、裝配所用夾具以及輔助工具等對象添加相應(yīng)的碰撞器,其中圖6所示的是給連接法蘭總成添加網(wǎng)格碰撞器和5個盒子碰撞器,圖7所示的是給主動齒輪添加網(wǎng)格碰撞器以及2個盒子碰撞器和1個膠囊碰撞器。
圖6 給連接法蘭總成添加網(wǎng)格碰撞器和5個盒子碰撞器Fig.6 Add Mesh Collider and 5 Box Colliders to The Connection Flange Assembly
圖7 給主動齒輪添加網(wǎng)格碰撞器以及2個盒子碰撞器和1個膠囊碰撞器Fig.7 Add Mesh Collider and 2 Box Colliders and 1 Capsule Collider to The Drive Gear
在以虛擬裝配為主導(dǎo)功能的系統(tǒng)中,人機(jī)交互更關(guān)鍵的核心技術(shù)之一。本研究基于HoloLens的三大基本輸入方式——凝視、手勢和語音,同時(shí)結(jié)合C#編程腳本實(shí)現(xiàn)了一整套全新的人機(jī)交互內(nèi)容,為主減速器虛擬裝配中的操作奠定了基礎(chǔ)。
在一個虛實(shí)融合的場景中往往會有很多虛擬物體,而用戶意圖進(jìn)行交互操作的對象通常只是其中一個。因此,用戶在進(jìn)行人機(jī)交互之前,首先需要完成的是虛擬物體的選取。傳統(tǒng)的基于電腦和手機(jī)移動終端的AR系統(tǒng)是通過在二維顯示平面內(nèi)借助鼠標(biāo)或者觸摸屏等進(jìn)行虛擬物體的選取,而HoloLens的解決方案是利用凝視來選取意圖進(jìn)行交互操作的虛擬物體,如圖8所示。
圖8 HoloLens使用凝視選取交互對象Fig.8 HoloLens Uses Gaze to Select Interactive Objects
但是目前在Unity中沒有明確關(guān)于凝視的應(yīng)用程序編程接口(API)或者相關(guān)組件,因此需要借助射線碰撞檢測的方式實(shí)現(xiàn)虛擬物體的選取。射線碰撞的原理是系統(tǒng)首先通過HoloLens向用戶眼鏡凝視的方向發(fā)射一條射線,然后再與帶有碰撞器組件的虛擬物體進(jìn)行碰撞檢測。具體的實(shí)現(xiàn)過程是通過在腳本中實(shí)例化射線類Ray函數(shù),同時(shí)利用攝像頭調(diào)用Physics.RayCast函數(shù)發(fā)出射線,與虛擬物體的表面在某一點(diǎn)相交得出RaycastHit結(jié)果,該結(jié)果即包含了碰撞點(diǎn)的三維位置參數(shù)和碰撞對象等信息。
由于場景中的射線是不可見的,若直接使用射線的注視矢量作為選取物體的輸入形式,用戶很難在沒有標(biāo)記凝視中心的情境下對意圖交互的物體進(jìn)行精確定位,所以使用Cursor(光標(biāo))作為選取物體時(shí)信息反饋的指示器,用以幫助用戶更精準(zhǔn)的了解到他們視線的注視中心。
對于光標(biāo)本身來說,不同的外觀會給用戶帶來不同的觀感和相應(yīng)信息的提取,因此,為了更好地發(fā)揮光標(biāo)在系統(tǒng)中的作用,在設(shè)計(jì)光標(biāo)時(shí)應(yīng)必須滿足始終存在、大小合適、無方向性和顏色醒目等幾點(diǎn)原則。另外,為了給用戶帶來更全面的信息反饋,光標(biāo)的設(shè)計(jì)應(yīng)根據(jù)虛實(shí)融合場景中視線與不同的對象發(fā)生碰撞并結(jié)合用戶的交互需求產(chǎn)生不一樣的外觀顯示效果,如表1所示。
表1 光標(biāo)不同狀態(tài)下外觀顯示效果及其表達(dá)含義Tab.1 Appearance Display Effect and Its Meaning in Different States of The Cursor
在使用凝視射線選取意圖交互的對象之后,用戶即可通過手勢輸入對虛擬物體進(jìn)行控制。根據(jù)主減速器虛擬裝配中對手勢交互的需求,確定選取Air Tap(點(diǎn)擊)和Tap and Hold(拖拽)作為主要的手勢輸入方式。另外,用戶在進(jìn)行手勢操作之前通常都需要有一個Ready(預(yù)備)手勢的操作。綜上,可將主減速器虛擬裝配中的手勢指令及其表達(dá)含義概括,如表2所示。
表2 主減速器虛擬裝配中的手勢指令及其表達(dá)含義Tab.2 Gesture Instructions and Their Meanings in The Virtual Assembly of Main Reducer
在Unity中進(jìn)行手勢交互的開發(fā)時(shí),需要在腳本中添加GestureRecognizer(手勢識別器)用以實(shí)現(xiàn)系統(tǒng)對用戶手勢的感知。其中,點(diǎn)擊手勢作為最基本的手勢輸入,可在本系統(tǒng)中實(shí)現(xiàn)多種功能,例如零部件觀察場景中的模型信息查看和虛擬裝配場景中的自動裝配等,為此需要在腳本中設(shè)計(jì)一個點(diǎn)擊手勢的響應(yīng)函數(shù)OnTap,用以響應(yīng)不同功能事件的發(fā)生;而拖拽手勢主要是在本系統(tǒng)的手動裝配模式中實(shí)現(xiàn)物體Manipulation(平移)和Navigation(轉(zhuǎn)動)兩種功能,因此需要在腳本中設(shè)定一個bool(布爾)變量isManipulationEnabled來控制拖拽時(shí)平移和轉(zhuǎn)動之間的切換,其中,平移是通過在初始位置的基礎(chǔ)上加上拖拽的總偏移量來改變物體的空間位置所實(shí)現(xiàn)的,而轉(zhuǎn)動需要先定義一個回轉(zhuǎn)因子來控制旋轉(zhuǎn)量,然后根據(jù)物體裝配需求設(shè)定相應(yīng)的轉(zhuǎn)動方向即可。
綜上,可將HoloLens中凝視選取目標(biāo)對象和手勢操作結(jié)合實(shí)現(xiàn)交互的流程歸納為,如圖9所示。
圖9 HoloLens中結(jié)合凝視與手勢實(shí)現(xiàn)交互的流程Fig.9 The Process of Interacting with Gestures and Gestures in HoloLens
語音輸入是以一種自然的方式對用戶意圖操作的物體進(jìn)行信息傳達(dá),用戶既可以在場景中直接說出語音指令來實(shí)現(xiàn)某種交互功能,也可以在凝視選擇目標(biāo)物體的同時(shí)使用預(yù)設(shè)好的語音命令來實(shí)現(xiàn)交互效果。
在Unity中進(jìn)行語音交互的開發(fā)時(shí),首先需要在腳本中添加KeywordRecognizer(關(guān)鍵詞識別器)用以實(shí)現(xiàn)應(yīng)用上的語音識別,然后盡可能通過使用常見的英文短語來確定關(guān)鍵詞的名稱用以調(diào)用并執(zhí)行動作事件,最后通過HoloLens的麥克風(fēng)硬件對用戶的關(guān)鍵詞口語表達(dá)進(jìn)行識別,進(jìn)而觸發(fā)功能事件達(dá)到交互效果。
另外,在手勢交互設(shè)計(jì)中,由于拖拽手勢需要響應(yīng)物體的移動和轉(zhuǎn)動兩種功能事件,因此為了方便用戶在拖拽移動和拖拽轉(zhuǎn)動之間進(jìn)行自由地切換,選擇語音交互功能來對此進(jìn)行輔助。在設(shè)計(jì)時(shí),可在腳本中選擇“Rotate Model”和“Move Model”作為語音輸入的關(guān)鍵詞來對拖拽手勢腳本中布爾變量isManipulationEnabled的值進(jìn)行控制。如圖10所示,當(dāng)用戶在凝視可進(jìn)行拖拽手勢的目標(biāo)對象時(shí)說出“Rotate Model”,那么將isManipulationEnabled的值設(shè)置為false,此時(shí)拖拽手勢響應(yīng)轉(zhuǎn)動功能事件;當(dāng)用戶在凝視可進(jìn)行拖拽手勢的目標(biāo)對象時(shí)說出“Move Model”,那么將isManipulationEnabled的值設(shè)置為true,此時(shí)拖拽手勢響應(yīng)移動功能事件。
圖10 語音輸入控制拖拽手勢的響應(yīng)事件Fig.10 Voice Input Controls The Response Event of Tap and Hold Gesture
基于Unity和HoloLens對汽車主減速器虛擬裝配中的關(guān)鍵技術(shù)進(jìn)行了相關(guān)研究,將著色器、碰撞檢測和人機(jī)交互等技術(shù)在理論分析的基礎(chǔ)上進(jìn)行編程解決和實(shí)現(xiàn),主要結(jié)論如下:
(1)在基本光照模型的分析與渲染效果對比下,提出將Half Lambert光照模型,并將其與Blinn-Phong光照模型相結(jié)合實(shí)現(xiàn)了能夠獲取逼真場景的著色器渲染方式;
(2)結(jié)合Unity中的基本碰撞器和網(wǎng)格碰撞器提出一種針對主減速器虛擬裝配的碰撞檢測方法,提高了系統(tǒng)的碰撞檢測精度和效率;
(3)基于HoloLens的凝視、手勢和語音三大基本輸入方式,并結(jié)合C#編程腳本實(shí)現(xiàn)了更為簡單、自然、人性化的全新交互方式,為虛擬裝配中的交互操作奠定了基礎(chǔ)。
通過對主減速器虛擬裝配中關(guān)鍵技術(shù)的分析和解決,一方面為進(jìn)一步開發(fā)和實(shí)現(xiàn)主減速器虛擬裝配系統(tǒng)提供了技術(shù)支持,另一方面為基于Unity和HoloLens的虛擬裝配研究提供了一定的參考價(jià)值。