メインコンテンツまでスキップ
ステージ 5 · 第23章 · 理論

23. ロボットアームの数学的基礎と座標系

Seeed Physical AI ビギナーコース第23章 — 座標フレームと同次変換:ワールド、ベース、関節、エンドエフェクタおよびカメラフレーム、ベクトルと行列、並進行列と回転行列、変換の連鎖、オイラー角とクォータニオンの比較。

このステージで必要なハードウェア​

このステージのために準備するものです。各ステージを通した完全な一覧は 第3章 にあります。

メイン制御ユニット

項目購入数量
reComputer Robotics J4012🛒1
NVIDIA Jetson AGX Thor 128G🛒1

デスクトップまたはノート PC も必要です:Ubuntu 22.04、GTX 4080 以上で 12GB 以上の VRAM、16GB 以上の RAM。

このステージ用

項目購入数量
reBot Arm B601 DM/RS🛒1
概要

このステージのコース内での位置づけ

これらの章で紹介する内容は従来型制御に属します。つまり、ハードコードされたプログラミングによってロボットアームを制御する方法です。従来型制御は、実際に稼働しているプロジェクトの大多数で使われています。その利点は安定性と信頼性であり、とくに産業生産の現場では非常に重要です。欠点は、新しい環境では安定して動作させる前に再チューニングが必要になることです。

章タイトル種類フォーカス
23ロボットアームの数学的基礎と座標系理論フレーム、ベクトル、同次変換、回転の表現
24順運動学、逆運動学、ヤコビアン理論関節角とエンドエフェクタ姿勢がどう結びつくか
25軌道計画とロボットアーム制御理論パスとトラジェクトリ、補間、フィードフォワード+フィードバック
26Pinocchio と MeshCat実践実際の reBot Arm モデルで FK / IK / 軌道計画を実行
ヒント

第23〜25章はリファレンス資料です。実際のプロジェクトでは、URDF と運動学ライブラリが 行列計算を代わりに行ってくれます。一度読んで「数値が何を意味しているか」を理解し、 その後は第26章を進めるあいだの参照用として手元に置いておきましょう。

なぜステージ 5 がステージ 4 の後に来るのか。 ステージ 3 とステージ 4 では、アームに模倣と自然言語追従を学習させました。これらのシステムは学習ベースであり、世界を観測して行動しますが、何かを保証してくれるわけではありません。まっすぐな溶接線、再現性のある把持、安全な非常停止が必要になった瞬間、下層に決定論的なレイヤー — すなわち、このステージで扱う数学とモーションコントロール — が必要になります。 上の図はその対比を 1 枚にまとめたものです。VLM は世界を記述し、VLA は世界に働きかけ、そしてここで学ぶすべてのことが、その行動が実際にどのように実行されるかを決定します。

観点VLM(Vision-Language Model)VLA(Vision-Language-Action Model)
入力画像 + 質問画像 + タスク指示(+ ロボット状態)
出力テキストによる記述ロボット動作のシーケンス
目的理解して記述する理解して行動する
代表的なモデルLLaVA, Qwen-VLGR00T, pi0
使用場面認識、アノテーション、デバッグ実ロボット制御(ステージ 4)

23.1 学習目標​

この章を終えたあと、次のことができるようになります:

  1. 座標フレームとは何か、そしてなぜロボットアームには複数のフレームが必要なのかを説明できる。
  2. ワールドフレーム、ベースフレーム、関節空間フレーム、エンドエフェクタ/ツールフレーム、カメラフレームの名称を挙げ、それぞれが何に固定されているかを説明できる。
  3. 並進と回転を 4x4 の同次変換行列として書き下し、それら 2 つを手計算で掛け合わせることができる。
  4. なぜ同次座標が存在するのか、そして「非同次」表記では何が失われるのかを説明できる。
  5. いつオイラー角を使い、いつクォータニオンを使うべきかを言える。

23.2 ベクトルと行列の基礎​

順運動学と逆運動学(次の章で扱います)には多数のベクトルと行列が登場するため、しっかりした行列の基礎を築くことが重要です。実際の制御では、低レベルの計算を自分で行う必要はないので、この章はリファレンスとして提供しています。

  • ベクトルは向きと大きさをもつ量を表します:位置、速度、力など。
  • 行列は線形写像を表します:あるフレームのベクトルが別のフレームのベクトルにどのように変換されるか。
  • ロボティクスで至るところに登場する 3 つの対象は、3x1 位置ベクトル p\mathbf{p}、3x3 回転行列 RR、そして 4x4 同次変換 TT です。

任意の回転行列 RR に対する有用な健全性チェック:

R⊤R=I(orthonormal)det⁡(R)=+1(a proper rotation, no mirroring)\begin{aligned} R^\top R &= I && \text{(orthonormal)} \\ \det(R) &= +1 && \text{(a proper rotation, no mirroring)} \end{aligned}
ミクロな例題:4x4 変換行列の読み取り
T=(0010.300100.05−1000.420001),R=(001010−100),t=(0.300.050.42)T = \begin{pmatrix} 0 & 0 & 1 & 0.30 \\ 0 & 1 & 0 & 0.05 \\ -1 & 0 & 0 & 0.42 \\ 0 & 0 & 0 & 1 \end{pmatrix}, \qquad R = \begin{pmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ -1 & 0 & 0 \end{pmatrix}, \qquad \mathbf{t} = \begin{pmatrix} 0.30 \\ 0.05 \\ 0.42 \end{pmatrix}

RR の列を、「親フレームで表現された子フレームの各軸」として読み取ります:

  • 子 x = [0, 0, −1]⊤[0,\ 0,\ -1]^\top -> 親フレームでは下向き
  • 子 y = [0, 1, 0]⊤[0,\ 1,\ 0]^\top -> 親の y と同じ
  • 子 z = [1, 0, 0]⊤[1,\ 0,\ 0]^\top -> 親の x 方向

そして t\mathbf{t} は、子フレームの原点がどこにあるかを表します。変換とはそれだけのものです。

23.3 ワールドフレームとベースフレーム​

ワールドフレームとベースフレームの比較

ワールドフレームは、ロボットアームが置かれている環境の座標フレームと理解できます。ベースフレームはロボットのベース部に設定されます。reBot アームの設計では、ロボットベースが固定されているため、ワールドフレームとベースフレームは一致します。

たとえば:アームがテーブルの上に置かれているとします。アームベースの中心を原点、テーブルトップを xy 平面、テーブルの脚の鉛直方向を z 軸とし、ワールドフレームは右手系に従います。ベースフレームもワールドフレームと一致します。(一般的なデカルト座標フレーム。)

右手系, RGB = XYZ

ロボティクス/ビジョンにおける XYZ 三軸の色の慣例(RGB = XYZ)

軸色一般的な呼び名
X🔴 RedRed
Y🟢 GreenGreen
Z🔵 BlueBlue
注記

右手系:人差し指の方向を +X、中指の方向を +Y とし、親指が +Z を与えます。+X、+Y、+Z 周りの回転は、その軸に沿って原点の方向を振り返って見たときに反時計回りを正とします。すべてのロボティクスツール(RViz、MeshCat、SolidWorks、URDF)はこの同じ慣例を使っており、そのため RGB = XYZ の色対応を覚えておく価値があります。

23.4 関節空間フレームとエンドエフェクタフレーム​

関節空間フレームは、ロボット制御で最もよく使われるフレームです。ロボットの関節上に定義され、その次元数はロボットが持つ関節の数に等しくなります。

関節空間フレーム

reBot B601 には 6 つの回転関節と 1 つのグリッパがあるため、その関節空間フレームは 6 次元です(グリッパを追加軸として扱う場合は 7 次元)。

エンドエフェクタフレーム

  • 原点:ツールセンターポイント(TCP)
エンドエフェクタ/TCP フレーム

エンドエフェクタフレームはロボットの先端に設定され、ツールフレームも存在します。先端をある位置に到達させたいときにはエンドエフェクタ座標を気にし、先端にグリッパが取り付けられている場合にはグリッパ座標を気にします。

フレーム取り付け先原点典型的な用途
World {world}\{world\}環境テーブル/セル上の固定点タスクレベルの座標、カメラ作業
Base {base}\{base\}ロボットベースベース中心運動学チェーンの根元
Joint {ji}\{j_i\}関節 ii関節 ii の軸FK / IK の内部計算
Flange最終関節の出力部フランジ中心ツールの取り付け位置
Tool / TCPツール本体ツールセンターポイント経路計画、把持点

一言で言えば:ワールドフレームは人間が最も直感的に理解しやすいフレームであり、ロボットは関節空間フレームを使って先端グリッパの位置を変化させます。そのため、ターゲットはワールド座標で設定し、関節空間フレームを使ってロボットを意図どおりに動かします。その間をつなぐのが座標変換です。

23.5 カメラフレーム​

カメラフレームとエンドエフェクタフレームは、通常は並進変換によって求められます。

  • 原点:カメラの光学中心
  • 慣例:z 軸は光軸に沿って前方、x は右向き、y は下向き(OpenCV の慣例。一部の OpenGL/ROS ツールでは y 上向き)
慣習xyz右手系
OpenCV / ビジョン右下前方(シーンの奥)はい
OpenGL / 一部の ROS ツール右上後方はい
ROS camera_optical_frame右下前方はい
警告

この 2 つの慣習を黙って混在させてはいけません。「y 下向き」カメラと「y 上向き」カメラは x 軸まわり 180 度回転だけ異なっており、一方の慣習で計算したハンドアイキャリブレーションをもう一方で使うと、グリッパは物体の反対側へ動いてしまいます。

カメラ座標系がビジュアルグラスピングパイプラインに現れる位置:

画素 (u,v) → 内部パラメータ K カメラ座標系 → ハンドアイ Tcam→tcp エンドエフェクタ座標系 → 順運動学 (FK) ベース座標系 → 逆運動学 (IK) 関節角\begin{aligned} \text{画素 } (u, v) &\ \xrightarrow{\ \text{内部パラメータ } K\ } \text{カメラ座標系} \\ &\ \xrightarrow{\ \text{ハンドアイ } T_{\text{cam}\to\text{tcp}}\ } \text{エンドエフェクタ座標系} \\ &\ \xrightarrow{\ \text{順運動学 (FK)}\ } \text{ベース座標系} \\ &\ \xrightarrow{\ \text{逆運動学 (IK)}\ } \text{関節角} \end{aligned}

23.6 座標変換の行列表現​

基本的な座標系回転 i, j, k

同次表現は「線形変換 + 並進」を 1 つの行列積に統一します。

非同次表現では、並進は行列の外側での加算となり、回転と 1 つの行列にまとめることはできません。

一般的な同次変換

T=(Rt0⊤1),R: 3×3 回転(姿勢),t: 3×1 並進(位置)T = \begin{pmatrix} R & \mathbf{t} \\ \mathbf{0}^\top & 1 \end{pmatrix}, \qquad R:\ 3\times3 \text{ 回転(姿勢)}, \qquad \mathbf{t}:\ 3\times1 \text{ 並進(位置)}

並進変換

p′=p+tT=(100tx010ty001tz0001)\mathbf{p}' = \mathbf{p} + \mathbf{t} \qquad \mathbf{T} = \begin{pmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{pmatrix}

完全に書き下すと、左が非同次、右が同次表現になります:

(x′y′z′)=(xyz)+(txtytz)=(x+txy+tyz+tz)⟺(x′y′z′1)=(100tx010ty001tz0001)(xyz1)=(x+txy+tyz+tz1)\begin{pmatrix} x' \\ y' \\ z' \end{pmatrix} = \begin{pmatrix} x \\ y \\ z \end{pmatrix} + \begin{pmatrix} t_x \\ t_y \\ t_z \end{pmatrix} = \begin{pmatrix} x + t_x \\ y + t_y \\ z + t_z \end{pmatrix} \qquad\Longleftrightarrow\qquad \begin{pmatrix} x' \\ y' \\ z' \\ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} = \begin{pmatrix} x + t_x \\ y + t_y \\ z + t_z \\ 1 \end{pmatrix}

回転変換

3 つの基本回転行列です。c=cos⁡θc = \cos\theta、s=sin⁡θs = \sin\theta と書くと行列が読みやすくなります。手計算するときは、元に戻して展開してください。

Rx(θ)=(1000c−s0sc)Ry(θ)=(c0s010−s0c)Rz(θ)=(c−s0sc0001)R_x(\theta) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & c & -s \\ 0 & s & c \end{pmatrix} \qquad R_y(\theta) = \begin{pmatrix} c & 0 & s \\ 0 & 1 & 0 \\ -s & 0 & c \end{pmatrix} \qquad R_z(\theta) = \begin{pmatrix} c & -s & 0 \\ s & c & 0 \\ 0 & 0 & 1 \end{pmatrix}

各回転の同次版では、同じ 3x3 ブロックを保ちつつ、並進列をゼロにします。したがって回転行列 RR は次のようになります:

(R00⊤1)例Rz(θ)=(c−s00sc0000100001)\begin{pmatrix} R & \mathbf{0} \\ \mathbf{0}^\top & 1 \end{pmatrix} \qquad\text{例}\qquad R_z(\theta) = \begin{pmatrix} c & -s & 0 & 0 \\ s & c & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}
軸非同次同次
X 軸Rx(θ)R_x(\theta)(10000c−s00sc00001)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & c & -s & 0 \\ 0 & s & c & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}
Y 軸Ry(θ)R_y(\theta)(c0s00100−s0c00001)\begin{pmatrix} c & 0 & s & 0 \\ 0 & 1 & 0 & 0 \\ -s & 0 & c & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}
Z 軸Rz(θ)R_z(\theta)(c−s00sc0000100001)\begin{pmatrix} c & -s & 0 & 0 \\ s & c & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}
注記

なぜ最下行が [0 0 0 1][0\ 0\ 0\ 1] なのか。 これは物理的な意味は持ちません。2 つの変換の行列積が再び変換行列になるようにするため、そして 点 (x,y,z,1)(x, y, z, 1) と 方向 (x,y,z,0)(x, y, z, 0) を同じ行列で変換できるようにするために存在します — 方向は並進を無視し、点は無視しません。

変換の合成 — 連鎖は単なる行列積であり、逆行列も安価に求められます:

Tac=Tab Tbc合成(連鎖則)(Tab)−1=Tba=(R⊤−R⊤t0⊤1)(3×3 の逆行列の代わりに R⊤ を用いる)\begin{aligned} T_a^c &= T_a^b \, T_b^c && \text{合成(連鎖則)} \\ \left( T_a^b \right)^{-1} = T_b^a &= \begin{pmatrix} R^\top & -R^\top \mathbf{t} \\ \mathbf{0}^\top & 1 \end{pmatrix} && (3\times3 \text{ の逆行列の代わりに } R^\top \text{ を用いる}) \end{aligned}

23.7 オイラー角とクォータニオン​

ロール、ピッチ、ヨー

オイラー角 vs. クォータニオン

  • オイラー角:3 つの数値、直感的、ジンバルロックがある
  • クォータニオン:4 つの数値(1 つの制約付き)、直感的ではない、ジンバルロックなし
観点オイラー角(ロール/ピッチ/ヨー)クォータニオン
数の個数34(制約 w2+x2+y2+z2=1w^2+x^2+y^2+z^2 = 1 付き)
直感的かはい。読み取りやログが容易いいえ
特異点中間の角度が +/-90 度に達するとジンバルロックなし
補間貧弱(ジャンプ、多価)良好(slerp)
慣習リスク24 通りの異なる慣習(順序、内在/外在)単一の慣習(符号のあいまいさのみ)
典型的な用途人間の入力、設定ファイル、ログ内部計算、ROS メッセージ、状態推定

工学では:人間にはオイラー角、機械にはクォータニオン を使います。

ヒント

reBot Arm ではこれは具体的に次のように現れます:MeshCat と Pinocchio は回転行列と SE(3) オブジェクトで考えますが、あなたはターミナルで度単位のロール/ピッチ/ヨーを入力します。Chapter 26 のデモでは、その間の変換を(rpyToMatrix、matrixToRpy)で自動的に行います。

  • 座標系(フレーム) は 3 本の軸と原点からなり、アームには少なくとも world、base、joint、tool、camera の各座標系が必要です。
  • reBot Arm ではベースが固定されているため、{world}={base}\{world\} = \{base\} です。
  • 同次変換 は回転と並進を 1 つの 4x4 行列にまとめ、連鎖は行列の積になります。
  • オイラー角 は人間用、クォータニオン は機械用です。
  • 次章では、これらの変換を使って関節角からエンドエフェクタの姿勢を計算し、その逆も行います。
Loading Comments...