李亞?wèn)| 孫會(huì)來(lái)
摘 要:本文以Unity3D游戲引擎為開(kāi)發(fā)平臺(tái)、Kinect為人體識(shí)別交互設(shè)備,對(duì)開(kāi)發(fā)流程、動(dòng)畫(huà)制作、API數(shù)據(jù)連接、手勢(shì)識(shí)別、光線(xiàn)追蹤法碰撞檢測(cè)、物理模型交互操作六個(gè)方面進(jìn)行研究設(shè)計(jì),利用Ray射線(xiàn)進(jìn)行物理識(shí)別,選擇和UI圖標(biāo)點(diǎn)擊,設(shè)計(jì)了具有培訓(xùn)模式、練習(xí)模式、拓展模式三種模式交互沉浸式機(jī)械手表虛擬仿真系統(tǒng),具有前瞻性和借鑒意義,能夠有效促進(jìn)學(xué)生深層次理解知識(shí)點(diǎn)、增強(qiáng)實(shí)踐能力和培養(yǎng)創(chuàng)新意識(shí)。
關(guān)鍵詞:Unity3D;沉浸式;機(jī)械手表;Kinect;虛擬仿真
中圖分類(lèi)號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-9052(2020)03-0177-03
Unity3D游戲引擎已經(jīng)成為開(kāi)發(fā)VR/AR項(xiàng)目的主流引擎。隨著虛擬現(xiàn)實(shí)技術(shù)的不斷發(fā)展,人們不僅僅滿(mǎn)足于傳統(tǒng)的操作體驗(yàn),對(duì)人機(jī)交互、沉浸式體驗(yàn)方面提出了更高的要求[1]。Kinect作為新時(shí)代人機(jī)交互技術(shù)的產(chǎn)物,在人機(jī)交互領(lǐng)域帶來(lái)了革命性的改變[2],通過(guò)Unity3D平臺(tái)利用Kinect作為交互設(shè)備,豐富了虛擬裝配人機(jī)交互方式,提高了用戶(hù)操作沉浸式體驗(yàn)效果。
機(jī)械手表由機(jī)芯和外觀兩部分組成,由于零件數(shù)量多、尺寸小、易損壞和難觀察等特點(diǎn),出現(xiàn)難以理解機(jī)芯兩條邏輯控制流、擺輪組件的裝配約束關(guān)系等,難以實(shí)現(xiàn)裝配振動(dòng)系統(tǒng)、軸承(鉆石)等實(shí)踐教學(xué),難以降低游絲部件、擒縱齒軸、表針等零部件損耗,很難提高機(jī)械手表的裝配質(zhì)量和實(shí)現(xiàn)復(fù)雜組件的實(shí)踐教學(xué)。為了解決以上難題,利用Unity3D平臺(tái)、Kinect交互設(shè)備開(kāi)發(fā)出手勢(shì)識(shí)別的沉浸式機(jī)械手表虛擬仿真系統(tǒng)。將虛擬裝配與實(shí)際裝配相結(jié)合,創(chuàng)建沉浸、半沉浸的虛擬環(huán)境,對(duì)于培訓(xùn)和教學(xué)而言,可以提高裝配操作人員的工作效率[3]。對(duì)培養(yǎng)學(xué)生的工程意識(shí)、了解結(jié)構(gòu)設(shè)計(jì)的原則、培養(yǎng)理論聯(lián)系實(shí)際、提高分析問(wèn)題和解決問(wèn)題的能力等具有重要意義,同時(shí)也是啟迪學(xué)生創(chuàng)新思維的重要手段[4]。
1 系統(tǒng)實(shí)現(xiàn)功能和開(kāi)發(fā)流程
本系統(tǒng)實(shí)現(xiàn)的功能:通過(guò)利用手部交互手勢(shì)對(duì)機(jī)械手表虛擬仿真系統(tǒng)里三種模式(培訓(xùn)模式、練習(xí)模式和拓展模式)中每一種模式下四種類(lèi)型(傳動(dòng)系統(tǒng)(無(wú)夾板)、機(jī)芯裝配、整機(jī)裝配、復(fù)雜部(組)件)的物理模型和UI按鈕圖標(biāo)控制,實(shí)現(xiàn)機(jī)械手表虛擬仿真學(xué)習(xí)系統(tǒng)操作直接自然、沉浸式體驗(yàn)好、裝配效率高的目的。
為了保證本系統(tǒng)開(kāi)發(fā)的系統(tǒng)性與完整性,因此制定系統(tǒng)整體開(kāi)發(fā)流程,見(jiàn)圖1。首先,利用SolidWorks建立零部件三維數(shù)字模型,并根據(jù)實(shí)際操作過(guò)程簡(jiǎn)化模型,將三維模型導(dǎo)出為Step格式。其次,利用3DSMax優(yōu)化物理模型修改器、調(diào)整軸心和軸線(xiàn)、制作裝拆過(guò)程演示動(dòng)畫(huà)、調(diào)整系統(tǒng)參數(shù)比例,并導(dǎo)出FBX格式資源。再次,在PC端安裝Kinect for windows SDK2.0軟件開(kāi)發(fā)包來(lái)管理Kinect采集的數(shù)據(jù)流,用于實(shí)現(xiàn)Unity3D與Kinect之間的數(shù)據(jù)傳遞,并設(shè)定Palm等8類(lèi)手勢(shì)識(shí)別閾值,實(shí)現(xiàn)虛擬手與Kinect人體識(shí)別交互手勢(shì)一一對(duì)應(yīng)。最后,在Unity3D中對(duì)物理模型、動(dòng)畫(huà)資源、材質(zhì)球、背景環(huán)境、界面規(guī)劃等進(jìn)行設(shè)置,并利用Java和C#腳本語(yǔ)言對(duì)場(chǎng)景中的UI按鈕圖標(biāo)、物理模型和語(yǔ)音介紹等被賦予腳本組件且進(jìn)行邏輯關(guān)聯(lián)。從而完成本系統(tǒng)機(jī)械手表虛擬仿真系統(tǒng)里三種模式下四種類(lèi)型的物理模型和UI按鈕圖標(biāo)沉浸式交互控制。
2 沉浸式人機(jī)交互的實(shí)現(xiàn)
2.1 制作仿真動(dòng)畫(huà)
根據(jù)ST36機(jī)械手表實(shí)際裝配、維修保養(yǎng)的工藝過(guò)程,確定傳動(dòng)系統(tǒng)(無(wú)夾板)、機(jī)芯裝配、整機(jī)裝配、復(fù)雜部(組)件裝配四種類(lèi)型的拆裝路徑規(guī)劃。例如,針對(duì)復(fù)雜振動(dòng)系統(tǒng)(見(jiàn)圖2)的裝配序列規(guī)劃:首先,裝配擺輪部件和游絲部件,確保游絲內(nèi)端與內(nèi)樁配合;其次,將活動(dòng)外樁環(huán)部件和快慢針部件裝配在擺夾板上,確??炻槂?nèi)圓面與活動(dòng)外樁環(huán)外圓面配合;再次,裝配防震器部件,確保防震座外圓斜面與活動(dòng)外樁環(huán)內(nèi)圓斜面配合,利用U型銷(xiāo)將活動(dòng)外樁環(huán)部件、快慢針部件和防震器部件固定在擺夾板上;最后,裝配第一步裝配好的擺輪部件和游絲部件,確保游絲外端與外樁配合。
為了在培訓(xùn)模式下,便于學(xué)習(xí)者更高效率的學(xué)習(xí),選用3DSMax軟件制作拆裝過(guò)程動(dòng)畫(huà)。依據(jù)拆裝路徑規(guī)劃,將每一個(gè)動(dòng)作都用關(guān)鍵幀來(lái)實(shí)現(xiàn),即每改變一次零部件的位置和角度等操作過(guò)程,都要打一個(gè)關(guān)鍵點(diǎn),從而完成與實(shí)際裝配、維修保養(yǎng)工藝過(guò)程相匹配的動(dòng)畫(huà)仿真。例如,將SolidWorks軟件中創(chuàng)建好的振動(dòng)系統(tǒng)三維模型以Step格式導(dǎo)入到3DSMax軟件中,進(jìn)行優(yōu)化修改器、調(diào)整軸心和軸線(xiàn)等完善模型。依據(jù)振動(dòng)系統(tǒng)由擺輪部件、游絲部件、活動(dòng)外樁環(huán)部件、快慢針部件、防震器部件和擺夾板五大部件組成,將各個(gè)零部件按照裝配關(guān)系分配到五大組成部分中,并打好組,將打好組的部件依據(jù)裝配序列規(guī)劃,放置在合適的位置。在添加動(dòng)作之前,應(yīng)當(dāng)利用Affect Pivot/Center to Object使坐標(biāo)位于零部件的中心。在3DSMax軟件中,選擇Auto Key進(jìn)入自動(dòng)關(guān)鍵幀模式,首先選中游絲部件為第0幀,將時(shí)間軸移動(dòng)到第10幀,并將游絲部件移動(dòng)到游絲內(nèi)端與擺輪部件的內(nèi)樁配合位置,依次類(lèi)推,在各個(gè)部件需要配合處打好關(guān)鍵幀。在裝配過(guò)程中,為了清晰觀察零部件的配合過(guò)程,需要將零部件進(jìn)行旋轉(zhuǎn),此時(shí)應(yīng)當(dāng)設(shè)置好旋轉(zhuǎn)角度并打好關(guān)鍵幀。將制作好的關(guān)鍵幀動(dòng)畫(huà)導(dǎo)出成FBX格式的文件并導(dǎo)入到Unity 3D中,進(jìn)行人機(jī)交互設(shè)置。
2.2 Kinect與Unity3D的數(shù)據(jù)連接
Kinect體感交互設(shè)備的應(yīng)用能夠讓用戶(hù)擺脫鍵盤(pán)、鼠標(biāo)、手柄等傳統(tǒng)交互設(shè)備,增強(qiáng)沉浸式體驗(yàn)效果。在PC端安裝Kinect for windows SDK2.0軟件開(kāi)發(fā)包來(lái)管理Kinect采集的數(shù)據(jù)流,用于實(shí)現(xiàn)Unity3D與Kinect之間的數(shù)據(jù)傳遞。Kinect設(shè)備初始化之后,兩個(gè)深度攝像頭協(xié)同工作實(shí)時(shí)采集人體手部信息,通過(guò)Kinect API數(shù)據(jù)流中KinectManger類(lèi)控制對(duì)NUIAPI數(shù)據(jù)流的開(kāi)啟來(lái)采集人體手部信息識(shí)別,獲取手部姿態(tài)深度信息數(shù)據(jù)流。在Unity3D平臺(tái)中利用C#或Java語(yǔ)言編寫(xiě)腳本函數(shù)GetUsersLblTex控制獲取Kinect采集的深度數(shù)據(jù)流,從而將人體交互手勢(shì)通過(guò)Kinect體感交互設(shè)備傳遞到Unity3D中,達(dá)到虛擬手與人體交互手勢(shì)匹配的目的。
2.3 Kinect關(guān)節(jié)數(shù)據(jù)與手勢(shì)識(shí)別
在本文基于Unity3D的沉浸式機(jī)械手表虛擬仿真系統(tǒng)研究中,將Unity3D中虛擬手與Kinect人體識(shí)別交互手勢(shì)一一對(duì)應(yīng),可以加強(qiáng)沉浸式體驗(yàn)效果。利用Kinect骨骼追蹤引擎捕捉手部關(guān)節(jié)5個(gè)關(guān)節(jié)點(diǎn)X、Y、Z三個(gè)值的空間坐標(biāo)和轉(zhuǎn)向信息,根據(jù)手部關(guān)節(jié)5個(gè)關(guān)節(jié)點(diǎn)位置信息的變化狀態(tài),通過(guò)對(duì)KinectManager管理API中默認(rèn)的手勢(shì)參數(shù)進(jìn)行相應(yīng)的手勢(shì)識(shí)別閾值設(shè)定,從而確定Palm(松開(kāi))、Fist(握拳)、Pull(拉近)、Push(推遠(yuǎn))、SwipeLeft(向左揮手)、SwipeRight(向右揮手)、SwipeUp(向上滑動(dòng))、SwipeDown(向下滑動(dòng))8類(lèi)姿勢(shì)動(dòng)作來(lái)達(dá)到Unity3D中虛擬手與Kinect人體識(shí)別交互手勢(shì)一一對(duì)應(yīng)的目的,實(shí)現(xiàn)沉浸式交互控制虛擬裝配系統(tǒng)相關(guān)操作。利用Palm姿勢(shì)實(shí)現(xiàn)將握拳手勢(shì)與松開(kāi)手勢(shì)真實(shí)形象區(qū)分開(kāi),提高交互體驗(yàn);利用Fist姿勢(shì)實(shí)現(xiàn)物理識(shí)別選擇激活、移動(dòng)和UI圖標(biāo)點(diǎn)擊的交互;由于機(jī)械手表零部件模型大小不一樣和復(fù)雜部位難以觀察等,利用Pull和Push手勢(shì)實(shí)現(xiàn)通過(guò)控制Unity3D虛擬場(chǎng)景中Main Camera的位置來(lái)達(dá)到物理模型遠(yuǎn)近調(diào)整的目的;由于振動(dòng)系統(tǒng)等復(fù)雜組件裝配約束關(guān)系難以觀察、方便裝配視角調(diào)整等,利用SwipeLeft、SwipeRight、SwipeUp、SwipeDown姿勢(shì)來(lái)控制旋轉(zhuǎn)場(chǎng)景視角。若人體交互手勢(shì)與體感交互設(shè)備中設(shè)定的一樣,并且Kinect攝像頭發(fā)射的ray射線(xiàn)碰到三維零部件模型的盒碰撞體或二維UI按鈕圖標(biāo),在Unity 3D中開(kāi)發(fā)腳本程序就會(huì)調(diào)用函數(shù)的語(yǔ)句來(lái)觸發(fā)模型或按鈕相對(duì)應(yīng)的交互操作命令。
2.4 光線(xiàn)追蹤法碰撞檢測(cè)
為了避免在虛擬裝配過(guò)程中零部件與零部件、虛擬手與零部件之間發(fā)生不切實(shí)際的穿透現(xiàn)象,因此需要在Unity3D中給虛擬手以及零部件模型添加上剛體組件。為了檢測(cè)碰撞信息,需要給虛擬手與零部件三維模型添加盒碰撞體屬性。根據(jù)零部件模型的復(fù)雜程度決定添加一個(gè)或多個(gè)同類(lèi)型或不同類(lèi)型包圍盒,通過(guò)調(diào)節(jié)BoxColider、SphereColider、CapsuleColider和MeshColider等包圍盒的位置以及大小來(lái)提高碰撞包圍盒與三維模型的重合度,逼近真實(shí)操作的準(zhǔn)確度,切實(shí)提高沉浸感效果。
本文采用光線(xiàn)追蹤技術(shù)檢測(cè)體感交互設(shè)備Kinect攝像頭發(fā)射的Ray射線(xiàn)是否碰到三維零部件模型的盒碰撞體或二維UI按鈕圖標(biāo),在Unity 3D中開(kāi)發(fā)腳本程序調(diào)用函數(shù)的語(yǔ)句來(lái)觸發(fā)模型或按鈕相對(duì)應(yīng)的交互操作命令,碰撞檢測(cè)流程見(jiàn)圖3。首先,Kinect攝像頭發(fā)射的Ray射線(xiàn)經(jīng)過(guò)人手交互手勢(shì),延長(zhǎng)到Unity3D虛擬場(chǎng)景中。其次,針對(duì)射線(xiàn)是否與物理三維模型和UI二維按鈕圖標(biāo)發(fā)生碰撞,均需利用碰撞檢測(cè)算法函數(shù)進(jìn)行判斷,是否發(fā)生同人手交互手勢(shì)對(duì)應(yīng)的虛擬手與物理三維模型或UI二維按鈕圖標(biāo)的碰撞。最后,碰撞會(huì)獲取碰撞點(diǎn)、碰撞物體或圖標(biāo)坐標(biāo)等相關(guān)信息,并且觸發(fā)碰撞對(duì)象調(diào)用其事件函數(shù)。
2.5 物理模型交互操作的實(shí)現(xiàn)
增強(qiáng)機(jī)械手表裝配過(guò)程沉浸式體驗(yàn)效果,便于觀察裝配約束關(guān)系,提高虛擬仿真系統(tǒng)裝配效率,物理模型能夠激活、移動(dòng)、旋轉(zhuǎn)并實(shí)時(shí)更新坐標(biāo)位置跟隨虛擬手一起運(yùn)動(dòng),正常狀態(tài)時(shí)虛擬手采用Palm姿勢(shì)、握拳時(shí)虛擬手采用Fist姿勢(shì)形象地區(qū)分松開(kāi)與握拳姿勢(shì)。零部件物理模型移動(dòng)交互操作流程圖見(jiàn)圖4。首先,選擇三種培訓(xùn)模式中的一種裝配類(lèi)型,Unity3D開(kāi)始加載相應(yīng)裝配類(lèi)型三維場(chǎng)景資源。接著通過(guò)光線(xiàn)追蹤法碰撞檢測(cè),判定Kinect攝像頭發(fā)射的Ray射線(xiàn)碰到三維零部件模型的盒碰撞體,并且虛擬手處于Fist姿勢(shì)、物理模型符合裝配序列規(guī)劃。其次,虛擬手保持Fist姿勢(shì)拖動(dòng),則物理模型跟隨虛擬手進(jìn)行坐標(biāo)變換,從而使物理模型能夠移動(dòng)并實(shí)時(shí)更新坐標(biāo)位置,跟隨虛擬手一起運(yùn)動(dòng)在同一位置,拖動(dòng)物理模型的速度應(yīng)當(dāng)根據(jù)設(shè)備參數(shù)情況和沉浸式交互體驗(yàn)效果,設(shè)定在合理地閾值范圍內(nèi)。當(dāng)運(yùn)動(dòng)物理模型與固定物理模型之間距離小于閾值時(shí),并且虛擬手處于Palm姿勢(shì),運(yùn)動(dòng)物理模型會(huì)自動(dòng)裝配到固定物理模型上,實(shí)現(xiàn)虛擬場(chǎng)景中模型與模型間裝配約束的自動(dòng)虛擬裝配。最后判定選擇的裝配類(lèi)型中若所有物理模型裝配完成,則點(diǎn)擊相應(yīng)UI圖標(biāo)進(jìn)行退出系統(tǒng)、漫游等其他操作。
3 結(jié)語(yǔ)
基于Unity3D的沉浸式機(jī)械手表虛擬仿真系統(tǒng)能夠在一定程度上解決教學(xué)中遇到的問(wèn)題:
體驗(yàn)方式的創(chuàng)新:相比于鍵盤(pán)、鼠標(biāo)等設(shè)備的交互方式,采用Kiect作為交互設(shè)備,操作直接自然、沉浸式體驗(yàn)效果更佳,以達(dá)到更好地傳遞知識(shí)的目的。
教學(xué)方式方法的提升:改變教師主導(dǎo)模式,激勵(lì)學(xué)生自主學(xué)習(xí)。給予學(xué)生充分的學(xué)習(xí)自由,便于學(xué)生碎片化、移動(dòng)化學(xué)習(xí),提高學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)效率。
參考文獻(xiàn):
[1]謝振清.基于Unity3D的虛擬裝配技術(shù)研究與實(shí)現(xiàn)[D].哈爾濱工業(yè)大學(xué),2018.
[2]吳萍萍.Kinect體感交互技術(shù)的游戲設(shè)計(jì)與實(shí)現(xiàn)[J].湖南郵電職業(yè)技術(shù)學(xué)院學(xué)報(bào),2019,18(3):39-41.
[3]張宇.數(shù)控機(jī)床刀架虛擬裝配仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造工程,2013,42(5):16-18.
[4]馮桂珍,池建斌,邢海軍,等.基于Unity3D的減速器虛擬拆裝實(shí)驗(yàn)[J].圖學(xué)學(xué)報(bào),2018,39(2):305-308.
(責(zé)任編輯:李凌峰)