- ベストアンサー
オイラー角と回転行列の関係について
- オイラー角と回転行列の関係について質問があります。
- オイラー角と回転行列は、工学や物理学で使われる回転の表現方法です。
- 具体的な回転行列や回転の方向について質問があります。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>3つの回転軸ベクトルとはなんでしょうか?また、オイラー角の3つの角度φ,θ,ψの組とは、それぞれの回転軸における回転角の事でしょうか? ZXZオイラー角を考えるなら, 1.最初にZ軸周りにφ回転 2.X'軸(X軸をZ軸周りにφ回転したもの)周りにθ回転 3.Z''軸(Z軸をX'軸周りにθ回転したもの)周りにψ回転 のように3つの軸周りの回転で任意の回転を表すわけですが,この3つの回転角の組み合わせのことを,オイラー角と呼ぶわけです. 回転軸ベクトルは,回転軸方向のベクトル,と書くつもりでした….すみません. >t[0 1 0]というベクトルはx軸周りにθ回転すると t[0 cosθ sinθ]と なることは理解できたのですが、t[0 0 1] がt[0 -sinθ cosθ]となる理由がよくわかりません。。。 図は描きましたか? 3次元の図が分かりにくければy-z平面で考えてみましょう. >回転行列は丸暗記しているのでどうしてそうなるか考えたこともありませんでした。 とのことですが,回転行列は回転によってそれぞれの軸方向の単位ベクトルがどこに移るかを調べて並べたもの,ということもできます. 図が描けるようになれば忘れてもすぐに作れます. >なぜ4行目が[0001]で、4列目が[0001]で並進を表すのでしょうか? 4列目が t[0 0 0 1] なら,並進は0です. 4列目の1~3行に平行移動量を表すベクトルを書きます. 左上の3行3列のブロックには回転行列を書きます. 4行目は常に [0 0 0 1] とします. また,合同変換を使う場合はベクトルにも細工が必要です. 具体的には,例えば t[r1 r2 r3] というベクトルがあったら,これを t[r1 r2 r3 1] と変えます. 下に1を付け加えるだけですね. 上のように作ったベクトル t[r1 r2 r3 1] に合同変換行列を作用させてできるベクトルも,必ず4行目が1になり,上3成分が,ベクトル t[r1 r2 r3] に回転と平行移動を加えたベクトルを表します. 詳しくはwebや線形代数の教科書(同次変換はアフィン変換の特殊な場合です)などで調べてみてください.
その他の回答 (9)
- hitokotonusi
- ベストアンサー率52% (571/1086)
- carvelo
- ベストアンサー率49% (49/99)
>θ回転とは、反時計回りにθ回転するということなのでしょうか? 右ネジは、「の」字で覚えていたのですが、時計回りですよね? θ回転とはどっちの方向に回転しているのでしょうか? そうか,すみません. x軸がどちらを向いているか(紙面手前向きか逆向きか)を決めないと,時計回りが正だとかいう議論は無意味ですが,確認してませんでしたね. どうも,x軸を手前向きに書く癖があって,そちらの場合しか考えていませんでした. なるほど,「の」の字を描くように回すと右ねじは先に進んでいくわけですね. これは初めて聞きました. 注意点は,ねじの先端の向いている方向が,回転軸正の向きだということです. 別の覚え方を書いておきましょう. まず,右手を親指を立てて握って,「good」のポーズします b(^^) 次に,親指の向いてる方向と回転軸の方向を合わせます. 残りの指(人差し指から小指まで)が向いてる方向が,正の回転方向です. さて,質問者さんの図ではどちら向いてます? x軸が紙面裏に向かう方向を向いていれば,時計回りが正の向き. x軸が紙面手前側に向かう方向であれば,反時計回りが正の向きです. 時計回りに回して,t[0 0 1] が t[0 sinθ cosθ] となるなら, ・ x軸が手前側を向く方向になっている(正の向きは反時計回り) ・ 座標系が右手系になっていない(左手系は使ってはいけない!) のどちらかだと思います.
お礼
すいません。 やっぱり理解出来ていないので、三角関数 回転行列と題して再度質問させて頂きます。 申し訳ないです。
補足
ご回答ありがとうございます。 hitokotonusiさんの図の左側を 採用しておりました。 ここで、Zの単位ベクトルを θ回転するとθが-θとなる のですね。 Yの単位ベクトルをθ回転させた場合 は正で良いが、Zの単位ベクトルは -θとしなければならないですね。 負角なのでt[0 0 1]は、t[0 -sinθ cosθ] となると理解しました。 この、理解で正しいでしょうか? また、外積もそうですがオイラー角も右手座標系なのですね。 ちょっと疑問に感じたのですが、別にどちらの座標系を 採用しても構わないのではないのでしょうか? 正負が逆になるだけの気がします。 なぜ、右手座標系でなければダメなのでしょうか? 以上、何度も本当にお手数をお掛けしますが ご回答よろしくお願い致します。
- carvelo
- ベストアンサー率49% (49/99)
>t[0 0 1] はをX軸を回転中心として、時計回りにθ回転すると t[0 sinθ cosθ]となります・・・ まぁ,それはそうですねぇ. でも,正の向きは逆向きですよ^^;
補足
ご回答ありがとうございます。 θ回転とは、反時計回りにθ回転するということなのでしょうか? 右ネジは、「の」字で覚えていたのですが、時計回りですよね? θ回転とはどっちの方向に回転しているのでしょうか? 再三申し訳ありませんが、ご回答よろしくお願い致します。
- hitokotonusi
- ベストアンサー率52% (571/1086)
ANo.4の補足について #5さんが書かれている通りで改めてつけ加えることはないのですが・・・・ ベクトルの回転で符号が逆になる理由はANo.4ですでに >(相対関係が座標系の-θ回転と同じなので。) と書いてあります。 4×4行列のほうもANo.4で >画像処理などでまとめて計算するときに使われているようですね。 と書いてある通りで、画像処理などでは回転と並進を同時に行なうことが多いので、 このような手法が使われています。
- carvelo
- ベストアンサー率49% (49/99)
>ジンバルロックが発生した状態とは 線形従属状態なので、つまり基底ベクトル が定義出来ず座標を決める事ができない 状態という解釈で良いでしょうか? といいますか,3つの回転軸ベクトルのうち2つが従属になってしまっているために,オイラー角の3つの角度φ,θ,ψの組が一意に決められない状態のことです. ついでに,ちょっと失礼して他の方の回答への補足に関して. ベクトルの回転と座標系の回転のところですが,ベクトルに 1 0 0 0 cosθ -sinθ 0 sinθ cosθ を掛けるとベクトルがx軸周りにθ回転するのは,実際に計算してみれば分かります. 例えば, t[0 1 0] というベクトル(y軸方向単位ベクトル)はx軸周りにθ回転すると t[0 cosθ sinθ] となり, t[0 0 1] は t[0 -sinθ cosθ] となるのは,図を描けばすぐに分かると思います. これをベクトルの立場から見てみる(ベクトルの方を固定してみる)と,座標系が-θだけ回転しているように見えます. なので,ベクトルを固定して座標系をθだけ回転した場合の,回転後の座標系から見たベクトルを得ようと思ったら,ベクトルの-θ回転に相当する行列を掛けることになります. 座標の回転とベクトルの回転と言うのは,基準をベクトルに置くか座標に置くかの違いしかないわけです. 符号の違いは,向かい合って会話している時に相手にとっての右向きと自分にとっての右向きが逆になってる,というのと同じようなことです. また,4×4行列を用いると回転だけでなく平行移動も含めて表すことができます. これを同次変換といいます. http://www.is.oit.ac.jp/~whashimo/server/~whashimo/Article/OpenGL/Chapter3/index.html この変換に関して, >なぜ回転行列で並進を考慮する必要があるのでしょうか? とのことですが,まず,回転行列で並進を考える,というのがちょっと変な表現ですねぇ. 別に回転行列で並進を考えているわけではなくて,並進と回転をセットにして扱っている,ということです. ただまぁ,ぶっちゃけ必要ないです. 回転と平行移動を別々に考えればそれでいいんです. では何で同次変換を考えるかと言うと,回転と平行移動を別々に書くより表現が簡潔だから,というだけです. 何回も連続で回転と平行移動の合わさった変換を加えないといけない場合(例えば何リンクもあるロボットアームの先に固定した座標系と土台に固定した座標系との間の変換)の記述に威力を発揮しますが,計算量が減ったり,といったご利益はありません.
補足
ご回答ありがとうございます。 ジンバルロックに関して、 3つの回転軸ベクトルのうち2つが従属になってしまっているために,オイラー角の3つの角度φ,θ,ψの組が一意に決められない状態のことです. 3つの回転軸ベクトルとはなんでしょうか?また、オイラー角の3つの角度φ,θ,ψの組とは、それぞれの回転軸における回転角の事でしょうか? 回転行列は丸暗記しているのでどうしてそうなるか考えたこともありませんでした。 t[0 1 0]というベクトルはx軸周りにθ回転すると t[0 cosθ sinθ]と なることは理解できたのですが、t[0 0 1] がt[0 -sinθ cosθ]と なる理由がよくわかりません。。。 xzは分かるのですが、yがなぜ-sinθとなるか理解出来ませんでした・・・ 丁寧な解説をして頂いているにも関わらず、大変心苦しいのですが、 yがなぜ-sinθとなるかご教示頂けないでしょうか? また、4行4列が並進を表す事は分かりました。 しかし、なぜ4行目が[0001]で、4列目が[0001]で並進を表すのでしょうか? 以上、追加質問ばかりで本当に申し訳ありませんがご回答よろしくお願い致します。
- hitokotonusi
- ベストアンサー率52% (571/1086)
X軸回りに座標系をθ回転する行列は 1 0 0 0 cosθ sinθ 0 -sinθ cosθ です。θの正方向はy軸からz軸に回す向き。 座標系がそのままでベクトルを回転する行列が 1 0 0 0 cosθ -sinθ 0 sinθ cosθ です。(相対関係が座標系の-θ回転と同じなので。) >また、4行4列で表されているものもあった おそらくその4行め、4列めは座標の並進を表していると思います。 画像処理などでまとめて計算するときに使われているようですね。
補足
ご回答ありがとうございます。 お礼が遅くなり申し訳ありません。 X軸回りに座標系をθ回転する行列は 1 0 0 0 cosθ sinθ 0 -sinθ cosθ 座標系がそのままでベクトルを回転する行列が 1 0 0 0 cosθ -sinθ 0 sinθ cosθ です。(相対関係が座標系の-θ回転と同じなので。) すいません。。。 良く理解出来ませんでした・・・ オイラー角は座標系の回転だから、 X軸回りに座標系をθ回転する行列は 1 0 0 0 cosθ sinθ 0 -sinθ cosθ となる事は理解出来ました。 座標系がそのままでベクトルを回転する行列が 1 0 0 0 cosθ -sinθ 0 sinθ cosθ sinθの部分が入れ替わっただけですが、 なぜ座標系ではなくベクトルの回転を 表すのでしょうか? 回転行列とは、座標系に与えられるものでは ないのでしょうか? また、4行目4列目が並進を表すとのことなのですが、なぜ回転行列で並進を考慮する必要があるのでしょうか? 以上、度々申し訳ありませんがご回答 よろしくお願い致します。
- carvelo
- ベストアンサー率49% (49/99)
>Z軸を90度傾けると、X軸とY軸が同軸となる と記載されていました。 http://d.hatena.ne.jp/keyword/%A5%B8%A5%F3%A5%D0%A5%EB%A5%ED%A5%C3%A5%AF あたりを見たのでしょうか? しかし,う~ん….何が言いたいんでしょうねぇ…? どういう状況を考えているのか僕にもよくわかりません. オイラー角の定義の仕方は全部で12通りあるのですが,どの定義を使うかでジンバルロックが生じる条件が変わってきます. 一般によく使われるのは,Z-X-Zオイラー角,Z-Y-Zオイラー角,Z-Y-Xオイラー角(ロール・ピッチ・ヨー角)の三種類でしょうか.一般にオイラー角,と言えば前者2つのうちのどちらかだと思います.どちらの場合も,第二軸周りの回転がπになったときに第一軸(Z軸)と第三軸(Z''軸:もともとの座標系と区別するためにダッシュをつけておきます)が一致しジンバルロックにおちいります. いわゆるオイラー角,ではなくロール・ピッチ・ヨー角の場合には,第二軸周りの回転角度をπ/2にしてしまうと,第一軸(X軸)と第三軸(Z''軸)が一致してしまうのでジンバルロックになります. そんなわけで,「Z軸を90度傾けると、X軸とY軸が同軸となる」というのがオイラー角をどう定義した場合に生じるのかはよく分かりませんが(ちょっと考えれば分かるのかもしれませんが,そうだとしても説明が足りなすぎですね),一般的に使われている定義とは合致しなさそうです.
補足
ご回答ありがとうございます。 お礼が遅くなり申し訳ありません。 ジンバルロックとは、つまり座標系を回転した 際に元の座標系と一致してしまって発生する のですね。 この点は理解しました。 ジンバルロックが発生した状態とは 線形従属状態なので、つまり基底ベクトル が定義出来ず座標を決める事ができない 状態という解釈で良いでしょうか? 度々申し訳ありませんが、ご回答よろしく お願い致します。
- carvelo
- ベストアンサー率49% (49/99)
符号が逆,との指摘については,どういう方向の変換(変換後の座標→変換前の座標 か 変換前の座標→変換後の座標)を考えているかで変わってくると思うので確認してください. ロボットをやってると,質問者さんが書いている方の行列を回転行列とすることが多いです. ポイントは,#1さんもおっしゃっているように,固定された座標系の軸周りで考えているわけではない,ということです. そのために,考える3つの回転軸方向のベクトルは(ほとんどの場合)線形独立になります. 因みに,ほとんどの場合,といったのは勿論,そうではない場合(特異点)が存在するからです. 例えばZ-X-Zオイラー角でRxの回転角度がπや2πのとき,最初のRzと最後のRzとで回転軸が一致してしまうので,3つの回転軸方向のベクトルが線形従属になってしまいます(図を載せればいいのでしょうが面倒なので,自分で描いてみてください). これをジンバルロックと言います. ↓のページの下の方に,オイラー角の説明があります.アニメーションもあるので分かりやすいかと. http://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/robotics/coordtrans.html
補足
ご回答ありがとうございます。 ジンバルロックは調べたのですが、 Z軸を90度傾けると、X軸とY軸が同軸となる と記載されていました。 この意味が良く分からないです。 線形従属となって基底ベクトルを構成 できないという点は理解できます。 ご回答よろしくお願い致します。
- hitokotonusi
- ベストアンサー率52% (571/1086)
まず、オイラー角といえば座標系の回転なので、符号が逆だと思います。 Rxなら 1 0 0 0 cosθ sinθ 0 -sinθ cosθ 次に座標系の回転とは何をやっているかですが、考えているベクトルをA、 回転前の基底をe1, e2, e3、回転後の基底をu1, u2, u3として A = A1 e1 + A2 e2 + A3 e3 = A1' u1 + A2' u2 + A3' u3 なる新しい座標系での成分(A1', A2', A3')を求めることにほか成りません。 最初のZ軸回転ではe1, e2軸が回転してu1, u2になります。e3とu3は同じベクトルです。 こうして求めた(A1', A2', A3')に次のX回転行列Rxをかけるということは、 u1まわりの回転を意味します。(e1まわりではない!) その結果は、新たな基底をv1, v2, v3(ベクトル)として A = A1 e1 + A2 e2 + A3 e3 = A1' u1 + A2' u2 + A3' u3= A1'' v1 + A2'' v2 + A3'' v3 なる新たな成分(A1'', A2'', A3'')を求めることに成ります。 ここではu1まわりの回転なのでu1とv1は等しく、u2, u3が回転してv2, v3になります。 これにさらにZ回転行列をかけるということは、v3まわりの回転を意味しており、 新たな基底をw1, w2, w3(ベクトル)として、 A = A1 e1 + A2 e2 + A3 e3 = A1' u1 + A2' u2 + A3' u3 = A1'' v1 + A2'' v2 + A3'' v3 = A1''' w1 + A2''' w2 + A3''' w3 なる成分を求めることを意味します。ここではv3, w3が等しく、v1,v2がw1, w2へと回転します。 以上の通り、Rz・Rx・Rzという回転行列のうちの前二つ(Rz・Rx)は固定された空間座標まわりの回転ではなく、回転後の新たな座標軸まわりの回転を意味しているので、空間座標系のy軸まわりの回転もそこには含まれてきます。 まあ、こういう図を見れば自明だとは思いますが。 http://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E8%A7%92
補足
ご回答ありがとうございます。 お礼が遅くなりましてすいません。 1 0 0 Rx= 0 cosθ -sinθ 0 sinθ cosθ cosθ 0 sinθ Ry= 0 1 0 -sinθ 0 cosθ cosθ -sinθ 0 Rz= sinθ cosθ 0 0 0 1 が一般的に表される回転行列でしょうか? また、4行4列で表されているものもあった のですが4行4列で表している理由なんで しょうか? 1 0 0 0 Rx= 0 cosθ -sinθ 0 0 sinθ cosθ 0 0 0 0 1 cosθ 0 sinθ 0 Ry= 0 1 0 0 -sinθ 0 cosθ 0 0 0 0 1 cosθ -sinθ 0 0 Rz= sinθ cosθ 0 0 0 0 1 0 0 0 0 1 以上、ご回答よろしくお願い致します。
補足
ご回答ありがとうございます。 図に描いて考えているのですが、 どうも良く分かりません。 t[0 0 1] はをX軸を回転中心として、時計回りにθ回転すると t[0 sinθ cosθ]となります・・・ なぜ-sinθとなるのでしょうか? 象限って関係あるのでしょうか? 半径1の円を描いて考えると、X軸中心で θ回転したZの単位ベクトルは第4象限 にいます。 Zだけ-θ回転した事になるのでしょうか? 申し訳ありません。。 混乱してきました・・・ 並進については理解できました。 つまり、4列目がt[1 2 3]なら、 X方向に1、y方向に2、z方向に3 移動したという事ですね。 本当に何度も申し訳ないのですが、 ご回答よろしくお願い致します。