姚壽文,栗麗輝,王 瑀,常富祥,Zeyuan YAO
(1.北京理工大學(xué) 機(jī)械與車輛學(xué)院,北京 100081;2.Canterbury School, New Milford, CT 06776, USA)
虛擬現(xiàn)實(shí)是一種應(yīng)用前景廣闊、發(fā)展迅速的人機(jī)交互技術(shù),它借助計(jì)算機(jī)等仿真系統(tǒng)模擬產(chǎn)生三維空間的虛擬世界,提供給使用者關(guān)于視覺、聽覺、觸覺等感官的模擬,讓使用者可以及時(shí)、無限制地觀察虛擬三維世界里的事物。同時(shí),計(jì)算機(jī)通過復(fù)雜運(yùn)算將現(xiàn)實(shí)中使用者的位置變化以影像表現(xiàn)。虛擬現(xiàn)實(shí)技術(shù)應(yīng)用廣泛,在文化娛樂、教育訓(xùn)練、工程設(shè)計(jì)、醫(yī)療康復(fù)等領(lǐng)域都發(fā)揮著重要作用。人體模型的建立可以提高虛擬現(xiàn)實(shí)人機(jī)交互技術(shù)的交互性與沉浸感[1-3],而在虛擬裝配中的人機(jī)工效學(xué)的研究是裝配設(shè)計(jì)流程中必不可少的過程。在虛擬裝配場(chǎng)景中創(chuàng)建人體模型,通過操作訓(xùn)練試驗(yàn)裝配可達(dá)性與人體疲勞工作時(shí)間等,綜合分析裝配設(shè)計(jì)是否合理[4]。創(chuàng)建人體模型需要實(shí)時(shí)捕捉人體運(yùn)動(dòng)數(shù)據(jù),主要有3種方法:① 捕捉身體動(dòng)作的Kinect、捕捉手勢(shì)的Leap Motion等設(shè)備獲取人體的骨骼數(shù)據(jù);② 多個(gè)動(dòng)作捕捉相機(jī)從不同角度實(shí)時(shí)探測(cè)人體關(guān)節(jié)等處的Marker點(diǎn)數(shù)據(jù);③ 人體重要關(guān)節(jié)點(diǎn)佩戴慣性傳感器[5]。其中,使用Kinect傳感器捕捉人身體動(dòng)作是基于計(jì)算機(jī)視覺原理,可以利用少量的攝像機(jī)對(duì)跟蹤區(qū)域的多個(gè)目標(biāo)進(jìn)行動(dòng)作捕捉,同時(shí)不需要穿戴任何設(shè)備,約束性小,沉浸感強(qiáng)。
現(xiàn)今市場(chǎng)上大多數(shù)基于Kinect的虛擬現(xiàn)實(shí)產(chǎn)品都是以單臺(tái)Kinect設(shè)備進(jìn)行研究開發(fā)的[6-8]。建立虛擬人體模型需要較高的人體捕捉精度和數(shù)據(jù)傳輸速度,而單臺(tái)Kinect設(shè)備捕捉人體數(shù)據(jù)時(shí)存在前后模糊和自遮擋問題,從而導(dǎo)致數(shù)據(jù)精度不高。前后模糊問題是Kinect無法區(qū)分捕捉的數(shù)據(jù)來自人體的正面或背面,當(dāng)人體背向設(shè)備時(shí)仍然認(rèn)為獲得的數(shù)據(jù)來自人的正面,這就會(huì)導(dǎo)致左右側(cè)的關(guān)節(jié)數(shù)據(jù)顛倒,用戶使用感變差。單臺(tái)Kinect存在的自遮擋問題是當(dāng)人體側(cè)向Kinect設(shè)備時(shí),遠(yuǎn)離Kinect一側(cè)的關(guān)節(jié)會(huì)被遮擋,導(dǎo)致捕捉不到完整的人體骨骼數(shù)據(jù),在虛擬場(chǎng)景中得到的人體骨骼模型會(huì)發(fā)生部分錯(cuò)亂,不能正常與現(xiàn)實(shí)人體同步動(dòng)作。如圖1所示,人體右肩面向單臺(tái)Kinect時(shí),左側(cè)關(guān)節(jié)會(huì)被遮擋,得到的人體骨骼模型左手臂和左腿與實(shí)際人體動(dòng)作不符,圖1(c)模型中紅色和黃色的關(guān)節(jié)連線表示兩端的關(guān)節(jié)未被Kinect跟蹤到。
圖1 單臺(tái)Kinect自遮擋問題
目前,通過多臺(tái)Kinect數(shù)據(jù)融合技術(shù)解決骨骼追蹤精度低與身體遮擋等問題的研究并不多。相較而言,國(guó)外研究較早,2012年開始,Tong J等[10]提出利用多個(gè)Kinect來實(shí)現(xiàn)掃描3D完整人體形狀的系統(tǒng),用于人體的三維模型重建的實(shí)驗(yàn)研究。2017年,Müller等[11]沿走廊放置6臺(tái)Kinect設(shè)備,每側(cè)3臺(tái),使用3D重建模型和由左側(cè)和右側(cè)設(shè)備獲得的融合骨骼數(shù)據(jù)來評(píng)估步態(tài),提高了骨骼數(shù)據(jù)精度,但仍不能區(qū)分正反面。國(guó)內(nèi)研究較晚,2016年,杜惠斌等[12]利用2臺(tái)Kinect深度圖像傳感器進(jìn)行數(shù)據(jù)融合,以提高肢體康復(fù)系統(tǒng)中數(shù)據(jù)的精度與可靠性,但該康復(fù)系統(tǒng)只針對(duì)人的上肢運(yùn)動(dòng),無法滿足虛擬裝配的人體全身運(yùn)動(dòng)捕捉要求。
為解決上述問題,獲取完整準(zhǔn)確的人體運(yùn)動(dòng)數(shù)據(jù),需要增加Kinect的數(shù)量來調(diào)高人體關(guān)節(jié)數(shù)據(jù)捕捉精度以及追蹤范圍,而Kinect的數(shù)量增多會(huì)增加紅外光之間的干擾,進(jìn)而影響Kinect對(duì)關(guān)節(jié)點(diǎn)的捕捉精度。因此,本文提出利用2臺(tái)Kinect設(shè)備進(jìn)行追蹤,根據(jù)關(guān)節(jié)跟蹤狀態(tài)與人體面向方向變化自適應(yīng)調(diào)整權(quán)重,通過自適應(yīng)加權(quán)融合2臺(tái)Kinect獲得的關(guān)節(jié)數(shù)據(jù),解決無法區(qū)分正反面、自遮擋問題,從而提高人體捕捉的精度。
為提高人體動(dòng)作捕捉數(shù)據(jù)精度,系統(tǒng)融合2臺(tái)Kinect v2設(shè)備數(shù)據(jù),采用客戶端-服務(wù)器端模式,每臺(tái)設(shè)備都與相應(yīng)客戶端PC連接。2臺(tái)客戶端計(jì)算機(jī)使用SDK獲取骨架數(shù)據(jù),并通過本地以太網(wǎng)將其發(fā)送到服務(wù)器端PC。所有骨骼數(shù)據(jù)的處理都在服務(wù)器進(jìn)行,然后將融合后的骨骼數(shù)據(jù)傳輸?shù)経nity3D場(chǎng)景中進(jìn)行可視化。
由于Kinect存在自遮擋缺點(diǎn),無法獲得人體姿態(tài)的全貌,本文以2臺(tái)Kinect設(shè)備為例組成雙Kinect人體動(dòng)作捕捉系統(tǒng),通過數(shù)據(jù)融合獲得較為準(zhǔn)確的人體運(yùn)動(dòng)數(shù)據(jù),同時(shí)擴(kuò)大了人體的活動(dòng)范圍。放置Kinect時(shí),要盡量保證獲得人體全貌,2臺(tái)Kinect獲取數(shù)據(jù)的總視角盡量大,故采用正交布置方案,此時(shí)紅外線相互干擾影響也最小[13]。根據(jù)人體身高與Kinect的最佳捕捉范圍,2臺(tái)Kinect距地面垂直高度70 cm放置,與融合中心相距2 m距離,系統(tǒng)方案設(shè)計(jì)如圖2所示。
圖2 系統(tǒng)方案設(shè)計(jì)
雙Kinect全身運(yùn)動(dòng)捕捉系統(tǒng)的設(shè)計(jì)分為3個(gè)模塊,分別為雙Kinect系統(tǒng)坐標(biāo)標(biāo)定、UDP協(xié)議數(shù)據(jù)傳輸、自適應(yīng)加權(quán)數(shù)據(jù)融合。
通過2臺(tái)Kinect設(shè)備擴(kuò)大追蹤范圍,但每臺(tái)Kinect的位置和視角都不同,獲取的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù)都是相對(duì)于Kinect攝像頭坐標(biāo)系的,因此需要先把不同Kinect的數(shù)據(jù)統(tǒng)一轉(zhuǎn)換到同一個(gè)世界坐標(biāo)系,通過相關(guān)標(biāo)定算法完成坐標(biāo)轉(zhuǎn)換。每個(gè)Kinect客戶端會(huì)預(yù)處理關(guān)節(jié)點(diǎn)信息,然后將處理后的數(shù)據(jù)發(fā)送至服務(wù)器。
建立多RGB-D相機(jī)系統(tǒng)需要標(biāo)定才能進(jìn)行后續(xù)的數(shù)據(jù)處理,標(biāo)定過程包括對(duì)單臺(tái)RGB-D相機(jī)的內(nèi)部幾何參數(shù)標(biāo)定以及求解RGB-D相機(jī)之間的相對(duì)位姿矩陣的外部標(biāo)定[14-15]。對(duì)單臺(tái)RGB-D相機(jī)內(nèi)部參數(shù)的標(biāo)定又分為對(duì)RGB相機(jī)幾何參數(shù)的標(biāo)定與深度校準(zhǔn)。幾何參數(shù)標(biāo)定一般采用傳統(tǒng)相機(jī)標(biāo)定方法,使用標(biāo)定模板,RGB相機(jī)拍攝不同角度的標(biāo)定板照片計(jì)算出相機(jī)的內(nèi)部參數(shù);深度校準(zhǔn)是對(duì)深度相機(jī)與RGB相機(jī)之間的相對(duì)位姿參數(shù)的校準(zhǔn),這個(gè)問題目前并沒有較好的解決方法,仍有待研究。外部標(biāo)定是在同一世界坐標(biāo)系下求解每臺(tái)RGB-D相機(jī)的外部參數(shù),即世界坐標(biāo)系到相機(jī)坐標(biāo)系的變換矩陣[16-17]。
采用2臺(tái)Kinect設(shè)備對(duì)人體姿態(tài)進(jìn)行捕捉時(shí),每臺(tái)Kinect設(shè)備能夠從不同的視角獲取目標(biāo)的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù),但是每臺(tái)Kinect都有自身的坐標(biāo)系,Kinect自身坐標(biāo)系與世界坐標(biāo)系的關(guān)系如圖3所示。2臺(tái)Kinect分別在自身坐標(biāo)系下獲取人體骨骼數(shù)據(jù),后續(xù)數(shù)據(jù)融合無法直接進(jìn)行,需要將每臺(tái)Kinect獲得的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行坐標(biāo)變換處理,統(tǒng)一的世界坐標(biāo)系下,才能傳輸至數(shù)據(jù)融合服務(wù)器進(jìn)行后期處理。對(duì)于坐標(biāo)系不統(tǒng)一的情況,首先需要進(jìn)行坐標(biāo)系標(biāo)定工作,使系統(tǒng)采集到的數(shù)據(jù)在同一坐標(biāo)系下使用。2臺(tái)Kinect標(biāo)定過程是在同一個(gè)世界坐標(biāo)系,求解每臺(tái)Kinect設(shè)備的外部參數(shù),即自身坐標(biāo)系與世界坐標(biāo)系之間的旋轉(zhuǎn)矩陣R與平移向量T,R為3×3矩陣,T為3維向量。變換公式為
(1)
式中:(Xc,Yc,Zc)是某點(diǎn)在相機(jī)坐標(biāo)系下的位置坐標(biāo);(Xw,Yw,Zw)是該點(diǎn)在世界坐標(biāo)系下的位置坐標(biāo);R3×3和T3×1分別是世界坐標(biāo)系到相機(jī)坐標(biāo)系的旋轉(zhuǎn)矩陣和平移向量,也稱為相機(jī)的外參矩陣。
圖3 Kinect坐標(biāo)系與世界坐標(biāo)系的關(guān)系(圖中陰影重疊部分為數(shù)據(jù)融合區(qū))
本文使用開源系統(tǒng)LiveScan3D[18]對(duì)2臺(tái)Kinect的坐標(biāo)進(jìn)行標(biāo)定。LiveScan3D使用多Kinect V2傳感器進(jìn)行實(shí)時(shí)三維數(shù)據(jù)采集,允許用戶在任何物理配置中放置任意數(shù)量的傳感器并啟動(dòng)以實(shí)時(shí)速度融合數(shù)據(jù)進(jìn)行三維環(huán)境的重構(gòu)。雙Kinect系統(tǒng)坐標(biāo)標(biāo)定過程主要分為相機(jī)內(nèi)參獲取、預(yù)標(biāo)定、3D點(diǎn)云獲取、ICP算法優(yōu)化4個(gè)步驟。通過已知位置坐標(biāo)的標(biāo)定板圖案進(jìn)行初步校準(zhǔn)可以得到Kinect的外參初值,再經(jīng)過ICP算法優(yōu)化后的外參矩陣精度更高,對(duì)三維環(huán)境實(shí)時(shí)重構(gòu)與人體運(yùn)動(dòng)捕捉的精度都有所影響[19]。具體標(biāo)定過程如圖4所示。
為了實(shí)現(xiàn)客戶端與服務(wù)器端的數(shù)據(jù)傳輸,需要通過數(shù)據(jù)傳輸協(xié)議來完成。常用的2臺(tái)硬件設(shè)備間的通信傳輸協(xié)議有TCP協(xié)議與UDP協(xié)議。TCP(transmission control protocol)協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,使用3次握手協(xié)議建立連接,4次揮手?jǐn)嚅_連接。UDP(user datagram protocol)用戶數(shù)據(jù)報(bào)協(xié)議是開放式系統(tǒng)互聯(lián)(open system interconnection,OSI)參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP有不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),即當(dāng)報(bào)文發(fā)送之后,無法得知其是否安全完整到達(dá)[20]。
圖4 雙Kinect系統(tǒng)坐標(biāo)標(biāo)定
UDP在沒有錯(cuò)誤檢查的情況下速度更快,但無法保證發(fā)送的數(shù)據(jù)包能夠被接收到。UDP作為一種不可靠的協(xié)議,可以提供更低的開銷并支持多播,不能保證數(shù)據(jù)包的傳遞和順序,但通常速度更快。因此,UDP適用于對(duì)遲來的數(shù)據(jù)包和部分丟失數(shù)據(jù)包影響不大的情況。在本文中,客戶端與服務(wù)器端的數(shù)據(jù)傳輸使用UDP協(xié)議,Kinect客戶端發(fā)送數(shù)據(jù)足夠快,如果存在有損耗的網(wǎng)絡(luò)和丟包,UDP仍然可以滿足要求,減少延遲和開銷。另外,若將來添加新客戶端,UDP可以更好地運(yùn)行??蛻舳税l(fā)送UDP數(shù)據(jù)包,必須說明目的端的IP地址和端口號(hào),而當(dāng)服務(wù)器端一個(gè)應(yīng)用程序接收到UDP數(shù)據(jù)包時(shí),操作系統(tǒng)必須告知消息的來源,即源端IP和端口號(hào)。因此,UDP數(shù)據(jù)報(bào)IP首部包含源端和目的端的IP地址,這種特點(diǎn)允許UDP服務(wù)器同時(shí)接收多個(gè)客戶端的信息并進(jìn)行處理,給每個(gè)發(fā)送請(qǐng)求的客戶端回應(yīng)。如圖5所示是UDP協(xié)議數(shù)據(jù)的封裝格式。
圖5 UDP數(shù)據(jù)封裝格式
客戶端將從Kinect傳感器獲取的骨骼關(guān)節(jié)數(shù)據(jù)轉(zhuǎn)換成用于傳輸?shù)腛SC(open sound control)信息格式,通過UDP協(xié)議發(fā)送,服務(wù)器端以Unity3D引擎為實(shí)現(xiàn)數(shù)據(jù)融合與可視化的主體,在Unity中添加OSC組件以接收從客戶端發(fā)來的數(shù)據(jù)。設(shè)置IP地址、發(fā)送與接收信息的端口,在客戶端與服務(wù)器端建立連接,將客戶端與服務(wù)器端PC同時(shí)連入同一個(gè)局域網(wǎng),經(jīng)過UDP協(xié)議完成數(shù)據(jù)的傳輸。具體傳輸流程如圖6所示。
圖6 客戶端與服務(wù)器端數(shù)據(jù)傳輸流程
雙Kinect自適應(yīng)加權(quán)數(shù)據(jù)融合算法實(shí)時(shí)計(jì)算人體面向方向,根據(jù)人體面向方向與Kinect方向夾角的實(shí)時(shí)變化對(duì)每臺(tái)Kinect的權(quán)重進(jìn)行自適應(yīng)調(diào)整,計(jì)算每個(gè)關(guān)節(jié)點(diǎn)的加權(quán)平均值,得到融合后的關(guān)節(jié)點(diǎn)數(shù)據(jù)。
跟蹤目標(biāo)人體的面向方向是數(shù)據(jù)融合的關(guān)鍵。一般情況下,左右兩側(cè)肩關(guān)節(jié)構(gòu)成的向量即可表示人身體的方向向量BV(body vector),將其旋轉(zhuǎn)90°就是人的面向方向向量Vf。但某些情況下,目標(biāo)人物可能會(huì)扭曲身體,一側(cè)肩關(guān)節(jié)被遮擋而無法有效得到體向量BV,所以只靠肩關(guān)節(jié)確定人的體向量BV和面向方向Vf是不可靠的。本文采用多對(duì)關(guān)節(jié)確定目標(biāo)人物的體向量BV,左右兩側(cè)肩關(guān)節(jié)、肘關(guān)節(jié)、髖關(guān)節(jié)、膝關(guān)節(jié)、踝關(guān)節(jié),根據(jù)圖7所示的Kinect追蹤關(guān)節(jié)點(diǎn)序號(hào)對(duì)照表,4號(hào)、8號(hào)分別對(duì)應(yīng)左右肩關(guān)節(jié),5號(hào)、9號(hào)分別對(duì)應(yīng)左右肘關(guān)節(jié),以此類推。由關(guān)節(jié)跟蹤狀態(tài)所分配的權(quán)重λi計(jì)算λ4·λ8,…,λ15·λ19,值為1,則取該對(duì)關(guān)節(jié)向量為人的體向量BV,從而確定面向方向。
圖7 關(guān)節(jié)點(diǎn)序號(hào)對(duì)照?qǐng)D
Kinect無法區(qū)分跟蹤目標(biāo)的正面和背面,當(dāng)人體背對(duì)向Kinect時(shí),Kinect依然會(huì)將獲取的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù)當(dāng)作人的正面來處理,這樣就會(huì)導(dǎo)致左右兩側(cè)數(shù)據(jù)顛倒。虛擬場(chǎng)景中的人體模型動(dòng)作也會(huì)發(fā)生左右側(cè)顛倒的情況,雖然仍可以正常動(dòng)作,但會(huì)影響用戶使用感受。而2臺(tái)Kinect數(shù)據(jù)融合時(shí),來自背面的左右顛倒的數(shù)據(jù)不經(jīng)過交換處理會(huì)影響融合后的結(jié)果,從而導(dǎo)致虛擬人體模型關(guān)節(jié)點(diǎn)位置錯(cuò)亂。因此,數(shù)據(jù)融合之前必須確定Kinect獲得的骨架數(shù)據(jù)來自人體的正面還是背面。如果來自背面,使用左右側(cè)關(guān)節(jié)點(diǎn)數(shù)據(jù)交換(left-and right-ide data swapping,LRS)函數(shù)交換左右側(cè)骨骼關(guān)節(jié)點(diǎn)的數(shù)據(jù),以保證數(shù)據(jù)的正確性。在程序開始的第一幀,用戶正面向Kinect1,以Kinect1獲取的關(guān)節(jié)點(diǎn)數(shù)據(jù)確定此時(shí)人體的面向方向Vf0,這樣就可以獲得Kinect1和Kinect2的方向Vk1和Vk2。Vk1與面向方向Vf0夾角為180°,Vk2與面向方向Vf0的夾角為90°。程序運(yùn)行過程中,人體的面向方向?yàn)閂f,分別計(jì)算Vf·Vk1與Vf·Vk2,若Vf·Vk1>0,則人體背對(duì)Kinect1,使用LRS函數(shù)交換Kinect1獲取到的左右側(cè)骨骼關(guān)節(jié)點(diǎn)的數(shù)據(jù);若Vf·Vk1<0,則不進(jìn)行交換處理。Kinect2獲取的骨架數(shù)據(jù)如前所述處理。人體面向方向與2臺(tái)Kinect方向示意圖如圖8所示。圖中α1、α2分別為人體面向方向向量Vf與Kinect1、Kinect2方向向量之間的夾角。
圖8 人體面向方向與Kinect方向示意圖
Kinect獲取目標(biāo)人物的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù)時(shí),可能會(huì)存在關(guān)節(jié)未追蹤到的情況,那么未跟蹤到的關(guān)節(jié)點(diǎn)數(shù)據(jù)將是非常不準(zhǔn)確的,在數(shù)據(jù)融合中應(yīng)剔除掉。在Kinect SDK報(bào)告中可以讀取到25個(gè)關(guān)節(jié)點(diǎn)的跟蹤狀態(tài),共有3種不同狀態(tài),分別為“跟蹤到”“不確定”和“未跟蹤到”。根據(jù)3種不同的狀態(tài)為25個(gè)關(guān)節(jié)數(shù)據(jù)分配不同的權(quán)重λ,依次分別為1、0.5、0。
人體在Kinect前方不同方位時(shí),Kinect所獲取的精度不同。例如,當(dāng)人體正面面向Kinect時(shí)所獲得的數(shù)據(jù)精度最高,隨著人體面向方向與Kinect的鏡頭方向之間的角度α越來越大時(shí),所獲得的數(shù)據(jù)精度將越來越低,90°時(shí)將會(huì)有一側(cè)的關(guān)節(jié)被另一側(cè)遮擋而無法跟蹤到,此時(shí)所獲得的數(shù)據(jù)精度最差。因此,在數(shù)據(jù)融合中根據(jù)人體面向方向的角度變化自動(dòng)為每臺(tái)Kinect賦予不同的權(quán)重。2臺(tái)Kinect采用正交布置方式,故2臺(tái)Kinect相機(jī)鏡頭方向相差90°,當(dāng)被捕捉的人體正面向Kinect1時(shí),必定側(cè)向Kinect2。也就是說,當(dāng)Kinect1捕捉到的人體骨架數(shù)據(jù)最全面精確時(shí),Kinect2捕捉到的人體骨架數(shù)據(jù)最不完整,所以當(dāng)人面向方向與Kinect1方向的夾角α1為180°或0°時(shí),取Kinect1權(quán)重為1,此時(shí)Kinect2的權(quán)重為0;人面向方向與Kinect1方向的夾角α2為90°時(shí),取Kinect1權(quán)重為0,此時(shí)Kinect2的權(quán)重為1。0°~90°夾角范圍的權(quán)重為遞減函數(shù),隨面向方向與Kinect方向之間的夾角α變化自適應(yīng)調(diào)整。為減少程序運(yùn)算時(shí)間,提高系統(tǒng)實(shí)時(shí)性,本文設(shè)計(jì)權(quán)重調(diào)整函數(shù)為一次函數(shù),如圖9所示,Kinect1和Kinect2的權(quán)重調(diào)整函數(shù)相同。
圖9 Kinect權(quán)重自適應(yīng)調(diào)整函數(shù)
根據(jù)自適應(yīng)權(quán)重分配原則得到的關(guān)節(jié)點(diǎn)權(quán)重與Kinect權(quán)重,將2臺(tái)Kinect獲取的骨骼關(guān)節(jié)點(diǎn)的位置坐標(biāo)進(jìn)行加權(quán)平均融合計(jì)算。融合計(jì)算公式為
(2)
根據(jù)上述自適應(yīng)加權(quán)數(shù)據(jù)融合算法,繪制算法流程,如圖10所示。
雙Kinect全身運(yùn)動(dòng)捕捉系統(tǒng)以2臺(tái)Kinect傳感器檢測(cè)并跟蹤重疊區(qū)域內(nèi)的人體目標(biāo),獲取真實(shí)三維空間中人體的運(yùn)動(dòng)數(shù)據(jù)。在Unity3D中,通過C#編程,將從Kinect客戶端接收到的骨骼關(guān)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行融合計(jì)算,在虛擬場(chǎng)景中建立三維運(yùn)動(dòng)骨骼模型,并使之真實(shí)地實(shí)時(shí)反映現(xiàn)實(shí)場(chǎng)景中人體的運(yùn)動(dòng)。系統(tǒng)搭建完成后,在Unity3D的場(chǎng)景中創(chuàng)建一個(gè)三維人體骨骼模型,且模型的關(guān)節(jié)點(diǎn)位置隨人體動(dòng)作實(shí)時(shí)刷新,模型動(dòng)作與現(xiàn)實(shí)場(chǎng)景中的人體動(dòng)作基本一致。如圖11所示是程序運(yùn)行某一幀的人體骨骼模型。
圖10 數(shù)據(jù)融合算法流程
圖11 虛擬環(huán)境中的人體骨骼模型
為增強(qiáng)用戶的真實(shí)感與沉浸感,虛擬場(chǎng)景中虛擬人體骨骼模型需要實(shí)時(shí)跟隨用戶運(yùn)動(dòng)?!皩?shí)時(shí)”的含義包括對(duì)運(yùn)動(dòng)人體的位置與姿態(tài)動(dòng)作進(jìn)行實(shí)時(shí)捕捉與三維重建,場(chǎng)景畫面更新時(shí)間間隔不能超過一定的閾值,使人眼無法觀察到閃爍,系統(tǒng)可以立即響應(yīng)用戶的輸入并生成相應(yīng)的場(chǎng)景和事件[21-22]。一般來說,系統(tǒng)延遲時(shí)間在100 ms以上,用戶就會(huì)感覺到虛擬人體動(dòng)作的明顯滯后,嚴(yán)重影響用戶的沉浸感,所以本文中系統(tǒng)的每2幀之間更新的時(shí)間控制在100 ms以內(nèi)。虛擬場(chǎng)景中的畫面更新間隔時(shí)間包括Kinect客戶端檢測(cè)到用戶獲取骨骼幀數(shù)據(jù)并向服務(wù)器端發(fā)送數(shù)據(jù)的時(shí)間,服務(wù)器端接收到數(shù)據(jù)后進(jìn)行數(shù)據(jù)融合運(yùn)算并在Unity3D虛擬場(chǎng)景中可視化表達(dá)的時(shí)間。
經(jīng)過多次試驗(yàn)測(cè)試系統(tǒng)更新間隔時(shí)間,發(fā)現(xiàn)每次更新花費(fèi)時(shí)間最久的部分是Kinect獲取人體骨骼數(shù)據(jù)的間隔,時(shí)間間隔大約為33 ms,網(wǎng)絡(luò)數(shù)據(jù)傳輸與服務(wù)器數(shù)據(jù)融合的時(shí)間都小于1 ms,整個(gè)系統(tǒng)完成數(shù)據(jù)更新的總時(shí)間間隔小于35 ms,滿足實(shí)時(shí)性要求,用戶不會(huì)感覺到明顯的延遲。
圖12中統(tǒng)計(jì)了數(shù)據(jù)融合前后關(guān)節(jié)點(diǎn)未被跟蹤到的次數(shù),藍(lán)色和橙色分別代表融合前Kinect1和Kinect2的關(guān)節(jié)點(diǎn)數(shù)據(jù),黃色則代表2臺(tái)Kinect融合之后的關(guān)節(jié)點(diǎn)數(shù)據(jù)。由圖中數(shù)據(jù)對(duì)比,發(fā)現(xiàn)數(shù)據(jù)融合前每臺(tái)Kinect關(guān)節(jié)點(diǎn)未被跟蹤到的次數(shù)都要大于融合后的關(guān)節(jié)點(diǎn)未被跟蹤到的次數(shù),所以1臺(tái)Kinect未跟蹤到某個(gè)骨骼點(diǎn)而另1臺(tái)Kinect跟蹤到時(shí),系統(tǒng)仍然可以獲得該骨骼點(diǎn)的位置坐標(biāo)。由于Kinect捕捉范圍有限,當(dāng)人體運(yùn)動(dòng)超出2臺(tái)Kinect的捕捉范圍,骨骼點(diǎn)就無法被追蹤到。當(dāng)2臺(tái)Kinect都未跟蹤到某個(gè)骨骼點(diǎn)時(shí),系統(tǒng)也就無法正確獲得該骨骼點(diǎn)的位置坐標(biāo),從而導(dǎo)致人體骨骼模型的關(guān)節(jié)可能發(fā)生錯(cuò)亂。由圖12可看出,Kinect對(duì)于手部關(guān)節(jié)點(diǎn)的捕捉精度不高,無法達(dá)到像人體其他關(guān)節(jié)點(diǎn)一樣的精確捕捉,對(duì)手指的細(xì)節(jié)動(dòng)作難以正確檢測(cè)。
圖12 融合前后人體關(guān)節(jié)未被跟蹤到的次數(shù)對(duì)比
單臺(tái)Kinect捕捉人體骨骼數(shù)據(jù)存在自遮擋問題。當(dāng)人體側(cè)向Kinect設(shè)備時(shí),遠(yuǎn)離Kinect一側(cè)的關(guān)節(jié)會(huì)被遮擋,從而捕捉不到完整的人體骨骼數(shù)據(jù),在虛擬場(chǎng)景中得到的人體骨骼模型會(huì)發(fā)生部分錯(cuò)亂,不能正常與現(xiàn)實(shí)人體同步動(dòng)作。經(jīng)過試驗(yàn),基于雙Kinect自適應(yīng)加權(quán)數(shù)據(jù)融合算法的全身運(yùn)動(dòng)捕捉系統(tǒng)可以解決人體自遮擋問題。當(dāng)人體側(cè)面向1臺(tái)Kinect時(shí),必然正面向另1臺(tái)Kinect設(shè)備,經(jīng)過數(shù)據(jù)融合算法將2臺(tái)Kinect獲取的關(guān)節(jié)點(diǎn)數(shù)據(jù)融合之后,虛擬環(huán)境中的人體骨骼模型依然完整,沒有出現(xiàn)關(guān)節(jié)錯(cuò)位等問題,可以與現(xiàn)實(shí)中的人體實(shí)時(shí)同步動(dòng)作,達(dá)到預(yù)期要求。試驗(yàn)結(jié)果如圖13所示,圖(中)為當(dāng)人體右肩正對(duì)Kinect2時(shí),單獨(dú)Kinect2獲取的數(shù)據(jù)構(gòu)建骨骼模型,可以明顯看到因?yàn)檎趽踝笫直鄣膭?dòng)作與實(shí)際人體不相符;圖(右)是相同情況下2臺(tái)Kinect數(shù)據(jù)融合后的骨骼模型,其動(dòng)作與實(shí)際人體一致,證實(shí)了數(shù)據(jù)融合的正確性。
圖13 人側(cè)向Kinect2時(shí)數(shù)據(jù)融合前(中)后(右)骨骼模型
動(dòng)作捕捉技術(shù)是虛擬現(xiàn)實(shí)應(yīng)用中不可或缺的部分??紤]人機(jī)功效的虛擬裝配是機(jī)械裝配設(shè)計(jì)的關(guān)鍵,可以提高裝配效率、降低裝配成本。為了提高Kinect動(dòng)作捕捉數(shù)據(jù)的精度,本文提出了2臺(tái)Kinect自適應(yīng)加權(quán)數(shù)據(jù)融合算法,根據(jù)關(guān)節(jié)跟蹤狀態(tài)和人體面向方向與Kinect方向之間的夾角自動(dòng)調(diào)整權(quán)重,將2臺(tái)Kinect捕捉到的數(shù)據(jù)進(jìn)行融合計(jì)算,搭建了基于UDP協(xié)議的雙Kinect人體全身運(yùn)動(dòng)捕捉系統(tǒng),實(shí)現(xiàn)虛擬人體骨骼模型隨人體實(shí)時(shí)隨動(dòng),并對(duì)系統(tǒng)的實(shí)時(shí)性與準(zhǔn)確性進(jìn)行了試驗(yàn)分析。試驗(yàn)結(jié)果表明,系統(tǒng)解決了人體運(yùn)動(dòng)捕捉過程中存在的前后模糊與自遮擋問題,為將來虛擬環(huán)境中的人體模型在裝配設(shè)計(jì)人機(jī)工效的研究與應(yīng)用方面提供了技術(shù)支持。