包文運 胡建垠 黃培德 盛步云 宋 寅
1(大唐環境產業集團股份有限公司特許經營分公司 江蘇 南京 210000) 2(武漢理工大學 湖北 武漢 430070) 3(襄陽五二五泵業有限公司 湖北 襄陽 441004)
虛擬現實(Virtual Reality, VR)作為計算機圖形學(Computer Graphics, CG)中最為火熱的研究領域,目前廣泛應用于交互式仿真培訓,尤其是在高危險、高技術含量的工程領域,為專業技術人員的實際上崗操作提供逼真的沉浸式虛擬現實環境下的教學培訓(如高精密機械設備裝配、高壓電力裝備維修等)。該領域的核心為研究虛擬手與三維模型的自然交互技術,即通過相關體驗設備采集手部實時數據,并將其映射到VR環境中所創建的虛擬手模型,使虛擬手位姿與其所交互的三維模型位姿實現實時精確同步,且交互過程須滿足基本物理學原理,增強人機交互過程的沉浸感與真實感。目前,針對虛擬手與三維模型的自然交互技術研究大致可分為兩類:基于物理學原理的交互方法和基于啟發式的交互方法。
基于物理學原理的交互方法的核心思想是基于牛頓動力學的基本定律,以抓取對象是否受力平衡和虛擬手的手指接觸面的摩擦來判斷能否抓取,其實現原理是利用庫倫摩擦力模型分析物體的受力狀態。文獻[1]通過引入代理手來提供正確的視覺反饋,還用于對虛擬手和三維模型之間的動態交互過程進行仿真。但是該方法的計算復雜度較高,導致系統運行幀率較低。文獻[2]研究了一種基于庫侖摩擦模型的虛擬手交互方法。該方法模擬許多類型的動作,如推、拉、抓等操作,而不受物體形狀或手姿勢的限制。但是該方法所采用的庫倫模型僅為一種簡單的摩擦模型,其仿真效果不夠逼真,無法模擬較為復雜的實際工程場景。綜上所述,基于物理學原理的交互方法普遍存在庫倫摩擦力在虛擬環境下持續性較差、缺乏力反饋等問題,而在虛擬環境下進行物理學原理計算,其計算復雜度較高,導致系統運行幀率下降,降低了用戶實際交互體驗感。
基于啟發式的交互方法,根據被抓取物體的幾何形狀,對抓取手勢進行預定義,并分別制定相應的交互規則,通過判斷是否滿足特定驗證條件來實現交互過程。文獻[3]利用物體形狀特征和手指抓握的接觸關系制定抓取規則,實現適應物體形狀的啟發式抓取。但是該方法容易導致虛擬手與三維模型產生較為嚴重的干涉。文獻[4]研究了一種虛擬抓握彈簧模型,通過對手指運動進行啟發式分析和瞬態增量運動隱喻識別,用于解決虛擬手抓取或釋放三維模型時的粘接問題。綜上,基于啟發式的交互方法雖然具備計算復雜度較低的優勢,但是該類方法需要對交互規則進行預定義,導致須針對特定實際工程情形進行分析的問題,普適性較差。同時,該類方法還存在容易產生干涉、人機交互不自然等問題。
鑒于此,本文研究了一種VR環境下基于Leap Motion的三維模型空間位姿自適應調整方法,用于改善目前虛擬手與三維模型的自然交互技術所存在的上述問題,其主要研究內容包括:(1) 提出一種虛擬手交互過程防干涉方法,分別構建了虛擬手幾何模型與運動模,并建立虛擬手碰撞檢測模型和三維模型碰撞檢測模型,通過計算虛擬手與三維模型之間接觸點以避免干涉現象;(2) 提出一種三維模型形狀自適應的虛擬手自然交互方法,定義抓取副作為穩定抓取的先決條件,并根據抓取的接觸點集,求解虛擬手變換零件的位姿矩陣,實現對三維模型空間位姿隨虛擬手空間位姿信息的實時自適應調整。
為研究三維模型空間位姿自適應調整方法,需要分析所提出方法的總體流程,如圖 1所示。首先,對虛擬手與待抓取三維模型構建碰撞檢測模型,在保障仿真可視化效果的前提下,為精確計算虛擬手與三維模型的接觸點奠定基礎。其次,在抓取交互過程中實時進行干涉檢查,并計算接觸點,實時判斷該幀是否滿足穩定抓取條件。若不滿足,則在下一幀繼續執行干涉檢查;若滿足,則計算該幀被抓取三維模型的平移矩陣遞增量與旋轉矩陣遞增量,并合成位姿矩陣遞增量,實時更新三維模型的位姿矩陣,達到空間位姿自適應調整的目的。

圖1 三維模型空間位姿自適應調整方法總體流程
Leap Motion是一款由Leap公司研發的用于識別手部幾何數據的體感控制器,其基于雙目視覺技術采集手部數據,并在虛擬三維空間中構建虛擬手,采集精度可達到百分之一毫米[5]。
本研究中,基于Leap Motion所采集手部骨骼與關節數據,在Unity3D環境中構建虛擬手三維模型。當虛擬手接觸三維模型后,降低其透明度,以此作為虛擬手交互的視覺反饋。如圖2所示分別為虛擬手三角網格模型,以及采用半透明紋理渲染的虛擬手效果。

圖2 基于Leap Motion所構建虛擬手三維模型效果
為精確計算虛擬手與三維模型碰撞接觸時的接觸點信息,以實現虛擬手與三維模型之間的空間位姿同步,需要分別對虛擬手與三維模型構建相應的碰撞檢測模型。
1.2.1虛擬手碰撞檢測模型
為避免虛擬手與三維模型出現干涉,確保接觸與抓取的視覺真實感,構建復合虛擬手碰撞檢測模型,包括虛擬手輪廓模型和虛擬手剛體模型。虛擬手輪廓模型即為能夠真實反映手部輪廓特征的三角網格模型;虛擬手剛體模型由表征每根手指指骨與關節的三個膠囊體,以及表征手掌的長方體共同組成,用于檢測虛擬手與虛擬物體之間的碰撞。根據虛擬手與三維模型之間的交互情形,分為兩類情況討論。
(1) 當虛擬手與被抓取三維模型無任何接觸時,輪廓模型與剛體模型重合,由Leap Motion所采集手部數據驅動其自由運動,輪廓模型呈半透明狀態,如圖 3 (a)所示。(2) 當虛擬手與被抓取三維模型存在接觸時,輪廓模型與被抓取三維模型位姿保持同步,且呈不透明狀態,而剛體模型繼續由Leap Motion所采集手部數據驅動,實時更新位姿信息,如圖 3 (b)所示。當剛體模型中表征手指的膠囊體脫離被抓取三維模型時,表示該手指輪廓的部分實體模型也會隨之脫離被抓取三維模型,如圖 3 (c)所示。

圖3 復合虛擬手碰撞檢測模型
1.2.2三維模型碰撞檢測模型
為了方便計算虛擬手和被抓取三維模型的碰撞接觸點,并且使得所構建三維模型碰撞檢測模型的輪廓接近其實際輪廓,尤其針對具備凹區域的三維模型,采用層級近似凸分解技術(HACD)對被抓取三維模型進行凸分解,進而對所分解凸塊建立有向包圍盒(OBB),實現碰撞檢測模型的構建工作。設OBB包圍的凸塊為s,第i個三角面片的三個頂點矢量分別為pi、qi、ri,s中共含n塊三角面片,則OBB的幾何中心空間位置u可表示為[6]:
(1)
構建協方差矩陣[6],其元素Cjk計算為:
1≤j,k≤3
(2)


圖4 被抓取三維模型碰撞檢測模型構建效果
1.3.1接觸點計算
如圖5所示,為了防止操作過程中虛擬手與被抓取三維模型產生干涉,本文采用Unity3D內置的基于包圍盒的碰撞檢測方法來計算虛擬手與被抓取三維模型接觸點。

圖5 虛擬手與被抓取三維模型接觸點估計效果
其具體步驟如下:
Step1定義接觸偏移量λ,其值較小,作為在虛擬手碰撞三維模型之前觸發碰撞事件的閾值,并且同時作為被抓取三維模型實際包圍盒的外偏移邊界,圖5(a)所示虛線范圍為由λ定義的被抓取三維模型實際包圍盒。
Step2由Unity3D實時監控虛擬手是否與被抓取三維模型實際包圍盒發生碰撞,并檢測其碰撞點pi,圖5(a)所示手指與虛線框的接觸點即為pi。
Step3自pi出發,沿pi法向量的反方向發射射線Rayi,其與被抓取三維模型實際包圍盒相交于點ci,將ci作為精確的接觸點,并依據其坐標值計算被抓取三維模型的空間位姿信息。
如圖5(b)所示為接觸點計算的實際可視化效果,其中λ=3 mm,共計算出虛擬手與待抓取三維模型的14個接觸點,其中射線表示接觸點的法線方向。
1.3.2基于接觸點的干涉檢查
鑒于在Unity3D所構建三維場景中,用戶實際手與虛擬手呈現單向耦合關系,即實際手數據單向驅動虛擬手位姿,進而容易導致虛擬手與被抓取三維模型產生干涉現象,嚴重影響人機交互過程的真實感與沉浸感。因此,本文將1.2.1節所構建虛擬手碰撞檢測模型中的剛體模型完全基于Leap Motion所采集實際手數據驅動,而當虛擬手與被抓取三維模型發生碰撞時,使輪廓模型與被抓取三維模型保持碰撞瞬間的位姿同步,其具體流程詳見圖6。

圖6 基于接觸點的干涉檢查流程
當檢測到虛擬手指骨與三維模型發生碰撞時,以延遲時間t剔除驅動虛擬手與被抓取三維模型表面接觸對應的手指,并使虛擬手輪廓模型從半透明變成不透明,從視覺上避免干涉現象。否則,虛擬手位姿繼續由Leap Motion所采集數據驅動實時更新。t的計算為:
t=spc/vh
(3)
式中:vh表示碰撞點pi的瞬時速率;spc為碰撞點pi與其所對應接觸點ci的歐氏距離。
結合基于啟發式和基于物理抓取兩種方法的優缺點,并參考文獻[7],本文定義抓取副為三維模型是否被穩定抓取的判斷條件。
定義1 抓取副假設虛擬手與被抓取三維模型的任意兩個接觸點為ci、cj,則這兩個接觸點構成一個穩定的抓取副g(ci,cj),其應滿足:
(4)
式中:Vji為接觸點ci到cj的向量;ni為接觸點ci處的法向量;∠(ni,Vji)為向量ni與向量Vji之間的夾角;α為摩擦錐角度。圖7展示了三個接觸點c1、c2、c3形成兩個穩定抓取副g(c1,c2)與g(c1,c3)的情況。

圖7 穩定抓取副形成示意圖
三維模型被抓取時的位姿信息可以通過求解虛擬手變換零件的位姿矩陣P得到:
(5)
為了表示任意時刻三維模型的位姿信息,則當抓取條件判斷成功時,假設第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幀的旋轉矩陣,ΔQ為第k幀到第k+1幀抓取副點集的位姿矩陣變化量,可表示為:

(7)
由式(6)可知當虛擬手抓取三維模型時,求解ΔQ的值即可得到任意時刻三維模型的位姿矩陣,其中ΔQ由平移矩陣ΔT和旋轉矩陣ΔR決定。
對于ΔQ的求解存在兩種情況:一是虛擬手碰撞檢測模型與被抓取三維模型表面接觸;二是虛擬手碰撞檢測模型與被抓取三維模型發生干涉。如圖8所示。
(1) 虛擬手碰撞檢測模型停留在三維模型表面。虛擬手碰撞檢測模型在三維模型表面,和現實中抓取操作物體變換的接觸點一致,因此可根據接觸點的坐標信息計算位姿矩陣。
(2) 虛擬手碰撞檢測模型與三維模型發生干涉。人手與虛擬手的映射是單向耦合關系,在抓取移動過程中,由于人手實際上沒有抓著一個物體,人手可能會無意識的伸屈手指,虛擬手碰撞檢測模型隨即會與三維模型發生干涉。隨著干涉程度的加深,操作變換的精度也會越低,考慮這種情況是為了增加系統的容錯性。
引進ΔQ的求解存在兩種情況,則抓取變換零件的位姿矩陣求解步驟如下:
Step1平移矩陣ΔT求解。虛擬手在對零件平移和旋轉時,獲取抓取副G后,位移矩陣ΔT的求解為:
(8)
式中:Δm表示抓取副點集中心m的位移量;Δt為第k幀到第k+1幀的時間差。
Step2如果虛擬手碰撞檢測模停留在被抓取三維模型,則跳轉至Step3。如果虛擬手碰撞檢測模穿透到虛擬物體內,則跳轉Step4。
Step3虛擬手碰撞檢測模停留在三維模型表面時,旋轉矩陣ΔR的求解步驟為,先計算抓取副點集旋轉變化的四元數Δq,最后在將Δq換算為旋轉矩陣ΔR。而Δq的計算與抓取副G成對數量有關,可分為n=1和n>1兩種情況。
(1) 當n=1時,即零件上只有一對抓取副,Δq等于抓取副gi包含點pi、pj組成的線段Lij的姿態變化Δqi。此時Δq表示為:
Δq=ΔqiΔqi=qi(k)-1qi(k+1)
(9)
式中:qi(k)為第k幀時線段Lij的四元數;qi(k+1)為第幀時線段Lij的四元數。
此外,當線段Lij圍繞自身旋轉時,式(9)中的Δqi將不會產生任何變化,導致被抓取三維模型旋轉信息不變。此時Δq等于線段Lij繞自身旋轉的四元數Δqi’。
(2) 當n>1時,Δq由所有抓取副gi組成線段Lij的姿態變化Δqi共同決定,且每對抓取副gi對Δq的貢獻存在差異。為每對抓取副gi定義一個權重系數wi:
(10)
式中:Δq等于每對抓取副gi組成線段Lij的姿態變化Δqi在權重wi下的四元數的平均值qmean。利用四元數平均值算法[8]計算qmean:
(11)
式中:M是根據四元數Δqi和其對應的權值wi構造的四階矩陣,其最大特征值對應的單位特征向量就是所求的加權平均值qmean。
Step4虛擬手碰撞檢測模型與被抓取三維模型發生干涉,此時旋轉矩陣ΔR可根據Kabsch算法[9]來計算:
(12)
Step5ΔQ的求解。如果此時抓取副G判斷有效,則由式(12)計算三維模型的旋轉矩陣。否則更新抓取副G后,重新計算ΔR與ΔT,再次求得ΔQ。
Step6三維模型位姿調整后的位姿矩陣為:
P(k+1)=P(k)ΔQ
為驗證本文方法的有效性,使用Unity3D構建試驗環境進行實例驗證。使用Leap Motion控制虛擬手模型,使用HTC VIVE來查看三維場景。
與基于手勢識別建立不同抓取手勢相比,本文抓取方法不預定義抓取手勢,可以以比較自然的方式抓取三維模型。
圖9展示了使用所提方法對不同機械領域的三維模型進行抓取效果,表明所提方法可以自然抓取各種類型的機械零件三維模型。

圖9 抓取不同機械領域三維模型的方式
機械零件三維模型間的虛擬裝配,對距離與角度的閾值設定有很高的要求,閾值設置過高,會增加裝配約束誤識別的概率并且裝配約束識別時零件的位姿會突變,影響真實感。因此,為了評估本文抓取方法對零件操作的精確性,本文設計了一個操作誤差測量實驗,實驗場景如圖 10所示。

圖10 操作誤差測量實驗場景
每一次實驗中,在網格中區域內隨機生成一個目標塊B (圖 10中右側的矮方塊),要求操作者將一個物體A (圖10中左側的高方塊)移動到該目標上,一旦完成此操作,則重新隨機更新該目標位置,操作者繼續重復以上步驟,整個實驗過程如圖11所示。

圖11 操作實驗的過程
在圖11所示的測試過程中,設第i次目標B的位置為TBi=(xBi,yBi,zBi),虛擬手將物體A放置到目標位置B上時,位置為TAi(xAi,yAi,zAi),物體A繞Z軸的旋轉角度為αi。實驗的次數為n,記虛擬手抓取變換物體的位置誤差μ、角度誤差η為:
(13)
本文共記錄了150次實驗的操作誤差統計數據,詳見表 1。

表1 操作誤差統計結果
圖12的數據表明誤差距離和誤差角度均呈正態分布的趨勢,且位置誤差小于10 mm的誤差概率為93.3%,角度誤差小于10°的概率為96%,表示所提方法可以對物體進行精確的操作變換。

圖12 操作實驗的結果
虛擬現實交互的實時性是體現系統性能、反映人機交互體驗感的一個重要指標。為了驗證本文方法的物理計算的性能,在如下硬件條件下進行測試:CPU-4 GHz Intel Corei 7-4790K;RAM-16 GB;GPU- NVIDIA GTX 1050。分別對2節指骨和12節指骨的接觸計算效率進行測試,測試結果的物理幀速率分析如圖13所示。

圖13 物理計算的性能分析
測試結果為:渲染2節指骨只需 0.25 ms,渲染12節指骨只需0.69 ms。結果表明所提方法能夠在VR環境下實現虛擬手交互過程的三維實時渲染,其計算效率滿足VR環境下的性能要求。
針對目前基于Leap Motion的人機交互研究中存在的虛擬手與三維模型相互干涉、三維模型與虛擬手空間位姿同步率低的問題,提出一種基于Leap Motion的三維模型空間位姿自適應調整方法,實現了對VR環境下三維模型抓取、推、抬等交互操作的精確模擬。與其他基于手勢的交互方法相比,本文方法在提升人機交互過程沉浸感方面具有較大優勢,適用于機械零件的裝配過程仿真、裝配操作培訓及虛擬產品維修,為實現在制造過程仿真領域的應用奠定了基礎。