用語集 · ロボティクスと制御

逆運動学

別名:Inverse kinematics、IK、逆キネマティクス、インバースキネマティクス

手や足を選んだ位置に置くための関節角度を求めること。順運動学の逆です。

順運動学は、関節角度から位置を求めます。逆運動学(IK)は、「左足を横に 35 cm 置く」のような望む位置から、関節角度へと逆にたどります。

こちらのほうが難しい理由は3つあります。

  • 答えがないことがあります。目標が届かない場所にある場合です。
  • 答えがたくさんあることがあります。肘を高くしても低くしても鼻に触れられます。
  • 方程式が非線形なので、一般には簡単な公式がありません。

2本の骨からなる手足

脚(太ももとすね)や腕(上腕と前腕)では、真ん中の関節について閉じた形の答えがあります。セグメントの長さを l1l_1 と l2l_2、股関節から足首までの距離を dd とすると、余弦定理からセグメント間の膝の角度 θ\theta が得られます。

cos⁡θ=l12+l22−d22 l1l2\cos\theta = \frac{l_1^2 + l_2^2 - d^2}{2\,l_1 l_2}

d≥l1+l2d \ge l_1 + l_2 なら、脚は完全に伸びきっていて、目標はちょうど届く距離かそれより遠くにあります。残りの角度で、手足を目標の方へ向けます。

一般の場合:反復する

もっと長い連鎖では、小さな修正を繰り返して IK を解きます。ヤコビアン JJ は、各関節が動いたときに先端の位置 xx がどう動くかを表し、Δx≈JΔq\Delta x \approx J \Delta q となります。これを逆に解くと、目標へ向かう一歩が得られます。伸びきった姿勢の近くでも安定するように、小さな減衰 λ\lambda を加えます。

Δq=J⊤(JJ⊤+λ2I)−1(xtarget−x)\Delta q = J^\top\big(J J^\top + \lambda^2 I\big)^{-1} (x^{\text{target}} - x)

誤差が小さくなるまでこれを繰り返します。

このプロジェクトでは

キーフレームで作った回復動作(横へのホップ、前へのステップ、後ろへのステップ)は IK で解いています。足と骨盤をどこに置くかを決めると、IK が脚の角度を見つけます。初期のバージョンには脚が交差してしまう IK のバグがあったので、今ではプレビューで手足の間隔と IK の誤差をチェックしています。

関連用語

この用語が出てくる記事

← すべての用語