オイラー角~ジンバルロック~クォータニオン

オイラー角

オイラー角とは、3次元ユークリッド空間中の2つの直交座標系(デカルト座標系 )の関係を表現する方法の一つである。ロボット、ドローンの姿勢(ポーズ、向き)を直観に表現するには、オイラー角を用いることがある。オイラー角またはオイラー回転は3つの角度の組に、3座標軸まわりの回転順序(計12通りもある)で表されるので、オイラー角の変数は4つである。ロボットが姿勢\(V\)(ローカル座標系\(XYZ\))から姿勢\(V’\)(ローカル座標系\(X^{\prime \prime}Y^{\prime \prime}Z^{\prime \prime})\)へ変わる際に、例えば\(X\)軸-\(Y’\)軸-\(Z^{\prime \prime}\)軸の順に\(XY’Z^{\prime \prime}\)系オイラー角 \( (\alpha,\beta,\gamma) \) で3回順次回転することで姿勢の転換を表すことが可能である。【姿勢\(V’\)の座標 = 回転行列・姿勢\(V\)の座標】より、姿勢\(V\)の座標から回転後の姿勢\(V’\)の座標が求められる。姿勢\(V\)の座標、姿勢\(V’\)の座標が分かれば回転行列からオイラー角が求められる場合ある。
積 \( R_{z}( \gamma ) R_{y}( \beta )R_{x}( \alpha ) \) は、\(XY’Z^{\prime \prime}\)系で表したときのオイラー角が \( (\alpha,\beta,\gamma) \) であるような回転を表す回転行列\( R(\alpha,\beta,\gamma) \)である。

coordinate
デカルト座標系・オイラー角

また、回転軸がワールド座標軸ローカル座標軸により、オイラー角が以下の2種類ほどある。
・ワールド座標系の3つの軸を中心とした回転、座標軸は静止しているので、静的オイラー角と呼ばれる。
・ローカル座標系の3つの軸を中心とした回転で、回転中に座標軸がロボットとともに回転するため、動的オイラー角と呼ばれる。

ロボットやドローンが移動の際、ワールド座標系を参照できないと、姿勢の転換を表す動的オイラー角を使うしかない場合がある。

ジンバルロック現象、他の問題点

オイラー角の問題点として、動的オイラー角を使用すると、オイラー角そのものの定義より、ジンバルロック現象を起こしてしまう場合がある。もともとジンバル装置(静態軸ある)で起きる現象で、航空機(剛体)も起きる。但し、静的オイラー角にはジンバルロック現象が起きない【※訂正あり】。上記オイラー角の2番目の回転角度\( \beta = ±π/2 \)であれば、1番目と3番目の回転が同じ回転軸になって、つまり\( X \)軸と\( Z^{\prime \prime} \)軸が重なることになる。また回転行列より、\( \alpha – \gamma = C\)にすると、\( \alpha,\gamma \)の解は無限にあることと、1自由度が失われて、3次元空間と2次元空間の違いを考えると、まるでロックされたように見える現象をジンバルロック現象と呼ばれる。なお他にジンバルロック現象を起こさないオイラー角\( (\alpha,\beta,\gamma) \)に対して、\( (\alpha+π,π−\beta,\gamma+π) \)の回転で同じ姿勢になる問題点もある。

よって、以下の条件付きであれば、ジンバルロックが除けて、オイラー角でロボットの姿勢を表すのが一意になる。言い換えれば、回転行列がオイラー角と一対一に対応することになる。

・ \( \beta ∈ (-π/2, π/2), \alpha,\gamma ∈ [-π, π] \)

しかし、オイラー角\( (\alpha,\beta,\gamma) \)を制限するのは無理の場合、オイラー角からクォータニオン・四元数の登場となる。

また、オイラー回転の2番目の回転軸が1番目の回転軸 x 3番目の回転軸の外積の方向にある。つまり、2番目の回転軸が1番目と3番目の回転軸と直交する。当然、1番目と3番目の回転軸が必ずしも直交ではないが、ただし1番目と3番目の回転軸の外積\(=0\)つまり重なるのであれば、ジンバルロックに導く要因となる。

クォータニオン、四元数

姿勢あるいは回転の表現には、オイラー角の3回転よりも、単純に回転軸と回転軸まわりの1回転で済む場合、四元数クォータニオンつまり四元複素数が用いられる。クォータニオンの変数の個数がオイラー回転つまりPitch 、Roll、Yaw、回転順と同様に4つであり、クォータニオンを見るだけでは姿勢転換のイメージが難しい。よって、一般論として3次元までの空間の回転の表現に必要な変数の数=空間の次元数+1となる。回転行列からオイラー角を求めるのと、逆に回転順とオイラー角から回転行列を求めるのが面倒だが、クォータニオンを用いて回転を表現すると気持ちがすっきりになる。

例えば、以下のように、ベクトル\( v=iv_x + jv_y + kv_z \)で表すロボットの姿勢Vを原点を通る単位ベクトル\( a=ia_x + ja_y + ka_z \)を回転軸として、右ねじが進む方向に回転角\(θ\)だけ回転させて、ベクトル\( v’=iv’_x + jv’_y + kv’_z \)で表すロボットの姿勢V’になると、以下に優雅なる表現がある。$$ v’=q v \bar{q} \\ q=cos \frac{θ}{2} + a sin \frac{θ}{2} \\ \bar{q}=cos \frac{θ}{2} – a sin \frac{θ}{2} $$
但し、回転角\(θ ∈ [-π, π]\)、\(q\)は回転軸\(a\)と回転角\(θ\)を組合せた回転ベクトルを表す四元数、3次元空間における任意の回転に\(q\)は必ず且つ唯一に存在する。\(q,\bar{q}\)は共役または、共軛な複素数、お互いの逆回転でもある。
\( ij=-ji=k, jk=-kj=i, ki=-ik=j \)
\( i^2=j^2=k^2=-1, ijk=kk=-1 \)
\( ||a||=1, \space ||q||=||\bar{q}||=1 \)

四元数による回転表現
四元数による回転表現

また、回転 \(q_1\)に引き続き、回転 \(q_2\)を行う場合、次のように書くと良い、
$$ v’=(q_{2}q_{1})v(\bar{q_{1}}\bar{q_{2}}) $$

【※訂正】静的オイラー角にも、第2回転軸回りの回転角度\(=±π/2\)にすると、ジンバルロック現象が起きる。

参考文献

・wiki: オイラー角
・wiki: 四元数

関連記事

9軸IMU 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
SLAM~拡張カルマンフィルタ
SLAM~Unscentedカルマンフィルタ
粒子フィルタ
6軸IMU~拡張カルマンフィルタ
研究開発用 台車型ロボット キット

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア