はじめまして、りょーつといいます。高専出身の大学院2年生です。研究の専門は力学や機構学で、Qiitaでは主に制御工学や数学に関する記事を書いています。本稿はスクリュー理論の解説(布教)をする27個目の記事です。前回までの記事は以下のリンクを参照してください。
スクリュー理論① 外積の歪対称行列表現
スクリュー理論② 行列の指数関数
スクリュー理論③ 行列指数と回転行列の関係
スクリュー理論④ 回転行列の成分表示
スクリュー理論⑤ 回転行列による座標系の表現
スクリュー理論⑥ 剛体の速度・加速度の座標変換公式の導出
スクリュー理論⑦ 三次元空間における右手系の回転行列
スクリュー理論⑧ 回転行列による座標変換
スクリュー理論⑨ 回転行列によるベクトルの回転
スクリュー理論⑩ 回転行列と多様体の関係
スクリュー理論⑪ 同次変換行列の導入
スクリュー理論⑫ 同次変換行列による座標系の表現と基底変換
スクリュー理論⑬ 歪対称行列表現の回転座標変換
スクリュー理論⑭ 同次変換行列の微分とツイストの導入
スクリュー理論⑮ スクリューの導入と行列指数による同次変換行列の表現
スクリュー理論⑯ アジョイント変換
スクリュー理論⑰ 回転行列の行列対数
スクリュー理論⑱ 回転行列の積分
スクリュー理論⑲ 行列指数を用いた同次変換行列の成分表示
スクリュー理論⑳ 同次変換行列の行列対数
スクリュー理論㉑ シリアルリンクロボットアームの順運動学
スクリュー理論㉒ 円筒座標ロボットアームの順運動学
スクリュー理論㉓ 円筒座標ロボットアームのヤコビアン
スクリュー理論㉔ ボディ座標系を用いた順運動学
スクリュー理論㉕ アジョイント変換の図的イメージ
スクリュー理論㉖ 順運動学とアジョイント変換
スクリュー理論は剛体の運動を記述する方法で、ロボット工学などでよく使われています。日本の高専や大学ではDH法を使った記述を学ぶことが多いですが、国際的にはスクリュー理論を使った記述が一般的となってきているようです。スクリュー理論を扱う日本語の文献は少ないので、この記事が誰かの助けになればいいなと思います。
目次
1.はじめに
2.多関節機構のスクリューとアジョイント変換
3.空間ヤコビアン
4.おわりに
1. はじめに
今週の記事では、前回の記事で取り扱った順運動学とアジョイント変換の関係をさらに拡張し、多関節ロボットのツイストについて深堀りしていきます。上記の内容は少し前の記事でも登場したヤコビアンが関係しており、本稿ではスクリュー理論の枠組みにおけるヤコビアンの表記についてもまとめていきたいなと考えています。
アジョイント変換についての知識を多用するため、復習をしておくと良きです。また、前回の記事の多次元版みたいな内容ですので、まずはこちらをじっくり理解しておくと良きです。
2. 多関節機構のスクリューとアジョイント変換
前回の記事で、任意の関節角度における第$n$関節のスクリューが以下の計算式で表されることを軽く紹介しました。
\boldsymbol{\zeta_n}'
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}
Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}
\cdots
Ad_{e^{[\boldsymbol{\zeta_{n-1}}]\theta_{n-1}}}
\boldsymbol{\zeta_n}
\tag{1}
しかし、急に$n-1$個のアジョイント変換が登場してなんのことやら..ってなったと思うので、本章では(1)式の軽い導出を行いたいと思います。
まずは前回の復習もかねて関節が2つの場合について考えてみましょう。基準座標系を$\Sigma_s$とします。このとき、任意の関節角度における2つ目の関節のスクリュー$\boldsymbol{\zeta_2'}$は1つ目の関節の回転によってズレた原点(座標系$\Sigma_s'$)を補正するために、1つのアジョイント変換と初期状態におけるスクリュー$\boldsymbol{\zeta_2}$を使って以下のように表現できるのでした。
\boldsymbol{\zeta_2}'
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}
\boldsymbol{\zeta_2}
\tag{2}
イメージを図1にまとめておきました。
図1 回転後のロボットアームにおけるスクリュー$\boldsymbol{\zeta_2}$の図的イメージ
では、関節を3つに増やすとどうなるのでしょうか?まずは図1のように第1関節を回転させてみましょう。同様に原点のズレた座標系$\Sigma_s'$が得られます。基準座標系$\Sigma_s$からみた座標系$\Sigma_s'$の位置姿勢は同次変換行列$e^{[\boldsymbol{\zeta_1}]\theta_1}$で表されます。さらに第2関節を回転させてみましょう。すると、座標系$\Sigma_s'$からさらに原点のズレた座標系座標系$\Sigma_s''$が得られます。このとき、スクリュー$\boldsymbol{\zeta_2}$のツイストは座標系$\Sigma_s'$に発生しているので、同次変換行列$e^{[\boldsymbol{\zeta_2}]\theta_2}$は、座標系$\Sigma_s'$からみた座標系$\Sigma_s''$の位置姿勢を意味しています(※基準座標系$\Sigma_s$からみた座標系$\Sigma_s''$ではないことに注意!!)。
同次変換行列が複数登場して分かりづらいので、座標系$\Sigma_a$からみた座標系$\Sigma_b$の位置姿勢を表現する同次変換行列を$T_{ab}$と表記することにしましょう。すると、各行列指数は以下のようにまとめることができます。
T_{ss'}
=
e^{[\boldsymbol{\zeta_1}]\theta_1}
\tag{3}
T_{s's''}
=
e^{[\boldsymbol{\zeta_2}]\theta_2}
\tag{4}
T_{ss''}
=
T_{ss'} T_{s's''}
=
e^{[\boldsymbol{\zeta_1}]\theta_1} e^{[\boldsymbol{\zeta_2}]\theta_2}
\tag{5}
これらの準備をもとに、ロボットの関節角度が変化した後の第3関節のスクリュー$\boldsymbol{\zeta_3'}$について考えてみましょう。ロボットの関節角度が変化したあと、$\boldsymbol{\zeta_3}$は座標系$\Sigma_s''$に発生するツイストを意味するため、アジョイント変換で基準座標系へ移動させてあげる必要があります。
ここで登場するのが基準座標系$\Sigma_s$と座標系$\Sigma_s''$をつなぐ同次変換行列$T_{ss''}$です。これを使ってアジョイント変換してみましょう。すると以下の関係式が得られます。
\boldsymbol{\zeta_3'}
=
Ad_{T_{ss''}}\boldsymbol{\zeta_3}
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}
\boldsymbol{\zeta_3}
\tag{6}
このように、根元から順に直前の関節までアジョイント変換をすると、基準座標系$\Sigma_s$でスクリューを表現することができるのです。
図2 回転後のロボットアームにおけるスクリュー$\boldsymbol{\zeta_3}$の図的イメージ
関節が4つになった場合も考えてみましょう。このとき、第3関節の回転によってさらに座標系$\Sigma_s'''$が増えると考えれば以下の関係式が得られることに違和感はないでしょう。
\boldsymbol{\zeta_4'}
=
Ad_{T_{ss'''}}\boldsymbol{\zeta_4}
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}Ad_{e^{[\boldsymbol{\zeta_3}]\theta_3}}
\boldsymbol{\zeta_4}
\tag{7}
上記のノリで関節数を$n$個に増やすと、直前の関節までのアジョイント変換によって以下の関係式が得られます(再掲)。
\boldsymbol{\zeta_n}'
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}
Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}
\cdots
Ad_{e^{[\boldsymbol{\zeta_{n-1}}]\theta_{n-1}}}
\boldsymbol{\zeta_n}
\tag{8}
3. 空間ヤコビアン
本章ではスクリュー理論の枠組みにおける空間ヤコビアンの定義を紹介します。ロボットアームの各関節のスクリューにより、基準座標系$\Sigma_s$の原点に生じるツイストを$\boldsymbol{\nu_s}$とします。このとき、空間ヤコビアン$J_s$は以下の定義を満たします。
\boldsymbol{\nu_s}
=
J_s
\boldsymbol{\dot{\theta}}
\tag{9}
ただし、$\boldsymbol{\dot{\theta}}$は各関節の角速度をまとめた$n$次元ベクトルであり、空間ヤコビアン$J_s$は$\boldsymbol{\dot{\theta}}$をツイスト$\boldsymbol{\nu_s}$に変換する表現行列として定義されます。
\boldsymbol{\dot{\theta}}
=
\begin{bmatrix}
\dot{\theta_1} \\
\dot{\theta_2} \\
\vdots \\
\dot{\theta_n} \\
\\
\end{bmatrix}
\in
\mathbb{R}^n
\tag{10}
J_s
\in
\mathbb{R}^6 \times \mathbb{R}^n
\tag{11}
では、空間ヤコビアンの実体に迫っていきましょう。2章と同様に、各軸から発生したスクリュー$\boldsymbol{\zeta}$を基準座標系$\Sigma_s$に変換したものを$\boldsymbol{\zeta'}$と置くことにします。スクリューは角速度の大きさを1に正規化したツイスト(定義より)なので、実際に発生するツイストはスクリュー$\boldsymbol{\zeta'}$に角速度$\dot{\theta}$をかけたものになります。例えば第$k$関節のスクリュー$\boldsymbol{\zeta_k'}$が発生させるツイスト$\boldsymbol{\nu_{sk}}$は以下のようにまとめられます。
\boldsymbol{\nu_{s_k}}
=
\boldsymbol{\zeta_k'}
\dot{\theta_k}
=
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}
Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}
\cdots
Ad_{e^{[\boldsymbol{\zeta_{k-1}}]\theta_{k-1}}}
\boldsymbol{\zeta_k}
\dot{\theta_k}
\tag{12}
同じ座標系を基準に考えるツイストどうしは合成できるので、$n$関節のロボットアームの空間ツイスト$\boldsymbol{\nu}$は(12)式の線形結合で以下のように表すことができます。
\boldsymbol{\nu_s}
=
\boldsymbol{\nu_{s_1}}
+
\boldsymbol{\nu_{s_2}}
+
\cdots
+
\boldsymbol{\nu_{s_n}}
=
\boldsymbol{\zeta_1'}
\dot{\theta_1}
+
\boldsymbol{\zeta_2'}
\dot{\theta_2}
+
\cdots
+
\boldsymbol{\zeta_n'}
\dot{\theta_n}
\tag{13}
さらに(13)式を行列にまとめると以下のようになります。
\boldsymbol{\nu_s}
=
\begin{bmatrix}
\boldsymbol{\zeta_1'} & \boldsymbol{\zeta_2'} & \cdots & \boldsymbol{\zeta_n'} \\
\end{bmatrix}
\begin{bmatrix}
\dot{\theta_1} \\
\dot{\theta_2} \\
\vdots \\
\dot{\theta_n} \\
\\
\end{bmatrix}
\tag{14}
以上のことから、空間ヤコビアン$J_s$は、スクリュー$\boldsymbol{\zeta'}$をたくさん並べて構成されることが分かります!
J_s
=
\begin{bmatrix}
\boldsymbol{\zeta_1'} & \boldsymbol{\zeta_2'} & \boldsymbol{\zeta_3'} & \cdots & \boldsymbol{\zeta_n'} \\
\end{bmatrix}
\tag{15}
さらに深堀りしてみましょう。空間ヤコビアン$J_s$を構成する各スクリューはアジョイント変換によって(8)式のように表現できるのでした。したがって、設計時(初期状態)のスクリュー$\boldsymbol{\zeta}$をつかって空間ヤコビアン$J_s$を表現するのであれば、以下のようにすればよいことが分かります。
J_s
=
\begin{bmatrix}
\boldsymbol{\zeta_1} &
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}} \boldsymbol{\zeta_2} &
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}} \boldsymbol{\zeta_3} &
\cdots &
Ad_{e^{[\boldsymbol{\zeta_1}]\theta_1}}
Ad_{e^{[\boldsymbol{\zeta_2}]\theta_2}}
\cdots
Ad_{e^{[\boldsymbol{\zeta_{n-1}}]\theta_{n-1}}}
\boldsymbol{\zeta_n} \\
\end{bmatrix}
\tag{16}
意味は非常に直感的ですが、なかなか見た目がエグイ計算式になります(^▽^)。
注意が必要なのは、空間ヤコビアン$J_s$は基準座標系$\Sigma_s$の原点に生じるツイスト$\boldsymbol{\nu_s}$を導出する行列です!ロボットの制御でよく用いられるのはエンドエフェクタに生じるツイストですので、空間ヤコビアンをそのままロボットに応用するのは難しいです。どちらかというと機構の対偶解析とかに用いられている印象が強いです。もちろん今後の記事でエンドエフェクタの制御に有用なヤコビアンについても紹介する予定ですのでお楽しみに!
4. おわりに
今週の記事では、多関節ロボットにおけるスクリューのアジョイント変換の話から空間ヤコビアンの定義まで幅広く紹介しました。空間ヤコビアン$J_s$が表現行列として定義できるということは、空間ツイスト$\boldsymbol{\nu_s}$の次元解析ができるということです。これはロボットアームの「特異姿勢」などと密接に関係しています!
ヤコビアンを使ったいろいろな話を次週以降にまとめていけたらなあと考えています。
今週も最後まで読んでいただき、ありがとうございました!