運動学
力を考えない運動の幾何学です。関節角とツールの位置姿勢を相互に対応させる方法、DH法と指数積公式の2つの記法、ヤコビ行列、特異点、冗長な関節の扱い方を説明します。
概要
運動学は、ロボットの運動の幾何学を扱います。運動を引き起こす力は考えません。運動学が答える問いは2つです。関節角が与えられたとき、ツールはどこにあるか。ツールを置きたい場所が与えられたとき、どの関節角ならそこに置けるか。前者は順運動学で、答えは常に1つです。後者は逆運動学で、解がない場合も、1つ、複数、無限にある場合もあります。
モータドライブより上の層は、すべて運動学を使います。モーションプランナは運動学で姿勢を確認します。コントローラはそのヤコビ行列でツール空間の誤差を関節指令に変換します。キャリブレーションはそのパラメータを補正します。このハブページは、この層を実装・デバッグするエンジニアや、アームが特定の姿勢の近くで急に減速した理由を知りたいエンジニアを対象にしています。
重要な考え方
順運動学:DH法と指数積公式
シリアルアームの順運動学は、関節ごとに1つずつの変換の積です。問題は、各変換をどう記述するかです。
Denavit-Hartenberg(DH)記法は、DenavitとHartenbergの1955年の論文で提案されたものです。厳密な規則に従って各リンクに座標系を取り付け、各関節を4つの数値だけで表します。簡潔で、ほとんどのロボットのデータシートに載っています。弱点は、一般に標準DHと修正DHと呼ばれる2つの流儀が広く使われていて、座標系の置き方が異なることです。一方の流儀のDHテーブルを、もう一方を前提に書かれたコードにコピーすると、もっともらしいが間違ったアームができあがります。
指数積(PoE)公式はBrockettが導入したものです。各関節を、アームがホーム姿勢にあるときのベース座標系におけるスクリュー軸で記述します。ツールの位置姿勢は、ホーム姿勢に関節ごとの行列指数を左から掛けたものになります。リンクごとに座標系を置く必要がなく、パラメータは直接的な物理的意味を持ちます。また、この定式化は/topics/spatial-math/で扱うリー群の道具に直接つながります。LynchとParkの教科書は、運動学をPoEに基づいて組み立てています。
ほとんどのROSツールが読み込む形式であるURDFは、どちらも使いません。各関節は原点の変換と軸を持ち、考え方としてはPoEに近いものです。2つの記法を並べた比較は/reference/dh-and-poe/を参照してください。
ヤコビ行列と特異点
ヤコビ行列Jは、関節角に関するツールの位置姿勢の偏微分を並べた行列です。関節速度ベクトルに掛けると、ツールの並進速度と角速度が得られます。その転置は、力について逆向きの役割を果たします。ツールに作用する力とトルクを、それにつり合う関節トルクに写像します。したがって同じ行列が、速度制御、力制御、静的負荷の確認に使えます。
特異点は、Jのランクが落ちる構成です。その姿勢では、関節をどれだけ速く回しても、ツールはある方向に動けません。その近くでは、その方向へのわずかなツール運動に非常に大きな関節速度が必要になります。球面手首を持つ6関節アームでよく見られるのは、2つの手首軸が一直線に並ぶ手首特異点と、アームが作業空間の端で完全に伸びきる肘特異点です。多くの産業用コントローラは、これらの近くで減速または停止します。プランナはJの最小特異値、または可操作度(JとJの転置の積の行列式の平方根)を監視して特異点を避けます。
逆運動学:解析解と数値解
球面手首を持つ6関節アームの多くは、逆運動学(IK)を閉形式で解けます。この解法は高速かつ厳密で、すべての解を列挙できます。肘・肩・手首の反転により、1つの姿勢に対して複数の解があることもよくあります。代償として、ロボットごとに導出しなければなりません。
数値IKは任意の連鎖に使えます。初期推定から出発し、ヤコビ行列を使った線形方程式を繰り返し解いて姿勢誤差を小さくします。単純な擬似逆行列によるステップは、特異点の近くで不安定になります。減衰最小二乗法は小さな正則化項を加え、わずかな精度と引き換えに安定性を得ます。詳しくはBussの解説ノートにあります。数値ソルバが返す解は1つで、その解は初期推定に依存します。また、関節リミットが解への経路をふさぐと失敗することがあります。
冗長性
タスクに必要な数より多くの関節を持つロボットは冗長です。6 自由度(DoF)の空間にツールを置く7関節アームでは、ツールの位置姿勢ごとに、関節解が1次元の族をなします。通常は、手先を止めたまま肘が振れる動きとして見えます。この余分な動きはJの零空間にあります。コントローラはツールを乱さずに任意の零空間速度を加えられるので、これを副次的な目標に使います。関節リミットから離れる、障害物を避ける、可操作度を高く保つ、といった目標です。
どこから始めるか
まず/learn/beginner/03-forward-kinematics/、次に/learn/beginner/04-inverse-kinematics/に取り組んでください。プロジェクト/projects/two-link-arm-draws-with-ik/では、両方をMuJoCoのシミュレーションに組み込みます。作業中は/reference/dh-and-poe/を開いておくと便利です。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| Robotics Toolbox for Python | PythonでのDHモデル・ETSモデル、順運動学、ヤコビ行列、数値IK | MIT | /platforms/opensource/ |
| Pinocchio | 解析的な微分を備えた高速な運動学・動力学計算(C++とPython) | BSD-2-Clause | /platforms/opensource/ |
| Orocos KDL | 運動学的連鎖とソルバ。MoveIt 2のデフォルトIKプラグインはこれを基盤にしている | LGPL-2.1-or-later | /platforms/ros/ |
| TRAC-IK | KDLベースのソルバとSQPソルバを並列に実行するIK。関節リミットがある場合に強い | BSD-3-Clause | /platforms/ros/ |
| MoveIt 2 | IKソルバを差し替えられる動作計画フレームワーク | BSD-3-Clause | /platforms/ros/ |
| MuJoCo | シミュレータ内でのMJCFモデルの運動学とヤコビ行列 | Apache-2.0 | /platforms/mujoco/ |
よくある間違い
- 標準DHと修正DHを混同する。数値を1つでも入力する前に、データシートがどちらを使っているか確認してください。
- 自作の順運動学の結果をロボットコントローラの値と比べるときに、ツールオフセット(TCP)やベースの取り付け変換を忘れる。
- 最初に得られたIK解をそのまま信用する。関節リミット、衝突、望んだ分岐(エルボーアップかダウンか)であるかを確認してください。
- 特異点を通る直線的なツール動作を指令する。特異点の近くでは、必要な関節速度が際限なく大きくなります。
- リアルタイムループで、減衰なしの擬似逆行列を使う。
さらに深く
- Kevin M. Lynch、Frank C. Park著、「Modern Robotics」、Cambridge University Press、2017年。第4〜6章で、PoEを用いた順運動学、速度運動学、逆運動学を扱います。
- Richard M. Murray、Zexiang Li、S. Shankar Sastry著、「A Mathematical Introduction to Robotic Manipulation」、CRC Press、1994年。著者らが無料のPDFを公開しています。
- J. Denavit、R. S. Hartenberg、A kinematic notation for lower-pair mechanisms based on matrices、「Journal of Applied Mechanics」22(2)、1955年。
- R. W. Brockett、Robotic manipulators and the product of exponentials formula、「Mathematical Theory of Networks and Systems」所収、Springer Lecture Notes in Control and Information Sciences。
- Samuel R. Buss、Introduction to inverse kinematics with Jacobian transpose, pseudoinverse and damped least squares methods、University of California, San Diego。