廖宏建,曲 哲
(1.廣州大學 實驗中心,廣東 廣州 510006;2.廣州大學 圖書館,廣東 廣州 510006)
虛擬裝配技術為解決產品設計、裝配訓練等問題提供了一個新的、低成本的快捷手段。有代表性的虛擬裝配系統有華盛頓州立大學的VADE系統[1]、清華大學的VASS虛擬裝配訓練系統[2]、浙江大學的VDVAS系統等[3]。這些系統主要使用了虛擬現實、增強現實、虛實融合等技術,在人機交互方面效率高、沉浸感強,但需要昂貴的硬件支持,如數據手套、位置跟蹤器、同步器、3D頭盔顯示器等。由于硬件價格昂貴,且多數是為特殊應用定制,軟件平臺不通用,導致該類虛擬裝配及訓練系統難以在高校實驗教學和實訓教學中普及和推廣。
基于普通PC開發的桌面三維虛擬裝配實驗系統成本較低,采用 WIMP(Windows、Icon、Menu、Point-Click)[4]交互范式,通過鼠標和鍵盤提供精確的指點式輸入,快捷操作二維對象,但與三維對象交互時操作復雜,用戶體驗不佳,不能充分發揮虛擬現實系統的構想性、沉浸性和交互性。本文研究使用微軟的Kinect體感器,結合虛擬現實引擎Unity3D,實現在桌面系統上架構成本低廉但沉浸感增強的虛擬裝配實驗系統。它通過采集用戶運動空間信息,包括肢體動作、手勢、語音、表情等信息作為虛擬裝配系統的信息輸入,從而使用自然習慣動作完成虛擬裝配過程。
體感交互起源于游戲行業,指用戶通過身體運動和身體感受等方式完成人機交互[5]。體感交互一般需要借助數據手套、3D頭盔等硬件實現。但隨著計算機圖像識別、機器視覺等技術的發展,出現了直接利用機器捕獲的身體運動數據來實現人機交互的方法,如Yoshihiro等人提出了基于運動捕捉和碰撞檢測的Virtual Input Devices概念[6],使得體感交互無需昂貴的硬件支撐也可實現。微軟開發的體感器Kinect無需任何手持設備即可完成三維人機交互,它通過捕捉用戶的肢體運動,完成骨骼節點跟蹤、動作捕捉、影像辨識、麥克風輸入等,并將采集的數據輸入到游戲機或PC來驅動虛擬模型的運動。這種自然體感人機交互擺脫了傳統的鼠標鍵盤和復雜動作的捕捉設備,極大地降低了沉浸式虛擬實驗系統的成本。
Kinect傳感器可以同時獲取RGB和深度圖像數據,支持實時的全身和骨骼跟蹤,可以識別一系列的動作[7]。Kinect具有追焦功能,底座電動機可驅動Kinect旋轉±27°。此外,Kinect還有陣列式麥克風,并可同時捕獲彩色影像、3D深度影像和聲音信號。
Kinect不同于普通攝像頭,它帶有CMOS紅外傳感器。該傳感器利用黑白光譜來感知環境:純黑代表無窮遠,純白代表無窮近。黑白間的灰色地帶對應物體到傳感器的物理距離。它收集視野范圍內的每一點,并形成一幅代表周圍環境的景深圖像。傳感器以30幀/s的速度生成深度圖像流,實時3D再現周圍環境,然后再通過先進的算法對3D圖像進行場景識別、人物識別與骨骼節點跟蹤、手勢識別甚至面部表情識別等,從而完成三維輸入輸出[8-9]。
基于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等模型完美支持,界面操作簡單,可以快速開發跨平臺的虛擬現實系統。
虛擬裝配體進行組裝時,每個部件必須按一定的順序和空間路徑從裝配體逐一拆出或安裝,而部件建模及模型裝配數據的準備是系統開發的基礎工作。虛擬裝配環境由可移動物體和固定物體組成,其中可移動物體主要由虛擬裝配對象(部件)、三維菜單和裝配工具所組成。
裝配工具(如螺絲刀)、三維菜單這類交互對象的建模相對簡單,主要是用3ds Max或Unity3D制作;而虛擬裝配對象模型較為復雜,包含零件幾何模型、裝配約束模型和裝配層次模型。
(1)零件幾何模型。零件幾何模型由CAD和3ds Max建模并輸出為Unity3D所需的.dts格式文件。
(2)裝配約束模型。用來定義零件間的約束關系,并通過約束關系確定零件在裝配體中的空間位置矩陣及裝配特征。
(3)裝配層次模型。使用層次樹描述虛擬零件模型的裝配層次關系,用一棵樹表示裝配體,樹的根節點表示用戶目標裝配體,最底層節點即葉節點表示零件,非最底層節點表示子裝配體,子裝配體又由零件或子裝配體構成。裝配層次模型如圖2所示。
上述虛擬裝配模型需要實現CAD和虛擬裝配系統之間的數據轉換。本文采用浙江大學劉振宇等人提出的虛擬環境下零件信息分類轉化方法。轉化后,虛擬裝配模型的裝配對象信息、對象約束信息、對象層次信息可以通過對CAD的二次開發獲得,面片信息則通過CAD自帶的模型轉換接口輸出,該轉化方法可參閱文獻[11]。

圖2 虛擬裝配層次模型
手勢交互是指通過提取手部的運動特征,如指點、指向、指點運動軌跡等實現更加直觀的交互。手勢交互是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中,很方便地實現了手勢和交互語義的擴展。
快速改變視圖到指定模型的最佳操作視角是三維系統中的高頻動作,也是一個難點,因為在傳統界面下需要使用鼠標和鍵盤進行視圖縮放、角度旋轉、鏡頭推拉等組合操作。但是,Kinect可以方便地實現體感操控場景視角,極大簡化了操作復雜度。
實現體感操控場景視角的原理是通過Kinect采集用戶頭部的距離值和角度偏移數據,并用該值來控制場景中的攝像機運動,從而場景視圖隨用戶頭部運動而改變。當用戶走近屏幕時,視圖自動逐漸放大,反之縮小,且三維場景隨頭部左右偏移而改變視角,實現較好的全息圖效果。
首先,使用DepthGenerator得到深度圖。深度圖的投影(projective)坐標系中的像素值代表深度值,單位為毫米(mm),代表某點到Kinect所在的平面的垂直距離,可獲取頭部節點的距離。頭部節點的角度信息可以通過OpenNI的骨架功能(SkeletonCapability)的GetSkeletonJoint()函數獲得,它可以讀取到關節的位置和角度信息。在該函數中直接指定XN_SKEL_HEAD參數表示只讀取頭部節點而不是全身。
然后,在Unity3D場景中添加一個攝像機(Camera)對象,并為該對象增加一個邏輯控制腳本文件。在腳本中添加對OpenNI對象的引用,并通過對用戶頭部節點實時跟蹤來獲得頭部位置和角度信息,并更新攝像機的位置坐標值。由于Kinect中的Y值與Unity3D中對象的Y值是相反的,在此需要進行一次Kinect到Unity3D的空間坐標轉換。圖7是用戶頭部變化控制場景視圖效果,可以看出3D圖像根據用戶在Kinect前面的各種位置進行傾斜和移動。
減速器是高校機械制造專業“機械設計基礎”課程中的一個典型教學實例。筆者使用微軟的Kinect體感交互技術開發了“減速器裝配”三維虛擬實驗系統。系統硬件主要包括Kinect體感器、PC機、普通投影儀、投影幕。零件模型在AutoCAD 2007系統中建立,通過二次開發工具ObjectARX提取模型文件中的零件、特征、約束等信息,使用Unity3D建立、管理和渲染裝配場景,使用Unity3D的腳本文件實現體感交互邏輯,使用 OpenNI 1.5.4.0和 NITE 1.5.2.21實現體感姿勢識別。虛擬裝配系統運行流程如圖8所示。

圖7 頭部運動控制場景視角變化

圖8 減速器虛擬裝配系統運行流程
虛擬裝配系統提供自動組裝演示和手動組裝2種模式。自動組裝模式演示整個組裝過程,并說明詳細步驟與注意事項;手動組裝模式提供裝配工藝訓練,實驗者無須任何手持設備,通過手勢、肢體、語音等通道與虛擬儀器進行自然交互,按照正確的邏輯順序自主完成減速器的組裝。每一個組裝步驟可以選擇不同的組裝工具,組裝出錯時系統給出錯誤反饋。
所開發的基于體感交互技術的虛擬裝配實驗系統已用于我校2010級機械制造專業本科實驗教學。教學效果對比說明,用體感交互進行虛擬實驗,比用鼠標鍵盤交互更能激發學生的實驗興趣和參與熱情;借助熟悉的動作進行交互,使操作更為直接和直觀,交互效率明顯提高,能快捷地完成虛擬裝配任務。
體感交互也存在一些問題需要改進,如手勢定位的精準度有待進一步提高,身體控制場景變換的全息圖效果目前只支持單用戶,Kinect中紅外攝像頭的延遲會造成偶爾的抖動現象等。
在體感交互虛擬裝配實驗系統中,裝配模型的分類與特征描述為系統提供了裝配邏輯,是系統實現的重要基礎;手勢識別是體感交互應用的核心,對基本手勢進行擴展,減輕了對傳統鼠標鍵盤的依賴和操作三維物體的復雜度,使交互更自然、更高效;體感操控裝配場景,增強了用戶的沉浸感。開發實例證明,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.