オイラー 角 回転 行列。 回転行列

3次元計測における物体の姿勢と角度|アキュイティー株式会社‐Acuity Inc.

オイラー 角 回転 行列

以前の記事()を書いたのをきっかけに、三次元座標系での回転の表現方法について色々調べたのでまとめておきたいと思います。 はじめに 三次元座標系で回転を表現するための方法として、 回転ベクトル, 回転行列, 角, ()がよく知られています。 この記事ではこれら4つの表現方法について• 原理とその特徴• 右手系・左手系の変換• 各表現の相互変換(代表的なもののみ) の3つを紹介していきます。 なおこの記事はコンピュータビジョンと航空力学をかじっただけの人が書いたものです。 できるだけ誤りのないように書いているつもりですが、もし間違いを見つけた場合は報告していただけるとありがたいです。 スポンサーリンク もくじ• 準備 0. 回転を表現するとは? はじめに回転を表現するとはどういうことなのかを復習しておきます。 工学の分野では三次元空間にあるオブジェクトの姿勢を考えるとき、どこか(例えば地面)に基準となる 世界座標系を、オブジェクトに固有の ローカル座標系を設定してその関係を 回転成分・ 並進成分で記述するという考え方をします。 この回転成分の記述方法としては、以下4つの表現のどれかを使うことがほとんどです。 世界座標系で見ると である点は、ローカル座標系で見ると になる• ローカル座標系で見ると である点は、世界座標系で見ると になる• 世界座標系の座標軸をこう回転させると、ローカル座標系の座標軸に重なる• ローカル座標系の座標軸をこう回転させると、世界座標系の座標軸に重なる これらの表現は表裏一体で、どれで記述してもオブジェクトの回転すなわち姿勢を表現していることになります。 今回紹介する 回転ベクトル・ 回転行列・ は1,2の発想に近いものです。 "変換前の座標系での座標値"から"変換後の座標系での座標値"への射影を関数で記述する、つまり点を別の点に移動させるツールで回転を定義しようというアです。 一方、 角は3,4の発想に近いもので、"変換前の座標系の座標軸"と"変換後の座標系の座標軸"の関係をなるべく直感的に記述しようというアに基づいています。 回転を考えるときは自分が1〜4のどれをベースに考えているのかということを常に意識しましょう。 特に1と3、2と4は似て非なる発想です(むしろ1と4、2と3の方が近い)。 この辺りを曖昧にしたまま直感的に考えると失敗しやすいので注意が必要です。 左手系と右手系の関係 次に右手座標系と左手座標系の関係について決めごとをしておきます。 右手座標系と左手座標系は軸のどれか1本を反転させた関係であると言えます。 ということで、この記事では右手系と左手系は 2本の軸を共有していて1本の軸だけ反転している関係と考えます。 今後この記事で右手・左手変換の例を紹介するときは Y軸反転、つまり右手系で見ると である点を左手系で見ると になるような変換を取り上げることにします。 回転ベクトル まずは 回転ベクトル(rotation )の紹介です。 回転ベクトルは 「ある点 を、原点を通るベクトル の周りでその長さ の分の角度だけ回転させる」という形で回転(=点の移動)を記述したものです。 回転方向は、右手座標系では右ねじの方向(ベクトル方向を向いて時計回り)を正とし、左手座標系では左ねじの方向(ベクトル方向を向いて反時計回り)を正とします。 つまり のどちらがグローバル座標でどちらがローカル座標なのかは状況によって違うということです。 これは後で紹介する回転行列・も同じです。 回転ベクトルの特徴 コンパクト 回転ベクトルは回転を最もコンパクトに記述する、つまり 最低限の変数(3自由度)で記述する表現方法です。 そのためパラメータの自由度を拘束する条件式を考える必要がなく扱いやすいです。 がない 後で紹介する角と違って を生じないという特徴があります。 これは回転ベクトルを滑らかに変化させることで、ある回転の状態(=姿勢)から任意の別の回転の状態へと滑らかに変化させられることを意味します。 で利用しやすい 上2つの特徴は、姿勢に関するを解くときに非常に重要になります。 をで解くときは、各パラメータを少しずつ変化させて評価関数の値がよくなるところを探索するという方法を採ります。 このとき、パラメータに無駄な自由度があるとそれを抑えるための制約条件を加える必要が出てきますが、制約付きは制約なしに比べて複雑になるので計算コストが高くなってしまいます。 また、パラメータを滑らかに変化させたときに実際の姿勢も滑らかに変化してくれないと、効率的に最適化を行うことができません。 このような理由からでは姿勢を回転ベクトル表現で記述することが多いです。 例えばの calibrateCamera や solvePnP なども内部では回転ベクトル表現を利用しています。 同じ回転を表す組 長さを だけ変化させた回転ベクトルは同じ回転を表していることになります。 回転量に対して という条件を課すことで、任意の回転は一意な回転ベクトルと一対一に対応します(ただし のときだけ など方向を一意に定める条件が必要)。 回転ベクトルの逆変換 回転ベクトルは向きを逆にしてやれば、真逆の回転を表す回転ベクトルになります。 そのため の逆変換は になります。 ロドリゲスの回転公式 回転ベクトルを使って点を移動させるは ロドリゲスの回転公式としてよく知られています。 回転ベクトル によって点 を回転させるとき、回転後の点 は以下の式で表されます。 この式は右手系と左手系で共通です。 気になる方は を代入したとき(右手系)と、 を代入したとき(Y軸反転の左手系)を比較して、 のY成分の符号だけが反転することを確かめてみてください。 回転ベクトルの右手系と左手系の変換 右手系で取得した回転ベクトルを左手系での表現に直すときは、 向きを反転させた後で普通のベクトルと同じように変換してやればよいです。 たとえば、右手系で観測した回転ベクトル はY軸反転した左手系で観測すると になります。 向きを反転させるのは、右手系と左手系で正とする回転方向が逆であるためです。 回転行列 次にみんな大好き 回転行列(rotation matrix)のお話です。 点の座標を縦ベクトルで表現する場合、回転行列 によって点 を回転させると回転後の点 は以下の式で表されます。 回転行列の特徴 回転を9パラメータで表現する 回転行列の各列ベクトルは、変換前の座標系における基底ベクトルXYZが、変換後にどのベクトルに対応するかを示しています。 見た目上は3自由度の回転を9つのパラメータで表現することになりますが、直交行列であるという条件( もしくは同値な条件として、列ベクトル表現を として )によって6自由度が抑えられるため、結果として3自由度を過不足なく表現できます。 あとで説明するように、回転行列はある回転ベクトルに対するロドリゲスの回転公式を成分に書き下したときの表現に相当します。 任意の回転と一対一に対応する 回転行列は任意の回転と一対一に対応します。 がない 回転ベクトルと同じくは生じません。 数学的にシンプルに記述できる 回転行列表現の利点は、ベクトルの回転(点の移動)や回転の合成(重ねがけ)をベクトルと行列の式で記述できるようになることです。 たとえば座標系AからBへの座標値の変換とBからCへの座標値の変換がそれぞれ回転行列 であるなら、座標系AからCへの座標値の変換は となりますし、座標系CからAへの座標値の変換は となり、かなりシンプルに記述できます。 また回転行列を拡張した 同次座標系の概念を導入すれば、ベクトルと行列の式で回転・並進移動をまとめて扱えるようになります。 幾何関係を数学的に分析したいときによく使われる表現方法です。 回転行列の逆変換 上でちらっと取り上げたように、回転行列のは逆変換に相当します。 また直交行列の性質として が成立するので、結局、転置行列 が逆変換を表す回転行列となります。 回転行列と回転ベクトルの関係 先ほどの回転ベクトル のを成分に書き下すと、 となります。 ロドリゲスの回転公式は右手系・左手系で共通ですので、もちろんこの式も右手系・左手系で共通です。 ただし次の項で説明するように、右手系と左手系どちらで見るかによって の値が変わるので、実際の回転行列の成分値は異なります。 回転行列の右手系と左手系の変換 回転行列の右手系から左手系への変換は上の式を調べればわかります。 例えば右手系で である回転ベクトルは、Y軸反転の左手系では になります。 これを上の式に代入すれば、Y軸反転の左手系での表現に変換するためには回転行列の1行2列目・2行1列目・2行3列目・3行2列目の4箇所の符号を反転させれば良いことがわかります。 続いて最近流行り? の (quaternion : )について紹介します。 の定義 たまに「=回転」みたいな表現を耳にしますが、自体は を拡張したような数学的な体系の一つです。 名前の通り、は のように4つの基底を持つベクトルとして表現されます。 そして乗算に関して次のようなルールを持っています。 を計算します。 の 成分を取り出すと、回転後の点の座標値になっています。 また で回転させた後に で回転させたような回転は となります。 この回転にしたがって点を移動させるときは のようにすればよいです。 ちなみに が成り立ちます。 の特徴 がない 回転ベクトルと同じく は生じません。 同じ回転を表す組 と は同じ回転を表します。 これは、方向 長さ の回転ベクトルと、方向 長さ の回転ベクトルが同じ回転を表すことに対応しています。 そのため最終的な回転の状態としては同じですが、右回りで辿り着いたのか、左回りで辿り着いたのか、という区別があります。 の成分 を順に見ていったとき最初に出てくる非ゼロな成分が正である、という条件を付ければと任意の回転は一対一に対応します。 球面線形補間が楽に計算できる 回転をで表現することのメリットとして 球面線形補間(slerp : spherical linear interpolation)が楽に計算できることが挙げられます。 球面線形補間はある回転の状態(=姿勢)から別の回転の状態への変化を角度に対して線形に補間する処理です。 つまり、オブジェクトをある姿勢から別の姿勢までスムーズに回転させるような処理が簡単に実装できるようになります。 回転を表す2つの と配分率 が与えられたとき、補間して得られるは以下のように計算されます。 またslerpの際に の代わりに を使うと補間されるルートが変わります。 短い方のルートを選びたいときは、 とを取って正になる方を使えばよいです。 の逆変換 の逆変換は、その共役 となります。 の右手系と左手系の変換 の右手系・左手系の変換は、反転していない2軸に対応する成分の符号を反転してやればよいです。 気になる方はによる回転の定義と回転ベクトルの右手系・左手系の変換を照らし合わせてみてください。 例えば右手系で であったは、Y軸反転の左手系では となります。 角 続いて 角(Euler angles)の紹介です。 これが一番ややこしいです。 角は 「座標軸の1本を選びその周りで回転させる、という操作を3回繰り返す」という形で座標系の関係を表現する方法です。 3回それぞれの回転量を並べて の形で回転を表現します。 ただ、結局はどの姿勢を と置くかの違いなので、どの表現も基本的な性質は変わりません。 また2回目・3回目の回転のときに「もとの座標系の軸」と「回転後の座標系の軸」のどちらを基準に回転させるのかによっても種類が分かれます。 回転前の世界座標系の軸を使うものを 外因性角(extrinsic Euler angles)、回転後の座標系の軸を使うものを 内因性角(intrinsic Euler angles)と呼ぶようです。 なおこの記事では便宜上、内因性・外因性と呼ぶことにしますが正式な日本語訳があるのかはよくわかりません。 一般的に角といえば内因性角を指すことがほとんどです。 また、で説明しますが、内因性角と外因性角には対応関係があり、基本的な性質は共通しています。 角の特徴 リンク機構と対応している 内因性角を説明するときのイメージとしては ジンバルがよく取り上げられます。 これはなどに採用されている機構で、外側のリングから順番に回転量を指定していくと中のコマの姿勢が1つに定まる、という機構が角と対応しています。 また、ロボットアームのようなリンク機構も角と対応しています。 ジンバル(From : ) このように実在する回転機構と一致すること、回転をイメージしやすいことから、角は広く利用されています。 ヨー・ピッチ・ロールと対応している 航空を始めとするいくつかの工学分野では姿勢を「ヨー(yaw)、ピッチ(pitch)、ロール(roll)」の3パラメータで表現することがありますが、これも角と対応しています。 ただしこの表現は角と同じように、XYZを前後左右上下のどれに割り当てるかと、外因性角と内因性角のどちらを使うかによって微妙に定義が変わります。 がある 角の厄介な性質として (特異姿勢)が知られています。 詳しい解説は他文献に譲りますが、これはある姿勢において回転の自由度が2に制限されてしまう現象です。 同じ意味ですが、3変数のうちの2つが同じ1自由度の表現に使われるため姿勢を一意に記述できなくなる現象、と説明されることもあります。 時は、角を滑らかに変化させても、ある姿勢から別の姿勢へと滑らかに変化させられない場合があります。 これは画像から姿勢を推定するなどのを解くときや、CGでオブジェクトを自由に回転させるときに問題になることがあります。 同じ回転を表現する組 回転角を の範囲で変化させるとき、同一の角度を表現する角は複数存在します。 特にの姿勢では1方向の回転を2軸が担っている状態なので、無数の角表現が存在します。 詳細に知りたい場合は、対象とする角を回転行列に変換して各成分を調べてみてください。 角の逆変換 角の逆変換は簡単で、回転の操作を向きを逆にして逆順に施してやればよいです。 角と回転行列の関係 ここでは比較的よく使う、角から回転行列への変換だけを紹介します。 各軸周りの回転行列を とすると全体の回転行列は となります。 座標系AからBへの角を考えていたのに、出てくるのが「座標系Bの座標値をAで見たときの座標値に変換する回転行列」である辺りが割と直感に反しているので気をつけてください。 回転量を として成分に書き下すと以下のようになります。 この式は右手系・左手系で共通です。 これは計算式を細かく追うと面倒なので省略しますが、座標系Bの基底が座標系Aで見るとどのようになっているのかを考えることで であることが確認できます。 よく見ると、内因性角と行列を掛け合わせる順を逆にしただけの式であることがわかります。 角の右手系と左手系の変換 角の右手系・左手系の変換は、反転している軸以外の回転量の符号を逆にしてやればよいです。 あとがきと参考文献 過去最長の記事になってしまいました。 図を作る体力が残らなかったのでとりあえずこのまま投稿します…。 誤植・追記希望等ありましたらコメントください。 この記事を作成するに当たって以下の文献を参考にさせていただきました。 ありがとうございました。 Transformations and Projections in Computer Graphics, David Salomon, Springer 2006•

次の

オイラー角 回転行列

オイラー 角 回転 行列

tl;dr 3次元上の回転について調べたのでまとめる備忘録。 復習: 2次元の場合はどうだったか 2次元座標上で回転をどう定義するか、ということについては、ここでは詳説しない。 回転行列• これらの表現が、3次元上ではどうなるのかについて考える。 3次元上の回転行列 回転を表現するだけであれば行列で十分すぎるはずである。 9セルあるので、自由度が9であるように思われがちだが、それぞれのベクトルが単位ベクトルであり、直交しているという制約があるので、実質的に自由度は3である。 このため、他の表現よりメモリを必要とすることと、無効となる表現が多いというのが欠点としてあげられる。 しばしば回転は、平行移動などと共通に扱いたいとされる。 しかし、行列のままでは、原点に対してはどのような行列との積をとっても原点のままになってしまう。 平行移動では、アフィン変換になるので、そこで、 に対して斉次座標を利用してもう1次元追加した、 を考え、これに対する4x4行列によるを、回転と平行移動を同時に表現できるフォーマットとして利用することがある。 このとき、4x4行列の左上の成分だけを回転行列として扱うことができる。 3次元上の角 2次元におけるx,y軸の拡張である角は、一般に として表現される。 これは、例えばヨー、ピッチ、ロールの3軸としたとき、それらに対して同時にその角度回転する、というわけではない。 最初にある軸に対して回転し、その次は、回転した後の向きに対して改めてx,y,z軸を定義し、次の軸で回転し、最後にまた回転後の向きに対して軸を再定義して回転する、という順番で回転したものの合成として表現される。 つまり、この回転の順序のやり方によって、最初の回転軸と最後の回転軸が同じになるパターンを含めて12パターンの角を考えることができる。 実際は1つの順序 やYXZの順など に決め打ちするものが多い。 一方で、回転する前の初期状態のxyz軸に対しての回転を行うという流派もあるようだが、ここではそれは考慮しない。 これによって、3次元上の回転は3つの自由度で表現することができるはずである。 しかし実際にこの系を用いると、とよばれる問題が生じる。 これは何か。 ジンバルと呼ばれる、三次元のジャイロを考えてみよう。 最初の状態では、XYZ軸に対応するそれぞれの軸は、どの2つをとっても垂直になるように交わっている。 回転によって、軸間の角度がかわると、場合によっては最も外側の軸と、最も内側の軸が水平になってしまうことがある。 このとき、2方向にしか動かすことができなくなってしまう。 回転を実行することと、その回転を書き下すことの間には、本来は両矢印を引くことができて欲しいのだが、その矢印の両方に問題が残っている。 それは、ある回転が与えられたとき、その角度を角で書き下そうとすると、複数の角度の組み合わせが考えられてしまうこと。 これについては、角度の値域を固定することで解決することができる。 逆に、ある状態に対して、ある回転を実行しようとするときに、状態によっては、先ほどのように2つの軸が同じ向きになってしまうと自由度が2になってしまい、自由度がない向きに直接回転できなくなってしまうことがある。 この後者がであり、これは簡単に回避することが難しい。 この性質から、ある2点のあいだの回転を「補間」することが難しくなってしまう。 単純に、2点の角度の相加平均をとったとしても、その補間点の前後での角速度が変わってしまったり、 そこで、実は3つの数字で表現するのではなく、4つの数字で表現すれば、仮に2つの数字が従属関係となり、自由度が1つ減ったとしてもなお、3軸の向きの回転を表現できるということが考えられる。 これが、次に関係してくる話題となる。 3次元上の複素表現: 2次元におけるの拡張であるから、3次元の表現において、実部が1つ、虚部が2つの三元数というものが存在すれば良いのではないか、と直感的に思うだろう。 このとき、2つの三元数の積を考えると、この積には となる項が含まれるが、それは元の定義には存在しない項である。 つまり、この定義では、積について閉じていないことがわかる。 そこで、新しい軸として を導入する。 これで定義された は()と呼び、に期待される種々の性質を満たしていることが計算によって示される。 このを利用することの利点は、先ほどの角のようなが存在しないので、なめらかに2点間の回転移動を記述することができる。 また回転行列に比べて、演算の回数が減らせるというのも大きな利点だ。 行列は先述の通り、自由度に比べて扱うセルの個数が大きいので、和や積など様々な演算で、同士の積和の演算回数も多くなってしまう。 また、最大の欠点は、その値をみても、どういう回転の処理に対応するのかよく分からないというところである。 参考文献.

次の

オイラー角による回転行列の表現

オイラー 角 回転 行列

右手系と左手系 「右手系 左手系」で画像検索をかけてください。 それです。 フのあの手つきをして• また、回転方向も違います。 各軸の方向(フの指が向いてる方向です)に、右手系なら右ねじの、左手系なら左ねじの親指を添わせた時の、残りの指の向きが回転方向です。 右手系と左手系の違いは、X軸とY軸が同じ向きになるように合わせた時• Z 軸が逆向き• X 軸と Y 軸の回転が逆 となります。 ちなみに、右手系を使いたいけどZ軸は奥を向いてほしいということのためだけに「 X 軸が上向きで Y 軸が右向きの右手系」という流派も存在します。 曰く、右手系だから一般的な数学の知識がそのまま適用出来て便利だとか。

次の