第15章 順運動学と逆運動学

本章について

UR は 6 軸ロボットである。

そのため、

・TCP の位置

と

・各関節角度

は一対一ではない。

本章では

・順運動学 (Forward Kinematics)

・逆運動学 (Inverse Kinematics)

・特異点 (Singularity)

について説明する。

これらは moveL、servoL、Force Mode を理解する上で重要な基礎となる。


15.1 関節空間と直交座標空間

UR には大きく二つの空間が存在する。

Joint Space

[q1 q2 q3 q4 q5 q6]

と

Cartesian Space

[x y z rx ry rz]

である。

moveJ は Joint Space を制御する。

moveL は Cartesian Space を制御する。


15.2 順運動学(Forward Kinematics)

順運動学とは

Joint角度

↓

TCP位置

を計算することである。

例えば

q

↓

FK

↓

Pose

となる。

これは一意に決まる。

同じ Joint 角度なら

TCP は必ず同じ位置になる。


15.3 逆運動学(Inverse Kinematics)

逆運動学は

TCP

↓

Joint角度

を求める計算である。

Pose

↓

IK

↓

q

となる。

こちらは一意ではない。


15.4 なぜ複数解があるのか

例えば

同じ場所へ

肘を上げる

姿勢でも

肘を下げる

姿勢でも

到達できる。

      ○

     /

Base

と

     ○

      \

Base

では

TCP は同じでも

Joint は異なる。


15.5 Wrist Flip

手首にも複数解が存在する。

例えば

180°

反転しても

TCP姿勢は同じになる場合がある。

このため

IK の解は

複数存在する。


15.6 moveL が難しい理由

moveL は

Pose

↓

IK

↓

Joint

を

毎制御周期

実行する。

そのため

IK が解けないと

途中で停止する。


15.7 到達不能

例えば

Workspace外

なら

IK は存在しない。

Pose

↓

×

となる。

moveL は失敗する。


15.8 Joint Limit

Workspace内でも

Joint Limit

を超える場合は

IK が存在しない。

例えば

J1 が

400°

必要なら

実際には到達できない。


15.9 特異点(Singularity)

特異点とは

少しTCPを動かす

↓

Jointが大量に回る

状態である。

速度が無限大に近づくため

Controller は速度制限を行う。


15.10 手首特異点

最も有名なのは

Wrist Singularity

である。

手首軸が一直線になると

姿勢自由度が失われる。

moveL が遅くなったり、

速度制限が働いたりする。


15.11 肘特異点

腕が一直線になる姿勢も

特異点である。

Base

──────TCP

のように

伸び切る姿勢では

制御が不安定になりやすい。


15.12 moveJ と moveL の違い

moveJ は

Joint を直接制御するため

IK を使用しない。

そのため

特異点を比較的避けやすい。

moveL は

毎周期 IK を解くため

特異点の影響を受けやすい。


15.13 getInverseKinematics()

ur_rtde では

q = rtde_c.getInverseKinematics(pose)

のように

事前に IK を計算できる。

これにより

moveL前

↓

IK確認

↓

失敗なら処理中止

という安全な設計が可能になる。


15.14 Forward Kinematics

逆に

pose = rtde_c.getForwardKinematics(q)

を利用すると

Joint角度から

TCP位置を確認できる。

ティーチングソフトなどで便利である。


15.15 Safety Check

例えば

rtde_c.isPoseWithinSafetyLimits(pose)

などを利用すると

Workspace や Safety 設定内かどうかを

事前に確認できる。

Move 実行前にチェックすると

エラーを減らせる。


15.16 典型的な利用例

Pose生成

↓

Safety Check

↓

IK

↓

MoveL

この順番が推奨される。


15.17 ur_ctrl.pyでの実装

高レベルAPIでは

check_pose()

inverse_kinematics()

forward_kinematics()

などを公開すると

利用者が直接 RTDE API を呼び出す必要がなくなる。

Move 前に

安全判定と IK 判定を自動実行する設計も有効である。


15.18 よくあるトラブル

・到達可能だと思っていたが IK が解けない

・Tool を変更したら moveL が失敗する

・Joint Limit に到達して停止する

・特異点付近で極端に速度が低下する

・姿勢だけ変更したつもりが大きく回転する


まとめ

Forward Kinematics は

Joint

↓

TCP

Inverse Kinematics は

TCP

↓

Joint

である。

moveJ は Joint Space を制御するため IK を必要としない。

一方、moveL・servoL・Force Mode は Cartesian Space を制御するため、IK・Joint Limit・特異点の影響を受ける。

そのため、高信頼なアプリケーションでは Move 実行前に IK と安全範囲を確認することが推奨される。

次章では、Safety System と Protective Stop、Emergency Stop、Fault の違い、および Python からのエラー復旧について詳しく説明する。