《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 基于3D反向動(dòng)力學(xué)IK算法的研究
基于3D反向動(dòng)力學(xué)IK算法的研究
來(lái)源:微型機(jī)與應(yīng)用2013年第24期
李振龍, 彭亞雄
(貴州大學(xué)電子信息學(xué)院, 貴州 貴陽(yáng)550025)
摘要: 反向動(dòng)力學(xué)中CCD算法具有局限性,分析幾何法應(yīng)用于多自由度骨骼具有不可收斂性,而微分求解主要運(yùn)用于小幅度的變化, 因此利用雅可比矩陣使骨骼具有收斂性,將分析幾何法與微分求解法融合,實(shí)驗(yàn)結(jié)果表明,IK反向動(dòng)力學(xué)算法的改進(jìn)很有意義。
Abstract:
Key words :

摘  要: 反向動(dòng)力學(xué)中CCD算法具有局限性,分析幾何法應(yīng)用于多自由度骨骼具有不可收斂性,而微分求解主要運(yùn)用于小幅度的變化, 因此利用雅可比矩陣使骨骼具有收斂性,將分析幾何法與微分求解法融合,實(shí)驗(yàn)結(jié)果表明,IK反向動(dòng)力學(xué)算法的改進(jìn)很有意義。
關(guān)鍵詞: 3D圖形學(xué); IK反向動(dòng)力學(xué); 微分求解算法

    肢體運(yùn)動(dòng)學(xué)的研究往往混略掉人們自身運(yùn)動(dòng)的特性或者引起運(yùn)動(dòng)的真正原因。參考文獻(xiàn)[1]綜述了隨著計(jì)算機(jī)的發(fā)展,虛擬人技術(shù)不斷改進(jìn),新興的3D場(chǎng)景圖建模是計(jì)算機(jī)圖形學(xué)處理三維世界發(fā)展的多層次數(shù)據(jù)結(jié)構(gòu),但由于機(jī)器人等運(yùn)動(dòng)學(xué)模型受外部約束以及內(nèi)部節(jié)點(diǎn)的限制,很難實(shí)現(xiàn)一些舒服的姿勢(shì)和動(dòng)作。參考文獻(xiàn)[2]主要對(duì)虛擬人技術(shù)的運(yùn)動(dòng)算法實(shí)現(xiàn)進(jìn)行了研究;參考文獻(xiàn)[3]也對(duì)虛擬人技術(shù)運(yùn)動(dòng)算法做了研究,并提出反向動(dòng)力學(xué)的思想,但都未對(duì)反向動(dòng)力學(xué)算法帶來(lái)的問(wèn)題進(jìn)行解決。反向動(dòng)力學(xué)是被開發(fā)來(lái)解決這些運(yùn)動(dòng)約束的圖形處理方法的分支,以模型葉節(jié)點(diǎn)為起點(diǎn)來(lái)計(jì)算根節(jié)點(diǎn)信息的方法[4]。
     簡(jiǎn)單地說(shuō),IK(Inverse Kinematics)算法就是首先確定末端骨骼的位置信息,根據(jù)末端骨骼的位置信息反向推導(dǎo)出該骨骼繼承鏈上N級(jí)父親骨骼的位置信息。通過(guò)這種方法指定角色的“姿勢(shì)”,即首先把渲染的角色表示成骨骼關(guān)節(jié)結(jié)構(gòu),所謂的姿勢(shì)表示成由此構(gòu)成的夾角,包括狀態(tài)向量θ以及節(jié)點(diǎn)的方向向量和位置。對(duì)于IK算法,基本公式是:
    θ=f-1(X)                    (1)
其中,X通常是最末端骨骼位置信息,用此算法來(lái)計(jì)算滿足條件的θ。
    參考文獻(xiàn)[5]闡述了IK算法在計(jì)算機(jī)動(dòng)畫中的應(yīng)用,并重點(diǎn)研究了7個(gè)自由度骨骼的運(yùn)動(dòng),但對(duì)奇異點(diǎn)病態(tài)方程的問(wèn)題沒(méi)有提出有效的解決方法。
    當(dāng)前的計(jì)算機(jī)圖形學(xué)中,所有角色動(dòng)畫簡(jiǎn)單地由正向動(dòng)力學(xué)算法計(jì)算已經(jīng)不能滿足動(dòng)畫逼真性的需求,一些游戲中正向動(dòng)力學(xué)遇到很多問(wèn)題,即使花大量時(shí)間也是很難去消除或協(xié)調(diào)的[6]。針對(duì)時(shí)效的問(wèn)題,參考文獻(xiàn)[6]對(duì)反向動(dòng)力學(xué)算法應(yīng)用在多處理器中進(jìn)行了研究,對(duì)速降法也提供了一些支持。近些年,隨著實(shí)時(shí)算法的發(fā)展,反向動(dòng)力學(xué)越來(lái)越顯得不可缺少。本文主要通過(guò)幾何分析法與微分求解法的融合,使IK反向動(dòng)力學(xué)算法有效摒棄CCD速降法帶來(lái)的算法不收斂性。CCD速降法對(duì)每個(gè)關(guān)節(jié)的限制會(huì)造成關(guān)節(jié)限制的制約束的合并,尤其是末端鏈僅僅產(chǎn)生移動(dòng),使畫面產(chǎn)生不自然的感覺(jué)。針對(duì)這一問(wèn)題,首先通過(guò)幾何分析法來(lái)確定關(guān)節(jié)位置,局部采用微分求解法,并且在微分求解過(guò)程中引入稀疏矩陣來(lái)尋找并處理奇異點(diǎn)的問(wèn)題。參考文獻(xiàn)[7]、[8]提及的渲染技術(shù),利用HLSL語(yǔ)言進(jìn)行畫面的模擬。
1 幾何分析法算法的研究
    實(shí)現(xiàn)IK算法,目前應(yīng)用最多的是CCD(Cyclic Coordinate Descent)。這是一個(gè)迭代算法,通過(guò)多次迭代向目標(biāo)解逐步接近,通常5~10次就會(huì)得到很好的效果,絕大多數(shù)情況下骨骼的目標(biāo)位置都會(huì)收斂到理想位置。但通常CCD算法的每一步都需要啟發(fā)式的構(gòu)造,并且骨骼之間的關(guān)節(jié)不能任意角度旋轉(zhuǎn)。另一個(gè)問(wèn)題是,當(dāng)所有骨骼在一條直線上時(shí),每一個(gè)骨骼都會(huì)認(rèn)為自身不再需要旋轉(zhuǎn),CCD的迭代算法會(huì)失效。相對(duì)于CCD算法,常用到的幾何分析法能夠很快地得到骨骼的目標(biāo)位置信息,可以一步算出目標(biāo)位置,有效地摒棄了CCD算法迭代的效率問(wèn)題。但是幾何分析法也存在不足,即對(duì)于結(jié)構(gòu)稍微比較復(fù)雜的框架骨骼,會(huì)得到無(wú)數(shù)多的解。
    在IK反向動(dòng)力學(xué)算法中,對(duì)于一個(gè)N級(jí)骨骼鏈,其N級(jí)父親骨骼信息T是相對(duì)于N-1級(jí)子骨骼信息T相對(duì)運(yùn)動(dòng),相對(duì)于末端骨骼信息,可簡(jiǎn)單表示為:


    這里的α是斜率。對(duì)于關(guān)節(jié)權(quán)重的αi取值為一確定值矩陣的一列,并且值∈(0,1),確保?駐H的收斂性。然而,并非所有骨骼都可以旋轉(zhuǎn)無(wú)限制角度,以三鏈臂為例,θ1∈[-90,90],θ2∈[0,110],θ3∈[-20,20]。對(duì)每個(gè)不同位置的關(guān)節(jié)控制在可允許的范圍內(nèi),這樣,計(jì)算出的位置幅度范圍小,得出值的過(guò)程較快,并且同時(shí)確保了骨架姿勢(shì)的逼真性。
4 實(shí)驗(yàn)結(jié)果
    利用C#代碼、Direct9.0和HLSL渲染技術(shù),在Visual Studio 2010環(huán)境下進(jìn)行實(shí)驗(yàn),部分代碼如下(包括位置信息、骨骼權(quán)重和法線位置等)。
    VS_OUTPUT Transform(
            float4 inputPosition : POSITION,
            float3 inputNormal : NORMAL,
            float2 inputTexCoord :TEXCOORD0,
        float4 weights : TEXCOORD1,
        float4 bones : TEXCOORD2
            )
    {
    VS_OUTPUT Out = (VS_OUTPUT)0;
    float4 pos=mul(inputPosition, Local);
    pos=mul(pos,BoneMatrices[(int)bones.x])*weights.x+
    mul(pos,BoneMatrices[(int)bones.y])*weights.y+
    mul(pos, BoneMatrices[(int)bones.z])*weights.z+
    mul(pos,BoneMatrices[(int)bones.w])*weights.w;
        Out.Pos = mul(pos, WorldViewProjection);
    Out.Normal =mul(inputNormal,World);
        Out.Texcoord = inputTexCoord;
    Out.EyeDir = EyePosition - Out.Pos;
    Out.Direction = LightPosition -Out.Pos;
            return Out;
    }
       實(shí)驗(yàn)結(jié)果如圖1所示。

 

 

    表1為算法改進(jìn)前后的實(shí)驗(yàn)結(jié)果的對(duì)比。

    由表1可以看出,本文算法具有很大的改進(jìn)。然而,這些數(shù)據(jù)不是每次實(shí)驗(yàn)都是這樣的,在實(shí)際操作中會(huì)有許多其他客觀因素加入,但只要能夠得出更好的實(shí)驗(yàn)結(jié)果,證明改進(jìn)還是正確的。由實(shí)驗(yàn)分析可知,CCD速降法會(huì)得出更多錯(cuò)誤位置,這是由于計(jì)算角度位置的幅度范圍太大造成的,而幾何分析法和微分求解法完美地融合就可以大幅度減小這些錯(cuò)誤。此外,對(duì)中值期望角的改進(jìn)求法在摒棄了復(fù)雜計(jì)算過(guò)程的同時(shí),在小范圍內(nèi)的求解計(jì)算并沒(méi)有增加過(guò)多的錯(cuò)誤位置信息,還減少了計(jì)算時(shí)間,因此,改進(jìn)算法很有意義。
    在很多應(yīng)用中,IK算法只是算取骨架的部分骨骼,主骨架位置還是由正向動(dòng)力學(xué)算法求出。隨著3D圖像學(xué)的不斷進(jìn)步以及實(shí)時(shí)算法的發(fā)展和改進(jìn),IK反向動(dòng)力學(xué)會(huì)得到越來(lái)越廣的方面應(yīng)用,也極大地推進(jìn)了虛擬場(chǎng)景的動(dòng)畫研究。分析幾何法可以快速地確定關(guān)節(jié)角度的大致位置,微分求解法可以小范圍內(nèi)確保關(guān)節(jié)角度的最優(yōu),二者的結(jié)合可以達(dá)到揚(yáng)長(zhǎng)避短的效果,也使反向動(dòng)力學(xué)算法更優(yōu)化。
參考文獻(xiàn)
[1] 王兆其.虛擬人合成研究綜述[J]. 中國(guó)科學(xué)院研究生院報(bào),2000,17(2):89-98.
[2] 洪炳熔, 賀懷清. 虛擬人的步行和跑步運(yùn)動(dòng)方法的實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用研究,2000(11):15-19.
[3] 徐孟,孫守遷,潘云鶴.虛擬人運(yùn)動(dòng)控制技術(shù)的研究[J].  系統(tǒng)仿真學(xué)報(bào),2003,15(3):338-342.
[4] TOLANI D, GOSWANMI A, BALDER N I. Real-time  inverse kinematics techniques for anthropomorphic limbs[J]. Graphical Models,2000,62(5):353-88.
[5] MACIEJEWSKI A A. Dealing with the ill-conditioned  equations of motion for articulated figures[J]. Computer Graphics and Applications,2002,10(3):63-71.
[6] Chen Chun. Efficient scheduling algorithms for robot inverse dynamics computation on a multiprocessor system[J].Systems,Man and Cybernetics, 2002,18(5):729-743.
[7] DRIEMYER T, RAY M. 渲染技術(shù)超級(jí)手冊(cè)[M].費(fèi)廣正,譯.北京:人民郵電出版社,2007.
[8] 向世明.Visual C++數(shù)字圖像與圖形處理[M].北京:電子工業(yè)出版社,2002.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。