張玉軍,孟曉軍,王 剛
(1.解放軍69079部隊(duì),新疆烏魯木齊 830013;2.解放軍69240部隊(duì),新疆烏魯木齊 830011)
?
基于手勢(shì)交互的三維電子沙盤系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
張玉軍1,孟曉軍1,王剛2
(1.解放軍69079部隊(duì),新疆烏魯木齊830013;2.解放軍69240部隊(duì),新疆烏魯木齊830011)
摘要:基于手勢(shì)的人機(jī)交互方式可大大提高人對(duì)計(jì)算機(jī)系統(tǒng)的控制能力,實(shí)現(xiàn)人機(jī)自然融合。首先,簡要分析了Leap Motion設(shè)備進(jìn)行手勢(shì)識(shí)別的特點(diǎn),詳細(xì)闡述了利用Unity3D構(gòu)建三維電子沙盤的方法和流程,在此基礎(chǔ)上提出了基于手勢(shì)交互的三維電子沙盤系統(tǒng)集成技術(shù)框架;然后,設(shè)計(jì)了基于Leap Motion的手勢(shì)識(shí)別方案和控制腳本的基本流程,最后搭建系統(tǒng)實(shí)例并進(jìn)行測(cè)試。測(cè)試結(jié)果表明,通過Leap Motion可實(shí)現(xiàn)人手對(duì)沙盤系統(tǒng)的預(yù)定操作,為這種新型手勢(shì)識(shí)別技術(shù)的應(yīng)用提供了一定借鑒。
關(guān)鍵詞:Leap Motion;手勢(shì)控制;Unity3D;虛擬現(xiàn)實(shí);電子沙盤
三維電子沙盤是利用虛擬現(xiàn)實(shí)、地理信息等技術(shù)構(gòu)建的三維地理信息系統(tǒng),具有真實(shí)、立體、快速、簡便、精確、動(dòng)態(tài)等特點(diǎn),在城市規(guī)劃、特種作戰(zhàn)、反恐處突、消防搶險(xiǎn)等任務(wù)的指揮決策中,具有很高的應(yīng)用價(jià)值。目前,這種系統(tǒng)多以鼠標(biāo)、鍵盤或觸摸屏等方式進(jìn)行交互。隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,用戶可通過手勢(shì)直接與計(jì)算機(jī)系統(tǒng)進(jìn)行交互。這種手勢(shì)交互的方式與觸摸屏不同,它不需要直接接觸設(shè)備,應(yīng)用范圍更加廣泛,無論是個(gè)人PC、投影,還是電視墻,都可以直接通過手勢(shì)控制。
手勢(shì)是人手或者手和手臂結(jié)合所產(chǎn)生的各種姿勢(shì)和動(dòng)作,對(duì)手勢(shì)進(jìn)行檢測(cè)與識(shí)別是手勢(shì)交互能否實(shí)際應(yīng)用的關(guān)鍵技術(shù)[1]。近年來,隨著計(jì)算機(jī)軟、硬件技術(shù)的發(fā)展,虛擬現(xiàn)實(shí)產(chǎn)業(yè)界推出了Kinect、Leap Motion 等幾款手部信息捕獲設(shè)備,這幾款產(chǎn)品成本低廉,非常適合作為普通虛擬現(xiàn)實(shí)系統(tǒng)應(yīng)用中的人機(jī)交互設(shè)備。其中,Kinect主要追蹤的是中遠(yuǎn)距(0.5m~4m)的全身運(yùn)動(dòng),對(duì)于手部的動(dòng)作,細(xì)節(jié)信息不夠,需要手臂配合表達(dá)[2]。Leap Motion是一個(gè)檢測(cè)手勢(shì)運(yùn)動(dòng)的傳感器,可識(shí)別每根手指的位置、姿態(tài)、速度等參數(shù),動(dòng)作跟蹤精度達(dá)0.01mm,體積小、成本低、擴(kuò)展性強(qiáng),可用于專業(yè)的手勢(shì)交互系統(tǒng)。
本文利用Leap Motion在小范圍內(nèi)精確的手勢(shì)識(shí)別能力,構(gòu)建基于手勢(shì)交互的三維電子沙盤,探索這種新技術(shù)的應(yīng)用方式。
1系統(tǒng)開發(fā)技術(shù)方案
1.1Leap Motion手勢(shì)識(shí)別特點(diǎn)分析
Leap Motion采用紅外成像原理,通過內(nèi)置的兩個(gè)攝像頭捕捉傳感器上方25mm~600mm之間,大致呈倒立金字塔范圍內(nèi)的信息,它舍棄傳統(tǒng)傳感器單獨(dú)處理每一個(gè)像素的方式,而是一次性采集所有的像素, 對(duì)這些像素進(jìn)行后續(xù)處理,通過大量數(shù)據(jù)計(jì)算和檢測(cè)基礎(chǔ)實(shí)現(xiàn)對(duì)設(shè)備功能的穩(wěn)定控制[1]。Leap Motion采用右手笛卡爾坐標(biāo)系,原點(diǎn)坐標(biāo)在Leap Motion控制器的中心,X軸和Z軸在設(shè)備的水平面,X軸和設(shè)備的長邊平行,指向屏幕右方,Y軸垂直向上,只有正半軸[3]。如圖1所示。
圖1 Leap Motion的右手坐標(biāo)系
在使用過程中,Leap Motion控制器會(huì)以大約115fps的幀速度發(fā)送關(guān)于手的運(yùn)動(dòng)信息,每一幀包含的主要信息有:手掌對(duì)象列表及信息;手指對(duì)象列表及信息;手持工具對(duì)象列表及信息;指點(diǎn)對(duì)象列表及信息。
對(duì)于每只手,可以檢測(cè)到如下信息:手掌的中心位置、移動(dòng)速度、姿態(tài)變化;手掌的法向量、指向方向;手掌彎曲形成的虛擬球體;左右手判定、手掌伸展度、拇指與其它四指捏取力度。如圖2、3所示。
圖2 手掌法向量
圖3 手掌彎曲形成的虛擬球
對(duì)于每只手指,可以檢測(cè)到如下信息:手指的中心位置、移動(dòng)速度、姿態(tài)變化;指尖的位置以及速度;手指類型判定;手指伸展判定。
此外,Leap Motion預(yù)置了4種手勢(shì)判定類型:手指畫圈(CIRCLE)、手指下敲(KEY-TAP)、手指前敲(SCREEN-TAP)、手掌刷掃(SWIPE)。
Leap Motion會(huì)給每一幀及這些對(duì)象分配一個(gè)唯一的標(biāo)識(shí)ID,ID在持續(xù)跟蹤時(shí)段內(nèi)保持不變。根據(jù)這些ID,用戶可以查詢特定幀內(nèi)特定對(duì)象的運(yùn)動(dòng)信息,而后進(jìn)行手勢(shì)的識(shí)別[4]。
1.2基于Unity3D的三維電子沙盤構(gòu)建
三維電子沙盤主要包括地形、地貌、植被、氣象、建筑、裝備等模型數(shù)據(jù),若利用程序設(shè)計(jì)語言(如OpenGL)從基本的代碼編程實(shí)現(xiàn),不僅開發(fā)難度大,而且開發(fā)效率低。應(yīng)用商業(yè)三維建模軟件可有效提高開發(fā)效率,如SolidWorks、Terra Vista、Vega Prime、Skyline、Unity3D等。考慮到系統(tǒng)開發(fā)的高效、靈活性和跨平臺(tái)的需要,選中Unity3D虛擬現(xiàn)實(shí)引擎作為支撐平臺(tái),開發(fā)的系統(tǒng)可發(fā)布于Windows、Web、Andriod、IOS等多種平臺(tái)[5]。
基于Unity3D創(chuàng)建三維電子沙盤的主要工作和流程包括:數(shù)據(jù)收集與處理、地形建模、實(shí)體建模、場(chǎng)景集成與優(yōu)化等,如圖4所示。
圖4 基于Unity3D的三維電子沙盤構(gòu)建流程
1)數(shù)據(jù)采集
需要采集的數(shù)據(jù)包括:地形高程數(shù)據(jù)、地形紋理數(shù)據(jù)、地理環(huán)境特征數(shù)據(jù)、實(shí)體幾何和紋理數(shù)據(jù)[6]。其中:高程數(shù)據(jù)是地形建模的基礎(chǔ),目前主要的數(shù)據(jù)格式有DEM、GeoTIFF、HGT、ArcAscii等;地理環(huán)境特征數(shù)據(jù)主要指河流、湖泊、道路、深林、草地等地物的相關(guān)數(shù)據(jù);實(shí)體幾何數(shù)據(jù)主要指建筑、車輛、裝備等實(shí)體的結(jié)構(gòu)和尺寸數(shù)據(jù)。上述數(shù)據(jù)可通過衛(wèi)星影像、航空照片、實(shí)物拍攝、查閱資料等方式獲取。
2)數(shù)據(jù)預(yù)處理
由于數(shù)據(jù)存在誤差、格式等方面的問題,在利用采集到的數(shù)據(jù)進(jìn)行建模前,需要進(jìn)行預(yù)處理。包括高程數(shù)據(jù)校對(duì)與格式轉(zhuǎn)化,紋理數(shù)據(jù)色彩與尺寸處理、地理環(huán)境數(shù)據(jù)的采樣比對(duì)等。例如,可利用Global Mapper等地理信息軟件修正誤差較大的高程數(shù)據(jù),并將其轉(zhuǎn)化為raw文件,利用Photoshop軟件處理紋理數(shù)據(jù)。
3)地形建模
Unity3D使用Terrain對(duì)象進(jìn)行地形建模,通過Import Raw Heightmap工具將地形高程數(shù)據(jù)導(dǎo)入后,利用Raise/Lower Terrain、Paint Height、Smooth Height等工具對(duì)地形進(jìn)行局部調(diào)整,使用Paint Texture為地圖添加紋理。通過Place Trees、Paint Detail為地形添加樹林、草地,道路的制作可使用EasyRoad3D和RoadPathTool等插件工具,河流、湖泊可采用紋理表現(xiàn),也可以使用專業(yè)的預(yù)設(shè)資源和插件,如RiverTool等。
4)實(shí)體建模
利用3DMAX的多邊形建模方法,按照實(shí)體尺寸數(shù)據(jù)進(jìn)行實(shí)體建模,為實(shí)體添加UV修改器,添加紋理。模型完成后,利用3DMAX自帶的FBX插件導(dǎo)出模型。導(dǎo)出時(shí)為了符合Unity3D引擎的應(yīng)用標(biāo)準(zhǔn),需要設(shè)置以下三個(gè)參數(shù):在高級(jí)選項(xiàng)中將單位設(shè)置為米,軸轉(zhuǎn)化為Y軸向上,勾選“嵌入的媒體”。生成文件包括Materials文件夾,.fbm文件夾和.FBX文件。
5)場(chǎng)景模型集成與優(yōu)化
將模型導(dǎo)入到Unity3D工程資源Assets文件夾下,根據(jù)需要在場(chǎng)景中添加實(shí)體對(duì)象,設(shè)置光照、霧、天空盒等參數(shù),最后,運(yùn)行場(chǎng)景進(jìn)行瀏覽、調(diào)試。
1.3系統(tǒng)集成技術(shù)框架
Leap Motion為開發(fā)者提供了可進(jìn)行二次開發(fā)的SDK,支持C++、Object-C、C#、Java、Python等多種編程語言進(jìn)行應(yīng)用程序開發(fā),同時(shí),為Unity3D、Unreal等虛擬現(xiàn)實(shí)引擎提供了開發(fā)資源包[7]。將Leap Motion集成到應(yīng)用程序中的本質(zhì)是調(diào)用其提供的動(dòng)態(tài)鏈接庫Leap.dll,C++、Object-C可將動(dòng)態(tài)庫直接引用到工程中,其它語言需通過特定的庫包引用,例如C#語言需要通過引用LeapCSharp.NET.dll調(diào)用Leap.dll。
在Unity3D中集成Leap Motion有兩種方法:1)導(dǎo)入CoreAssets.unitypackage資源包;2)將含有Leap.dll和LeapCSharp.NET.dll的插件包Plugins復(fù)制到Unity3D工程的資源下。系統(tǒng)集成技術(shù)框架如圖5所示。
圖5 系統(tǒng)集成技術(shù)框架
各模塊功能如下:
1) Leap.dll服務(wù)通過USB從Leap Motion控制器獲取數(shù)據(jù),將信息進(jìn)行處理并發(fā)送到應(yīng)用程序,默認(rèn)只發(fā)送跟蹤數(shù)據(jù)。
2) Leap Motion設(shè)置面板運(yùn)行時(shí)獨(dú)立于Leap.dll服務(wù),允許用戶對(duì)Leap.dll相關(guān)服務(wù)進(jìn)行設(shè)置。
3) 手勢(shì)判定應(yīng)用根據(jù)收到的幀數(shù)據(jù),對(duì)用戶手勢(shì)進(jìn)行判定,并生成相應(yīng)的場(chǎng)景控制信息,驅(qū)動(dòng)Unity3D場(chǎng)景進(jìn)行更新顯示。由于Leap Motion與Unity3D坐標(biāo)系不同,需要對(duì)Leap數(shù)據(jù)進(jìn)行轉(zhuǎn)換,成為Unity3D標(biāo)準(zhǔn)數(shù)據(jù)。
4) 系統(tǒng)通過Application.LoadLevel方法切換不同的三維電子沙盤場(chǎng)景在Unity3D中顯示。
2基于Leap motion的手勢(shì)識(shí)別
2.1手勢(shì)識(shí)別方案設(shè)計(jì)
對(duì)三維電子沙盤進(jìn)行瀏覽操作,主要包括移動(dòng)、旋轉(zhuǎn)、拉近/推遠(yuǎn)場(chǎng)景等動(dòng)作,為了體現(xiàn)出手勢(shì)操作的優(yōu)勢(shì),本文利用單手設(shè)計(jì)上述動(dòng)作的操作手勢(shì),既方便、靈活,又減少雙手可能帶來的干擾、遮蔽影響。手勢(shì)設(shè)計(jì)應(yīng)遵循以下原則:
1) 手勢(shì)簡單,易學(xué)易記;
2) 表達(dá)直觀,容易建立起手勢(shì)與預(yù)進(jìn)行操作的聯(lián)系;
3) 可靠有效,操作的錯(cuò)誤率在可接受的范圍內(nèi);
4) 不同手勢(shì)之間過渡平滑,有明顯的開關(guān)動(dòng)作。
為了提高系統(tǒng)的可用性,減少操作的錯(cuò)誤率,設(shè)計(jì)了不同操作動(dòng)作對(duì)應(yīng)的提示圖標(biāo),使用戶了解目前的手勢(shì)狀態(tài)。主要的手勢(shì)設(shè)計(jì)如圖6所示,含義如下:
旋轉(zhuǎn):單手自然伸展,置于Leap Motion上方,根據(jù)需要旋轉(zhuǎn)的方向,向左、右、上、下進(jìn)行刷掃,實(shí)現(xiàn)場(chǎng)景的順、逆時(shí)針旋轉(zhuǎn),視點(diǎn)的俯仰角度的變化?;赟WIPE手勢(shì)判定。
移動(dòng):單手自然平伸,置于Leap Motion上方,拇指彎曲后,出現(xiàn)移動(dòng)標(biāo)識(shí),場(chǎng)景根據(jù)手部的運(yùn)動(dòng)進(jìn)行平移(前后左右上下),平移的方向與手部運(yùn)動(dòng)速度方向一致,拇指展開后,功能取消?;谑种傅腡YPE-THUMB和IsExtended屬性判定。
推拉:當(dāng)手成握拳姿態(tài)后,出現(xiàn)推拉標(biāo)識(shí),場(chǎng)景可根據(jù)拳頭的運(yùn)動(dòng)對(duì)視角進(jìn)行拉近或推遠(yuǎn),當(dāng)手松開后,功能取消。基于手掌的GrabStrength屬性判定。
重置:在任何時(shí)刻,只要是食指進(jìn)行畫圈動(dòng)作,場(chǎng)景則回到初始位置?;贑IRCLE手勢(shì)判定。
圖6 手勢(shì)設(shè)計(jì)與標(biāo)識(shí)
2.2手勢(shì)識(shí)別基本流程
因?yàn)閁nity3D自帶實(shí)時(shí)更新方法,不需要回調(diào)Leap::Listener的OnFrame方法,只需在Update方法中實(shí)時(shí)處理Leap Motion數(shù)據(jù),進(jìn)行手勢(shì)判定。采用C#腳本控制Unity3D場(chǎng)景的基本流程為:
1)在Start方法中,創(chuàng)建Controller類的實(shí)例,通過方法EnableGesture將畫圈(TYPE-CIRCLE)和刷掃(TYPE-SWIPE)兩種手勢(shì)識(shí)別設(shè)為可用,并設(shè)置相關(guān)參數(shù)。
2)在Update方法中,實(shí)時(shí)獲取Leap Motion的幀數(shù)據(jù)Frame,而后通過Frame.Fingers、Frame.Pointables、Frame.Hands,獲取手掌、手指和指點(diǎn)的各種參數(shù),判斷手勢(shì),通過Unity3D的Transform類控制場(chǎng)景變化。其中,通過Hand.GrabStrength、Finger.Type、Finger.IsExtended進(jìn)行手勢(shì)切換判斷。
3)在Quitting方法中,釋放Controller類的實(shí)例。如圖7所示。
圖7 手勢(shì)識(shí)別的基本流程
3系統(tǒng)實(shí)現(xiàn)與測(cè)試
在上述分析的基礎(chǔ)上,搭建系統(tǒng)實(shí)例并進(jìn)行測(cè)試。三維仿真引擎采用Unity3D 5.2版本,Leap Motion SDK為LeapSDK 2.3.1,C#語言腳本編譯環(huán)境為VS2010,三維電子沙盤為某小型山地。將Leap Motion指示燈面向用戶,通過單手實(shí)現(xiàn)對(duì)沙盤的瀏覽操作,如圖8所示。
圖8 實(shí)驗(yàn)測(cè)試
通過測(cè)試發(fā)現(xiàn):
1)基于Leap motion單手手勢(shì)可實(shí)現(xiàn)沙盤的旋轉(zhuǎn)、平移、推拉等操作;
2)由于人體動(dòng)作的隨機(jī)性,會(huì)導(dǎo)致某些手勢(shì)丟失,不能百分之百實(shí)現(xiàn)預(yù)定目標(biāo),手掌法向方向在30°以內(nèi)時(shí)跟蹤狀態(tài)較好;
3)Leap motion檢測(cè)范圍有限,容易在不經(jīng)意間超出范圍,特別是Z軸方向;
4)手勢(shì)操作時(shí)需要手懸空于Leap motion上方,容易造成手臂酸痛。
4結(jié)束語
本文將Leap Motion集成于Unity3D引擎,搭建了基于手勢(shì)控制的三維電子沙盤,實(shí)現(xiàn)了以人類自然的方式進(jìn)行人機(jī)交互的初步應(yīng)用。下一步,將開發(fā)更加簡潔的交互手勢(shì),提高控制的精度。Leap Motion作為首個(gè)商業(yè)化的手勢(shì)識(shí)別產(chǎn)品,應(yīng)用方便,必將在虛擬現(xiàn)實(shí)、遠(yuǎn)程控制、計(jì)算機(jī)等領(lǐng)域得到應(yīng)用。本文希望拋磚引玉,為Leap Motion的深度應(yīng)用和后續(xù)發(fā)展提供有益參考和方向。
參考文獻(xiàn):
[1]黃俊,景紅.基于 Leap Motion的手勢(shì)控制技術(shù)初探[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(10):259-263.
[2]潘佳佳,徐昆.基于Leap Motion的三維自由手勢(shì)操作[J].中國科技論文,2015,10(2):207-212.
[3]胡宏,晁建剛,林萬洪,等.Leap Motion虛擬手構(gòu)建方法及其在航天訓(xùn)練中的應(yīng)用[J].載人航天, 2015,21(3):257-262.
[4]Mischa Spiegelmock. Leap Motion Development Essentials [M]. Birmingham, UK: Packt Publishing, 2013,10:47-61.
[5]曾林森.基于Unity3D的跨平臺(tái)虛擬駕駛視景仿真研究[D].長沙:中南大學(xué),2013:22-32.
[6]鐘文武,周新力,金慧琴,等.基于Vega Prime的飛行視景仿真研究與應(yīng)用[J].指揮控制與仿真,2015,37(6):90-94.
[7]Leap Motion. Leap Motion SDK and Plugin Documentation[EB/OL].(2015-10-15). https:∥developer.leapmotion.com/documentation.
Design and Implementation of 3D Electronic Sand Table SystemBased on Gesture Interaction
ZHANG Yu-jun1, MENG Xiao-jun1, WANG Gang2
(1.the Unit 69079 of PLA, Urumqi 830013; 2.the Unit 69240 of PLA, Urumqi 830011, China)
Abstract:The human-computer interaction based on gestures will improve people’s ability to control the computer system, and achieve human-computer fusion. The characteristics of using Leap Motion to recognize gesture is analyzed. The method and process of using Unity3D to construct 3D electronic sand table is discussed. System integration technology of 3D electronic sand table based on gestures interaction is put forward. Gesture recognition scheme based on leap motion and main process of script is designed. At last, an example system is build and tested. Test results show that using Leap Motion can realize hand operation to electronic sand table, and provide some reference for the application of gesture recognizing technology.
Key words:Leap Motion; gesture control; Unity3D; virtual reality; electronic sand table
中圖分類號(hào):TP311.52
文獻(xiàn)標(biāo)志碼:A
DOI:10.3969/j.issn.1673-3819.2016.02.023
作者簡介:張玉軍(1982-),男,吉林白山人,博士,工程師,研究方向?yàn)樘摂M現(xiàn)實(shí)與模擬訓(xùn)練。孟曉軍(1975-),男,高級(jí)工程師。
收稿日期:2016-01-29
文章編號(hào):1673-3819(2016)02-0110-05
修回日期: 2016-02-01
王剛(1980-),男,工程師。