基于手势交互的三维电子沙盘系统设计与实现
2016-05-04张玉军孟晓军
张玉军,孟晓军,王 刚
(1.解放军69079部队,新疆乌鲁木齐 830013;2.解放军69240部队,新疆乌鲁木齐 830011)
基于手势交互的三维电子沙盘系统设计与实现
张玉军1,孟晓军1,王刚2
(1.解放军69079部队,新疆乌鲁木齐830013;2.解放军69240部队,新疆乌鲁木齐830011)
摘要:基于手势的人机交互方式可大大提高人对计算机系统的控制能力,实现人机自然融合。首先,简要分析了Leap Motion设备进行手势识别的特点,详细阐述了利用Unity3D构建三维电子沙盘的方法和流程,在此基础上提出了基于手势交互的三维电子沙盘系统集成技术框架;然后,设计了基于Leap Motion的手势识别方案和控制脚本的基本流程,最后搭建系统实例并进行测试。测试结果表明,通过Leap Motion可实现人手对沙盘系统的预定操作,为这种新型手势识别技术的应用提供了一定借鉴。
关键词:Leap Motion;手势控制;Unity3D;虚拟现实;电子沙盘
三维电子沙盘是利用虚拟现实、地理信息等技术构建的三维地理信息系统,具有真实、立体、快速、简便、精确、动态等特点,在城市规划、特种作战、反恐处突、消防抢险等任务的指挥决策中,具有很高的应用价值。目前,这种系统多以鼠标、键盘或触摸屏等方式进行交互。随着虚拟现实技术的发展,用户可通过手势直接与计算机系统进行交互。这种手势交互的方式与触摸屏不同,它不需要直接接触设备,应用范围更加广泛,无论是个人PC、投影,还是电视墙,都可以直接通过手势控制。
手势是人手或者手和手臂结合所产生的各种姿势和动作,对手势进行检测与识别是手势交互能否实际应用的关键技术[1]。近年来,随着计算机软、硬件技术的发展,虚拟现实产业界推出了Kinect、Leap Motion 等几款手部信息捕获设备,这几款产品成本低廉,非常适合作为普通虚拟现实系统应用中的人机交互设备。其中,Kinect主要追踪的是中远距(0.5m~4m)的全身运动,对于手部的动作,细节信息不够,需要手臂配合表达[2]。Leap Motion是一个检测手势运动的传感器,可识别每根手指的位置、姿态、速度等参数,动作跟踪精度达0.01mm,体积小、成本低、扩展性强,可用于专业的手势交互系统。
本文利用Leap Motion在小范围内精确的手势识别能力,构建基于手势交互的三维电子沙盘,探索这种新技术的应用方式。
1系统开发技术方案
1.1Leap Motion手势识别特点分析
Leap Motion采用红外成像原理,通过内置的两个摄像头捕捉传感器上方25mm~600mm之间,大致呈倒立金字塔范围内的信息,它舍弃传统传感器单独处理每一个像素的方式,而是一次性采集所有的像素, 对这些像素进行后续处理,通过大量数据计算和检测基础实现对设备功能的稳定控制[1]。Leap Motion采用右手笛卡尔坐标系,原点坐标在Leap Motion控制器的中心,X轴和Z轴在设备的水平面,X轴和设备的长边平行,指向屏幕右方,Y轴垂直向上,只有正半轴[3]。如图1所示。
图1 Leap Motion的右手坐标系
在使用过程中,Leap Motion控制器会以大约115fps的帧速度发送关于手的运动信息,每一帧包含的主要信息有:手掌对象列表及信息;手指对象列表及信息;手持工具对象列表及信息;指点对象列表及信息。
对于每只手,可以检测到如下信息:手掌的中心位置、移动速度、姿态变化;手掌的法向量、指向方向;手掌弯曲形成的虚拟球体;左右手判定、手掌伸展度、拇指与其它四指捏取力度。如图2、3所示。
图2 手掌法向量
图3 手掌弯曲形成的虚拟球
对于每只手指,可以检测到如下信息:手指的中心位置、移动速度、姿态变化;指尖的位置以及速度;手指类型判定;手指伸展判定。
此外,Leap Motion预置了4种手势判定类型:手指画圈(CIRCLE)、手指下敲(KEY-TAP)、手指前敲(SCREEN-TAP)、手掌刷扫(SWIPE)。
Leap Motion会给每一帧及这些对象分配一个唯一的标识ID,ID在持续跟踪时段内保持不变。根据这些ID,用户可以查询特定帧内特定对象的运动信息,而后进行手势的识别[4]。
1.2基于Unity3D的三维电子沙盘构建
三维电子沙盘主要包括地形、地貌、植被、气象、建筑、装备等模型数据,若利用程序设计语言(如OpenGL)从基本的代码编程实现,不仅开发难度大,而且开发效率低。应用商业三维建模软件可有效提高开发效率,如SolidWorks、Terra Vista、Vega Prime、Skyline、Unity3D等。考虑到系统开发的高效、灵活性和跨平台的需要,选中Unity3D虚拟现实引擎作为支撑平台,开发的系统可发布于Windows、Web、Andriod、IOS等多种平台[5]。
基于Unity3D创建三维电子沙盘的主要工作和流程包括:数据收集与处理、地形建模、实体建模、场景集成与优化等,如图4所示。
图4 基于Unity3D的三维电子沙盘构建流程
1)数据采集
需要采集的数据包括:地形高程数据、地形纹理数据、地理环境特征数据、实体几何和纹理数据[6]。其中:高程数据是地形建模的基础,目前主要的数据格式有DEM、GeoTIFF、HGT、ArcAscii等;地理环境特征数据主要指河流、湖泊、道路、深林、草地等地物的相关数据;实体几何数据主要指建筑、车辆、装备等实体的结构和尺寸数据。上述数据可通过卫星影像、航空照片、实物拍摄、查阅资料等方式获取。
2)数据预处理
由于数据存在误差、格式等方面的问题,在利用采集到的数据进行建模前,需要进行预处理。包括高程数据校对与格式转化,纹理数据色彩与尺寸处理、地理环境数据的采样比对等。例如,可利用Global Mapper等地理信息软件修正误差较大的高程数据,并将其转化为raw文件,利用Photoshop软件处理纹理数据。
3)地形建模
Unity3D使用Terrain对象进行地形建模,通过Import Raw Heightmap工具将地形高程数据导入后,利用Raise/Lower Terrain、Paint Height、Smooth Height等工具对地形进行局部调整,使用Paint Texture为地图添加纹理。通过Place Trees、Paint Detail为地形添加树林、草地,道路的制作可使用EasyRoad3D和RoadPathTool等插件工具,河流、湖泊可采用纹理表现,也可以使用专业的预设资源和插件,如RiverTool等。
4)实体建模
利用3DMAX的多边形建模方法,按照实体尺寸数据进行实体建模,为实体添加UV修改器,添加纹理。模型完成后,利用3DMAX自带的FBX插件导出模型。导出时为了符合Unity3D引擎的应用标准,需要设置以下三个参数:在高级选项中将单位设置为米,轴转化为Y轴向上,勾选“嵌入的媒体”。生成文件包括Materials文件夹,.fbm文件夹和.FBX文件。
5)场景模型集成与优化
将模型导入到Unity3D工程资源Assets文件夹下,根据需要在场景中添加实体对象,设置光照、雾、天空盒等参数,最后,运行场景进行浏览、调试。
1.3系统集成技术框架
Leap Motion为开发者提供了可进行二次开发的SDK,支持C++、Object-C、C#、Java、Python等多种编程语言进行应用程序开发,同时,为Unity3D、Unreal等虚拟现实引擎提供了开发资源包[7]。将Leap Motion集成到应用程序中的本质是调用其提供的动态链接库Leap.dll,C++、Object-C可将动态库直接引用到工程中,其它语言需通过特定的库包引用,例如C#语言需要通过引用LeapCSharp.NET.dll调用Leap.dll。
在Unity3D中集成Leap Motion有两种方法:1)导入CoreAssets.unitypackage资源包;2)将含有Leap.dll和LeapCSharp.NET.dll的插件包Plugins复制到Unity3D工程的资源下。系统集成技术框架如图5所示。
图5 系统集成技术框架
各模块功能如下:
1) Leap.dll服务通过USB从Leap Motion控制器获取数据,将信息进行处理并发送到应用程序,默认只发送跟踪数据。
2) Leap Motion设置面板运行时独立于Leap.dll服务,允许用户对Leap.dll相关服务进行设置。
3) 手势判定应用根据收到的帧数据,对用户手势进行判定,并生成相应的场景控制信息,驱动Unity3D场景进行更新显示。由于Leap Motion与Unity3D坐标系不同,需要对Leap数据进行转换,成为Unity3D标准数据。
4) 系统通过Application.LoadLevel方法切换不同的三维电子沙盘场景在Unity3D中显示。
2基于Leap motion的手势识别
2.1手势识别方案设计
对三维电子沙盘进行浏览操作,主要包括移动、旋转、拉近/推远场景等动作,为了体现出手势操作的优势,本文利用单手设计上述动作的操作手势,既方便、灵活,又减少双手可能带来的干扰、遮蔽影响。手势设计应遵循以下原则:
1) 手势简单,易学易记;
2) 表达直观,容易建立起手势与预进行操作的联系;
3) 可靠有效,操作的错误率在可接受的范围内;
4) 不同手势之间过渡平滑,有明显的开关动作。
为了提高系统的可用性,减少操作的错误率,设计了不同操作动作对应的提示图标,使用户了解目前的手势状态。主要的手势设计如图6所示,含义如下:
旋转:单手自然伸展,置于Leap Motion上方,根据需要旋转的方向,向左、右、上、下进行刷扫,实现场景的顺、逆时针旋转,视点的俯仰角度的变化。基于SWIPE手势判定。
移动:单手自然平伸,置于Leap Motion上方,拇指弯曲后,出现移动标识,场景根据手部的运动进行平移(前后左右上下),平移的方向与手部运动速度方向一致,拇指展开后,功能取消。基于手指的TYPE-THUMB和IsExtended属性判定。
推拉:当手成握拳姿态后,出现推拉标识,场景可根据拳头的运动对视角进行拉近或推远,当手松开后,功能取消。基于手掌的GrabStrength属性判定。
重置:在任何时刻,只要是食指进行画圈动作,场景则回到初始位置。基于CIRCLE手势判定。
图6 手势设计与标识
2.2手势识别基本流程
因为Unity3D自带实时更新方法,不需要回调Leap::Listener的OnFrame方法,只需在Update方法中实时处理Leap Motion数据,进行手势判定。采用C#脚本控制Unity3D场景的基本流程为:
1)在Start方法中,创建Controller类的实例,通过方法EnableGesture将画圈(TYPE-CIRCLE)和刷扫(TYPE-SWIPE)两种手势识别设为可用,并设置相关参数。
2)在Update方法中,实时获取Leap Motion的帧数据Frame,而后通过Frame.Fingers、Frame.Pointables、Frame.Hands,获取手掌、手指和指点的各种参数,判断手势,通过Unity3D的Transform类控制场景变化。其中,通过Hand.GrabStrength、Finger.Type、Finger.IsExtended进行手势切换判断。
3)在Quitting方法中,释放Controller类的实例。如图7所示。
图7 手势识别的基本流程
3系统实现与测试
在上述分析的基础上,搭建系统实例并进行测试。三维仿真引擎采用Unity3D 5.2版本,Leap Motion SDK为LeapSDK 2.3.1,C#语言脚本编译环境为VS2010,三维电子沙盘为某小型山地。将Leap Motion指示灯面向用户,通过单手实现对沙盘的浏览操作,如图8所示。
图8 实验测试
通过测试发现:
1)基于Leap motion单手手势可实现沙盘的旋转、平移、推拉等操作;
2)由于人体动作的随机性,会导致某些手势丢失,不能百分之百实现预定目标,手掌法向方向在30°以内时跟踪状态较好;
3)Leap motion检测范围有限,容易在不经意间超出范围,特别是Z轴方向;
4)手势操作时需要手悬空于Leap motion上方,容易造成手臂酸痛。
4结束语
本文将Leap Motion集成于Unity3D引擎,搭建了基于手势控制的三维电子沙盘,实现了以人类自然的方式进行人机交互的初步应用。下一步,将开发更加简洁的交互手势,提高控制的精度。Leap Motion作为首个商业化的手势识别产品,应用方便,必将在虚拟现实、远程控制、计算机等领域得到应用。本文希望抛砖引玉,为Leap Motion的深度应用和后续发展提供有益参考和方向。
参考文献:
[1]黄俊,景红.基于 Leap Motion的手势控制技术初探[J].计算机系统应用,2015,24(10):259-263.
[2]潘佳佳,徐昆.基于Leap Motion的三维自由手势操作[J].中国科技论文,2015,10(2):207-212.
[3]胡宏,晁建刚,林万洪,等.Leap Motion虚拟手构建方法及其在航天训练中的应用[J].载人航天, 2015,21(3):257-262.
[4]Mischa Spiegelmock. Leap Motion Development Essentials [M]. Birmingham, UK: Packt Publishing, 2013,10:47-61.
[5]曾林森.基于Unity3D的跨平台虚拟驾驶视景仿真研究[D].长沙:中南大学,2013:22-32.
[6]钟文武,周新力,金慧琴,等.基于Vega Prime的飞行视景仿真研究与应用[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
中图分类号:TP311.52
文献标志码:A
DOI:10.3969/j.issn.1673-3819.2016.02.023
作者简介:张玉军(1982-),男,吉林白山人,博士,工程师,研究方向为虚拟现实与模拟训练。孟晓军(1975-),男,高级工程师。
收稿日期:2016-01-29
文章编号:1673-3819(2016)02-0110-05
修回日期: 2016-02-01
王刚(1980-),男,工程师。