LoginSignup
1
0

More than 3 years have passed since last update.

ジンバルロックのシミュレーションを回す際の問題

Last updated at Posted at 2020-04-06

ジンバルロックとは

ジンバルロックがよく問題になると本に記述されますが、どのような問題があるのでしょうか
特異姿勢になると何が問題なのでしょうか

その答えは
特異姿勢では任意の角速度ベクトルをオイラー角の時間微分で表現できない
という事です。

Gyroscope_precession.gif
https://ja.wikipedia.org/wiki/%E6%AD%B3%E5%B7%AE! より

このような、コマにたいしオイラー角を設定します。x-y平面は水平面、z方向は上とします
z-y-zオイラー角は

  1. z軸周りに$\theta1$回転 : 回転軸をx-y平面に投影したとき、x軸方向と投影した回転軸との角度
  2. y軸周りに$\theta2$回転 : 回転軸の傾き,z軸との傾きです
  3. z軸周りに$\theta3$回転 : コマの回転軸周りの回転量です。

上のコマの例では
$\theta2$ は一定で回転して、$\theta1,\theta3$は時間に比例的に増加していきます(一定速度ということ)。jinbal.jpg

角速度ベクトルはその回転の軸方向になります。
$\dot{\theta1}$による角速度ベクトルはz軸方向になります。
$\dot{\theta2}$による角速度ベクトルはy'軸方向になります。
$\dot{\theta3}$による角速度ベクトルはz'軸方向になります。

角速度ベクトルから、$\dot{\theta1...3}$を求めようとするときにジンバルロックは問題になります。
変換する場合は、角速度ベクトルをz-y'-z'方向に分解すれば、それぞれの成分が$\dot{\theta1...3}$に相当します
jinbal3.jpg

ほとんどの状態では、角速度ベクトルと$\dot{\theta1...3}$は相互変換可能です。
この時、ジンバルロックは$\theta2 = 0$の時、起こります。
$\theta2 = 0$は回転軸がz軸に対して傾いていない、回転軸とz軸は一致するという事です。
結果的に、この時$\theta1と\theta3$の回転は同じ方向になります。
jinbal2.jpg
角速度ベクトルをz-y'-z'方向に分解する際、zとz'の方向が一致するため、次元の数が2つしかなくなってしまいます.2次元平面y'-z(=z')平面で角速度ベクトルを表現することは、角速度ベクトルの方向によっては$\dot{\theta1...3}$では、表現できないという事になります。
jinbal4.jpg

シミュレーションを回す際は、角加速度が運動方程式から求まり、積分することで角速度が求まり、角速度をオイラー角の時間微分$\dot{\theta1...3}$に直し、オイラー角の時間微分を積分し、オイラー角を計算し、対称物体の姿勢と回転速度を計算します。
角速度は角加速度を積分しますが、姿勢によって決まった方向を取ることはなく、任意方向のベクトルを持つことになります。
よって、角速度をオイラー角の時間微分$\dot{\theta1...3}$に直す際,ジンバルロックの状態だと一部要素を捨てる事になる、または変換できていないという事になります。
上のコマの例だと、コマがx'方向に回転する角速度を持っていたとき、オイラー角の時間微分$\dot{\theta1...3}$では表現できません。

オイラー角を用いてシミュレーションを行うと、$\theta2 \fallingdotseq 0$という、完全に0ではない時、角速度ベクトルをオイラー角の時間微分に変換すると$\dot{\theta1}$または$\dot{\theta3}$が大きい値に飛びます。これも,シミュレーションを行う上で精度低下をもたらします.

以上がオイラー角を用いたシミュレーションの問題です。
クォータニオンや回転行列を用いた場合は、このような「角速度を姿勢変数の時間微分では表現できない」という問題は発生しません。
クォータニオンの変換方法はここに投稿してます

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0