馮 霞,劉 萍
(河南師范大學(xué),河南 新鄉(xiāng) 453007)
近年來,虛擬人運(yùn)動(dòng)逐漸應(yīng)用在影視、醫(yī)療、游戲、建筑等諸多行業(yè)[1]。為了精確地模擬虛擬人運(yùn)動(dòng),通常采用的建模方法為:關(guān)鍵幀、數(shù)據(jù)追蹤和運(yùn)動(dòng)學(xué)。大量學(xué)者通過計(jì)算人體重要關(guān)節(jié)的變化量,來確保人體運(yùn)動(dòng)的穩(wěn)定性。文獻(xiàn)[2]提出面向反饋運(yùn)動(dòng)的多目標(biāo)人體運(yùn)動(dòng)方法,通過對(duì)運(yùn)動(dòng)數(shù)據(jù)的預(yù)處理,提取出關(guān)鍵幀設(shè)計(jì)反饋運(yùn)動(dòng)機(jī)制,基于種群父代產(chǎn)生子代,結(jié)合區(qū)域篩選出不符合條件的個(gè)體,經(jīng)過不斷地迭代,生成具有反饋的運(yùn)動(dòng)控制器,實(shí)驗(yàn)結(jié)果表明,該方法可以有效地控制外界干擾,然而優(yōu)化時(shí)間需要進(jìn)一步提高。文獻(xiàn)[3]提出人體關(guān)節(jié)約束的建模逆運(yùn)動(dòng)學(xué)方法,對(duì)循環(huán)坐標(biāo)下降進(jìn)行改進(jìn),并引入SHAKE算法,對(duì)多節(jié)點(diǎn)進(jìn)行模擬,提升建模效果,實(shí)驗(yàn)結(jié)果表明,該方法與人體運(yùn)動(dòng)實(shí)際數(shù)據(jù)相似性很高,但準(zhǔn)確率還需進(jìn)一步提高。文獻(xiàn)[4]提出四元數(shù)插值的虛擬運(yùn)動(dòng)方法,通過人體結(jié)構(gòu)模擬骨架模型,進(jìn)而模擬出人體運(yùn)動(dòng)模型,基于XML法建立關(guān)鍵幀,并采用四元數(shù)插值法對(duì)關(guān)鍵幀進(jìn)行處理形成中間幀,完成OpenGL的可視化編程,實(shí)驗(yàn)結(jié)果表明,該方法對(duì)虛擬人體左右轉(zhuǎn)向這些簡(jiǎn)單的運(yùn)動(dòng)能夠準(zhǔn)確的模擬,但不能模擬出較為復(fù)雜的運(yùn)動(dòng)。
針對(duì)以上研究成果,本文提出逆運(yùn)動(dòng)學(xué)與誤差補(bǔ)償?shù)奶摂M人運(yùn)動(dòng)控制方法,基于逆向運(yùn)動(dòng)學(xué)對(duì)人體關(guān)節(jié)的位置進(jìn)行有效地預(yù)測(cè),通過建立誤差補(bǔ)償矩陣,對(duì)人體下肢運(yùn)動(dòng)進(jìn)行誤差修正。
人體關(guān)節(jié)是人體器官的重要組成部分,在人體運(yùn)動(dòng)中起著樞紐和連接的作用。大量的學(xué)者運(yùn)用逆運(yùn)動(dòng)學(xué)算法時(shí),常常采用旋轉(zhuǎn)歐拉角的計(jì)算方法,該方法在跟蹤人體運(yùn)動(dòng)時(shí),由于人體關(guān)節(jié)會(huì)沿著某個(gè)方向發(fā)生旋轉(zhuǎn),因此計(jì)算出來的角度存在誤差,于是,本文提出了一種更加精確旋轉(zhuǎn)歐拉角計(jì)算方法。
在三維立體空間中,可通過歐拉角(φ,φ,θ)表示運(yùn)動(dòng)的旋轉(zhuǎn)方向,歐拉角旋轉(zhuǎn)定理用公式表示為
(1)
由歐拉角可以將任意兩個(gè)具有相同原點(diǎn)的固定軸,按某一方向進(jìn)行旋轉(zhuǎn)得到變換后的坐標(biāo)系。變換后的參量可通過歐拉角和這條固定軸一起表示出來,歐拉角和歐拉軸如圖1所示。
圖1 歐拉角和歐拉軸示意圖
假定三維立體空間中初始向量為l,繞歐拉軸旋轉(zhuǎn)后的向量為l′,那么歐拉軸的單位向量和旋轉(zhuǎn)角的余弦用公式可表示為
(2)
(3)
(4)
由于得出的歐拉角φ、φ、θ是準(zhǔn)確值,因此通過逆運(yùn)動(dòng)學(xué)算法可以準(zhǔn)確的跟蹤人體運(yùn)動(dòng)。確定歐拉角只是逆運(yùn)動(dòng)學(xué)的基礎(chǔ),接下來需要進(jìn)一步預(yù)測(cè)人體關(guān)節(jié)在虛擬運(yùn)動(dòng)中的位置。為了避免人體關(guān)節(jié)預(yù)測(cè)出現(xiàn)較大的偏差,導(dǎo)致跟蹤錯(cuò)誤,本文采用粒子濾波自回歸方法[5]預(yù)測(cè)人體關(guān)節(jié)的位置。假設(shè)人體運(yùn)動(dòng)的歷史狀態(tài)為xhis,當(dāng)前狀態(tài)為xtod,在有隨機(jī)干擾的情況下,當(dāng)前狀態(tài)的確定性函數(shù)可表示為
(5)
其中,bi表示自回歸系數(shù);ζtod表示隨機(jī)干擾。由于對(duì)人體運(yùn)動(dòng)跟蹤是一個(gè)連續(xù)的過程,因此采用三階自回歸變速模型,公式表示為
xtod=A1xtod-1+A2xtod-1+A3xtod-1+ANNnoi
(6)
其中,A1,A2,A3,AN表示三階自回歸系數(shù);Nnoi表示均值為0、方差為1的噪聲。變速模型能夠更準(zhǔn)確地描述人體關(guān)節(jié),即使關(guān)節(jié)有抖動(dòng)也可以通過引入的噪聲進(jìn)行消除?;谀孢\(yùn)動(dòng)學(xué)的方法能夠?qū)θ梭w關(guān)節(jié)的位置進(jìn)行有效地預(yù)測(cè),為后續(xù)工作提供最優(yōu)估計(jì),大大改善人體運(yùn)動(dòng)的跟蹤性能。
通過人體關(guān)節(jié)模型可以對(duì)人體運(yùn)動(dòng)進(jìn)行跟蹤,但由于人體骨架對(duì)關(guān)節(jié)的運(yùn)動(dòng)數(shù)據(jù)有影響,導(dǎo)致關(guān)節(jié)數(shù)據(jù)存在偏差,因此需要建立誤差補(bǔ)償矩陣,對(duì)運(yùn)動(dòng)跟蹤進(jìn)行誤差修正。以人體下肢運(yùn)動(dòng)為研究對(duì)象,計(jì)算人體運(yùn)動(dòng)髖、膝、踝關(guān)節(jié)的中心位置,人體運(yùn)動(dòng)過程中大腿和小腿的相對(duì)姿勢(shì)很難保證兩個(gè)自由度的約束條件。因此需要對(duì)肢體坐標(biāo)進(jìn)行修正,首先要對(duì)關(guān)節(jié)自由度進(jìn)行約束,關(guān)節(jié)自由度約束公式表示為
(7)
其中,αthigh和αcalf表示對(duì)位置變換的修正角度;Fx(αthigh)和Fx(αcalf)表示繞x軸的旋轉(zhuǎn)矩陣。由于從髖關(guān)節(jié)到腳心的運(yùn)動(dòng)驅(qū)動(dòng)過程中,各個(gè)連接點(diǎn)在坐標(biāo)系中的位置與姿勢(shì)數(shù)據(jù)都會(huì)對(duì)運(yùn)動(dòng)跟蹤的準(zhǔn)確度造成影響,因此需要通過位置誤差求解肢體在坐標(biāo)系下的姿勢(shì)最優(yōu)值。假定Zthigh_hip表示大腿相對(duì)于髖關(guān)節(jié)坐標(biāo)系的姿勢(shì)矩陣;Zcalf_thigh表示小腿相對(duì)于大腿坐標(biāo)系的姿勢(shì)矩陣,則公式可表示為
(8)
其中,Ghip表示髖關(guān)節(jié)姿勢(shì)矩陣;Gthigh表示大腿姿勢(shì)矩陣;Ghip_A表示髖關(guān)節(jié)實(shí)時(shí)運(yùn)動(dòng)姿勢(shì);Gthigh_A表示大腿實(shí)時(shí)運(yùn)動(dòng)姿勢(shì);Gcalf表示小腿姿勢(shì)矩陣;Gcalf_A表示小腿實(shí)時(shí)運(yùn)動(dòng)姿勢(shì);Zhip表示髖關(guān)節(jié)姿勢(shì)變換矩陣;Zthigh表示大腿姿勢(shì)變換矩陣;Zcalf表示小臂姿勢(shì)變換矩陣。
姿勢(shì)變換的求精問題可大致表現(xiàn)為:已知一組下肢運(yùn)動(dòng)軌跡為[Ghip_Ai,Gthigh_Ai,Gcalf_Ai,Gsole_Ai,],初始大腿和小腿初始變換關(guān)系為Zthigh_init和Zcalf_init,最優(yōu)修正角分別為αthigh和αcalf,那么目標(biāo)函數(shù)的最小值用公式可表示為
(9)
(10)
其中,F(xiàn)thigh_hip表示大腿相對(duì)于髖關(guān)節(jié)坐標(biāo)系的姿勢(shì);hthigh_hip表示大腿相對(duì)于髖關(guān)節(jié)坐標(biāo)系的位置;Fcalf_thigh表示小腿相對(duì)于大腿坐標(biāo)系的姿勢(shì);hcalf_thigh表示小腿相對(duì)于大腿坐標(biāo)系的位置。為了滿足人體關(guān)節(jié)位置能夠不斷連續(xù),需進(jìn)一步對(duì)式(10)中的hthigh_hip和hcalf_thigh進(jìn)行修正,公式表示為
(11)
其中,Kbuttocks_hip表示臀部相對(duì)于髖關(guān)節(jié)點(diǎn)坐標(biāo)系的位置;Kknee_thigh表示膝關(guān)節(jié)點(diǎn)相對(duì)于大腿坐標(biāo)系的位置。由于膝關(guān)節(jié)的旋轉(zhuǎn)是2個(gè)自由度的旋轉(zhuǎn),在空間坐標(biāo)系中可認(rèn)為小腿相對(duì)于大腿的旋轉(zhuǎn)為x和z軸兩個(gè)方向的旋轉(zhuǎn),因此可將旋轉(zhuǎn)矩陣進(jìn)行分解,公式表示為
Fcalf_thigh=Fcalf_thighzFcalf_thighyFcalf_thighx
(12)
在大腿繞旋轉(zhuǎn)軸進(jìn)行旋轉(zhuǎn)時(shí),會(huì)受到誤差的影響,在某一時(shí)刻(k時(shí)刻),可通過大腿旋轉(zhuǎn)角度與真實(shí)角度計(jì)算出角度偏差Δψthigh_xk,因此可按照坐標(biāo)軸x→z→y的旋轉(zhuǎn)順序?qū)κ?12)中的Fcalf_thigh_k進(jìn)行分解,公式表示為
(13)
由式(13)可知,可通過三角函數(shù)逆運(yùn)算計(jì)算出大腿角度偏差,進(jìn)而完成大腿旋轉(zhuǎn)誤差補(bǔ)償矩陣的構(gòu)建,公式表示為
(14)
通過計(jì)算出ΔGthigh_k,最終完成對(duì)肢體姿勢(shì)跟蹤的誤差補(bǔ)償。
對(duì)虛擬系統(tǒng)進(jìn)行分析時(shí),常采用人類最基本的行走運(yùn)動(dòng)方式,通過控制人類的行走方向和速度建立虛擬人的行走畫面。行走的姿勢(shì)主要是左腿和右腿反復(fù)循環(huán)抬起向前邁步的過程。在不考慮外部干擾的情況下,人體行走可簡(jiǎn)化為骨骼相對(duì)于關(guān)節(jié)做旋轉(zhuǎn)運(yùn)動(dòng)以及自身的平移運(yùn)動(dòng)。人體的平移運(yùn)動(dòng)是以落地那只腳為旋轉(zhuǎn)點(diǎn),以髖關(guān)節(jié)距離地面的距離為半徑,以一定的角度γ做旋轉(zhuǎn),不斷進(jìn)行左右腳的反復(fù)才形成了身體的平移運(yùn)動(dòng)。假定人體的平移速度為Vmove,邁一步的距離為Dstep,完成一個(gè)周期的時(shí)間為T,那么Dstep和T之間的關(guān)系用公式可表示為[6]
(15)
其中,H表示髖關(guān)節(jié)到踝關(guān)節(jié)的距離;γmax和γmin分別表示大腿骨骼與人體中心位置之間的最大和最小夾角。
(16)
基于人體下肢行走動(dòng)作的識(shí)別,采用髖關(guān)節(jié)點(diǎn)在世界坐標(biāo)系中的速度變化曲線,以及膝關(guān)節(jié)點(diǎn)和踝關(guān)節(jié)點(diǎn)相對(duì)于父節(jié)點(diǎn)在局部坐標(biāo)系中的角度變化曲線,可以獲得虛擬人的下肢運(yùn)動(dòng)特征,實(shí)現(xiàn)對(duì)虛擬人走路和跑步的識(shí)別。具體步驟如下:
1)初始時(shí)刻,虛擬人髖關(guān)節(jié)點(diǎn)在局部坐標(biāo)系中的各坐標(biāo)軸與在世界坐標(biāo)系中的各坐標(biāo)軸方向一致。設(shè)閾值為Yvalue_y,當(dāng)人左右踝關(guān)節(jié)點(diǎn)在世界坐標(biāo)系中的y坐標(biāo)值小于閾值Yvalue_y時(shí),可認(rèn)為人腳部著地。
2)設(shè)在t時(shí)刻世界坐標(biāo)系中,虛擬人髖關(guān)節(jié)點(diǎn)的位置坐標(biāo)為[xhip_t,yhip_t,zhip_t],且局部坐標(biāo)系相對(duì)于世界坐標(biāo)系各軸的旋轉(zhuǎn)角度為[λx,λy,λz],對(duì)一個(gè)周期T內(nèi)的人體下肢動(dòng)作進(jìn)行識(shí)別。
3)當(dāng)識(shí)別出人體走路或跑步時(shí),控制虛擬人完成類似的走路或跑步動(dòng)作。根據(jù)左右上肢繞x軸的旋轉(zhuǎn)角度,確定虛擬人是前進(jìn)還是后退。虛擬人的運(yùn)動(dòng)過程如下:
①在t時(shí)刻,操作人員髖關(guān)節(jié)點(diǎn)在局部坐標(biāo)系中的初始旋轉(zhuǎn)角度為[λx_i(t),λy_i(t),λz_i(t)],在t+Δt時(shí)刻旋轉(zhuǎn)角度的變化量為[Δλx_i(t),Δλy_i(t),Δλz_i(t)],為了方便對(duì)虛擬人運(yùn)動(dòng)過程的控制,設(shè)τ為Δλi(t)增益系數(shù),有
(17)
②操作人員在控制虛擬人前進(jìn)過程中,若在t時(shí)刻鄰近的周期T時(shí)間段,發(fā)現(xiàn)第一次腳與地面有接觸,或者雙腳交替與地面有接觸,下肢運(yùn)動(dòng)的步行幅值為Bamp,那么可對(duì)虛擬人髖關(guān)節(jié)點(diǎn)的位置坐標(biāo)[x′,y′,z′]進(jìn)行下一步運(yùn)動(dòng)預(yù)判,有
(18)
若操作人員控制虛擬人后退,有:
(19)
③在控制虛擬人前進(jìn)或后退的過程中,如果下肢動(dòng)作仍然為走路或者跑步狀態(tài),則[ζx,ζy,ζz]與[λx,λy,λz]的更新方法與步驟2)~3)一致,且髖關(guān)節(jié)點(diǎn)的空間位置和其下肢關(guān)節(jié)點(diǎn)相對(duì)于父關(guān)節(jié)點(diǎn)的運(yùn)動(dòng)狀態(tài)均保持不變。此時(shí)便可根據(jù)髖關(guān)節(jié)點(diǎn)在世界坐標(biāo)系的空間位置變化量,控制虛擬人髖關(guān)節(jié)點(diǎn)的位置坐標(biāo)變化,也可以根據(jù)其運(yùn)動(dòng)信息的捕捉,驅(qū)動(dòng)虛擬人的其關(guān)節(jié)節(jié)點(diǎn)的運(yùn)動(dòng)。
4)對(duì)虛擬人運(yùn)動(dòng)狀態(tài)大范圍模擬結(jié)束后,可根據(jù)運(yùn)動(dòng)捕捉系統(tǒng)以及通過數(shù)據(jù)手套獲得的人體各節(jié)點(diǎn)運(yùn)動(dòng)數(shù)據(jù),完成對(duì)虛擬人的整個(gè)運(yùn)動(dòng)過程。
為了驗(yàn)證逆運(yùn)動(dòng)學(xué)與誤差補(bǔ)償方法對(duì)虛擬人運(yùn)動(dòng)控制的情況,采用Microsoft Visual Studio 2013編程環(huán)境實(shí)現(xiàn)算法,基于OptiTrack系統(tǒng)對(duì)虛擬人的運(yùn)動(dòng)數(shù)據(jù)進(jìn)行實(shí)時(shí)獲取和識(shí)別。
通過本文提出的誤差補(bǔ)償方法對(duì)大腿髖關(guān)節(jié)進(jìn)行修正,并將修正后的結(jié)果與沒有進(jìn)行修正前的結(jié)果進(jìn)行對(duì)比,如圖2所示。從圖中可以看出,沒有進(jìn)行誤差補(bǔ)償時(shí),生成的行走運(yùn)動(dòng)基本無(wú)法完成,仿真骨架走一步后便摔倒。而使用本文提出的誤差補(bǔ)償方法后,生成的行走運(yùn)動(dòng)可以保持穩(wěn)定,仿真骨架一直持續(xù)也沒有出現(xiàn)過摔倒現(xiàn)象,很好的模擬了真實(shí)行走過程。
圖2 誤差補(bǔ)償修正前、后對(duì)比結(jié)果
設(shè)計(jì)虛擬人運(yùn)動(dòng)環(huán)境,定義虛擬人腿部姿勢(shì)描述信息模型,建立虛擬人腿部和地面的交互相應(yīng)機(jī)制,完善虛擬人的走路和跑步過程模型?;谔摂M人運(yùn)動(dòng)數(shù)據(jù)以及下肢動(dòng)作的識(shí)別過程,實(shí)現(xiàn)對(duì)虛擬人走路或跑步仿真平臺(tái)的開發(fā)。仿真過程分析了1萬(wàn)個(gè)物理仿真步,并將本文方法與文獻(xiàn)[2]、文獻(xiàn)[3]和文獻(xiàn)[4]對(duì)虛擬人右腿髖關(guān)節(jié)跟蹤誤差進(jìn)行實(shí)驗(yàn)對(duì)比,結(jié)果如圖3所示。
圖3 虛擬人右腿髖關(guān)節(jié)誤差對(duì)比圖
從圖中可以看出,在文獻(xiàn)[2]提出的方法作用下,虛擬人可以維持穩(wěn)定的行走運(yùn)動(dòng),但追蹤誤差峰值較大,震蕩很明顯。在文獻(xiàn)[3]提出的方法作用下,虛擬人會(huì)因?yàn)轵?qū)動(dòng)力不足或驅(qū)動(dòng)力較大等原因而發(fā)生摔倒現(xiàn)象。文獻(xiàn)[4]提出的方法方差較大,對(duì)抗外界的干擾能力不足。而本文提出的方法可以根據(jù)虛擬人的行走情況,很好的維持穩(wěn)定運(yùn)動(dòng),即使在增益很大的情況下也可以保持較小的震蕩,說明本文所提出的逆運(yùn)動(dòng)學(xué)與誤差補(bǔ)償方法可以準(zhǔn)確地跟蹤虛擬人運(yùn)動(dòng)姿勢(shì),且對(duì)外界的抗干擾能力較強(qiáng)。
本文針對(duì)虛擬人運(yùn)動(dòng)控制提出了一種逆運(yùn)動(dòng)學(xué)與誤差補(bǔ)償?shù)姆椒?,使虛擬人能夠根據(jù)實(shí)際控制情況,做出相應(yīng)的運(yùn)動(dòng)行為。通過對(duì)大腿和髖關(guān)節(jié)的旋轉(zhuǎn)跟蹤以及虛擬人的運(yùn)動(dòng)控制實(shí)驗(yàn),證明本文提出的誤差補(bǔ)償方法可以適應(yīng)不同膝關(guān)節(jié)內(nèi)的大腿軸旋轉(zhuǎn)跟蹤誤差修正,且補(bǔ)償精度較高;另外,虛擬人能夠根據(jù)當(dāng)前運(yùn)動(dòng)狀態(tài)合理有效完成后續(xù)動(dòng)作,具有較高的準(zhǔn)確性和穩(wěn)定性,同時(shí)保持良好的抗干擾能力。