なお、通常の文章(HTML)の表現力と、まじめに数式表記したもの(TeX)や図(Illustrator)の表現力に違いがあるため、図や数式と本文中の文字には違いがでます。
本文中の文字も数式にすると行間などがひどいことになるので、ご了承下さい。
もちろん、不要なら省略します。(詳細は追って)
例:
ベクトル
たとえば、右図のように平面上をそこそこ自動的に走る車両を考えます。 車両の走行経路に障害物がある場合、それを検知してよける必要があります。 この時、いろいろなケースが考えられます。
このように、ロボットを扱おうとすると、複数の対象に固定された複数の座標系がしばしば出てきます。 上の例は、せいぜい地上の座標系と車両上の座標系のみを考慮すれば済みますが、同じ移動する座標であっても、2脚歩行ロボットなどは、「胴体を基準にした座標系」「右のふとももを基準にした座標系」「右のすねを基準」「右足を基準」「左...」と非常に多くの座標系がでてきます。
ただし、それらの座標系はそれぞれ、何らかの関係をもって互いに運動しています。 その座標系同士の相対的な関係をもとに、その座標系の上に乗っているものを、別の座標系からみるとどこに見えるか、を以下で考えてみます。
※多くの座標系を扱うときに、一つ基準となる、動かないとする座標系を考えることがあり、ワールド座標系と呼ばれます。
もっとも、動かないと思っていても、たとえばそれを実験室の床に固定すると、地球は自転するわ、公転するわ、銀河系は回ってるわ、それなりに動いています。
そこまでは屁理屈をこねず(笑)、床に固定したら動かないと考えることにしましょう。
合同な座標変換は「平行移動」と「回転」の組合わせで出来ます。
右図は、先ほどの二つの座標系の関係を分解したものです。座標系Aをまず適当な角度θだけ回転させ、それをベクトル
あとは、座標系の移動にともなってその座標に乗っていたものがどう移動するか、あるいは、ある座標系上のものが別の座標系からどう見えるか、について確認しましょう。
ちなみに、先に平行移動してから回転させることももちろん可能ですが、この図と同じ角度、移動量のままで順番だけかえると違う結果になることはわかると思います。平行と回転とか、回転でも3次元になって回転軸の異なる回転を組み合わせるときは、適用の順番が非常に重要になります。
ここでは、回転させて移動、のほうが分かりやすいとおもって、この順番にしました。
簡単なので、座標変換の意味をちょっと考えてみます。
おそらく、いままで、平行移動といった場合に、たびたび出てきて、ぱっと思い当たるのは右の図の(1)だとおもいます。
座標系A上の点、P(位置ベクトル
さて、座標系Aからみた、座標系Bの原点位置が
(※蛇足: 個人的には、'q' ではなく translationの't' と書きたいのですが、混乱を避けるため、教科書に準拠して 'q' と書きます)
また、この変換で移動するのは座標(位置ベクトル)です。ある点と点の相対的位置関係を表すベクトル(相対ベクトル)は、当然ながらかわりません。
その意味で、平行移動は線形な変換ではありません。
ある点Pを座標系Aから見たとき(
こういった概念は、これからしつこく座標をいじっているうちに身に付くと思いますが、最初はしっかり意識しておきましょう。
もう少し、意識して書くと、
となります(座標系AでみたBの原点、座標系BでみたAの原点)。なお自明ですが、
が成り立ちます。
また、なんとなく、左肩と右下の添字がきれいに関連して見えますが、見た目の問題で、常にその本質を考えて式を見るようにしてください。
決して、文字がつながるから、という理由だけで式を書いてはなりません。
(線形な変換の場合は、「Aを変換したものとBを変換したものの和は、A+Bを変換したもの」になりますが、
(
原点が共通な座標系A(X-Y軸)と座標系B(U-V)軸からそれぞれ点Pを見ます。
ここで
これらの座標軸やその上の点を実際に手で書いてみて、(0,1)など数値的に検証のしやすい他の点も試してみるようにしてください。
となります。
一方、点Pを指すベクトル
と、それぞれの座標軸の単位ベクトル成分に分解でき、
に他なりません。
以上の式を結合して、
となり、
が成り立ちます。まとめると、
となり、
という形に書けます。
回転の場合、直感的に分かりにくいこともあるため、実際に数字を入れてみることが肝心です。
例:θ=30度
この関係は座標軸AとBでどちらが主ということはありません。そのため、両者の関係を入れ替えると、
になります(入れ替えたとき、角度も逆向きにすることに注意)。さらに、
すなわち
が成り立つことも重要です。つまり、回転に関しては、逆行列が逆変換を表すことになります。
まず、一度この式を成分ごとにばらしてみます。
これは、
と書き換えることができます(行列表現を分解してみると同一です)。
つぎに、これに式を一本加えます。
これらをまぜると、
と表記できます。まとめると、
となります。これによって、回転+平行という一般的な座標変換が
という分かりやすい形で書けるようになりました。つまり、
という処理をします。
AとB, BとCの関係がわかっている場合、すなわち
の場合に、AとCの関係は単純に、
で表せます(代入しただけ)。つまり、AとCの関係も単純に
と、同次変換行列を重ねておしまいです。
AとBの関係をつくったとき、
さて、「
さて、逆変換の同次変換行列が求まったところで、その性質を確認しましょう。
※つぎもまだ数式がややこしいことを予告。
この操作をまずは別々の変換、T1とT2で書いてみます。
結合して、
ここで重要な点は、「あとでする変換を前に書く」ことです。変換されるベクトルに近い=右から、変換行列を並べるためです。
つまり、
と、同次変換についても、逆変換は逆行列で行えることが確認できました。
このように、同次変換を用いると、ややこしい座標変換が一見すると単純な行列一個になります。
もちろん、中身はややこしいのですが、それは実際にロボットを設計するときに考えることにして、ロボット工学の講義としては、この次の節でややこしいのを終わらせて、あとは行列でさくっと書くことにしましょう。
後述するように、同次変換の概念はそのまま持っていくことができ、同次ベクトルの要素数は4になります。 同次変換行列も4×4になります。
※本ページ冒頭で書いた「3次元は2次元+1」に相当。
同じように、X(U)軸回りの回転として、
ここで回転方向について確認しておきます。
ある軸周りといったときには、正の向きを決めておかないと2方向があるからです。
最初の例で見てみると、「Z軸まわり」といったときに、回転角度θの方向は、「座標軸の正の方向に親指を向けて、右手で軸を握ったときに、指が巻かれる方向」が正になっています。
残り二つもそのようになっているはずですので確かめておきましょう。
回転軸の設定方法はいくらでも考えられそうですが、この3つを組み合わせると、任意の回転が得られることはこのあとで確認します。
※「3次元=2次元×3」に相当。
同じように、Y(V)軸回りの回転として、
が定義できます。
こういう軸の性質として対象な操作を考えるときに覚えておくと便利な考え方として、「x→y, y→z, z→xと置き換える」という方法があります。
たとえば、座標軸の基本ベクトルの性質
と、
がそのまま使えます。また、これから導き出した、
や
がそのまま成立します。
ということは、
ただし、選び方には制約があります。
2次元で考えると、要素数は4個ありますが2次元での回転は1変数しかありません。
これは、「合同な変換のみを扱うこと」にしたことに起因します。つまり、「座標軸が伸び縮みしない」=「単位ベクトルの長さは1」、「直角は直角のまま」=「単位ベクトル同士は垂直」=「単位ベクトル同士の内積が0」という条件があるためです。
2次元の
結果的に、数値は4個あるけど、制約が3個あるので、自由になるのは1要因のみ、ということになります(1要素とはちょっと違います)。
となります(長さ=1は自乗した形で比較)。
上記行列に対して、これが成立することを確認しておきましょう。
なお、列ごとに分割することに注意してください。
補足:
行ごとに分割しても同じ結果が得られます。これは、このような性質の行列(直交行列)の場合、
が成り立つことに起因します。ある回転の行列に対して、その逆行列もまた回転の行列(逆変換)です。逆行列を求める代わりに転置しても同じなので、行方向に分割しても同等の性質が出てくることになります。ただし、ここではあくまで列ベクトルを組み合わせたものとして認識しましょう。
まず、もとの座標系X0-Y0-Z0をZ0(=Z1)軸回りに回転させて、座標系X1-Y1-Z1をつくります。
次に、X1-Y1-Z1をY1(=Y2)軸回りに回転させて、座標系X2-Y2-Z2をつくります。
最後に、X2-Y2-Z2をX2(=X3)軸回りに回転させて、座標系X3-Y3-Z3をつくります。
この表示法は飛行機の姿勢を表す際によくつかわれ、座標系の取り方にもよりますが、鉛直軸回りをヨー(yaw)軸、左右の傾きをロール(roll)軸、前後の傾きをピッチ(pitch)軸といいます。 車などの揺れでもローリングだのピッチングだのいうことがありますが、これです。
なお、本によって回転順序が異なったり、回転軸をZ0,Y0,X0にとっていたり、いくつか種類があることに注意が必要です。 とりあえず、3軸順番に回せば姿勢を表すことができる、と覚えて、実際に使うときは手元の本や似た論文を参考にして座標系を設定して、自分の仕事のなかで一つに固定すればいいと思います。 自分のなかでもごちゃごちゃにするとたいへんですので注意しましょう。
※) これまで、座標系は ΣA(XYZ)とΣB(UVS)で表記していましたが、座標系が多くなって文字が明らかに足りなくなるので、Xn-Yn-Znと表記を変えます。 ただしこの表記法では、この座標系での位置ベクトルの要素を考えようとすると添字がごちゃごちゃになるので要注意です(中身を考えなければ問題なし)。
まず、もとの座標系X0-Y0-Z0をZ0(=Z1)軸回りに回転させて、座標系X1-Y1-Z1をつくります。
次に、X1-Y1-Z1をX1(=X2)軸回りに回転させて、座標系X2-Y2-Z2をつくります。
最後に、X2-Y2-Z2をZ2(=Z3)軸回りに回転させて、座標系X3-Y3-Z3をつくります。
これまた本によって書いてあることが微妙に異なります。
指定教科書では「Z-X-Z」で書いてあって「Z-Y-Z」のこともあるとありますが、別の教科書では「Z-Y-Z」が書いてあります。
また、ここで例示したようなものを「Z-X-Zオイラー角」と限定的に表記して、オイラー角そのものを任意の3軸の回転として表記(ロール・ピッチ・ヨーもその一種に含めてしまう、Z-Y-X)するものもあります。また、本によっては、回転軸が変換とともに動くものをオイラー角と称すると書いてあったり、どれが正解かわかりません(一番厚い本を信じてみるとか(^^;; )。
ここでは、3軸すべてを使わなくとも、2軸を交互に使うことでも角度を表記できると認識しておくと良いでしょう。
まず、Z軸回りの回転(0→1)の角度をφ(phi, ファイ)として、
角度(φ, θ, ψ)で表される回転を総合して得られる回転行列は、
さて、
まず、
次に、sinθ≠0の場合は、
一方、sinθ=0の場合はr23,r13,r32,r31共にゼロとなるため、この計算が使えません。
(2) cosθ=−1の場合(θ=±π)
となります。ただし、
と置き換えています(この先面倒なので)。
つぎにX軸回り(1→2)の角度をθとして、
を得ます(同じ置き換えパターン)。最後のZ軸回り(2→3)の角度をψ(psi, プサイ)として、
となります。
となります。
が、回転行列の性質を満たしつつ任意に与えられたときに、角度(φ,θ,ψ)が求まるかを確認してみます。
から、θを決定できます(ただし、sinθの符合の決め方で2通り。符号は直前との連続性などを考慮して決定)。
実際には、r33から直接アークコサイン(acos, cos-1)で求めることもできますが、sinも用意しておくとアークタンジェント(atan,tan-1)で計算されます。
でφ、ψを求めることができます。アークタンジェントを使うならば、-r13/r23, r31/r32から直接求めることもできます。
※実際にはcos成分がゼロになっているとゼロで除算する問題が起きる、また角度が±90度に限られる、など注意が必要です。C言語などではatan2というこれらの問題をすっきり解決してくれる関数があります。
(1) cosθ=1の場合(θ=0)
回転行列に代入して計算すると
となります。これは「Z軸周りにφ+ψの回転」を意味します。
よく考えてみれば当然で、ZXZの回転でXの回転を0にしたので、Z(φ)Z(ψ)の回転になったわけです。この場合、φもしくはψを適宜決定すれば、もう一方が定まります(ψ=0とすればφがこの回転行列のcosとsinから求まる)。
回転行列に代入して計算すると
となります。基本的に「Z軸周りにφ−ψの回転」のような形で、第2,3列の正負が逆転しています(0にも敢えて−をつけた)。
これは途中でX軸回りに180度回転させたことで、同じZ軸回りの回転が逆回転になること、さらにこの過程でY,Z軸の方向も逆になることに起因します。
前例に比べて形は変にはなりますが、これでもφ−ψのcosとsinが求まるので、そこからφ−ψが求まります。一方を固定すれば、角度は全て求まります。
1〜3は上のロール・ピッチ・ヨー型の回転変換、そのあと4〜6でX,Y,Z方向の平行移動を表しています。
(添字が3のままだったりしますけど、もともと流用して作ってみただけなのであまり気にしないこと(^^;)