ジンバルロックとクォータニオン

三つの角度を設定してみてください。ジンバルが回転してリングが動き、パネルには3軸の自由度がどれくらい残っているかが表示されます。そこからヨーとロールを同じ方向、あるいは逆方向に動かして、どちらの操作が意味を失ってしまったのか確かめてみましょう。

インタラクティブシミュレーションを読み込んでいます...

レッスン

理論 — ジンバルロックとクォータニオン

ジンバルとは、リングが三重に入れ子になり、それぞれが固有の軸を中心に自由に回転できる構造のことです。三つのリングと三つの角度があれば、どんな姿勢でも作り出すことができます。二つのリングが重なってしまうまでは。ジンバルロックとはまさにその瞬間のことです。外側と内側のリングが同じ平面に並ぶと、二つの角度が全く同じ役割を持つようになります。そうなると、リングをどう設定しようと、どうしても動かせない回転方向が一つ生まれてしまうのです。一方、四元数は回転を表すもう一つの方法です。三つではなく四つの数を使い、そもそも重なるようなリングを持ちません。

各記号の意味

ψ, θ, φ
ヨー、ピッチ、ロール。三つのリングの角度であり、z軸、新しいy軸、新しいx軸の順に適用されます
q
四元数 (w, x, y, z)。単一の回転 α に対して w = cos(α/2) であり、残りは回転軸に sin(α/2) を掛けたものです
|cos θ|
残された自由度。リングの角速度から本体の回転への写像が持つ行列式の大きさ。リングが直交している時は 1、二つのリングが平行な時は 0 となります

表示の読み方

ページを開くと、ヨーは 30°、ピッチは 60°、ロールは 20° に設定されています。クォータニオンの行は 0.8463, 0.0178, 0.5145, 0.1369 となっており、その下の行はこれを本来の姿である「y軸に近い軸回りの 64.4° の単一の回転」に変換しています。自由度は 50.0% ですが、これはまさに cos 60° です。そして二つのプローブの行は 5.2° と 19.3° となっています。両方ともまだ動いてはいますが、もはや同じ量ではありません。ピッチを 90° までドラッグすると、この二つのうち前者が 0.0° まで落ち込みます。

前提
ここでは、三つの回転がこの順序、この軸で行われることを前提としています。規則を z-y-z に変更すると、重なる箇所は中間の角度が90°の時ではなく0°の時に移りますが、問題自体が消え去るわけではありません。三つの角度を用いる方式には必ずどこかにロックされる構成が存在します。これは特定の方式の欠陥ではなく、3次元の回転に関する定理なのです。
成り立たない場合
壊れるわけではありません。それが本質なのです。アポロの誘導プラットフォームには、四つではなく三つのジンバルが搭載されていました。そのため乗組員は、突き進むのではなく、迂回して操縦すべき姿勢の領域を抱えていました。そしてその代替案とは、より重い四つ目のリングを積むことでした。ここで壊れ去るのは、「精度を上げればなんとかなる」という考え方です。90° において三つ目の自由度は小さくなるのではなく、消え去ります。ヨーやロールの小数点以下の桁数をどれだけ増やしても、それを取り戻すことはできないのです。

ジンバルロックは坂道ですが、誰もがそれを絶壁として語ります 🖖

ピッチを水平から引き上げながら、自由度の行に注目してください。その値は|cos θ|です。30°で86.6%、60°で50.0%、80°で17.4%、そして89°で1.7%となります。90°でこの数値に何か劇的な変化が起きるわけではありません。最後に残された1度はほとんど何も奪いません。すでに失うものがほとんど残っていなかったからです。80°のピッチで動くプラットフォームは、リングを同じだけ動かしても、水平な時と比べて6分の1しか回転しません。「ロック」という言葉は、まさにこの事実を覆い隠してしまいます。この数値は、リングの角速度から実際の本体の回転への写像における行列式の大きさ、つまりリングの単位動作あたりの回転量を示しています。したがって、リング同士が平行になるずっと前から、その値はすでに小さくなっているのです。

ぐるりと一周回っても、クォータニオンはまだだと言います 🖖

四元数は α の回転に対して cos(α/2) を保持するため、半回転を数え上げます。z軸周りに360°回転させると、初期状態の 1, 0, 0, 0 ではなく −1, 0, 0, 0 になります。720°回転して、ようやく元の値に戻るのです。q と −q は同じ本体を指し示すため、どちらも同じ姿勢を表します。つまり四元数は、物体そのものが忘れてしまった何かを記録していると言えるのです。これは単なる記法上の偶然ではありません。補間処理においても、この事実を考慮する必要があります。最短弧の規則では、二つの四元数が逆を向いている場合に符号を反転させます。その一行がなければ、半秒間の回転が遠回りをしてしまうことになります。

遠回りのルートは完全に滑らかです 🖖

アニメーションがブレる原因はオイラー角の補間にあるとよく言われますが、実際にはほとんどそうではありません。ヨー79.9°、ピッチ85.5°、ロール153.5°から、ヨー155.5°、ピッチ75.0°、ロール−139.8°への変化を測ってみましょう。二つの姿勢は 16.7°離れている だけですが、三つの角度を線形に変化させると、到達するまでに 368.1° も移動することになります。距離にして22倍も遠回りである上、角速度は始点から終点まででわずか0.5%しか変動しません。動いている最中は、何もおかしいようには見えません。4,000組のランダムなペアで検証したところ、オイラー角の経路が直接の回転よりも短くなることは一度もなく、平均して1.7倍の長さになりました。

全プロセスの詳細解説

  1. ピッチ 90° で制御できるもの 6 ステップ

    ピッチを 90°、ヨーを 20°、ロールを 0° に設定してください。そこからヨーとロールにそれぞれ 10° 加えても本体が全く同じ位置に留まることを示し、残された姿勢が依然として何に依存しているかを説明してください。

    この問題をツールで開く

    1. 回転は三つの順序で行われます。z軸回りのヨー、新しいy軸回りのピッチ、新しいx軸回りのロールです。式にすると、R = R_z(ψ)·R_y(θ)·R_x(φ) となります。

    2. θ = 90° を代入します。真ん中の回転によって x軸は −z に、z軸は x に移されるため、最初と最後の回転は、空間内の同じ直線を軸として適用されることになります。つまり、ψ が行った回転は、φ によって打ち消すことができるのです。

    3. したがって、これらを掛け合わせた結果は、φ − ψ のみに依存する単一の回転へと潰れてしまいます。この差が等しい二つの異なるペアは、単に似ているだけでなく、全く同一の姿勢を表します。

    4. 確認してみましょう。ψ = 20°、φ = 0° から始めると、その差は −20° です。ψ = 30°、φ = 10° に動かしても、差は −20° のままです。

    5. したがって、これら二組の角度は単に近いだけではありません。全く同じ姿勢を表しており、両者の間のギャップはゼロです。角度の行はピクリとも動きません。

    6. 今度はあえて、その一致を崩してみましょう。ψ = 30°、φ = −10° とすると −40° が得られ、物体は 20.0000° いっぱいに旋回します。

    解答

    両方に10°を足しても、本体は完全に元の位置にとどまります。二つの姿勢の違いは0.0000°であり、どちらも (−0.1711, 0.9703, 0.1711) を軸とした91.728°の単一の回転です。一方に足してもう一方から引くと、20.0000°まるごと動きます。θ = +90° で生き残るのは φ − ψ です。二つあった数値が一つになっています。θ = −90° では代わりに φ + ψ となります。第三の自由度は、到達が困難になったというよりも、もはや存在しなくなったのです。ψやφの精度をどれほど上げようとも、それを取り戻すことはできません。