吳 松 韓國(guó)柱 陳永才
中國(guó)人民解放軍軍械工程學(xué)院火炮工程系 河北石家莊 050003
由于現(xiàn)代軍事裝備結(jié)構(gòu)復(fù)雜、價(jià)格高,教學(xué)裝備數(shù)量少,而且使用真實(shí)裝備教學(xué)易出安全事故,所以虛擬維修教學(xué)系統(tǒng)成為裝備維修訓(xùn)練的重要補(bǔ)充手段。但由于目前人機(jī)交互手術(shù)手段的限制,大量的虛擬維修教學(xué)系統(tǒng)還是采用傳統(tǒng)鍵盤(pán)鼠標(biāo)作為交互設(shè)備。在虛擬維修訓(xùn)練中,一般只能通過(guò)鼠標(biāo)點(diǎn)擊工具圖標(biāo)來(lái)代表拿起工具,再用鼠標(biāo)點(diǎn)擊操作對(duì)象來(lái)播放分解結(jié)合動(dòng)畫(huà),實(shí)際上達(dá)到的訓(xùn)練效果是熟悉分解結(jié)合過(guò)程和工具的名稱(chēng),而具體工具的使用方式很難體現(xiàn)出來(lái),或者說(shuō)“動(dòng)手”的能力很難培養(yǎng)出來(lái)。而往往學(xué)員所欠缺的就是動(dòng)手能力,一到實(shí)際維修教室,還是很容易出問(wèn)題。而Kinect體感設(shè)備的出現(xiàn),給虛擬維修教學(xué)系統(tǒng)開(kāi)拓了一條新的路徑。
Kinect體感設(shè)備是微軟為游戲機(jī)XBOX360研發(fā)的一款體感操作設(shè)備,相對(duì)以往動(dòng)輒百十萬(wàn)元的光學(xué)動(dòng)作捕捉系統(tǒng)而言,成本極期低廉,當(dāng)然識(shí)別精度也相應(yīng)較低,但是它已經(jīng)能夠勝任游戲、界面操作等基本要求。同時(shí)除了即時(shí)動(dòng)態(tài)捕捉能力之外,它還具有圖像識(shí)別、語(yǔ)音辨識(shí)等多種實(shí)用功能,是非常有前景的體感設(shè)備。目前以Kinect為外部設(shè)備的體感游戲、應(yīng)用已達(dá)數(shù)百款,應(yīng)用包括機(jī)器人視覺(jué)識(shí)別、商業(yè)售賣(mài)機(jī)器、三維掃描建模等范圍。在教育領(lǐng)域,也研究了Kinect在交互式電子白板等方面的應(yīng)用[1]。
Kinect外形如圖1所示,主要由CMOS紅外發(fā)射及傳感器、RGB攝像頭及麥克風(fēng)組成。它的核心技術(shù)來(lái)自于以色列PrimeSense公司的低成本三維空間探測(cè)芯片及微軟研究院的人體動(dòng)作識(shí)別系統(tǒng)。PrimeSense公司曾經(jīng)為以色列軍方服務(wù),他們開(kāi)發(fā)的芯片和配套軟件可以很好地處理三維空間中物體的坐標(biāo)信息。

圖1 Kinect外觀(guān)
CMOS紅外傳感器通過(guò)發(fā)射編碼光產(chǎn)生深度圖像,既以純黑代表無(wú)窮遠(yuǎn),以純白代表零距離,以灰色的濃度代表距離的遠(yuǎn)近。傳感器以每秒30幀的速度生成景深圖像流。芯片將人體圖像從景深圖像中摳出并傳入Exemplar人工智能處理系統(tǒng)中,該系統(tǒng)通過(guò)積累的大量經(jīng)驗(yàn)進(jìn)行圖像匹配,生成一個(gè)有20個(gè)關(guān)節(jié)的骨架系統(tǒng)(如圖2所示)。Kinect中間的RGB攝像頭用于捕捉人體形象圖譜,除了幫助設(shè)備探測(cè)到使用者的位置,它還可以用于拍照,在設(shè)備的基座內(nèi)有驅(qū)動(dòng)塑料齒輪的馬達(dá),用于自動(dòng)校正攝像頭以及空間感知器,讓Kinect獲得最佳的位置來(lái)觀(guān)測(cè)使用者。
Kinect的二次開(kāi)發(fā)包目前有微軟的Kinect for Windows SDK[2]和PrimeSense的OpenNI[3]。兩者各有所長(zhǎng),開(kāi)發(fā)者可按需求選擇。OpenNI直接提供了Unity3D的插件包,所以我們選擇了OpenNI為開(kāi)發(fā)工具。

圖2 窗體頂端生成的骨架示意圖
在OpenNI架構(gòu)下要讓維修訓(xùn)練系統(tǒng)能夠使用Kinect,首先需要安裝OpenNI(版本為1.5.2.23),負(fù)責(zé)分析影像數(shù)據(jù)的NITE中間件(版本為1.5.2.21)和驅(qū)動(dòng)程序模塊SensorKinect(本文版本為5.1.0.25)。虛擬交互軟件采用Unity3D4.0,為直接使用Kinect數(shù)據(jù),引入了OpenNI_Unity_Toolkit-0.9.7.4插件包。該包提供給Unity直接訪(fǎng)問(wèn)OpenNI兼容傳感器的能力。硬件采用了一臺(tái)Kinect for XBOX360外接電源適配器及遙控操縱桿。
引入插件包后,Unity3D中就會(huì)形成OpenNI的預(yù)制件和腳本(如圖3所示)。用戶(hù)可以直接將這些預(yù)制件和腳本拖到場(chǎng)景中使用,可以無(wú)須關(guān)心底層API而直接使用“拖-放”的方式來(lái)使用數(shù)據(jù)。

圖3 OpenNI預(yù)制件
Kinect的精度有限,所以在虛擬維修中使用體感操作,比較合適的方式是在虛擬場(chǎng)景中引入一個(gè)虛擬人,然后將Kinect捕捉到的操作者人體數(shù)據(jù)傳遞到虛擬人身上,使虛擬人和操作者同步運(yùn)動(dòng),通過(guò)判斷虛擬人與場(chǎng)景中物體的碰撞情況來(lái)決定交互的產(chǎn)生時(shí)機(jī)。如果直接通過(guò)Kinect來(lái)操作界面元素,可能會(huì)存在跳動(dòng)等現(xiàn)象,導(dǎo)致交互感覺(jué)不良。
虛擬人的制作可由3DMAX等軟件制作骨骼蒙皮人體模型再導(dǎo)入U(xiǎn)nity之中,然后在Unity中將虛擬人的骨骼與OpenNI提供的Kinect的關(guān)節(jié)數(shù)據(jù)匹配起來(lái),其具體做法是設(shè)置NISkeleton Controller腳本中的Joints to control數(shù)組(如圖4所示)。建立骨骼匹配關(guān)系之后,在虛擬人手上設(shè)置碰撞包圍盒,使包圍盒包含整個(gè)手部。這樣在程序中就可以通過(guò)碰撞事件的捕獲,使操作者通過(guò)虛擬人取放工具、操作零部件,實(shí)現(xiàn)分解結(jié)合虛擬維修了。

圖4 骨骼綁定數(shù)組
維修作業(yè)是通過(guò)一系列工序來(lái)完成的。裝備的基本維修訓(xùn)練可以視做大件分解結(jié)合和部件分解結(jié)合作業(yè)。為了形成通用化的系統(tǒng)結(jié)構(gòu),需要以文本的形式提供分解結(jié)合的工序,這樣,程序運(yùn)行時(shí)根據(jù)選擇的維修科目,讀入相應(yīng)的工序和模型就可以實(shí)現(xiàn)分解結(jié)合訓(xùn)練了。
維修過(guò)程的定義采用Office Project 2003進(jìn)行定義,可以方便地建立PERT工序。然后輸出文本文件供維修訓(xùn)練系統(tǒng)調(diào)用。在每步工序中需要對(duì)操作者的動(dòng)作進(jìn)行定義,為了方便編制動(dòng)作和判斷姿態(tài),我們提出一種靈活的姿態(tài)定義格式。
格式由一連串短句組成,每個(gè)短句之間以“;”號(hào)隔開(kāi),其形式為“LArm;RArm;LHip;RHip;Spine;Pict ure”。單個(gè)短句的格式相似,如“RArm”部分,完整定義為“RArm∶手腕位置@零件名稱(chēng)”,其中“手腕位置”是一個(gè)“x,y,z”向量,數(shù)值以虛擬人右肩關(guān)節(jié)部為起點(diǎn),其身體正面為Z軸正向,右方為X軸,頭部向上為Y軸,以手臂長(zhǎng)為1.0,相對(duì)位置精確到小數(shù)點(diǎn)后一位。如“1,0,0”既代表水平向右伸直右臂。在程序中將虛擬人手部位置和肩部位置直接以參數(shù)形式傳遞進(jìn)來(lái),就可以實(shí)時(shí)得到手部相對(duì)肩關(guān)節(jié)的相對(duì)坐標(biāo),通過(guò)歸一化處理就得到了以向量表示的手腕位置(程序中rightArmLength即為提前算出的虛擬人右臂長(zhǎng)度)。

再將手腕位置與要求位置相減,就得到了姿態(tài)偏差向量(handF)。為同時(shí)考量X,Y,Z三個(gè)方向上的偏差,取姿態(tài)偏差向量的長(zhǎng)度為量度。考慮到應(yīng)允許操作者有一定的動(dòng)作誤差,本文將容許值(tolerence)設(shè)置為0.4,可以保證操作者姿態(tài)正確,同時(shí)又不過(guò)份嚴(yán)格。

短句中“零件名稱(chēng)”項(xiàng)則表示手部或手部工具與該零件處于相交位置,意即當(dāng)做這個(gè)動(dòng)作時(shí),需要手部或手部工具接觸該零件。比如在右手旋掉底蓋螺絲時(shí),應(yīng)用左手托住底蓋以防掉落。
這樣通過(guò)對(duì)每個(gè)身體部分進(jìn)行定義,就可以對(duì)虛擬訓(xùn)練時(shí),當(dāng)人員執(zhí)行某種分解動(dòng)作時(shí)所處的姿態(tài)提出要求。
某裝備炮閂分解結(jié)合訓(xùn)練是學(xué)員必須練習(xí)的重點(diǎn)科目,以此為對(duì)象,建立了體感式分解結(jié)合維修訓(xùn)練系統(tǒng)。程序由Unity3D 4.0開(kāi)發(fā),建立了虛擬場(chǎng)景,然后引入虛擬人,在虛擬人的頭上綁定攝像機(jī),就可以從替身的角度觀(guān)察到三維場(chǎng)景(如圖5所示)。通過(guò)Kinect,操作者可控制虛擬人在場(chǎng)景中自由走動(dòng),從工具桌上取用各種工具、將工具放在工具臺(tái)上、左右手互換工具、使用工具或手與零件交互,按照分解結(jié)合順序逐步分解結(jié)合炮閂,分解中對(duì)特定部件需擺出正確姿態(tài)才能分解。主觀(guān)使用感覺(jué)沉浸感強(qiáng)、操作流暢、工具使用仿真感強(qiáng)。

圖5 體感虛擬維修訓(xùn)練系統(tǒng)界面圖
體感式操作將是未來(lái)人機(jī)交互的重點(diǎn)發(fā)展方向之一。裝備體感式維修教學(xué)系統(tǒng)充分發(fā)揮了體感技術(shù)的優(yōu)點(diǎn),可以有效培養(yǎng)學(xué)生的動(dòng)手能力,提高教學(xué)的效率,是非常優(yōu)秀的教學(xué)方式。雖然目前由于設(shè)備的精度限制,動(dòng)作捕捉還有延遲和抖動(dòng)等缺點(diǎn),但體感技術(shù)的進(jìn)步很快。據(jù)報(bào)道,Kinect2代即將推出,還有其它一些高精度的體感設(shè)備也將面世。總之,及時(shí)將Kinect代表的先進(jìn)體感技術(shù)引入虛擬維修教學(xué)之中,對(duì)提高我軍裝備維修訓(xùn)練水平具有積極的意義。
[1] 王康.基于Kinect的體感交互式電子白板初探[J].中國(guó)現(xiàn)代教育裝備,2012,6∶29-30.
[2] Windows Kinect SDK[EB/OL].http∶//www.kinectforwindows.org/.
[3] PrimeSense OpenNI[EB/OL].http∶//www.primesense.com/.