Math World Lab

ロボットアームの逆運動学(余弦定理と関節制御)

目標の物体を掴むため、手先座標 (x, y) から各モーターの回転角度を逆算する三角関数の幾何学

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
関節角度から手先位置を求めるのが「順運動学(FK)」、手先を行かせたい座標から各関節の角度を逆算するのが「逆運動学(IK)」
2
2自由度ロボットアームの逆運動学は、高校数学の「余弦定理」と「逆正接関数(atan2)」を用いることで厳密に代数的に解くことができる
3
産業用ロボット、手術支援ロボット、3Dゲームのキャラクターアニメーション(足の接地判定など)の基本アルゴリズム

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

工場の産業用ロボットやゲームの3Dキャラクターに「この座標を掴め/ここに着地しろ」と直感的に命令し、各関節モーターの回転角を自動計算するために生まれた。

身につく武器・思考力

高校数学の余弦定理と逆三角関数(atan2)だけで、産業用ロボットアームやゲームの足接地判定(IK)を完全に自作・制御できる実践工学スキルが手に入る。

実社会・ITでの活躍現場

  • •ファナック・安川電機など産業用6軸多関節ロボットの精密溶接・自動ピッキング
  • •ダビンチ(da Vinci)など遠隔手術支援ロボットの手先鉗子制御
  • •Unreal Engine / Unity におけるキャラクターの段差・傾斜へのリアルな足の接地アニメーション
  • •宇宙ステーション(ISS)のロボットアーム(カナダアーム2)による宇宙船キャプチャ

Layer 1 — 直感・シミュレーター

キャンバス内の任意の位置をクリックするか、目標座標 (X,Y)(X, Y) のスライダーを動かしてみよう。ロボットアームが自動的に余弦定理で2つの関節角度 θ1,θ2\theta_1, \theta_2 を計算し、指定したターゲットに正確に手先を合わせる様子を観察できる。アームの届かない範囲(限界距離の外側)にターゲットを置いた場合の特異点警告も確認してみよう。

目標座標 $X$ (mm)180 mm
目標座標 $Y$ (mm)120 mm
幾何学的逆運動学:解が求まりました!
関節1角度 $\theta_1 = 10.2^\circ$ | 関節2角度 $\theta_2 = 51.5^\circ$
キャンバス上をクリックして目標地点(ターゲット)を指定できます可動限界: 240 mm
直感チェック!ミニクイズ

アーム長 L1,L2L_1, L_2 の2関節ロボットアームにおいて、原点から目標位置までの距離が dd であるとき、関節2の角度 θ2\theta_2 を求めるための基礎となる定理はどれか?

Layer 2 — 定義・受験・証明

定義

リンク長 L1,L2L_1, L_2 を持つ2関節平面ロボットアームにおいて、手先の目標位置 (x,y)(x, y) が与えられたとき、各関節角 θ1\theta_1(ベース角)と θ2\theta_2(肘角)を求める問題を逆運動学(Inverse Kinematics: IK)と呼ぶ。 目標点までの距離を d=x2+y2d = \sqrt{x^2 + y^2} としたとき、余弦定理より肘角 θ2\theta_2 は次式を満たす。

cos⁡θ2=x2+y2−L12−L222L1L2\cos\theta_2 = \frac{x^2 + y^2 - L_1^2 - L_2^2}{2 L_1 L_2}

さらにベース角 θ1\theta_1 は、目標方向の偏角 α=atan2(y,x)\alpha = \text{atan2}(y, x) と三角形の内角 β\beta の差として求まる。

β=arccos⁡(L12+d2−L222L1d),θ1=α−β\beta = \arccos\left(\frac{L_1^2 + d^2 - L_2^2}{2 L_1 d}\right), \quad \theta_1 = \alpha - \beta

公式・数理モデル

cos⁡θ2=d2−L12−L222L1L2,θ1=atan2(y,x)−arccos⁡(L12+d2−L222L1d)\cos\theta_2 = \frac{d^2 - L_1^2 - L_2^2}{2 L_1 L_2}, \quad \theta_1 = \text{atan2}(y, x) - \arccos\left(\frac{L_1^2 + d^2 - L_2^2}{2 L_1 d}\right)

証明・導出

幾何学的アプローチによる関節角の導出:

1. 【肘関節角 θ2\theta_2 の導出】: 原点 O(0,0)O(0,0)、肘関節 J1J_1、手先 J2(x,y)J_2(x,y) が成す三角形 △OJ1J2\triangle O J_1 J_2 を考える。 辺の長さはそれぞれ OJ1=L1O J_1 = L_1、J1J2=L2J_1 J_2 = L_2、OJ2=d=x2+y2O J_2 = d = \sqrt{x^2 + y^2} である。 内角 ∠OJ1J2\angle O J_1 J_2 を ϕ\phi とすると、余弦定理より

d2=L12+L22−2L1L2cos⁡ϕd^2 = L_1^2 + L_2^2 - 2 L_1 L_2 \cos\phi

ここで第2リンクの相対回転角 θ2\theta_2 は外角にあたるため θ2=π−ϕ\theta_2 = \pi - \phi であり、cos⁡ϕ=−cos⁡θ2\cos\phi = -\cos\theta_2 となる。 したがって、

d2=L12+L22+2L1L2cos⁡θ2 ⟹ cos⁡θ2=d2−L12−L222L1L2d^2 = L_1^2 + L_2^2 + 2 L_1 L_2 \cos\theta_2 \ \Longrightarrow \ \cos\theta_2 = \frac{d^2 - L_1^2 - L_2^2}{2 L_1 L_2}

θ2=±arccos⁡(… )\theta_2 = \pm \arccos(\dots) として「肘上(Elbow Up)」と「肘下(Elbow Down)」の2通りの解が得られる。

2. 【ベース関節角 θ1\theta_1 の導出】: 原点から目標点へのベクトルが XX 軸となす角は α=atan2(y,x)\alpha = \text{atan2}(y, x) である。 三角形の内角 ∠J1OJ2=β\angle J_1 O J_2 = \beta に対し、再び余弦定理を適用すると、

L22=L12+d2−2L1dcos⁡β ⟹ cos⁡β=L12+d2−L222L1dL_2^2 = L_1^2 + d^2 - 2 L_1 d \cos\beta \ \Longrightarrow \ \cos\beta = \frac{L_1^2 + d^2 - L_2^2}{2 L_1 d}

したがって肘上の解の場合、θ1=α−β\theta_1 = \alpha - \beta と代数的に直接求まる。

押さえておきたいポイント

  • 手先を行きたい場所へ動かすという直感的な指示を、モーターが理解できる回転角度へと翻訳するのが逆運動学の数学的役割である
  • 解が存在するためには三角不等式 ∣L1−L2∣≤d≤L1+L2|L_1 - L_2| \le d \le L_1 + L_2 を満たす必要があり、範囲外はアームの届かない「到達不能領域」となる
  • 腕が完全に伸びきった状態(d=L1+L2d = L_1 + L_2)などはヤコビ行列の行列式がゼロになる「特異点(Singularity)」と呼ばれ、制御不能や急激な回転速度の跳ね上がりが生じるため、現場では特異点回避アルゴリズムが組み込まれる
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

産業用ロボット・ロボットハンドの軌道追従IKソルバー

コンベア上を流れる製品をピッキングする際、カメラが検出した製品座標 (x,y,z)(x,y,z) に瞬時にアーム手先を移動させる。高自由度アーム(6軸・7軸マニピュレータ)では幾何解法に加えてヤコビ行列の擬似逆行列(Moore-Penrose擬似逆行列)を用いた減衰最小二乗法(DLS法)によりリアルタイム数値計算が行われる。

1// 2リンク平面ロボットアームの逆運動学ソルバー (TypeScript)
2interface ArmAngles {
3 theta1: number; // ベース関節角 (rad)
4 theta2: number; // 肘関節角 (rad)
5 reachable: boolean;
6}
7
8function solve2DInverseKinematics(
9 x: number,
10 y: number,
11 l1: number,
12 l2: number
13): ArmAngles {
14 const d2 = x * x + y * y;
15 const d = Math.sqrt(d2);
16
17 // 到達可否判定(届かない、または近すぎて縮めない)
18 if (d > l1 + l2 || d < Math.abs(l1 - l2)) {
19 return { theta1: 0, theta2: 0, reachable: false };
20 }
21
22 // 1. 肘角 theta2 (余弦定理)
23 const cosTheta2 = (d2 - l1 * l1 - l2 * l2) / (2 * l1 * l2);
24 const clampedCosTheta2 = Math.max(-1, Math.min(1, cosTheta2));
25 const theta2 = Math.acos(clampedCosTheta2); // 肘上の解
26
27 // 2. ベース角 theta1
28 const alpha = Math.atan2(y, x);
29 const cosBeta = (l1 * l1 + d2 - l2 * l2) / (2 * l1 * d);
30 const clampedCosBeta = Math.max(-1, Math.min(1, cosBeta));
31 const beta = Math.acos(clampedCosBeta);
32 const theta1 = alpha - beta;
33
34 return { theta1, theta2, reachable: true };
35}
36
37// 溶接ロボットの手先移動テスト
38const target = { x: 150, y: 120 };
39const result = solve2DInverseKinematics(target.x, target.y, 120, 100);
40
41if (result.reachable) {
42 const deg1 = (result.theta1 * 180 / Math.PI).toFixed(1);
43 const deg2 = (result.theta2 * 180 / Math.PI).toFixed(1);
44 console.log(`目標到達可能: モーター1角度=${deg1}°, モーター2角度=${deg2}°`);
45} else {
46 console.log("目標はアームの可動限界外です");
47}

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高高校数学

正弦定理と余弦定理(三角測量)

直接行けない遠方の山や島までの距離を「角度」から精密に測る測量・GPSの基礎数学

関連度高高校数学

三角関数のグラフ(sin, cos, tan)

振幅・周期・位相のパラメータが波形を変形させる仕組みと振動現象への応用

Optical Illusion (Müller)
関連度高中学数学

幾何学的錯視と視覚心理学・脳の幾何情報処理

同じ長さが違って見え、平行線が波打つ — ミュラー・リヤー錯視とカフェウォール錯視の数理

同じレベルで次に挑戦したいトピック

同レベル推薦工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

同レベル推薦工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

同レベル推薦工学応用

レコメンドの仕組み(コサイン類似度とベクトル検索)

ユーザーの好みと商品の近さを「ベクトルのなす角」で判定するアルゴリズム

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

円の面積と円周率

半径を変えると、円周と面積はどう変わる?

工学・実践連携小学校・算数

三角形・多角形の面積

頂点を動かして、面積の公式が成り立つ理由を確かめよう

工学・実践連携小学校・算数

単位変換(長さ・面積・体積)

長さが2倍になると、面積・体積は何倍になる?

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。