趙欣儀,胡延平
(大連理工大學(xué)機(jī)械工程學(xué)院,遼寧大連 116033)
隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,為實(shí)現(xiàn)更好的沉浸感和真實(shí)感,人機(jī)交互的數(shù)據(jù)輸入逐漸從鼠標(biāo)、鍵盤轉(zhuǎn)向了基于光學(xué)的體感設(shè)備。在與虛擬物體進(jìn)行交互時(shí),選擇高效合理的抓取規(guī)則及交互手勢(shì)是保證用戶使用感受的關(guān)鍵。
國(guó)內(nèi)外學(xué)者對(duì)虛擬手操作技術(shù)進(jìn)行了大量的研究。曾芬芳等[1]使用數(shù)據(jù)手套得到實(shí)時(shí)反饋數(shù)據(jù),并對(duì)虛擬環(huán)境下物體進(jìn)行抓取及釋放等操作。張?zhí)锾锏萚2-3]的研究針對(duì)不同形狀的物體設(shè)計(jì)不同的手勢(shì)操縱方式。李志華和鐘毅芳等[4]的研究主要是將手勢(shì)按層次建模并得到手部模型,定義合理的抓取規(guī)則完成交互。Iberall等[5]定義了用于組成復(fù)雜手勢(shì)的三種基本抓取手勢(shì),對(duì)其進(jìn)行組合從而得到合適的抓取方法。另一方面的操縱研究則從受力入手,劉杰等[6]提出了用力抓和精確抓兩種抓取方式,對(duì)不同形狀的物體采用不同的方法,提高抓取的準(zhǔn)確性。胡海鷹等[7]采用力學(xué)分析的方式,通過計(jì)算力矩平衡來(lái)判斷是否實(shí)現(xiàn)抓取。胡弘等[8]使用Leap Motion對(duì)手部的姿態(tài)進(jìn)行估計(jì),完成抓取。可以發(fā)現(xiàn)早期的研究多采用數(shù)據(jù)手套進(jìn)行數(shù)據(jù)采集和反饋,沉浸感和真實(shí)感較差,而一些應(yīng)用LeapMotion的抓取常出現(xiàn)誤抓以及穿透的現(xiàn)象。
為解決這些問題,本文采用光學(xué)體感設(shè)備Leap Motion采集雙手?jǐn)?shù)據(jù),設(shè)計(jì)基于碰撞包圍盒的手勢(shì)抓取規(guī)則和虛擬交互手勢(shì),對(duì)虛擬物體進(jìn)行選定并對(duì)其進(jìn)行移動(dòng)、旋轉(zhuǎn)等操作,最后在Unity3D 搭建的環(huán)境中驗(yàn)證本文的研究,結(jié)果表明:操作者在操縱物體時(shí)具有較高的沉浸感,可以高效準(zhǔn)確地完成設(shè)定操作,避免了手指穿透以及誤抓的現(xiàn)象。
人手是一個(gè)由8塊腕骨、5塊掌骨以及14塊指骨組成的多肢節(jié)系統(tǒng),各骨節(jié)具有移動(dòng)或者旋轉(zhuǎn)自由度并由關(guān)節(jié)連接。結(jié)合實(shí)際的人手操作,提取手掌坐標(biāo)、各個(gè)手指尖端的坐標(biāo)、手掌法向方向以及手指尖端的方向等數(shù)據(jù)[9]。
Leap Motion 是一種基于雙目立體視覺原理對(duì)人手進(jìn)行定位和信息采集的光學(xué)傳感器。當(dāng)進(jìn)行人機(jī)交互時(shí),首先采用攝像頭采集人手的數(shù)據(jù)信息,在虛擬環(huán)境中得到手模型,最終操縱物體在較短響應(yīng)時(shí)間內(nèi)完成高精度的操作[10]。
Leap Motion內(nèi)部封裝了大量的API,通過調(diào)用即可獲取相關(guān)數(shù)據(jù)[11]。但在一些簡(jiǎn)單函數(shù)的調(diào)用無(wú)法保證虛擬環(huán)境下物體操縱的精確度和真實(shí)感,本文提供了基于碰撞檢測(cè)的抓取判定規(guī)則以及虛擬操縱手勢(shì),實(shí)現(xiàn)交互。使用時(shí)需要的手部數(shù)據(jù)如表1所示。
表1 Leap Motion捕捉的手部數(shù)據(jù)
有限狀態(tài)機(jī),又可以叫做有限狀態(tài)自動(dòng)機(jī),是用于表示有限個(gè)狀態(tài)以及狀態(tài)間的轉(zhuǎn)換和動(dòng)作的數(shù)學(xué)模型。本文采用這種方法使手勢(shì)抓取過程中的多種狀態(tài)間的轉(zhuǎn)換關(guān)系變得更加易讀。分析發(fā)現(xiàn),虛擬手和物體間的交互主要分為4個(gè)不同的狀態(tài),各個(gè)狀態(tài)構(gòu)成的有限狀態(tài)機(jī)如圖1所示。各狀態(tài)的特點(diǎn)如下,對(duì)應(yīng)的示意圖如圖2所示。
圖1 虛擬手抓取有限狀態(tài)機(jī)
圖2 虛擬手抓取過程
(1)RELEASED
當(dāng)處于RELEASED 階段時(shí),虛擬手和任意一個(gè)物體都沒有發(fā)生碰撞。
(2)GRABBING
當(dāng)處于GRABBING 階段時(shí),虛擬手和某個(gè)物體發(fā)生了接觸碰撞,但是這種手勢(shì)交互并未滿足抓取規(guī)則。如果想要和物體進(jìn)行抓取交互,則需要不斷地調(diào)整手勢(shì),直到滿足抓取規(guī)則。
(3)GRABBED
當(dāng)處于GRABBED 狀態(tài)時(shí),虛擬手已經(jīng)對(duì)物體實(shí)現(xiàn)了抓取,物體被選定為待操作對(duì)象,此時(shí)操作另一只手并進(jìn)行手勢(shì)識(shí)別,實(shí)現(xiàn)對(duì)物體的操縱。
(4)RELEASING
當(dāng)處于RELEASING階段時(shí),虛擬手處于即將釋放物體的階段。改變虛擬手姿態(tài),使其不再滿足抓取規(guī)則,物體即解除被選定的狀態(tài),受到重力回落到桌面上,虛擬手回到RELEASED狀態(tài)。
Leap Motion 內(nèi)部封裝的抓取規(guī)則規(guī)定當(dāng)虛擬手和物體間的距離小于設(shè)定的閾值時(shí),虛擬手就實(shí)現(xiàn)對(duì)物體的抓取[12]。但是這種規(guī)則極易產(chǎn)生手指穿透以及誤抓的情況,并且不符合現(xiàn)實(shí)生活中的抓取習(xí)慣。因此,為保證抓取過程的沉浸感和抓取結(jié)果的準(zhǔn)確性,采用一種基于物體表面包圍盒碰撞檢測(cè)的抓取規(guī)則,定義如下。
規(guī)則一:虛擬手和虛擬物體包圍盒有3個(gè)或3個(gè)以上的接觸點(diǎn),并且其中至少有3個(gè)點(diǎn)不在同一個(gè)平面內(nèi);
規(guī)則二:連接接觸點(diǎn)和物體包圍盒中心得到3 個(gè)向量(以3個(gè)接觸點(diǎn)為例),求得3個(gè)向量的兩兩夾角,這些夾角中至少有一個(gè)大于角度閾值(本文設(shè)定為90h)。
如圖3所示,以3個(gè)接觸點(diǎn)的抓取手勢(shì)為例,虛擬手和物體包圍盒接觸的3 點(diǎn)分別位于兩個(gè)平面上,滿足規(guī)則一。在滿足規(guī)則一的基礎(chǔ)上,判定是否符合規(guī)則二。物體中心到接觸點(diǎn)確定的矢量分別為 N1,N2和 N3,其中 N1和N3間的夾角θ13的值大于90h,滿足規(guī)則二,抓取動(dòng)作符合抓取規(guī)則實(shí)現(xiàn)抓取,同時(shí)也符合實(shí)際生活中的抓取習(xí)慣。
采用這種抓取規(guī)則有以下優(yōu)點(diǎn)。
(1)較高的魯棒性。此規(guī)則可應(yīng)用于不同形狀的物體,并且可以根據(jù)不同的表面摩擦因數(shù),調(diào)整抓取條件的閾值,具有較高的魯棒性。
(2)抓取的真實(shí)感。規(guī)則符合真實(shí)世界中的抓取操作習(xí)慣,抓取過程中實(shí)時(shí)檢測(cè)手指與包圍盒碰撞情況,避免了手指和物體間的穿透現(xiàn)象。
(3)較高的抓取效率。在操作時(shí),涉及大量抓取和抓取釋放的判斷,會(huì)增加操作的時(shí)間成本。本文的判定規(guī)則分為兩步,如果不符合規(guī)則一則不會(huì)對(duì)規(guī)則二進(jìn)行判斷,大大減少了計(jì)算時(shí)間。
圖3 虛擬手抓取示例
通過上一節(jié)中的研究可知,使用左手進(jìn)行抓取時(shí),采用規(guī)則判定可以選定待操作的物體。選定后就可以通過右手手勢(shì)識(shí)別控制物體的移動(dòng)、旋轉(zhuǎn)以及縮放等交互動(dòng)作。在操作時(shí),需要實(shí)時(shí)傳遞真實(shí)人手的數(shù)據(jù),并進(jìn)行判斷。本文中設(shè)計(jì)了左右手不同的手勢(shì)判斷條件,驅(qū)動(dòng)虛擬手進(jìn)行相應(yīng)動(dòng)作。結(jié)合設(shè)計(jì)要求定義了幾個(gè)常用動(dòng)作,整理如下。
(1)抓取手勢(shì)——物體選擇
通過基于HandController的碰撞檢測(cè)以及抓取判斷選定待操縱物體。當(dāng)選定操作對(duì)象后,通過左右手進(jìn)行操作,直至改變抓取手勢(shì),取消對(duì)物體的選定。
(2)手勢(shì)判斷——手部位置
當(dāng)左手和物體保持抓取狀態(tài)時(shí),可以使用左手改變物體的空間位置。當(dāng)手上下平移時(shí),物體Y 軸坐標(biāo)值改變。左右平移時(shí),Z 軸坐標(biāo)值改變。當(dāng)手前后移動(dòng)時(shí),X 向坐標(biāo)值改變,通過坐標(biāo)值的改變,實(shí)現(xiàn)物體移動(dòng)。
(3)手勢(shì)判斷——旋轉(zhuǎn)手勢(shì)
Leap Motion 傳感器可以得到手部的空間位置信息,構(gòu)造函數(shù)判斷右手的移動(dòng)方向,通過移動(dòng)方向控制物體繞自身中心軸旋轉(zhuǎn)的操作,手勢(shì)以及旋轉(zhuǎn)的對(duì)應(yīng)關(guān)系如表2所示。
表2 手勢(shì)與旋轉(zhuǎn)的對(duì)應(yīng)關(guān)系
以x軸正向的移動(dòng)為例,判斷手勢(shì)移動(dòng)的條件如下:
hand.PalmVelocity.x >deltaVelocity&&
hand.PalmVelocity.Magnitude>smallestVelocity 式 中 , deltaVelocity為手掌在x 方向上的移動(dòng)速度閾值,smallVelocity為各方向速度平方和閾值。
(4)手勢(shì)判斷——物體縮小
虛擬環(huán)境下的物體有時(shí)需要進(jìn)行縮放操作,本文設(shè)計(jì)通過右手握拳和手掌張開的動(dòng)作來(lái)分別控制已選定物體的縮小和放大。握拳手勢(shì)判定過程如下:遍歷各個(gè)手指指尖的坐標(biāo)位置finger.TipPosition,并計(jì)算各手指到掌心坐標(biāo)hand.position的距離,比較此距離和閾值的大小。當(dāng)小于閾值delta的手指數(shù)為5時(shí),判定手勢(shì)為握拳。判定代碼如下:
(finger.TipPosition-hand.PalmPosition).
Magnitude<delta
其中,delta為指尖到手掌中心距離的閾值。
(5)手勢(shì)判斷——物體放大
手掌是否張開則通過Leap Motion的參數(shù)GrabStrength來(lái)判斷,GrabStrength 為0 時(shí)表示手掌張開,此時(shí)物體會(huì)被放大。判定代碼如下:
hand.GrabStrength==0
基于上述的研究?jī)?nèi)容,設(shè)計(jì)了虛擬環(huán)境下虛擬手操作實(shí)驗(yàn)。實(shí)驗(yàn)以Leap Motion 體感控制器為輸入設(shè)備,Unity2018.2.7f1作為軟件開發(fā)工具,搭建軟件硬件平臺(tái)。Unity內(nèi)部腳本采用VisualStudio2015作為集成開發(fā)環(huán)境,以C#語(yǔ)言進(jìn)行編寫。
在虛擬環(huán)境下導(dǎo)入建立好的物體模型,驗(yàn)證研究的可行。首先采用不同的抓取手勢(shì),驗(yàn)證抓取規(guī)則的準(zhǔn)確性和魯棒性。導(dǎo)入虛擬物體后搭建好的虛擬環(huán)境如圖4所示。
圖4 虛擬場(chǎng)景示意圖
圖5 物體抓取操縱
圖5 所示為采用本文抓取規(guī)則后虛擬手的抓取示意圖。當(dāng)抓取手勢(shì)滿足制定的兩個(gè)規(guī)則時(shí),即判定左手抓取物體,同時(shí)將被抓取對(duì)象作為操作對(duì)象,對(duì)其進(jìn)行后續(xù)的操作。在此過程中,物體和虛擬手不會(huì)發(fā)生干涉的情況,實(shí)現(xiàn)了真實(shí)且良好的交互。
圖6 所示為抓取后物體隨左手移動(dòng)操作的演示圖。抓取并選定后,通過左手的移動(dòng)實(shí)現(xiàn)虛擬物體的位置變化。
圖6 物體隨動(dòng)操作
圖7 所示為使用右手對(duì)虛擬環(huán)境中物體進(jìn)行旋轉(zhuǎn)操作的示意圖,這里以立方塊物體繞x軸的操作為例。通過右手的位置變換,操縱物體的旋轉(zhuǎn)。左手抓取物體后,右手在x軸方向上產(chǎn)生位移變化,物體會(huì)相應(yīng)地繞x軸進(jìn)行旋轉(zhuǎn)。
圖7 物體旋轉(zhuǎn)操作
圖8 所示為物體縮放示意圖。當(dāng)右手握拳時(shí),左手中物體會(huì)縮小,雖然此時(shí)物體與虛擬手已經(jīng)脫離,但是腳本保證在抓取并選定物體后,如果左手手勢(shì)未變化,則保持GRABBED狀態(tài)不變。同理,當(dāng)右手五指張開伸展時(shí),物體會(huì)相應(yīng)放大。
圖8 物體縮放操作
本文通過分析虛擬環(huán)境下的虛擬手操縱需求,使用Leap Motion 傳輸徒手?jǐn)?shù)據(jù),設(shè)計(jì)抓取規(guī)則以及交互手勢(shì),在Unity3D 搭建的虛擬環(huán)境下進(jìn)行左右手操作,實(shí)現(xiàn)對(duì)物體模型的抓取、操縱以及釋放。
實(shí)驗(yàn)結(jié)果表明,采用的設(shè)計(jì)規(guī)則和手勢(shì)可以有效地避免手指穿透現(xiàn)象,大大地降低了誤抓的可能,具有較高的操作沉浸感和真實(shí)感。同時(shí),設(shè)計(jì)的抓取規(guī)則可以適用于各種形狀的物體,提高了操作的魯棒性,為基于Leap Motion 的人機(jī)交互技術(shù)提供了更多參考。