回転行列からオイラー角のパラメータ抽出を行う(補足)

先日のエントリーの補足です。

cos(\theta_x)=0の場合、値が一意に定まらないので、\theta_y=0と仮定して値を求めていました。

これってどういうことなんでしょう?

cos(\theta_x)=0になる場合とは、x軸周りの回転が\pm90度になる時です。

...これちょっと考えればわかるんですけど、いわゆるジンバルロックが起きている状態ですよね。

x軸周りに90度回転してしまうことによって、y軸とz軸が重なってしまって、y軸回転もx軸回転も同じ回転を示してしまい、自由度が一軸失われている状態です。

再度、cos(\theta_x)=0の時の、ヨーピッチロール回転行列の形を思い出してみましょう

\LARGE R = \begin{pmatrix}m_{00} & m_{01} & m_{01} \\ m_{10} & m_{11} & m_{12} \\ m_{20} & m_{21} & m_{22} \end{pmatrix} = \begin{pmatrix}cos(\theta_z \pm \theta_y) & 0 & sin(\theta_z \pm \theta_y) \\ sin(\theta_z \pm \theta_y) & 0 & cos(\theta_z \pm \theta_y) \\ 0 & \pm 1 & 0 \end{pmatrix}

式からもわかるように、cos(\theta_z \pm \theta_y)sin(\theta_z \pm \theta_y)となっていて、\theta_zの値を変えても、\theta_yの値を変えても、最終的には合計されて三角関数のパラメータとして用いられてしまうんです

だから、いくらy軸回転を加えようが、z軸回転を加えようが、同じ方向に回転をしてしまうわけなんです

...ま、ジンバルロックの解釈一つとして、軽く覚えておきましょう