馮 霞,劉 萍
(河南師范大學(xué),河南 新鄉(xiāng) 453007)
近年來,虛擬人運動逐漸應(yīng)用在影視、醫(yī)療、游戲、建筑等諸多行業(yè)[1]。為了精確地模擬虛擬人運動,通常采用的建模方法為:關(guān)鍵幀、數(shù)據(jù)追蹤和運動學(xué)。大量學(xué)者通過計算人體重要關(guān)節(jié)的變化量,來確保人體運動的穩(wěn)定性。文獻[2]提出面向反饋運動的多目標(biāo)人體運動方法,通過對運動數(shù)據(jù)的預(yù)處理,提取出關(guān)鍵幀設(shè)計反饋運動機制,基于種群父代產(chǎn)生子代,結(jié)合區(qū)域篩選出不符合條件的個體,經(jīng)過不斷地迭代,生成具有反饋的運動控制器,實驗結(jié)果表明,該方法可以有效地控制外界干擾,然而優(yōu)化時間需要進一步提高。文獻[3]提出人體關(guān)節(jié)約束的建模逆運動學(xué)方法,對循環(huán)坐標(biāo)下降進行改進,并引入SHAKE算法,對多節(jié)點進行模擬,提升建模效果,實驗結(jié)果表明,該方法與人體運動實際數(shù)據(jù)相似性很高,但準(zhǔn)確率還需進一步提高。文獻[4]提出四元數(shù)插值的虛擬運動方法,通過人體結(jié)構(gòu)模擬骨架模型,進而模擬出人體運動模型,基于XML法建立關(guān)鍵幀,并采用四元數(shù)插值法對關(guān)鍵幀進行處理形成中間幀,完成OpenGL的可視化編程,實驗結(jié)果表明,該方法對虛擬人體左右轉(zhuǎn)向這些簡單的運動能夠準(zhǔn)確的模擬,但不能模擬出較為復(fù)雜的運動。
針對以上研究成果,本文提出逆運動學(xué)與誤差補償?shù)奶摂M人運動控制方法,基于逆向運動學(xué)對人體關(guān)節(jié)的位置進行有效地預(yù)測,通過建立誤差補償矩陣,對人體下肢運動進行誤差修正。
人體關(guān)節(jié)是人體器官的重要組成部分,在人體運動中起著樞紐和連接的作用。大量的學(xué)者運用逆運動學(xué)算法時,常常采用旋轉(zhuǎn)歐拉角的計算方法,該方法在跟蹤人體運動時,由于人體關(guān)節(jié)會沿著某個方向發(fā)生旋轉(zhuǎn),因此計算出來的角度存在誤差,于是,本文提出了一種更加精確旋轉(zhuǎn)歐拉角計算方法。
在三維立體空間中,可通過歐拉角(φ,φ,θ)表示運動的旋轉(zhuǎn)方向,歐拉角旋轉(zhuǎn)定理用公式表示為

(1)
由歐拉角可以將任意兩個具有相同原點的固定軸,按某一方向進行旋轉(zhuǎn)得到變換后的坐標(biāo)系。變換后的參量可通過歐拉角和這條固定軸一起表示出來,歐拉角和歐拉軸如圖1所示。

圖1 歐拉角和歐拉軸示意圖
假定三維立體空間中初始向量為l,繞歐拉軸旋轉(zhuǎn)后的向量為l′,那么歐拉軸的單位向量和旋轉(zhuǎn)角的余弦用公式可表示為

(2)


(3)

(4)
由于得出的歐拉角φ、φ、θ是準(zhǔn)確值,因此通過逆運動學(xué)算法可以準(zhǔn)確的跟蹤人體運動。確定歐拉角只是逆運動學(xué)的基礎(chǔ),接下來需要進一步預(yù)測人體關(guān)節(jié)在虛擬運動中的位置。為了避免人體關(guān)節(jié)預(yù)測出現(xiàn)較大的偏差,導(dǎo)致跟蹤錯誤,本文采用粒子濾波自回歸方法[5]預(yù)測人體關(guān)節(jié)的位置。假設(shè)人體運動的歷史狀態(tài)為xhis,當(dāng)前狀態(tài)為xtod,在有隨機干擾的情況下,當(dāng)前狀態(tài)的確定性函數(shù)可表示為

(5)
其中,bi表示自回歸系數(shù);ζtod表示隨機干擾。由于對人體運動跟蹤是一個連續(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é)有抖動也可以通過引入的噪聲進行消除。基于逆運動學(xué)的方法能夠?qū)θ梭w關(guān)節(jié)的位置進行有效地預(yù)測,為后續(xù)工作提供最優(yōu)估計,大大改善人體運動的跟蹤性能。
通過人體關(guān)節(jié)模型可以對人體運動進行跟蹤,但由于人體骨架對關(guān)節(jié)的運動數(shù)據(jù)有影響,導(dǎo)致關(guān)節(jié)數(shù)據(jù)存在偏差,因此需要建立誤差補償矩陣,對運動跟蹤進行誤差修正。以人體下肢運動為研究對象,計算人體運動髖、膝、踝關(guān)節(jié)的中心位置,人體運動過程中大腿和小腿的相對姿勢很難保證兩個自由度的約束條件。因此需要對肢體坐標(biāo)進行修正,首先要對關(guān)節(jié)自由度進行約束,關(guān)節(jié)自由度約束公式表示為

(7)
其中,αthigh和αcalf表示對位置變換的修正角度;Fx(αthigh)和Fx(αcalf)表示繞x軸的旋轉(zhuǎn)矩陣。由于從髖關(guān)節(jié)到腳心的運動驅(qū)動過程中,各個連接點在坐標(biāo)系中的位置與姿勢數(shù)據(jù)都會對運動跟蹤的準(zhǔn)確度造成影響,因此需要通過位置誤差求解肢體在坐標(biāo)系下的姿勢最優(yōu)值。假定Zthigh_hip表示大腿相對于髖關(guān)節(jié)坐標(biāo)系的姿勢矩陣;Zcalf_thigh表示小腿相對于大腿坐標(biāo)系的姿勢矩陣,則公式可表示為

(8)
其中,Ghip表示髖關(guān)節(jié)姿勢矩陣;Gthigh表示大腿姿勢矩陣;Ghip_A表示髖關(guān)節(jié)實時運動姿勢;Gthigh_A表示大腿實時運動姿勢;Gcalf表示小腿姿勢矩陣;Gcalf_A表示小腿實時運動姿勢;Zhip表示髖關(guān)節(jié)姿勢變換矩陣;Zthigh表示大腿姿勢變換矩陣;Zcalf表示小臂姿勢變換矩陣。
姿勢變換的求精問題可大致表現(xiàn)為:已知一組下肢運動軌跡為[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表示大腿相對于髖關(guān)節(jié)坐標(biāo)系的姿勢;hthigh_hip表示大腿相對于髖關(guān)節(jié)坐標(biāo)系的位置;Fcalf_thigh表示小腿相對于大腿坐標(biāo)系的姿勢;hcalf_thigh表示小腿相對于大腿坐標(biāo)系的位置。為了滿足人體關(guān)節(jié)位置能夠不斷連續(xù),需進一步對式(10)中的hthigh_hip和hcalf_thigh進行修正,公式表示為

(11)
其中,Kbuttocks_hip表示臀部相對于髖關(guān)節(jié)點坐標(biāo)系的位置;Kknee_thigh表示膝關(guān)節(jié)點相對于大腿坐標(biāo)系的位置。由于膝關(guān)節(jié)的旋轉(zhuǎn)是2個自由度的旋轉(zhuǎn),在空間坐標(biāo)系中可認(rèn)為小腿相對于大腿的旋轉(zhuǎn)為x和z軸兩個方向的旋轉(zhuǎn),因此可將旋轉(zhuǎn)矩陣進行分解,公式表示為
Fcalf_thigh=Fcalf_thighzFcalf_thighyFcalf_thighx
(12)
在大腿繞旋轉(zhuǎn)軸進行旋轉(zhuǎn)時,會受到誤差的影響,在某一時刻(k時刻),可通過大腿旋轉(zhuǎn)角度與真實角度計算出角度偏差Δψthigh_xk,因此可按照坐標(biāo)軸x→z→y的旋轉(zhuǎn)順序?qū)κ?12)中的Fcalf_thigh_k進行分解,公式表示為

(13)
由式(13)可知,可通過三角函數(shù)逆運算計算出大腿角度偏差,進而完成大腿旋轉(zhuǎn)誤差補償矩陣的構(gòu)建,公式表示為

(14)
通過計算出ΔGthigh_k,最終完成對肢體姿勢跟蹤的誤差補償。
對虛擬系統(tǒng)進行分析時,常采用人類最基本的行走運動方式,通過控制人類的行走方向和速度建立虛擬人的行走畫面。行走的姿勢主要是左腿和右腿反復(fù)循環(huán)抬起向前邁步的過程。在不考慮外部干擾的情況下,人體行走可簡化為骨骼相對于關(guān)節(jié)做旋轉(zhuǎn)運動以及自身的平移運動。人體的平移運動是以落地那只腳為旋轉(zhuǎn)點,以髖關(guān)節(jié)距離地面的距離為半徑,以一定的角度γ做旋轉(zhuǎn),不斷進行左右腳的反復(fù)才形成了身體的平移運動。假定人體的平移速度為Vmove,邁一步的距離為Dstep,完成一個周期的時間為T,那么Dstep和T之間的關(guān)系用公式可表示為[6]

(15)
其中,H表示髖關(guān)節(jié)到踝關(guān)節(jié)的距離;γmax和γmin分別表示大腿骨骼與人體中心位置之間的最大和最小夾角。


(16)
基于人體下肢行走動作的識別,采用髖關(guān)節(jié)點在世界坐標(biāo)系中的速度變化曲線,以及膝關(guān)節(jié)點和踝關(guān)節(jié)點相對于父節(jié)點在局部坐標(biāo)系中的角度變化曲線,可以獲得虛擬人的下肢運動特征,實現(xiàn)對虛擬人走路和跑步的識別。具體步驟如下:
1)初始時刻,虛擬人髖關(guān)節(jié)點在局部坐標(biāo)系中的各坐標(biāo)軸與在世界坐標(biāo)系中的各坐標(biāo)軸方向一致。設(shè)閾值為Yvalue_y,當(dāng)人左右踝關(guān)節(jié)點在世界坐標(biāo)系中的y坐標(biāo)值小于閾值Yvalue_y時,可認(rèn)為人腳部著地。
2)設(shè)在t時刻世界坐標(biāo)系中,虛擬人髖關(guān)節(jié)點的位置坐標(biāo)為[xhip_t,yhip_t,zhip_t],且局部坐標(biāo)系相對于世界坐標(biāo)系各軸的旋轉(zhuǎn)角度為[λx,λy,λz],對一個周期T內(nèi)的人體下肢動作進行識別。
3)當(dāng)識別出人體走路或跑步時,控制虛擬人完成類似的走路或跑步動作。根據(jù)左右上肢繞x軸的旋轉(zhuǎn)角度,確定虛擬人是前進還是后退。虛擬人的運動過程如下:
①在t時刻,操作人員髖關(guān)節(jié)點在局部坐標(biāo)系中的初始旋轉(zhuǎn)角度為[λx_i(t),λy_i(t),λz_i(t)],在t+Δt時刻旋轉(zhuǎn)角度的變化量為[Δλx_i(t),Δλy_i(t),Δλz_i(t)],為了方便對虛擬人運動過程的控制,設(shè)τ為Δλi(t)增益系數(shù),有

(17)
②操作人員在控制虛擬人前進過程中,若在t時刻鄰近的周期T時間段,發(fā)現(xiàn)第一次腳與地面有接觸,或者雙腳交替與地面有接觸,下肢運動的步行幅值為Bamp,那么可對虛擬人髖關(guān)節(jié)點的位置坐標(biāo)[x′,y′,z′]進行下一步運動預(yù)判,有

(18)
若操作人員控制虛擬人后退,有:

(19)
③在控制虛擬人前進或后退的過程中,如果下肢動作仍然為走路或者跑步狀態(tài),則[ζx,ζy,ζz]與[λx,λy,λz]的更新方法與步驟2)~3)一致,且髖關(guān)節(jié)點的空間位置和其下肢關(guān)節(jié)點相對于父關(guān)節(jié)點的運動狀態(tài)均保持不變。此時便可根據(jù)髖關(guān)節(jié)點在世界坐標(biāo)系的空間位置變化量,控制虛擬人髖關(guān)節(jié)點的位置坐標(biāo)變化,也可以根據(jù)其運動信息的捕捉,驅(qū)動虛擬人的其關(guān)節(jié)節(jié)點的運動。
4)對虛擬人運動狀態(tài)大范圍模擬結(jié)束后,可根據(jù)運動捕捉系統(tǒng)以及通過數(shù)據(jù)手套獲得的人體各節(jié)點運動數(shù)據(jù),完成對虛擬人的整個運動過程。
為了驗證逆運動學(xué)與誤差補償方法對虛擬人運動控制的情況,采用Microsoft Visual Studio 2013編程環(huán)境實現(xiàn)算法,基于OptiTrack系統(tǒng)對虛擬人的運動數(shù)據(jù)進行實時獲取和識別。
通過本文提出的誤差補償方法對大腿髖關(guān)節(jié)進行修正,并將修正后的結(jié)果與沒有進行修正前的結(jié)果進行對比,如圖2所示。從圖中可以看出,沒有進行誤差補償時,生成的行走運動基本無法完成,仿真骨架走一步后便摔倒。而使用本文提出的誤差補償方法后,生成的行走運動可以保持穩(wěn)定,仿真骨架一直持續(xù)也沒有出現(xiàn)過摔倒現(xiàn)象,很好的模擬了真實行走過程。

圖2 誤差補償修正前、后對比結(jié)果
設(shè)計虛擬人運動環(huán)境,定義虛擬人腿部姿勢描述信息模型,建立虛擬人腿部和地面的交互相應(yīng)機制,完善虛擬人的走路和跑步過程模型。基于虛擬人運動數(shù)據(jù)以及下肢動作的識別過程,實現(xiàn)對虛擬人走路或跑步仿真平臺的開發(fā)。仿真過程分析了1萬個物理仿真步,并將本文方法與文獻[2]、文獻[3]和文獻[4]對虛擬人右腿髖關(guān)節(jié)跟蹤誤差進行實驗對比,結(jié)果如圖3所示。

圖3 虛擬人右腿髖關(guān)節(jié)誤差對比圖
從圖中可以看出,在文獻[2]提出的方法作用下,虛擬人可以維持穩(wěn)定的行走運動,但追蹤誤差峰值較大,震蕩很明顯。在文獻[3]提出的方法作用下,虛擬人會因為驅(qū)動力不足或驅(qū)動力較大等原因而發(fā)生摔倒現(xiàn)象。文獻[4]提出的方法方差較大,對抗外界的干擾能力不足。而本文提出的方法可以根據(jù)虛擬人的行走情況,很好的維持穩(wěn)定運動,即使在增益很大的情況下也可以保持較小的震蕩,說明本文所提出的逆運動學(xué)與誤差補償方法可以準(zhǔn)確地跟蹤虛擬人運動姿勢,且對外界的抗干擾能力較強。
本文針對虛擬人運動控制提出了一種逆運動學(xué)與誤差補償?shù)姆椒ǎ固摂M人能夠根據(jù)實際控制情況,做出相應(yīng)的運動行為。通過對大腿和髖關(guān)節(jié)的旋轉(zhuǎn)跟蹤以及虛擬人的運動控制實驗,證明本文提出的誤差補償方法可以適應(yīng)不同膝關(guān)節(jié)內(nèi)的大腿軸旋轉(zhuǎn)跟蹤誤差修正,且補償精度較高;另外,虛擬人能夠根據(jù)當(dāng)前運動狀態(tài)合理有效完成后續(xù)動作,具有較高的準(zhǔn)確性和穩(wěn)定性,同時保持良好的抗干擾能力。