ISEGORIA / 数学百科事典
四元数:掛け算としての回転
ハミルトンの四次元の数です。回転が半分の角度ずつ挟むサンドイッチになる理由、姿勢のあいだを補間する方法、そしてオイラー角が詰まる場所で四元数が詰まらない理由を扱います。
前提知識: ベクトル・内積と外積・回転行列・複素数
予想してから操作し、計算例と問いで理解を確かめてください。グラフは数式の図示であり、証明ではありません。
1. 回転はサンドイッチ
四元数は \(\mathbf i^2 = \mathbf j^2 = \mathbf k^2 = \mathbf{ijk} = -1\) を満たす数 \(q = w + x\mathbf i + y\mathbf j + z\mathbf k\) です。三次元ベクトル \(v\) を純四元数 \(x\mathbf i + y\mathbf j + z\mathbf k\) とみなします。二つの純四元数では \(uv = -u\cdot v + u\times v\) です。単位軸 \(\mathbf n\) と角度 \(\theta\) に対して、単位四元数 \(q = \cos\tfrac{\theta}{2} + \sin\tfrac{\theta}{2}\,\mathbf n\) は積 \(q\,v\,q^{*}\) によって \(v\) を \(\mathbf n\) のまわりに \(\theta\) だけ回します。\(v\) と \(\mathbf n\) の先端をドラッグしてください。二つの小さな図は \(v\) を \(\mathbf n\) に沿った成分と \(\mathbf n\) に直交する成分に分け、サンドイッチの各因子がそれぞれに何をするかを示します。
計算例. \(v=\mathbf i\) を \(\mathbf k\) のまわりに 90° 回します。\(q=\tfrac{1}{\sqrt2}(1+\mathbf k)\) なので \(q\,\mathbf i=\tfrac1{\sqrt2}(\mathbf i+\mathbf j)\) で、すでに 45° 回った純粋なベクトルです。次に \(\tfrac1{\sqrt2}(\mathbf i+\mathbf j)\cdot\tfrac1{\sqrt2}(1-\mathbf k)=\tfrac12(\mathbf i+\mathbf j+\mathbf j-\mathbf i)=\mathbf j\) となり、残りの 45° が回ります。
注意点. 順序が重要です。\(q_2(q_1vq_1^*)q_2^*=(q_2q_1)v(q_2q_1)^*\) なので、\(q_2q_1\) は行列と同じく \(q_1\) を先に施すことを意味します。また q と −q はサンドイッチの中で符号が打ち消し合うので、同じ回転を表します。
片側だけの掛け算 v ↦ q v が三次元空間の回転になり得ないのはなぜですか?
v が純粋なままでいないからです。v の n 方向の成分が実部 \(-\sin\tfrac\theta2\,(\mathbf n\cdot v)\) を持ってしまいます。左からの掛け算は四次元空間の回転です。右から \(q^*\) を掛ける組み合わせだけが実部を打ち消し、三次元ベクトルの回転を残します。
2. 姿勢から姿勢への移動
単位四元数は四次元の 3 次元球面を埋め尽くし、どの姿勢も q と −q の二回ずつ現れます。ある姿勢から別の姿勢への最短の道は、その球面上の大円の弧を一定の速さで進むことで、これが slerp です。成分を平均してから長さを直す方法(nlerp)は同じ弧を不均一な速さで進み、オイラー角を平均する方法は別の長い道を通ります。t の等間隔に打った目盛りに注目してください。
計算例. 150° の回転では \(\varphi=75°\) となり、slerp は終始 t 一単位あたり 150° で回ります。nlerp は \(t=\tfrac12\) で最も速く、その速さは平均の \(2\tan(\varphi/2)/\varphi\approx1.17\) 倍、t 一単位あたり約 176° です。
注意点. 補間の前に、\(q_A\cdot q_B<0\) なら \(q_B\) の符号を反転させてください。そうしないと、\(q_B\) と \(-q_B\) は同じ姿勢なのに、経路は 360° − Ω の遠回りになります。オイラー角の経路は A と B の z-y-x の角度をそのまま補間するので、±180° をまたぐ角度は遠回りします。
nlerp の経路が slerp と同じ弧で、速さだけが違うのはなぜですか?
\(q_A\) から \(q_B\) への弦は、原点とこの二点が張る平面内にあります。弦の各点を単位球面に引き戻してもその平面にとどまるので、二点のあいだの大円に乗ります。弦上の等間隔の点は弧上では不等間隔になり、両端に寄ります。
3. ジンバルロック
オイラー角は姿勢を三回の連続した回転で表します。z 軸まわりのヨー ψ、運ばれた y 軸まわりのピッチ θ、機体自身の x 軸まわりのロール φ です。これは入れ子になった三つのジンバルそのものです。ピッチが ±90° になるとロール軸がヨー軸に重なり、三つの輪のあいだで次元が一つ失われます。同じ姿勢の四元数は、その点を何事もなく通過します。
計算例. \(\theta=90°\) では \(R_y(90°)\) が \(\hat x\) を \(-\hat z\) に移すので、\(R_z(\psi)R_y(90°)R_x(\varphi)=R_z(\psi-\varphi)R_y(90°)\) です。\((\psi,\varphi)=(50°,20°)\) と \((80°,50°)\) の姿勢は同一で、記録されるのは \(\psi-\varphi\) だけです。
注意点. ジンバルロックは座標の欠陥であって、回転の欠陥ではありません。ピッチ 90° で航空機に物理的なことは何も起きません。どんな三つの角度による座標でも避けられません。三つの座標で特異点なしにすべての回転を覆うことはできないからです。単位四元数は、一つの制約を課した四つの数を使うことで、これを逃れます。
θ = 90° の近くで、失われた軸のまわりに機体を回すにはどんなオイラー角速度が必要ですか?
角速度一単位あたり \(1/\sigma_{\min}=1/\sqrt{1-|\sin\theta|}\) 程度の角速度が必要で、θ が 90° に近づくと際限なく大きくなります。オイラー角で動く制御器や積分器には、動き自体は穏やかなのに、ヨーとロールの角速度が爆発するように見えます。