#ジンバルロックとは
ジンバルロックがよく問題になると本に記述されますが、どのような問題があるのでしょうか
特異姿勢になると何が問題なのでしょうか
その答えは
特異姿勢では任意の角速度ベクトルをオイラー角の時間微分で表現できない
という事です。
#例
https://ja.wikipedia.org/wiki/%E6%AD%B3%E5%B7%AE! より
このような、コマにたいしオイラー角を設定します。x-y平面は水平面、z方向は上とします
z-y-zオイラー角は
- z軸周りに$\theta1$回転 : 回転軸をx-y平面に投影したとき、x軸方向と投影した回転軸との角度
- y軸周りに$\theta2$回転 : 回転軸の傾き,z軸との傾きです
- z軸周りに$\theta3$回転 : コマの回転軸周りの回転量です。
上のコマの例では
$\theta2$ は一定で回転して、$\theta1,\theta3$は時間に比例的に増加していきます(一定速度ということ)。
角速度ベクトルはその回転の軸方向になります。
$\dot{\theta1}$による角速度ベクトルはz軸方向になります。
$\dot{\theta2}$による角速度ベクトルはy'軸方向になります。
$\dot{\theta3}$による角速度ベクトルはz'軸方向になります。
角速度ベクトルから、$\dot{\theta1...3}$を求めようとするときにジンバルロックは問題になります。
変換する場合は、角速度ベクトルをz-y'-z'方向に分解すれば、それぞれの成分が$\dot{\theta1...3}$に相当します
ほとんどの状態では、角速度ベクトルと$\dot{\theta1...3}$は相互変換可能です。
この時、ジンバルロックは$\theta2 = 0$の時、起こります。
$\theta2 = 0$は回転軸がz軸に対して傾いていない、回転軸とz軸は一致するという事です。
結果的に、この時$\theta1と\theta3$の回転は同じ方向になります。
角速度ベクトルをz-y'-z'方向に分解する際、zとz'の方向が一致するため、次元の数が2つしかなくなってしまいます.2次元平面y'-z(=z')平面で角速度ベクトルを表現することは、角速度ベクトルの方向によっては$\dot{\theta1...3}$では、表現できないという事になります。
シミュレーションを回す際は、角加速度が運動方程式から求まり、積分することで角速度が求まり、角速度をオイラー角の時間微分$\dot{\theta1...3}$に直し、オイラー角の時間微分を積分し、オイラー角を計算し、対称物体の姿勢と回転速度を計算します。
角速度は角加速度を積分しますが、姿勢によって決まった方向を取ることはなく、任意方向のベクトルを持つことになります。
よって、角速度をオイラー角の時間微分$\dot{\theta1...3}$に直す際,ジンバルロックの状態だと一部要素を捨てる事になる、または変換できていないという事になります。
上のコマの例だと、コマがx'方向に回転する角速度を持っていたとき、オイラー角の時間微分$\dot{\theta1...3}$では表現できません。
オイラー角を用いてシミュレーションを行うと、$\theta2 \fallingdotseq 0$という、完全に0ではない時、角速度ベクトルをオイラー角の時間微分に変換すると$\dot{\theta1}$または$\dot{\theta3}$が大きい値に飛びます。これも,シミュレーションを行う上で精度低下をもたらします.
以上がオイラー角を用いたシミュレーションの問題です。
クォータニオンや回転行列を用いた場合は、このような「角速度を姿勢変数の時間微分では表現できない」という問題は発生しません。
クォータニオンの変換方法はここに投稿してます