包文運 胡建垠 黃培德 盛步云 宋 寅
1(大唐環(huán)境產(chǎn)業(yè)集團股份有限公司特許經(jīng)營分公司 江蘇 南京 210000) 2(武漢理工大學(xué) 湖北 武漢 430070) 3(襄陽五二五泵業(yè)有限公司 湖北 襄陽 441004)
虛擬現(xiàn)實(Virtual Reality, VR)作為計算機圖形學(xué)(Computer Graphics, CG)中最為火熱的研究領(lǐng)域,目前廣泛應(yīng)用于交互式仿真培訓(xùn),尤其是在高危險、高技術(shù)含量的工程領(lǐng)域,為專業(yè)技術(shù)人員的實際上崗操作提供逼真的沉浸式虛擬現(xiàn)實環(huán)境下的教學(xué)培訓(xùn)(如高精密機械設(shè)備裝配、高壓電力裝備維修等)。該領(lǐng)域的核心為研究虛擬手與三維模型的自然交互技術(shù),即通過相關(guān)體驗設(shè)備采集手部實時數(shù)據(jù),并將其映射到VR環(huán)境中所創(chuàng)建的虛擬手模型,使虛擬手位姿與其所交互的三維模型位姿實現(xiàn)實時精確同步,且交互過程須滿足基本物理學(xué)原理,增強人機交互過程的沉浸感與真實感。目前,針對虛擬手與三維模型的自然交互技術(shù)研究大致可分為兩類:基于物理學(xué)原理的交互方法和基于啟發(fā)式的交互方法。
基于物理學(xué)原理的交互方法的核心思想是基于牛頓動力學(xué)的基本定律,以抓取對象是否受力平衡和虛擬手的手指接觸面的摩擦來判斷能否抓取,其實現(xiàn)原理是利用庫倫摩擦力模型分析物體的受力狀態(tài)。文獻[1]通過引入代理手來提供正確的視覺反饋,還用于對虛擬手和三維模型之間的動態(tài)交互過程進行仿真。但是該方法的計算復(fù)雜度較高,導(dǎo)致系統(tǒng)運行幀率較低。文獻[2]研究了一種基于庫侖摩擦模型的虛擬手交互方法。該方法模擬許多類型的動作,如推、拉、抓等操作,而不受物體形狀或手姿勢的限制。但是該方法所采用的庫倫模型僅為一種簡單的摩擦模型,其仿真效果不夠逼真,無法模擬較為復(fù)雜的實際工程場景。綜上所述,基于物理學(xué)原理的交互方法普遍存在庫倫摩擦力在虛擬環(huán)境下持續(xù)性較差、缺乏力反饋等問題,而在虛擬環(huán)境下進行物理學(xué)原理計算,其計算復(fù)雜度較高,導(dǎo)致系統(tǒng)運行幀率下降,降低了用戶實際交互體驗感。
基于啟發(fā)式的交互方法,根據(jù)被抓取物體的幾何形狀,對抓取手勢進行預(yù)定義,并分別制定相應(yīng)的交互規(guī)則,通過判斷是否滿足特定驗證條件來實現(xiàn)交互過程。文獻[3]利用物體形狀特征和手指抓握的接觸關(guān)系制定抓取規(guī)則,實現(xiàn)適應(yīng)物體形狀的啟發(fā)式抓取。但是該方法容易導(dǎo)致虛擬手與三維模型產(chǎn)生較為嚴重的干涉。文獻[4]研究了一種虛擬抓握彈簧模型,通過對手指運動進行啟發(fā)式分析和瞬態(tài)增量運動隱喻識別,用于解決虛擬手抓取或釋放三維模型時的粘接問題。綜上,基于啟發(fā)式的交互方法雖然具備計算復(fù)雜度較低的優(yōu)勢,但是該類方法需要對交互規(guī)則進行預(yù)定義,導(dǎo)致須針對特定實際工程情形進行分析的問題,普適性較差。同時,該類方法還存在容易產(chǎn)生干涉、人機交互不自然等問題。
鑒于此,本文研究了一種VR環(huán)境下基于Leap Motion的三維模型空間位姿自適應(yīng)調(diào)整方法,用于改善目前虛擬手與三維模型的自然交互技術(shù)所存在的上述問題,其主要研究內(nèi)容包括:(1) 提出一種虛擬手交互過程防干涉方法,分別構(gòu)建了虛擬手幾何模型與運動模,并建立虛擬手碰撞檢測模型和三維模型碰撞檢測模型,通過計算虛擬手與三維模型之間接觸點以避免干涉現(xiàn)象;(2) 提出一種三維模型形狀自適應(yīng)的虛擬手自然交互方法,定義抓取副作為穩(wěn)定抓取的先決條件,并根據(jù)抓取的接觸點集,求解虛擬手變換零件的位姿矩陣,實現(xiàn)對三維模型空間位姿隨虛擬手空間位姿信息的實時自適應(yīng)調(diào)整。
為研究三維模型空間位姿自適應(yīng)調(diào)整方法,需要分析所提出方法的總體流程,如圖 1所示。首先,對虛擬手與待抓取三維模型構(gòu)建碰撞檢測模型,在保障仿真可視化效果的前提下,為精確計算虛擬手與三維模型的接觸點奠定基礎(chǔ)。其次,在抓取交互過程中實時進行干涉檢查,并計算接觸點,實時判斷該幀是否滿足穩(wěn)定抓取條件。若不滿足,則在下一幀繼續(xù)執(zhí)行干涉檢查;若滿足,則計算該幀被抓取三維模型的平移矩陣遞增量與旋轉(zhuǎn)矩陣遞增量,并合成位姿矩陣遞增量,實時更新三維模型的位姿矩陣,達到空間位姿自適應(yīng)調(diào)整的目的。
圖1 三維模型空間位姿自適應(yīng)調(diào)整方法總體流程
Leap Motion是一款由Leap公司研發(fā)的用于識別手部幾何數(shù)據(jù)的體感控制器,其基于雙目視覺技術(shù)采集手部數(shù)據(jù),并在虛擬三維空間中構(gòu)建虛擬手,采集精度可達到百分之一毫米[5]。
本研究中,基于Leap Motion所采集手部骨骼與關(guān)節(jié)數(shù)據(jù),在Unity3D環(huán)境中構(gòu)建虛擬手三維模型。當(dāng)虛擬手接觸三維模型后,降低其透明度,以此作為虛擬手交互的視覺反饋。如圖2所示分別為虛擬手三角網(wǎng)格模型,以及采用半透明紋理渲染的虛擬手效果。
圖2 基于Leap Motion所構(gòu)建虛擬手三維模型效果
為精確計算虛擬手與三維模型碰撞接觸時的接觸點信息,以實現(xiàn)虛擬手與三維模型之間的空間位姿同步,需要分別對虛擬手與三維模型構(gòu)建相應(yīng)的碰撞檢測模型。
1.2.1虛擬手碰撞檢測模型
為避免虛擬手與三維模型出現(xiàn)干涉,確保接觸與抓取的視覺真實感,構(gòu)建復(fù)合虛擬手碰撞檢測模型,包括虛擬手輪廓模型和虛擬手剛體模型。虛擬手輪廓模型即為能夠真實反映手部輪廓特征的三角網(wǎng)格模型;虛擬手剛體模型由表征每根手指指骨與關(guān)節(jié)的三個膠囊體,以及表征手掌的長方體共同組成,用于檢測虛擬手與虛擬物體之間的碰撞。根據(jù)虛擬手與三維模型之間的交互情形,分為兩類情況討論。
(1) 當(dāng)虛擬手與被抓取三維模型無任何接觸時,輪廓模型與剛體模型重合,由Leap Motion所采集手部數(shù)據(jù)驅(qū)動其自由運動,輪廓模型呈半透明狀態(tài),如圖 3 (a)所示。(2) 當(dāng)虛擬手與被抓取三維模型存在接觸時,輪廓模型與被抓取三維模型位姿保持同步,且呈不透明狀態(tài),而剛體模型繼續(xù)由Leap Motion所采集手部數(shù)據(jù)驅(qū)動,實時更新位姿信息,如圖 3 (b)所示。當(dāng)剛體模型中表征手指的膠囊體脫離被抓取三維模型時,表示該手指輪廓的部分實體模型也會隨之脫離被抓取三維模型,如圖 3 (c)所示。
圖3 復(fù)合虛擬手碰撞檢測模型
1.2.2三維模型碰撞檢測模型
為了方便計算虛擬手和被抓取三維模型的碰撞接觸點,并且使得所構(gòu)建三維模型碰撞檢測模型的輪廓接近其實際輪廓,尤其針對具備凹區(qū)域的三維模型,采用層級近似凸分解技術(shù)(HACD)對被抓取三維模型進行凸分解,進而對所分解凸塊建立有向包圍盒(OBB),實現(xiàn)碰撞檢測模型的構(gòu)建工作。設(shè)OBB包圍的凸塊為s,第i個三角面片的三個頂點矢量分別為pi、qi、ri,s中共含n塊三角面片,則OBB的幾何中心空間位置u可表示為[6]:
(1)
構(gòu)建協(xié)方差矩陣[6],其元素Cjk計算為:
1≤j,k≤3
(2)
圖4 被抓取三維模型碰撞檢測模型構(gòu)建效果
1.3.1接觸點計算
如圖5所示,為了防止操作過程中虛擬手與被抓取三維模型產(chǎn)生干涉,本文采用Unity3D內(nèi)置的基于包圍盒的碰撞檢測方法來計算虛擬手與被抓取三維模型接觸點。
圖5 虛擬手與被抓取三維模型接觸點估計效果
其具體步驟如下:
Step1定義接觸偏移量λ,其值較小,作為在虛擬手碰撞三維模型之前觸發(fā)碰撞事件的閾值,并且同時作為被抓取三維模型實際包圍盒的外偏移邊界,圖5(a)所示虛線范圍為由λ定義的被抓取三維模型實際包圍盒。
Step2由Unity3D實時監(jiān)控虛擬手是否與被抓取三維模型實際包圍盒發(fā)生碰撞,并檢測其碰撞點pi,圖5(a)所示手指與虛線框的接觸點即為pi。
Step3自pi出發(fā),沿pi法向量的反方向發(fā)射射線Rayi,其與被抓取三維模型實際包圍盒相交于點ci,將ci作為精確的接觸點,并依據(jù)其坐標(biāo)值計算被抓取三維模型的空間位姿信息。
如圖5(b)所示為接觸點計算的實際可視化效果,其中λ=3 mm,共計算出虛擬手與待抓取三維模型的14個接觸點,其中射線表示接觸點的法線方向。
1.3.2基于接觸點的干涉檢查
鑒于在Unity3D所構(gòu)建三維場景中,用戶實際手與虛擬手呈現(xiàn)單向耦合關(guān)系,即實際手數(shù)據(jù)單向驅(qū)動虛擬手位姿,進而容易導(dǎo)致虛擬手與被抓取三維模型產(chǎn)生干涉現(xiàn)象,嚴重影響人機交互過程的真實感與沉浸感。因此,本文將1.2.1節(jié)所構(gòu)建虛擬手碰撞檢測模型中的剛體模型完全基于Leap Motion所采集實際手數(shù)據(jù)驅(qū)動,而當(dāng)虛擬手與被抓取三維模型發(fā)生碰撞時,使輪廓模型與被抓取三維模型保持碰撞瞬間的位姿同步,其具體流程詳見圖6。
圖6 基于接觸點的干涉檢查流程
當(dāng)檢測到虛擬手指骨與三維模型發(fā)生碰撞時,以延遲時間t剔除驅(qū)動虛擬手與被抓取三維模型表面接觸對應(yīng)的手指,并使虛擬手輪廓模型從半透明變成不透明,從視覺上避免干涉現(xiàn)象。否則,虛擬手位姿繼續(xù)由Leap Motion所采集數(shù)據(jù)驅(qū)動實時更新。t的計算為:
t=spc/vh
(3)
式中:vh表示碰撞點pi的瞬時速率;spc為碰撞點pi與其所對應(yīng)接觸點ci的歐氏距離。
結(jié)合基于啟發(fā)式和基于物理抓取兩種方法的優(yōu)缺點,并參考文獻[7],本文定義抓取副為三維模型是否被穩(wěn)定抓取的判斷條件。
定義1 抓取副假設(shè)虛擬手與被抓取三維模型的任意兩個接觸點為ci、cj,則這兩個接觸點構(gòu)成一個穩(wěn)定的抓取副g(ci,cj),其應(yīng)滿足:
(4)
式中:Vji為接觸點ci到cj的向量;ni為接觸點ci處的法向量;∠(ni,Vji)為向量ni與向量Vji之間的夾角;α為摩擦錐角度。圖7展示了三個接觸點c1、c2、c3形成兩個穩(wěn)定抓取副g(c1,c2)與g(c1,c3)的情況。
圖7 穩(wěn)定抓取副形成示意圖
三維模型被抓取時的位姿信息可以通過求解虛擬手變換零件的位姿矩陣P得到:
(5)
為了表示任意時刻三維模型的位姿信息,則當(dāng)抓取條件判斷成功時,假設(shè)第k幀時,三維模型的位姿矩陣為P(k),其所有抓取副和組成抓取副的點集分別為G和Q(k),而第k+1幀時三維模型的位姿矩陣為P(k+1),其抓取副點集為Q(k+1),則G、Q(k)、P(k+1)分別表示為:
(6)
式中,gi為第i對抓取副;pi為第i個碰撞點;n表示共有n對抓取副;ΔT為抓取副點集中心m的平移矩陣;ΔR為抓取副點集從第k幀到第k+1幀的旋轉(zhuǎn)矩陣,ΔQ為第k幀到第k+1幀抓取副點集的位姿矩陣變化量,可表示為:
(7)
由式(6)可知當(dāng)虛擬手抓取三維模型時,求解ΔQ的值即可得到任意時刻三維模型的位姿矩陣,其中ΔQ由平移矩陣ΔT和旋轉(zhuǎn)矩陣ΔR決定。
對于ΔQ的求解存在兩種情況:一是虛擬手碰撞檢測模型與被抓取三維模型表面接觸;二是虛擬手碰撞檢測模型與被抓取三維模型發(fā)生干涉。如圖8所示。
(1) 虛擬手碰撞檢測模型停留在三維模型表面。虛擬手碰撞檢測模型在三維模型表面,和現(xiàn)實中抓取操作物體變換的接觸點一致,因此可根據(jù)接觸點的坐標(biāo)信息計算位姿矩陣。
(2) 虛擬手碰撞檢測模型與三維模型發(fā)生干涉。人手與虛擬手的映射是單向耦合關(guān)系,在抓取移動過程中,由于人手實際上沒有抓著一個物體,人手可能會無意識的伸屈手指,虛擬手碰撞檢測模型隨即會與三維模型發(fā)生干涉。隨著干涉程度的加深,操作變換的精度也會越低,考慮這種情況是為了增加系統(tǒng)的容錯性。
引進ΔQ的求解存在兩種情況,則抓取變換零件的位姿矩陣求解步驟如下:
Step1平移矩陣ΔT求解。虛擬手在對零件平移和旋轉(zhuǎn)時,獲取抓取副G后,位移矩陣ΔT的求解為:
(8)
式中:Δm表示抓取副點集中心m的位移量;Δt為第k幀到第k+1幀的時間差。
Step2如果虛擬手碰撞檢測模停留在被抓取三維模型,則跳轉(zhuǎn)至Step3。如果虛擬手碰撞檢測模穿透到虛擬物體內(nèi),則跳轉(zhuǎn)Step4。
Step3虛擬手碰撞檢測模停留在三維模型表面時,旋轉(zhuǎn)矩陣ΔR的求解步驟為,先計算抓取副點集旋轉(zhuǎn)變化的四元數(shù)Δq,最后在將Δq換算為旋轉(zhuǎn)矩陣ΔR。而Δq的計算與抓取副G成對數(shù)量有關(guān),可分為n=1和n>1兩種情況。
(1) 當(dāng)n=1時,即零件上只有一對抓取副,Δq等于抓取副gi包含點pi、pj組成的線段Lij的姿態(tài)變化Δqi。此時Δq表示為:
Δq=ΔqiΔqi=qi(k)-1qi(k+1)
(9)
式中:qi(k)為第k幀時線段Lij的四元數(shù);qi(k+1)為第幀時線段Lij的四元數(shù)。
此外,當(dāng)線段Lij圍繞自身旋轉(zhuǎn)時,式(9)中的Δqi將不會產(chǎn)生任何變化,導(dǎo)致被抓取三維模型旋轉(zhuǎn)信息不變。此時Δq等于線段Lij繞自身旋轉(zhuǎn)的四元數(shù)Δqi’。
(2) 當(dāng)n>1時,Δq由所有抓取副gi組成線段Lij的姿態(tài)變化Δqi共同決定,且每對抓取副gi對Δq的貢獻存在差異。為每對抓取副gi定義一個權(quán)重系數(shù)wi:
(10)
式中:Δq等于每對抓取副gi組成線段Lij的姿態(tài)變化Δqi在權(quán)重wi下的四元數(shù)的平均值qmean。利用四元數(shù)平均值算法[8]計算qmean:
(11)
式中:M是根據(jù)四元數(shù)Δqi和其對應(yīng)的權(quán)值wi構(gòu)造的四階矩陣,其最大特征值對應(yīng)的單位特征向量就是所求的加權(quán)平均值qmean。
Step4虛擬手碰撞檢測模型與被抓取三維模型發(fā)生干涉,此時旋轉(zhuǎn)矩陣ΔR可根據(jù)Kabsch算法[9]來計算:
(12)
Step5ΔQ的求解。如果此時抓取副G判斷有效,則由式(12)計算三維模型的旋轉(zhuǎn)矩陣。否則更新抓取副G后,重新計算ΔR與ΔT,再次求得ΔQ。
Step6三維模型位姿調(diào)整后的位姿矩陣為:
P(k+1)=P(k)ΔQ
為驗證本文方法的有效性,使用Unity3D構(gòu)建試驗環(huán)境進行實例驗證。使用Leap Motion控制虛擬手模型,使用HTC VIVE來查看三維場景。
與基于手勢識別建立不同抓取手勢相比,本文抓取方法不預(yù)定義抓取手勢,可以以比較自然的方式抓取三維模型。
圖9展示了使用所提方法對不同機械領(lǐng)域的三維模型進行抓取效果,表明所提方法可以自然抓取各種類型的機械零件三維模型。
圖9 抓取不同機械領(lǐng)域三維模型的方式
機械零件三維模型間的虛擬裝配,對距離與角度的閾值設(shè)定有很高的要求,閾值設(shè)置過高,會增加裝配約束誤識別的概率并且裝配約束識別時零件的位姿會突變,影響真實感。因此,為了評估本文抓取方法對零件操作的精確性,本文設(shè)計了一個操作誤差測量實驗,實驗場景如圖 10所示。
圖10 操作誤差測量實驗場景
每一次實驗中,在網(wǎng)格中區(qū)域內(nèi)隨機生成一個目標(biāo)塊B (圖 10中右側(cè)的矮方塊),要求操作者將一個物體A (圖10中左側(cè)的高方塊)移動到該目標(biāo)上,一旦完成此操作,則重新隨機更新該目標(biāo)位置,操作者繼續(xù)重復(fù)以上步驟,整個實驗過程如圖11所示。
圖11 操作實驗的過程
在圖11所示的測試過程中,設(shè)第i次目標(biāo)B的位置為TBi=(xBi,yBi,zBi),虛擬手將物體A放置到目標(biāo)位置B上時,位置為TAi(xAi,yAi,zAi),物體A繞Z軸的旋轉(zhuǎn)角度為αi。實驗的次數(shù)為n,記虛擬手抓取變換物體的位置誤差μ、角度誤差η為:
(13)
本文共記錄了150次實驗的操作誤差統(tǒng)計數(shù)據(jù),詳見表 1。
表1 操作誤差統(tǒng)計結(jié)果
圖12的數(shù)據(jù)表明誤差距離和誤差角度均呈正態(tài)分布的趨勢,且位置誤差小于10 mm的誤差概率為93.3%,角度誤差小于10°的概率為96%,表示所提方法可以對物體進行精確的操作變換。
圖12 操作實驗的結(jié)果
虛擬現(xiàn)實交互的實時性是體現(xiàn)系統(tǒng)性能、反映人機交互體驗感的一個重要指標(biāo)。為了驗證本文方法的物理計算的性能,在如下硬件條件下進行測試:CPU-4 GHz Intel Corei 7-4790K;RAM-16 GB;GPU- NVIDIA GTX 1050。分別對2節(jié)指骨和12節(jié)指骨的接觸計算效率進行測試,測試結(jié)果的物理幀速率分析如圖13所示。
圖13 物理計算的性能分析
測試結(jié)果為:渲染2節(jié)指骨只需 0.25 ms,渲染12節(jié)指骨只需0.69 ms。結(jié)果表明所提方法能夠在VR環(huán)境下實現(xiàn)虛擬手交互過程的三維實時渲染,其計算效率滿足VR環(huán)境下的性能要求。
針對目前基于Leap Motion的人機交互研究中存在的虛擬手與三維模型相互干涉、三維模型與虛擬手空間位姿同步率低的問題,提出一種基于Leap Motion的三維模型空間位姿自適應(yīng)調(diào)整方法,實現(xiàn)了對VR環(huán)境下三維模型抓取、推、抬等交互操作的精確模擬。與其他基于手勢的交互方法相比,本文方法在提升人機交互過程沉浸感方面具有較大優(yōu)勢,適用于機械零件的裝配過程仿真、裝配操作培訓(xùn)及虛擬產(chǎn)品維修,為實現(xiàn)在制造過程仿真領(lǐng)域的應(yīng)用奠定了基礎(chǔ)。