はじめまして、りょーつといいます。高専出身の大学院2年生です。研究の専門は力学や機構学で、Qiitaでは主に制御工学や数学に関する記事を書いています。本稿はスクリュー理論の解説(布教)をする16個目の記事です。前回までの記事は以下のリンクを参照してください。
スクリュー理論① 外積の歪対称行列表現
スクリュー理論② 行列の指数関数
スクリュー理論③ 行列指数と回転行列の関係
スクリュー理論④ 回転行列の成分表示
スクリュー理論⑤ 回転行列による座標系の表現
スクリュー理論⑥ 剛体の速度・加速度の座標変換公式の導出
スクリュー理論⑦ 三次元空間における右手系の回転行列
スクリュー理論⑧ 回転行列による座標変換
スクリュー理論⑨ 回転行列によるベクトルの回転
スクリュー理論⑩ 回転行列と多様体の関係
スクリュー理論⑪ 同次変換行列の導入
スクリュー理論⑫ 同次変換行列による座標系の表現と基底変換
スクリュー理論⑬ 歪対称行列表現の回転座標変換
スクリュー理論⑭ 同次変換行列の微分とツイストの導入
スクリュー理論⑮ スクリューの導入と行列指数による同次変換行列の表現
スクリュー理論は剛体の運動を記述する方法で、ロボット工学などでよく使われています。日本の高専や大学ではDH法を使った記述を学ぶことが多いですが、国際的にはスクリュー理論を使った記述が一般的となってきているようです。スクリュー理論を扱う日本語の文献は少ないので、この記事が誰かの助けになればいいなと思います。
目次
1.はじめに
2.ツイストの復習
3.アジョイント変換
4.おわりに
1. はじめに
今回の記事では、ツイスト$\boldsymbol{\nu}$の座標変換についてまとめようと思います。ツイストは三次元の角速度$\boldsymbol{\omega}$と三次元の速度$\boldsymbol{v}$を並べて構成される6次元ベクトルであるため、その変換に用いる行列は$6\times 6$の正方行列になります。まだ先の話になりますが、ロボットアームの速度運動学を考える際に同一の座標系でスクリューを記述する必要があるため、スクリューの座標変換に相当するアジョイント変換は重要な概念になります。
回転行列はベクトルが回転する様子を図示することができましたが、ツイストのアジョイント変換は図示することが難しいため、かなり抽象的な説明になりがちです。丁寧な説明をこころがけようと思います。
これまでの記事と同様に、基準座標系を$\Sigma_s$とし、添え字には$s$を使用します。一方でボディ座標系を$\Sigma_b$とし、添え字には$b$を使用します。基準座標系$\Sigma_s$から見たボディ座標系$\Sigma_b$の姿勢を回転行列$R_{sb}$で表現することにします。基準座標系$\Sigma_s$から見たボディ座標系$\Sigma_b$のコンフィギュレーションを同次変換行列$T_{sb}$で表現することにします。基準座標系$\Sigma_s$とボディ座標系$\Sigma_b$の原点は一致してなくてもよいです。
2. ツイストの復習
ツイスト$\boldsymbol{\nu}$は角速度$\boldsymbol{\omega}$と速度$\boldsymbol{v}$を縦に並べることで以下のように定義される6次元ベクトルです。
\boldsymbol{\nu}
=
\begin{bmatrix}
\boldsymbol{\omega} \\
\boldsymbol{v} \\
\end{bmatrix}
\in
\mathbb{R}^6
\tag{1}
ツイストは座標系に依存するパラメータであり、基準座標系$\Sigma_s$を基準としたツイスト$\boldsymbol{\nu_s}$とボディ座標系$\Sigma_b$を基準としたツイスト$\boldsymbol{\nu_b}$が存在します。それぞれを成分表示すると以下のように表すことができます。
\boldsymbol{\nu_s}
=
\begin{bmatrix}
\boldsymbol{\omega_s} \\
\boldsymbol{v_s} \\
\end{bmatrix}
\in
\mathbb{R}^6
\tag{2}
\boldsymbol{\nu_b}
=
\begin{bmatrix}
\boldsymbol{\omega_b} \\
\boldsymbol{v_b} \\
\end{bmatrix}
\in
\mathbb{R}^6
\tag{3}
また、それぞれを行列表現したもの$[\boldsymbol{\nu_s}]$、$[\boldsymbol{\nu_b}]$は、以下の式でまとめることができます。くわしくはこちらの記事を参照ください
[\boldsymbol{\nu_s}]
=
\frac{dT_{sb}}{dt} {T_{sb}}^{-1}
=
\begin{bmatrix}
[\boldsymbol{\omega_s}] & \boldsymbol{v_s}\\
\boldsymbol{0}^T & 0 \\
\end{bmatrix}
\in
\mathbb{R}^4 \times \mathbb{R}^4
\tag{4}
[\boldsymbol{\nu_b}]
=
{T_{sb}}^{-1} \frac{dT_{sb}}{dt}
=
\begin{bmatrix}
[\boldsymbol{\omega_b}] & \boldsymbol{v_b}\\
\boldsymbol{0}^T & 0 \\
\end{bmatrix}
\in
\mathbb{R}^4 \times \mathbb{R}^4
\tag{5}
(4)、(5)式から同次変換行列の時間微分を消去することで、行列表現されたツイスト$\boldsymbol{\nu}$の変換公式は以下のように導出できます。
[\boldsymbol{\nu_s}]
=
T_{sb}
[\boldsymbol{\nu_b}]
{T_{sb}}^{-1}
\tag{6}
ただし、行列を左右から掛けないといけないため、直感的ではないし、ツイスト$\boldsymbol{\nu}$を一度行列表現に変換しないといけない点も面倒です。スタンダードツイスト$\boldsymbol{\nu_s}$とボディツイスト$\boldsymbol{\nu_b}$を直接変換する方法を考えてみましょう。
ここで(6)式を具体的に展開してみましょう。同次変換行列$T_{sb}$を以下のように定義します。ベクトル$\boldsymbol{p_{sb}}$は基準座標系$\Sigma_s$からみたボディ座標系$\Sigma_b$の原点の位置を表す座標です。
T_{sb}
=
\begin{bmatrix}
R_{sb} & \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\in
\mathbb{R}^4 \times \mathbb{R}^4
\tag{7}
T_{sb}^{-1}
=
\begin{bmatrix}
{R_{sb}}^T & -{R_{sb}}^T \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\in
\mathbb{R}^4 \times \mathbb{R}^4
\tag{8}
(5)、(7)、(8)式を(6)式に代入して展開すると以下の関係が得られます。
[\boldsymbol{\nu_s}]
=
\begin{bmatrix}
R_{sb} & \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\begin{bmatrix}
[\boldsymbol{\omega_b}] & \boldsymbol{v_b}\\
\boldsymbol{0}^T & 0 \\
\end{bmatrix}
\begin{bmatrix}
{R_{sb}}^T & -{R_{sb}}^T \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb} & \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\begin{bmatrix}
[\boldsymbol{\omega_b}]{R_{sb}}^T & - [\boldsymbol{\omega_b}]{R_{sb}}^T \boldsymbol{p_{sb}} + \boldsymbol{v_b}\\
\boldsymbol{0}^T & 0 \\
\end{bmatrix}
\therefore
[\boldsymbol{\nu_s}]
=
\begin{bmatrix}
R_{sb} [\boldsymbol{\omega_b}]{R_{sb}}^T & - R_{sb} [\boldsymbol{\omega_b}]{R_{sb}}^T \boldsymbol{p_{sb}} + R_{sb} \boldsymbol{v_b}\\
\boldsymbol{0}^T & 0 \\
\end{bmatrix}
\tag{9}
ここで(4)式と(9)式より、恒等的に以下の関係がなりたちます。
[\boldsymbol{\omega_s}]
=
R_{sb} [\boldsymbol{\omega_b}]{R_{sb}}^T
\tag{10}
\boldsymbol{v_s}
=
-R_{sb} [\boldsymbol{\omega_b}]{R_{sb}}^T \boldsymbol{p_{sb}} + R_{sb} \boldsymbol{v_b}
\tag{11}
回転軸の座標変換は姿勢変換のみによって実現できるため、以下の関係がなりたちます。なお、(10)式は以下の関係を行列表現したものになります。(詳しくはこちらの記事へ)
\boldsymbol{\omega_s}
=
R_{sb}\boldsymbol{\omega_b}
\tag{12}
(12)式を(11)式に代入し、ベクトルの外積の順番を交換することで、速度に関する以下の変換公式が得られます。
\boldsymbol{v_s}
=
- [\boldsymbol{\omega_s}] \boldsymbol{p_{sb}} + R_{sb} \boldsymbol{v_b}
=
- \boldsymbol{\omega_s} \times \boldsymbol{p_{sb}} + R_{sb} \boldsymbol{v_b}
=
\boldsymbol{p_{sb}} \times \boldsymbol{\omega_s} + R_{sb} \boldsymbol{v_b}
\therefore
\boldsymbol{v_s}
=
[\boldsymbol{p_{sb}}] R_{sb} \boldsymbol{\omega_b} + R_{sb} \boldsymbol{v_b}
\tag{13}
3. アジョイント変換
3.1 定義
ツイスト$\boldsymbol{\nu}$の構成要素である角速度$\boldsymbol{\omega}$と速度$\boldsymbol{v}$の座標変換は(12)式と(13)式で記述されることが分かりました。これらを1つにまとめることでツイスト$\boldsymbol{\nu}$の座標変換を記述することができます。
\begin{bmatrix}
\boldsymbol{\omega_s}\\
\boldsymbol{v_s} \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb} \boldsymbol{\omega_b}\\
[\boldsymbol{p_{sb}}] R_{sb} \boldsymbol{\omega_b} + R_{sb} \boldsymbol{v_b} \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}] R_{sb} & R_{sb} \\
\end{bmatrix}
\begin{bmatrix}
\boldsymbol{\omega_b}\\
\boldsymbol{v_b} \\
\end{bmatrix}
\therefore
\boldsymbol{\nu_s}
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}] R_{sb} & R_{sb} \\
\end{bmatrix}
\boldsymbol{\nu_b}
\tag{14}
このような変換をツイストのアジョイント変換と呼びます。アジョイント変換の変換行列の構成要素は同次変換行列$T_{sb}$と同じであるため、これを「同次変換行列$T_{sb}$のアジョイント表現と読んだりします。
(14)式はツイストを引数に持つ関数$Ad_{T_{sb}}$を使ったアジョイント写像と表記されることもあります。
\boldsymbol{\nu_s}
=
Ad_{T_{sb}}(\boldsymbol{\nu_b})
\tag{15}
また、アジョイント表現は記号$[Ad_{T_{sb}}]$を使って表されることが多く、以下の関係式がなりたちます。
[Ad_{T_{sb}}]
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}] R_{sb} & R_{sb} \\
\end{bmatrix}
\tag{16}
\boldsymbol{\nu_s}
=
[Ad_{T_{sb}}]\boldsymbol{\nu_b}
\tag{17}
3.2 結合則
ある座標系$\Sigma_a$を考え、同次変換行列について以下がなりたつ場合のアジョイント表現$Ad_{T_{sa}}$を考えます。
T_{sa}
=
T_{sb} T_{ba}
\tag{18}
T_{ba}
=
\begin{bmatrix}
R_{ba} & \boldsymbol{p_{ba}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\in
\mathbb{R}^4 \times \mathbb{R}^4
\tag{19}
このとき、行列の積を計算することで同次変換行列$T_{sa}$の成分は以下のように記述できます。
T_{sa}
=
\begin{bmatrix}
R_{sb} & \boldsymbol{p_{sb}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\begin{bmatrix}
R_{ba} & \boldsymbol{p_{ba}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb}R_{ba} & \boldsymbol{p_{sb}} + R_{sb} \boldsymbol{p_{ba}}\\
\boldsymbol{0}^T & 1 \\
\end{bmatrix}
\tag{20}
したがって$T_{sa}$のアジョイント表現$[Ad_{T_{sa}}]$は以下のようになります。
[Ad_{T_{sa}}]
=
\begin{bmatrix}
R_{sb}R_{ba} & O\\
[\boldsymbol{p_{sb}} + R_{sb} \boldsymbol{p_{ba}}]R_{sb}R_{ba} & R_{sb}R_{ba} \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb}R_{ba} & O\\
[\boldsymbol{p_{sb}}]R_{sb}R_{ba} + [R_{sb} \boldsymbol{p_{ba}}]R_{sb}R_{ba} & R_{sb}R_{ba} \\
\end{bmatrix}
\tag{21}
一方でアジョイント表現どうしの積$[Ad_{T_{sb}}][Ad_{T_{ba}}]$についても計算してみましょう。頑張って展開すると以下の関係が得られます。
[Ad_{T_{sb}}][Ad_{T_{ba}}]
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}]R_{sb} & R_{sb} \\
\end{bmatrix}
\begin{bmatrix}
R_{ba} & O\\
[\boldsymbol{p_{ba}}]R_{ba} & R_{ba} \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb}R_{ba} & O\\
[\boldsymbol{p_{sb}}]R_{sb}R_{ba} + R_{sb}[\boldsymbol{p_{ba}}]R_{ba} & R_{sb}R_{ba} \\
\end{bmatrix}
\tag{22}
ここでこちらの記事の変換公式より
R_{sb}[\boldsymbol{p_{ba}}]R_{ba}
=
\big( R_{sb}[\boldsymbol{p_{ba}}] {R_{sb}}^T \big) R_{sb} R_{ba}
=
[R_{sb} \boldsymbol{p_{ba}}]R_{sb} R_{ba}
\tag{23}
がなりたつため、(23)式を(22)式に代入すると
[Ad_{T_{sb}}][Ad_{T_{ba}}]
=
\begin{bmatrix}
R_{sb}R_{ba} & O\\
[\boldsymbol{p_{sb}}]R_{sb}R_{ba} + [R_{sb}\boldsymbol{p_{ba}}]R_{sb} R_{ba} & R_{sb}R_{ba} \\
\end{bmatrix}
\tag{24}
が成り立ちます。(21)式と(24)式の右辺が等しいため、アジョイント表現について以下の結合則が導出できます。
[Ad_{T_{sb} T_{ba}}]
=
[Ad_{T_{sb}}][Ad_{T_{ba}}]
\tag{25}
3.3 逆変換
本節ではアジョイント行列の逆行列について考えます。その準備として単位行列$I$のアジョイント変換$Ad_I$を考えてみましょう。(16)式に対して$R_{sb}=I$、$\boldsymbol{p_{sb}} = \boldsymbol{0}$を代入することで$Ad_I$も単位行列になることが分かります。
[Ad_I]
=
\begin{bmatrix}
I & O \\
O & I \\
\end{bmatrix}
=
I
\tag{26}
また結合則より、
[Ad_I]
=
[Ad_{T_{sb} {T_{sb}}^{-1}}]
=
[Ad_{T_{sb}}][Ad_{{T_{sb}}^{-1}}]
=
I
\tag{27}
であるため、アジョイント表現の逆行列は以下のように同次変換行列の逆行列のアジョイント表現として記述できます。
[Ad_{T_{sb}}]^{-1}
=
[Ad_{{T_{sb}}^{-1}}]
\tag{28}
(28)式の具体的な成分を求めてみましょう。(8)式を(16)式に代入すると
[Ad_{{T_{sb}}^{-1}}]
=
\begin{bmatrix}
{R_{sb}}^T & O\\
[-{R_{sb}}^T\boldsymbol{p_{sb}}] {R_{sb}}^T & {R_{sb}}^T \\
\end{bmatrix}
\tag{29}
となります。ここでこちらの記事の変換公式より
[-{R_{sb}}^T\boldsymbol{p_{sb}}] {R_{sb}}^T
=
-[{R_{sb}}^T\boldsymbol{p_{sb}}] {R_{sb}}^T
=
-{R_{sb}}^T [\boldsymbol{p_{sb}}] R_{sb} {R_{sb}}^T
=
-{R_{sb}}^T [\boldsymbol{p_{sb}}]
\tag{30}
であることから、以下がなりたちます。
[Ad_{T_{sb}}]^{-1}
=
[Ad_{{T_{sb}}^{-1}}]
=
\begin{bmatrix}
{R_{sb}}^T & O\\
-{R_{sb}}^T[\boldsymbol{p_{sb}}] & {R_{sb}}^T \\
\end{bmatrix}
\tag{31}
念のため(31)式の検算をしておきましょう。$[Ad_{T_{sb}}]$と$[Ad_{T_{sb}}]^{-1}$の積が単位行列になることを確認します。
[Ad_{T_{sb}}][Ad_{T_{sb}}]^{-1}
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}] R_{sb} & R_{sb} \\
\end{bmatrix}
\begin{bmatrix}
{R_{sb}}^T & O\\
-{R_{sb}}^T[\boldsymbol{p_{sb}}] & {R_{sb}}^T \\
\end{bmatrix}
=
\begin{bmatrix}
R_{sb}{R_{sb}}^T & O\\
[\boldsymbol{p_{sb}}] R_{sb}{R_{sb}}^T - R_{sb}{R_{sb}}^T [\boldsymbol{p_{sb}}] & R_{sb}{R_{sb}}^T \\
\end{bmatrix}
=
\begin{bmatrix}
I & O\\
[\boldsymbol{p_{sb}}] - [\boldsymbol{p_{sb}}] & I \\
\end{bmatrix}
\therefore
[Ad_{T_{sb}}][Ad_{T_{sb}}]^{-1}
=
I
\tag{32}
たしかに逆行列の定義を満たしていますね。
4. おわりに
新しい概念がたくさん登場したため、改めて本記事の内容を軽くまとめておこうと思います。まず、同次変換行列$T_{sb}$のアジョイント表現$[Ad_{T_{sb}}]$は以下のように定義されます。
[Ad_{T_{sb}}]
=
\begin{bmatrix}
R_{sb} & O\\
[\boldsymbol{p_{sb}}] R_{sb} & R_{sb} \\
\end{bmatrix}
\tag{a}
アジョイント表現を用いることで、ツイストの座標変換を行うことができます。
\boldsymbol{\nu_s}
=
[Ad_{T_{sb}}]
\boldsymbol{\nu_b}
\tag{b}
また、アジョイント変換の結合則と逆変換について以下がなりたちます。
[Ad_{T_{sb} T_{ba}}]
=
[Ad_{T_{sb}}]
[Ad_{T_{ba}}]
\tag{c}
[Ad_{T_{sb}}]^{-1}
=
[Ad_{{T_{sb}}^{-1}}]
=
\begin{bmatrix}
{R_{sb}}^T & O\\
-{R_{sb}}^T[\boldsymbol{p_{sb}}] & {R_{sb}}^T \\
\end{bmatrix}
\tag{d}
このように、本記事ではアジョイント変換の定義と基本的な性質、同次変換行列との関係についてまとめました。来週以降はスクリュー理論を使ってロボットアームの運動学解析をしてみたいと思います。
今週も最後まで読んでいただき、ありがとうございました!