IKエンジン

IKの計算は,PHSceneが持つIKエンジン(PHIKEngine)によって実現されています.

IKエンジンはデフォルトでは無効となっています.

phScene->GetIKEngine()->Enable(true);

を実行することで有効となります.GetIKEngine()は,PHSceneが持つIKエンジンを取得するAPIです.

SpringheadにおけるIKの計算原理は,関節系のヤコビ行列(ヤコビアン)に基づきます.全アクチュエータの関節角度に微小変化量 $\varDelta \bm {\theta }$ を与えた時の,全エンドエフェクタの位置の微小変化量 $\varDelta \bm {r}$ は,関節系のヤコビアン $J$ を用いて

  \[  \varDelta \bm {r} = J \varDelta \bm {\theta }  \]    

と表されます.毎ステップごとに関節系ヤコビアン$J$および目標位置に向かう微小変位$\varDelta \bm {r}$を計算し,上記の線形連立方程式を解くことで各関節に与える角速度を求めます.

線形連立方程式の求解にはガウス=ザイデル法による繰り返し解法を用いています.そのため1ステップあたりの繰り返し計算の回数によって計算速度と計算精度のトレードオフがあります.繰り返しの回数は,

// 20 iteration per 1 physics step
phScene->GetIKEngine()->SetNumIter(20);

のようにして設定することができます.

= =0trueptPHSceneIfクラス height0.75pt

PHIKEngineIf* GetIKEngine()

 

IKエンジンを取得します.

= =0trueptPHIKEngineIfクラス height0.75pt

Enable(bool b)

 

IKエンジンの有効・無効を切り替えます.引数がtrueならば有効化し,falseならば無効化します.

SetNumIter(int n)

 

IKの繰り返し計算回数を1ステップあたりn回にセットします.