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