基于Kinect体感交互技术的虚拟装配实验系统开发

2013-11-23 08:08廖宏建
实验技术与管理 2013年7期
关键词:体感手势节点

廖宏建,曲 哲

(1.广州大学 实验中心,广东 广州 510006;2.广州大学 图书馆,广东 广州 510006)

虚拟装配技术为解决产品设计、装配训练等问题提供了一个新的、低成本的快捷手段。有代表性的虚拟装配系统有华盛顿州立大学的VADE系统[1]、清华大学的VASS虚拟装配训练系统[2]、浙江大学的VDVAS系统等[3]。这些系统主要使用了虚拟现实、增强现实、虚实融合等技术,在人机交互方面效率高、沉浸感强,但需要昂贵的硬件支持,如数据手套、位置跟踪器、同步器、3D头盔显示器等。由于硬件价格昂贵,且多数是为特殊应用定制,软件平台不通用,导致该类虚拟装配及训练系统难以在高校实验教学和实训教学中普及和推广。

基于普通PC开发的桌面三维虚拟装配实验系统成本较低,采用 WIMP(Windows、Icon、Menu、Point-Click)[4]交互范式,通过鼠标和键盘提供精确的指点式输入,快捷操作二维对象,但与三维对象交互时操作复杂,用户体验不佳,不能充分发挥虚拟现实系统的构想性、沉浸性和交互性。本文研究使用微软的Kinect体感器,结合虚拟现实引擎Unity3D,实现在桌面系统上架构成本低廉但沉浸感增强的虚拟装配实验系统。它通过采集用户运动空间信息,包括肢体动作、手势、语音、表情等信息作为虚拟装配系统的信息输入,从而使用自然习惯动作完成虚拟装配过程。

1 自然体感人机交互技术及Kinect原理

1.1 自然体感人机交互简介

体感交互起源于游戏行业,指用户通过身体运动和身体感受等方式完成人机交互[5]。体感交互一般需要借助数据手套、3D头盔等硬件实现。但随着计算机图像识别、机器视觉等技术的发展,出现了直接利用机器捕获的身体运动数据来实现人机交互的方法,如Yoshihiro等人提出了基于运动捕捉和碰撞检测的Virtual Input Devices概念[6],使得体感交互无需昂贵的硬件支撑也可实现。微软开发的体感器Kinect无需任何手持设备即可完成三维人机交互,它通过捕捉用户的肢体运动,完成骨骼节点跟踪、动作捕捉、影像辨识、麦克风输入等,并将采集的数据输入到游戏机或PC来驱动虚拟模型的运动。这种自然体感人机交互摆脱了传统的鼠标键盘和复杂动作的捕捉设备,极大地降低了沉浸式虚拟实验系统的成本。

1.2 Kinect原理

Kinect传感器可以同时获取RGB和深度图像数据,支持实时的全身和骨骼跟踪,可以识别一系列的动作[7]。Kinect具有追焦功能,底座电动机可驱动Kinect旋转±27°。此外,Kinect还有阵列式麦克风,并可同时捕获彩色影像、3D深度影像和声音信号。

Kinect不同于普通摄像头,它带有CMOS红外传感器。该传感器利用黑白光谱来感知环境:纯黑代表无穷远,纯白代表无穷近。黑白间的灰色地带对应物体到传感器的物理距离。它收集视野范围内的每一点,并形成一幅代表周围环境的景深图像。传感器以30帧/s的速度生成深度图像流,实时3D再现周围环境,然后再通过先进的算法对3D图像进行场景识别、人物识别与骨骼节点跟踪、手势识别甚至面部表情识别等,从而完成三维输入输出[8-9]。

2 体感交互虚拟装配实验系统设计与实现

2.1 系统架构

基于Kinect体感交互的虚拟装配系统架构分为用户层、Kinect交互层和虚拟装配系统层。与传统的桌面虚拟装配系统相比,它在用户和虚拟系统之间多了一个前端体感器Kinect,用来完成用户体感信息的采集,代替鼠标键盘交互,如图1所示。

图1 使用OpenNI的Kinect体感交互虚拟装配系统架构

目前Kinect的应用开发主要是基于微软官方发布的SDK和开源社区的开源驱动,如OpenNI(开放自然交互联盟)的OpenNI Framework。由于OpenNI开发包提供了Kinect在Unity3D引擎中的应用接口,所以笔者使用OpenNI开发虚拟装配实验系统,以提高开发效率。

OpenNI Framework是一个多语言、跨平台的框架,它定义了利用自然交互编写应用程序的API。OpenNI API由一组可用来编写通用自然交互应用的接口组成,使开发人员通过传感器输出的标准化数据类型来处理真实的三维数据[10]。使用 OpenNI Framework需要安装OpenNI的NITE中间件,NITE中定义了手势侦测、手部分析、全身分析、场景分析等核心模块功能。本虚拟装配实验系统在Windows7系统上实现,采用的驱动平台是OpenNI+NITE+OpenCV,开发工具为Visual Studio 2008,使用C++语言以获得灵活的内存管理和运行效率。

虚拟装配实验场景及实验逻辑任务使用Unity3D引擎实现。Unity3D是一款顶级的虚拟现实制作引擎,具有强大的编辑器功能、物理系统、渲染能力及脚本逻辑控制功能,对3ds Max、Maya等模型完美支持,界面操作简单,可以快速开发跨平台的虚拟现实系统。

2.2 装配模型的建立与数据准备

虚拟装配体进行组装时,每个部件必须按一定的顺序和空间路径从装配体逐一拆出或安装,而部件建模及模型装配数据的准备是系统开发的基础工作。虚拟装配环境由可移动物体和固定物体组成,其中可移动物体主要由虚拟装配对象(部件)、三维菜单和装配工具所组成。

装配工具(如螺丝刀)、三维菜单这类交互对象的建模相对简单,主要是用3ds Max或Unity3D制作;而虚拟装配对象模型较为复杂,包含零件几何模型、装配约束模型和装配层次模型。

(1)零件几何模型。零件几何模型由CAD和3ds Max建模并输出为Unity3D所需的.dts格式文件。

(2)装配约束模型。用来定义零件间的约束关系,并通过约束关系确定零件在装配体中的空间位置矩阵及装配特征。

(3)装配层次模型。使用层次树描述虚拟零件模型的装配层次关系,用一棵树表示装配体,树的根节点表示用户目标装配体,最底层节点即叶节点表示零件,非最底层节点表示子装配体,子装配体又由零件或子装配体构成。装配层次模型如图2所示。

上述虚拟装配模型需要实现CAD和虚拟装配系统之间的数据转换。本文采用浙江大学刘振宇等人提出的虚拟环境下零件信息分类转化方法。转化后,虚拟装配模型的装配对象信息、对象约束信息、对象层次信息可以通过对CAD的二次开发获得,面片信息则通过CAD自带的模型转换接口输出,该转化方法可参阅文献[11]。

图2 虚拟装配层次模型

2.3 Kinect手势识别与交互语义扩展

手势交互是指通过提取手部的运动特征,如指点、指向、指点运动轨迹等实现更加直观的交互。手势交互是Kinect应用程序的核心,虚拟装配中也主要是通过手势来完成交互任务。

2.3.1 OpenNI for Kinect应用开发流程

OpenNI是使用生产节点(production nodes)的定义来描述其工作流的[12]。生产节点是一个工具集,它扮演着一个生产者的角色,用于生成自然交互程序所需要的数据。每一个生产节点均可以调用底层节点提供的数据,并能将数据传递至上层节点。产生数据的生产节点叫做数据生成器,OpenNI中定义了9种数据生成器,常用的有 UserGenerator(用户生成器)、DepthGenerator(深度生成器)、GestureGenerator(姿势生成器)、HandPointGenerator(手心生成器)等。如应用程序要在一个3D场景中跟踪人形的动作,就需要一个生产节点产生身体数据,而用户生成器又需要读取深度生成器的数据。

基于OpenNI的Kinect应用开发,主要是基于这些数据生成器及相关的API函数进行原始影像数据的读取、分析和处理,从而产生那些可以领悟、理解和解释场景的“有意义的”3D数据。开发流程如图3所示。

图3 OpenNI for Kinect应用开发流程

2.3.2 OpenNI中手势识别方法

在OpenNI的节点中,HandPointGenerator节点可以通过追踪手部位置来实现手势侦测,这个节点不需要抓到整个人体,只针对手部进行追踪。OpenNI中间件定义了4种基本手势:Wave(挥手)、Click(点击)、RaiseHand(举手)、MovingHand(移动手)。使用HandPointGenerator节点进行手势识别的过程可用图4来表示。

图4 OpenNI手势识别方法

一个完整的手势识别流程需要6个步骤,除了使用HandPointGenerator节点,还需要GestureGenerator节点和DepthGenerator节点提供相关的数据来配合完成。在设置识别的手势时,可以通过空间坐标参数限定检测区域,即在操作界面的某个范围内去识别指定的操作手势;在检测到手势后,通过注册的回调函数来处理相应的事件,如检测到“挥手”动作后执行菜单滑动的功能。图5为通过OpenNI手部分析中间件检测并标示出的手心位置,图6为4种基本手势之一的识别界面截图。

图5 手心位置检测

在实际应用中,用户在感觉手没有动的情况下,Kinect检测到的手势也会有一定的抖动现象,影响了交互的流畅性。笔者对手心点的去抖动处理方法是:保存前一帧判断所得手心的圆圈(center,radius)数据,再和当前帧的圆圈数据比较。如果偏差在阈值范围内,那么就继续显示前一帧的圆圈;如果偏差在阈值范围以外,则重新绘制手心圆圈的位置。

图6 基本手势识别

2.3.3 行为隐喻设计与手势交互扩展

体感交互需要满足用户以习惯动作进行交互,而OpenNI设定的4种基本手势对于虚拟组装操作是远远不够的,需要对基本手势进行有限的扩展。

手势扩展的有效方法是进行行为隐喻设计。行为隐喻是指将生活中熟悉的操作动作简化、分类,并映射到虚拟操作中,使系统能够“理解”用户的自然交互行为和操作意图,进而对用户的操作产生相应的反馈。行为隐喻设计的前提是对可能产生的交互行为进行分类。

(1)装配对象:交互行为包括选择、拾取、移动、旋转、缩放。

(2)装配工具:交互行为包括选择、拾取、使用。

(3)三维菜单:交互行为包括滑动、选择。

在对常用交互行为分类的基础上,对OpenNI中定义的4种基本手势进行扩展并定义交互语义,以满足不同的装配动作。扩展手势应尽可能接近现实生活习惯,在用户意图和所需操作之间、操作与结果之间建立自然匹配关系,以减轻认知负荷。扩展后的主要手势定义表如表1所示。

表1 手势交互定义表

为了获得更好的交互体验,其中对较复杂的交互动作使用了复合手势,例如旋转操作使用了双手,使用现实生活中类似双手旋转魔方的动作来旋转虚拟零件。扩展手势的定义是通过FAAST(flexible action and articulated skeleton toolkit)[13]这个中间件完成的。FAAST是使用OpenNI结合Kinect编写的一个手势识别类库,能将自定义的手势映射到基本手势和键盘输入信号。笔者在FAAST中使用XML文件自定义了表1中的手势,并映射到Unity3D的API中,很方便地实现了手势和交互语义的扩展。

2.4 场景视角的真实体感操控

快速改变视图到指定模型的最佳操作视角是三维系统中的高频动作,也是一个难点,因为在传统界面下需要使用鼠标和键盘进行视图缩放、角度旋转、镜头推拉等组合操作。但是,Kinect可以方便地实现体感操控场景视角,极大简化了操作复杂度。

实现体感操控场景视角的原理是通过Kinect采集用户头部的距离值和角度偏移数据,并用该值来控制场景中的摄像机运动,从而场景视图随用户头部运动而改变。当用户走近屏幕时,视图自动逐渐放大,反之缩小,且三维场景随头部左右偏移而改变视角,实现较好的全息图效果。

首先,使用DepthGenerator得到深度图。深度图的投影(projective)坐标系中的像素值代表深度值,单位为毫米(mm),代表某点到Kinect所在的平面的垂直距离,可获取头部节点的距离。头部节点的角度信息可以通过OpenNI的骨架功能(SkeletonCapability)的GetSkeletonJoint()函数获得,它可以读取到关节的位置和角度信息。在该函数中直接指定XN_SKEL_HEAD参数表示只读取头部节点而不是全身。

然后,在Unity3D场景中添加一个摄像机(Camera)对象,并为该对象增加一个逻辑控制脚本文件。在脚本中添加对OpenNI对象的引用,并通过对用户头部节点实时跟踪来获得头部位置和角度信息,并更新摄像机的位置坐标值。由于Kinect中的Y值与Unity3D中对象的Y值是相反的,在此需要进行一次Kinect到Unity3D的空间坐标转换。图7是用户头部变化控制场景视图效果,可以看出3D图像根据用户在Kinect前面的各种位置进行倾斜和移动。

3 减速器体感虚拟装配实验应用

3.1 减速器虚拟装配实验系统

减速器是高校机械制造专业“机械设计基础”课程中的一个典型教学实例。笔者使用微软的Kinect体感交互技术开发了“减速器装配”三维虚拟实验系统。系统硬件主要包括Kinect体感器、PC机、普通投影仪、投影幕。零件模型在AutoCAD 2007系统中建立,通过二次开发工具ObjectARX提取模型文件中的零件、特征、约束等信息,使用Unity3D建立、管理和渲染装配场景,使用Unity3D的脚本文件实现体感交互逻辑,使用 OpenNI 1.5.4.0和 NITE 1.5.2.21实现体感姿势识别。虚拟装配系统运行流程如图8所示。

图7 头部运动控制场景视角变化

图8 减速器虚拟装配系统运行流程

虚拟装配系统提供自动组装演示和手动组装2种模式。自动组装模式演示整个组装过程,并说明详细步骤与注意事项;手动组装模式提供装配工艺训练,实验者无须任何手持设备,通过手势、肢体、语音等通道与虚拟仪器进行自然交互,按照正确的逻辑顺序自主完成减速器的组装。每一个组装步骤可以选择不同的组装工具,组装出错时系统给出错误反馈。

3.2 应用效果与改进

所开发的基于体感交互技术的虚拟装配实验系统已用于我校2010级机械制造专业本科实验教学。教学效果对比说明,用体感交互进行虚拟实验,比用鼠标键盘交互更能激发学生的实验兴趣和参与热情;借助熟悉的动作进行交互,使操作更为直接和直观,交互效率明显提高,能快捷地完成虚拟装配任务。

体感交互也存在一些问题需要改进,如手势定位的精准度有待进一步提高,身体控制场景变换的全息图效果目前只支持单用户,Kinect中红外摄像头的延迟会造成偶尔的抖动现象等。

4 结束语

在体感交互虚拟装配实验系统中,装配模型的分类与特征描述为系统提供了装配逻辑,是系统实现的重要基础;手势识别是体感交互应用的核心,对基本手势进行扩展,减轻了对传统鼠标键盘的依赖和操作三维物体的复杂度,使交互更自然、更高效;体感操控装配场景,增强了用户的沉浸感。开发实例证明,Kinect体感交互能为用户提供便捷的交互手段,使用户能高效完成虚拟装配实验,取得较好的实验效果。

(References)

[1]Brough J E,Schwartz M,Gupta S K.Towards development of a virtual environment-based training system for mechanical assembly operations[J].Virtual Reality,2007,11(4):189-206.

[2]夏平均,陈朋,郎跃东.虚拟装配技术的研究综述[J].系统仿真学报,2009(4):2267-2269.

[3]万华根,高曙明,彭群生.VDVAS:一个集成的虚拟设计与虚拟装配系统[J].中国图象图形学报,2002,7(1):27-35.

[4]Robert J K J.Reality-Based Interaction:A Framework for Post-WIMP Interfaces[C]//Conference on Human Factors in Computing Systems Proceedings.2008:201-210.

[5]Saffer D.Designing For Interaction Creating Innovative Application and Devices[M].2nd ed.New Riders Press,2009.

[6]Okada Y,Shinpo K,Tanaka Y,et al.Virtual input devices based on motion capture and collision detection[C]//Computer Animation 1999Proceedings.Geneva:Conference Location,1999:201-209.

[7]Ikemura Sho,Fujiyoshi Hironobu.Real-Time Human Detection using Relational Depth Similarity Features[C/OL]//ACCV2010,Lecture Notes in Computer Science,2011.[2012-12-06]http://www.vision.cs.chubu.ac.jp/04/pdf/PIA64.pdf

[8]ZhangChiPKU.Kinect应用汇总[EB/OL].[2012-11-28].http://wenku.baidu.com/view/822f7585bceb19e8b8f6baf9.html.

[9]钱鹤庆.应用Kinect与手势识别的增强现实教育辅助系统[D].上海:上海交通大学,2011.

[10]OpenNI.Introducing OpenNI[EB/OL].[2012-11-28].http://openni.org/Documentation/Reference/introduction.html.

[11]刘振宇,谭建荣,张树有.面向虚拟装配的产品层次式信息表达研究[J].计算机辅助设计与图形学学报,2002,13(3):1-6.

[12]OpenNI.OpenNI User Guide[EB/OL].[2012-12-11].http://www.openni.org/.2011-10-02.

[13]Suma E A,Lange B,Rizzo A,et al.FAAST:The Flexible Action and Articulated Skeleton Toolkit[C]//Virtual Reality Conference 2011IEEE.2011:247-248.

猜你喜欢
体感手势节点
CM节点控制在船舶上的应用
体感交互技术在脑卒中康复中的应用
Analysis of the characteristics of electronic equipment usage distance for common users
基于AutoCAD的门窗节点图快速构建
人体体感感知机械手设计与实现
挑战!神秘手势
V字手势的由来
非触控式的体感机械臂交互控制系统研究
胜利的手势
体感语境下的交互行为设计