2リンクロボットアーム運動学 戻る
ロボティクス

2リンクロボットアーム 順逆運動学

FK(順運動学)モードで関節角度からエンドエフェクタ位置を計算、IK(逆運動学)モードでキャンバスをクリックして目標位置への関節角度を逆算。

モード選択
リンク設定
リンク1長さ L₁ 1.00 m
リンク2長さ L₂ 0.80 m
関節角度 (FK)
θ₁ (関節1) 45°
θ₂ (関節2) -60°
エンドX
エンドY
最大リーチ
肘位置 (x,y)
順運動学 (FK):
$x = L_1\cos\theta_1 + L_2\cos(\theta_1+\theta_2)$
$y = L_1\sin\theta_1 + L_2\sin(\theta_1+\theta_2)$

逆運動学 (IK):
$\cos\theta_2 = \dfrac{x^2+y^2-L_1^2-L_2^2}{2L_1L_2}$
$\theta_1 = \mathrm{atan2}(y,x) - \mathrm{atan2}(L_2\sin\theta_2,\,L_1+L_2\cos\theta_2)$

2リンクロボットアームの順逆運動学とは

🧑‍🎓
ロボットアームの「順運動学」と「逆運動学」って何ですか?名前は似てるけど、全然違うものなんですか?
🎓
ざっくり言うと、計算の向きが真逆なんだ。順運動学(FK)は「関節をこれだけ曲げたら、手先はどこに来る?」を求める計算。逆運動学(IK)は「手先をここに持っていきたいなら、関節をどう曲げればいい?」を逆算するんだ。このシミュレーターで、上の「θ1」「θ2」のスライダーを動かしてみて。アームの形が変わるでしょ?これがFK。逆に、キャンバスをクリックして目標点(赤い点)を置くと、アームがそこに向かって形を変えるのがIKの動きだよ。
🧑‍🎓
え、そうなんですか!クリックしたら自動で角度が計算されるんですね。でも、同じ目標点に対してアームの形が2通りあるときがあります。あれは何ですか?
🎓
良いところに気が付いたね。それが「肘上(Elbow Up)」と「肘下(Elbow Down)」の2つの解だ。人間の腕でも、肘を上に向けるか下に向けるかで、同じ手の位置を実現できるよね。数学的には、$\cos\theta_2$を求める式から$\theta_2$の符号をプラスマイナス両方取れるから、2通りの関節角度の組み合わせが生まれるんだ。シミュレーターの「解の選択」で「Elbow Up」と「Elbow Down」を切り替えて、姿勢がどう変わるか確かめてみよう。
🧑‍🎓
なるほど!でも、キャンバスの端っこをクリックすると、アームが届かなくて解が計算されないことがあります。あれはなぜですか?
🎓
それはアームの「到達可能領域」の外を指定しちゃったからだ。2リンクアームが手先を置ける範囲は、リーチの最大値$L_1+L_2$を外径、最小値$|L_1 - L_2|$を内径とするドーナツ状の領域になるんだ。例えば、アームの長さ$L_1, L_2$をスライダーで極端に短くしたり長くしたりすると、このドーナツ領域がどう変わるか観察してみて。設計では、この領域をワークスペースと呼んで、ロボットが作業できる範囲を決める重要な指標になるよ。

物理モデルと主要な数式

順運動学 (Forward Kinematics, FK)
第1関節を原点とし、各リンクの長さ$L_1$, $L_2$と関節角度$\theta_1$, $\theta_2$が与えられたとき、エンドエフェクタ(手先)の位置$(x, y)$を計算します。各リンクのベクトルを順に足し合わせることで求められます。

$$ \begin{aligned}x &= L_1 \cos\theta_1 + L_2 \cos(\theta_1 + \theta_2) \\ y &= L_1 \sin\theta_1 + L_2 \sin(\theta_1 + \theta_2) \end{aligned}$$

$L_1, L_2$: 第1リンク、第2リンクの長さ
$\theta_1, \theta_2$: 第1関節、第2関節の角度(基準軸からの回転)
$x, y$: エンドエフェクタの直交座標

逆運動学 (Inverse Kinematics, IK)
目標のエンドエフェクタ位置$(x, y)$が与えられたとき、それを実現する関節角度$\theta_1$, $\theta_2$を逆算します。余弦定理を用いて第2関節角度$\theta_2$を求め、その後、幾何学的関係から第1関節角度$\theta_1$を求めます。$\theta_2$には±の符号の選択肢(肘上/肘下)が生じます。

$$ \begin{aligned}\cos\theta_2 &= \frac{x^2 + y^2 - L_1^2 - L_2^2}{2 L_1 L_2}\\ \theta_2 &= \pm \arccos\left( \frac{x^2 + y^2 - L_1^2 - L_2^2}{2 L_1 L_2}\right) \\ \theta_1 &= \mathrm{atan2}(y, x) - \mathrm{atan2}(L_2 \sin\theta_2, L_1 + L_2 \cos\theta_2) \end{aligned}$$

$\mathrm{atan2}(y, x)$: 象限を考慮した逆正接関数。点$(x, y)$の偏角を返す。
$\theta_2$の符号: +を選ぶと「肘下」、-を選ぶと「肘上」の姿勢に対応。

実世界での応用

産業用ロボットアームの軌道計画:溶接や塗装、組み立て作業では、工具(エンドエフェクタ)が通過すべき一連の点(軌道)が与えられます。各点に対して逆運動学を解き、対応する関節角度の列を計算することで、滑らかな動作を実現します。

ゲームやアニメーションのキャラクター制御:キャラクターの手や足を特定の位置(例えば、ドアノブや武器)に自然に到達させるために逆運動学が頻繁に使われます。これにより、関節の動きを手作業で設定するよりも効率的で自然な動きを作成できます。

ロボット手術(外科手術支援ロボット):医師が操作するマスターコントローラの位置から、患者体内の手術器具の先端位置を決定するために順運動学が、逆に器具の目標位置から各関節の駆動量を決定するために逆運動学が利用されます。

リハビリテーションやパワーアシストスーツ:装着者の関節角度センサーから、手足の先端位置を順運動学で推定します。また、支援したい動作の目標位置から、モーターに与えるべき関節トルクを計算する際の基礎として逆運動学の考え方が用いられます。

よくある誤解と注意点

まず、「順運動学(FK)は簡単で、逆運動学(IK)は難しい」という単純な二分法は危険です。確かに2リンクのFKは単純な三角関数の和ですが、リンク数が増えると、関節の配置(回転/直動)や座標系の取り方によってFKの式自体が複雑になります。一方で、このツールで扱うような平面2リンクのIKは、幾何学的に「解の公式」が存在する特別なケースです。多くの実用的な6軸アームなどでは、このような閉じた解が存在せず、数値計算(反復法)で解を求めるため、FKとIKの難しさの性質が逆転することもあります。

次に、「解が求まればそれでOK」と思いがちですが、解の「質」を評価する視点が重要です。例えば、同じ目標点に対して「肘上」と「肘下」の2解がある場合、どちらを選ぶかは応用次第です。作業スペースに障害物があれば避けられる姿勢を、エネルギー効率を考えれば関節の可動範囲中央に近い姿勢を選ぶでしょう。また、特異姿勢(例えばアームが完全に伸びきった状態)に近い解は、小さな目標位置の変化で関節角度が急激に変化するため、制御が不安定になります。このツールでL1とL2を同じ長さに設定し、目標点をほぼX軸上(y=0)の遠くに置くと、その感覚を体感できます。

最後に、パラメータの単位と基準方向を常に意識してください。このツールでは角度は度表示ですが、内部計算や多くのライブラリではラジアンが使われます。また、θ1の基準軸(多くの場合はX軸)と正の回転方向(反時計回りが一般的)の定義は、座標系と右手系/左手系によって変わるため、他システムと連携する際は最初に確認すべき最重要事項です。例えば、CADデータとロボットシミュレータで座標系の定義が異なると、全く予期せぬ動きをすることがあります。

関連する工学分野

このツールで学ぶ原理は、ロボティクス以外の様々な「多体系の運動記述」に直接応用されています。例えば、自動車のサスペンション機構や建設機械の油圧アームの動作解析では、複数のリンクと関節で構成されるシステムの姿勢を、まさに順運動学の考え方で計算します。ゲーム開発やCGアニメーションの分野では、キャラクターの骨格(スケルタル)モデルがまさに「関節とリンク」の集合体で、手足の先(エンドエフェクタ)の位置を決めるためにIKが広く使われています。モーションキャプチャーのデータを異なる体型のキャラクターに適用する際も、IK技術が核になります。

さらに、設計工学における「機構学」や「ロバスト設計」にも深く関わります。このツールでリンク長L1, L2を変えた時に到達可能領域(ワークスペース)がどう変化するか観察しましたか?これは、製品のレイアウト設計において「このロボットはこの範囲の作業が可能か」を決定する基礎です。また、製造誤差や摩耗を考慮した場合、関節角度に多少の誤差があっても手先位置の誤差が最小となるようなリンク長の比率(いわゆる「誤差感度」が低い設計)を探る際、ここで扱った運動学の式が感度解析の出発点となります。

もう一つの重要な分野は制御工学です。IKで求めたのは「目標位置に到達するための関節角度」という「位置指令値」に過ぎません。実際のロボットを動かすには、各関節のモータがその指令値にどれだけ早く、正確に、振動なく追従するかを制御する「サーボ制御」が必要です。また、アームが物体を持ち上げるなど外力が働く場合、姿勢を維持するために必要なトルクを計算する「動力学」へと話は発展します。運動学は、その全ての基礎となる「幾何学」の部分を担っているのです。

発展的な学習のために

まず次のステップは、「3次元空間への拡張」と「数値解法の体験」です。平面2リンクでは幾何学的に解けましたが、3次元の6軸アームではそうはいきません。学習では、3次元の座標変換の基礎である「同次変換行列」を理解しましょう。これは、関節の回転・並進を4x4の行列で表し、順運動学を行列の積で表現する強力なツールです。逆運動学については、数値解法の代表格である「ヤコビ行列」を用いた反復法(例えばニュートン・ラフソン法)を学びます。ヤコビ行列は、関節速度と手先速度の関係を表す行列で、これを逆算することで目標に向かって少しずつ関節角度を更新するIKアルゴリズムの基礎となります。

数学的背景を深めたいなら、線形代数(ベクトル、行列、固有値)と多変数微分積分の復習が不可欠です。先述の同次変換行列やヤコビ行列の操作は、全て線形代数の言葉で記述されます。また、最適な姿勢を選択する「最適化問題」や、動力学に入ると「ラグランジュ方程式」を扱うため、微分の理解が必要です。ツールで「肘上/肘下」の選択肢があったように、IKには複数解があるのが普通です。これらの中から、エネルギー最小や関節負荷が均等になる解を選ぶことは、まさに制約付き最適化問題です。

具体的な次のトピックとしておすすめは、「ロボットアームの軌道計画」です。これは、点Aから点Bに手先を移動させる時、途中の姿勢をどう滑らかに補間するか(例えば、各関節角度を3次関数で変化させるなど)を考える分野です。このツールでFKとIKを体感した後は、「解けたら終わり」ではなく、「どう動かすか」という実用段階への第一歩を踏み出してみてください。シミュレーションツールやプログラミング言語(PythonのRobotics Toolboxなど)を使って、自分で簡単な軌道を生成するスクリプトを書いてみると、理解が一気に深まります。