モーションにおける3次元回転 #7 〜単位クォータニオンによる回転表現〜
単位クォータニオン
クォータニオンから単位クォータニオンへ
ここであらためて定義するが,クォータニオンは
$$
\bm{q}=q_0+q_1 i+ q_2 j + q_3 k=\begin{bmatrix}
q_0\\q_1\\q_2\\q_3
\end{bmatrix}
=\begin{bmatrix}
q_0\\ \bm{v}
\end{bmatrix}
$$
のように,実数で記述されたスカラー部である$${q_0}$$と,
3つの虚数単位と実数の積で表されたベクトル部$${\bm{v}=[q_1~q_2~q_3]^T}$$との形式和で記述された複素数の拡張として導入された.このうち,ノルムが1,すなわち$${||\bm{q}||=\sqrt{q_0^2+q_1^2+q_2^2+q_3^2}=\sqrt{q_0^2+||\bm{v}||^2}=1}$$を満たすクォータニオンを単位クォータニオン(unit quaternion)と呼ぶ.前章の繰り返しになるが,角度計算で使用するクォータニオンは単位クォータニオンであり,これは数学的にオイラーパラメータと等価である.
また,前章までのロドリゲスの式やオイラーパラメータで示してきたように,単位クォータニオンはオイラーパラメータのように回転軸と回転角度で記述できる.
なお,証明は他に譲るが(例えば参考文献1),単位球面の条件
$${||\bm{q}||^2 =q_0^2+||\bm{v}||^2=1}$$
を満たす$${q_0}$$と$${||\bm{v}||}$$は,適当な角度$${\psi}$$を与えることで,それぞれ$${\cos \frac{\psi}{2}}$$と$${\sin \frac{\psi}{2}}$$となる.すなわち
$$
q_0=\cos \frac{\psi}{2},~~\sqrt{q_1^2+q_2^2+q_3^2}=\sin\frac{ \psi}{2}
$$
となり,単位クォータニオンは,
$$
\bm{q} = q_0 + ||\bm{v}|| \bm{n} = \cos \frac{\psi}{2} + \bm{n}\sin\frac{ \psi}{2}
$$
のように書くことができる.ただし,$${||\bm{n}||}$$は単位ベクトルである($${||\bm{n}||=1}$$).以上をまとめて単位クォータニオンを行列表現によって,
$$
\bm{q}=\begin{bmatrix}
\cos \frac{\psi}{2} \\ \bm{n}\sin \frac{\psi}{2}
\end{bmatrix}=
\begin{bmatrix}
\cos \frac{\psi}{2} \\ n_1 \sin \frac{\psi}{2} \\ n_2 \sin \frac{\psi}{2} \\ n_3 \sin \frac{\psi}{2}
\end{bmatrix}
=\begin{bmatrix}
q_0\\q_1\\q_2\\q_3
\end{bmatrix}
=\begin{bmatrix}
q_0\\ \bm{v}
\end{bmatrix}
$$
のように書くことができる.
繰り返しになるがオイラーパラメータ同様,$${\bm{q}_0}$$をスカラ部,$${\bm{v}=[q_1~q_2~q_3]^T}$$をベクトル部と呼ぶ.また,前章までのロドリゲスの式のからも,$${\bm{n}}$$は回転軸を表す単位ベクトル,$${\psi}$$は回転角度に相当する.
単位クォータニオンから回転行列
次に単位クォータニオンから,姿勢を計算することを考える.すなわち単位クォータニオンによって記述された回転行列$${\bm{R}}$$は,単位クォータニオンで記述したロドリゲスの式を経て
$$
\bm{R} =
\begin{bmatrix}
q_{0}^2+q_{1}^2-q_{2}^2 - q_{3}^2 & 2(q_{1}q_{2}-q_{0}q_{3}) & 2(q_{1}q_{3} + q_{0}q_{2})\\2(q_{2}q_{1} + q_{0}q_{3}) & q_{0}^2-q_{1}^2+q_{2}^2 - q_{3}^2 & 2(q_{2}q_{3} - q_{0}q_{1})\\2(q_{3}q_{1} - q_{0}q_{2}) &2(q_{3}q_{2} + q_{0}q_{1}) & q_{0}^2-q_{1}^2-q_{2}^2 + q_{3}^2
\end{bmatrix}
\\=
\begin{bmatrix}
2(q_{0}^2+q_{1}^2)-1 & 2(q_{1}q_{2}-q_{0}q_{3}) & 2(q_{1}q_{3} + q_{0}q_{2})\\2(q_{2}q_{1} + q_{0}q_{3}) & 2(q_{0}^2+q_{2}^2)-1 & 2(q_{2}q_{3} - q_{0}q_{1})\\2(q_{3}q_{1} - q_{0}q_{2}) &2(q_{3}q_{2} + q_{0}q_{1}) & 2(q_{0}^2+q_{3}^2)-1
\end{bmatrix}~~~~(1)
$$
のように記述できる.この導出は別途記述する予定である.
これは,たとえばモーションセンサの単位クォータニオン出力からセンサの姿勢(回転行列)を計算したいときなどに必要とされる.
回転行列から単位クォータニオンへ(逆変換)
次に,逆に回転行列から単位クォータニオンを算出することを考える.たとえば,モーションキャプチャによって剛体の姿勢(回転行列)$${\bm{R}}$$を得て,さらにその姿勢を単位クォータニオンとして計算する際には,次のような逆変換が必要となるので,単位クォータニオンの逆変換を考えるが,回転行列$${\bm{R}}$$を
$$
\bm{R}=
\begin{bmatrix}
r_{11}&r_{12}&r_{13}\\
r_{21}&r_{22}&r_{23}\\
r_{31}&r_{32}&r_{33}
\end{bmatrix}~~~~~~~~~~~~~~(2)
$$
と表すと,クォータニオンの各成分$${q_0, q_1, q_2, q_3}$$は,「式(1)(2)を見比べ」,クォータニオンのノルム(大きさ)
$${||\bm{q}||=q_0^2+q_1^2+q_2^2+q_3^2=1}$$
の条件と,行列$${\bm{R}}$$の対角要素の和(トレース)$${\mathrm{tr}\bm{R}}$$
$$
\mathrm{tr}\bm{R}=r_{11}+r_{22}+r_{33}=3 q_{0}^2 -(q_{1}^2+q_{2}^2+q_{3}^2)=4 q_{0}^2 -1
$$
を使うことで,スカラ部$${q_0}$$は
ここから先は
¥ 100