方向と角変位


方向

方向 (orientation), 向き(direction)、角変位(angular displacement)の違い

「角変位」は「行列」や「四元数」で表現できる。 「方向」は「オイラー角」で表現できる。


行列による方向の表現

ある座標空間の基底ベクトルを、他の座標空間を使って表現して列挙する。 基底ベクトルを行として使って 3x3 行列にすると、行列の形式で方向を表現した事になる。 すなわち、ベクトルをある座標空間から別の座標空間へ座標変換するのに使う回転行列を与えることで 2つの座標空間の相対方向を表現できる。

行列形式の長所

行列形式の短所

$x$軸周りの回転

$\displaystyle\quad\quad R_x (\theta) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{pmatrix} $

$y$軸周りの回転

$\displaystyle\quad\quad R_y (\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{pmatrix} $

$z$軸周りの回転

$\displaystyle\quad\quad R_z (\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \\ \end{pmatrix} $

任意の軸周りの回転

回転の軸を単位ベクトル $\boldsymbol{n}$ で定義する。 ベクトル$\boldsymbol{v}$ を $\boldsymbol{n}$ の周りに角度 $\theta$だけ回転したベクトルを $\boldsymbol{v'}$としたとき、 $\boldsymbol{v'} = R(\boldsymbol{n}, \theta) \boldsymbol{v} $ を満たす $R(\boldsymbol{n},\theta)$を求めたい。

$\boldsymbol{v} = \boldsymbol{v}_{\parallel} + \boldsymbol{v}_{\perp}$ とする。 ただし、 $\boldsymbol{v}_{\parallel}$ と $\boldsymbol{v}_{\perp}$ はそれぞれ $\boldsymbol{n}$ に平行および垂直なベクトルである。 $\boldsymbol{v}_{\parallel}$ は $\boldsymbol{n}$ に平行なので $\boldsymbol{n}$ の周りの回転の影響を受けない。 したがって、 $\boldsymbol{v}_{\perp}$ を $\boldsymbol{n}$ の周りで回転した $\boldsymbol{v'}_{\perp}$ を計算できれば $\boldsymbol{v'} = \boldsymbol{v}_{\parallel} + \boldsymbol{v'}_{\perp}$ が計算できる。

$\boldsymbol{v}_{\parallel}$ は $\boldsymbol{v}$ を $\boldsymbol{n}$ に投影したものなので $\boldsymbol{v}_{\parallel} = (\boldsymbol{v} \cdot \boldsymbol{n}) ~ \boldsymbol{n}$ である。

$\boldsymbol{v}_{\perp}$ は $\boldsymbol{v} = \boldsymbol{v}_{\parallel} + \boldsymbol{v}_{\perp}$ より $\boldsymbol{v}_{\perp} = \boldsymbol{v} - \boldsymbol{v}_{\parallel} =\boldsymbol{v - (\boldsymbol{v} \cdot \boldsymbol{n}) ~ \boldsymbol{n}}$ となる。

$\boldsymbol{v_{\perp}}$ を $\boldsymbol{n}$ の周りに$\displaystyle\frac{\pi}{2}$ だけ回転させたベクトル $\boldsymbol{w}$ を考えると、 $\boldsymbol{w}$ は $\boldsymbol{v_{\perp}}$ と $\boldsymbol{n}$ の双方に垂直で,長さは $|\boldsymbol{v_{\perp}}|$ であるので、
$\displaystyle \begin{align} \boldsymbol{w} &= \boldsymbol{v}_{\perp} \times \boldsymbol{n} \\\ &= (\boldsymbol{v} - \boldsymbol{v}_{\parallel}) \times \boldsymbol{n} \\\ &= \boldsymbol{v} \times \boldsymbol{n} - \boldsymbol{v}_{\parallel} \times \boldsymbol{n} \\\ &= \boldsymbol{v} \times \boldsymbol{n} - \boldsymbol{0} \\\ &= \boldsymbol{v} \times \boldsymbol{n} \end{align} $

$\boldsymbol{v}'$ の $\boldsymbol{n}$ に垂直な成分 $\boldsymbol{v}'_{\perp}$ は
$\displaystyle \begin{align} \boldsymbol{v}'_{\perp} & = \cos \theta ~ \boldsymbol{v}_{\perp} + \sin \theta ~ \boldsymbol{w} \\\ & = \cos \theta ~ (\boldsymbol{v - (\boldsymbol{v} \cdot \boldsymbol{n}) ~ \boldsymbol{n}}) + \sin\theta ~ (\boldsymbol{v} \times \boldsymbol{n}) \end{align} $

したがって、
$\displaystyle \begin{align} \boldsymbol{v}' &= \boldsymbol{v}_{\parallel} + \boldsymbol{v}_{\perp} \\\ &= \cos \theta ~ (\boldsymbol{v} - (\boldsymbol{v} \cdot \boldsymbol{n}) ~ \boldsymbol{n}) + \sin\theta ~ (\boldsymbol{v} \times \boldsymbol{n}) + (\boldsymbol{v} \cdot \boldsymbol{n}) ~ \boldsymbol{n} \end{align}$

これで $\boldsymbol{v'}$ を $\boldsymbol{v}$, $\boldsymbol{n}$, $\theta$ を使って表現できたので、3つの基底ベクトル $\displaystyle \boldsymbol{p}=\begin{pmatrix}1 \\ 0 \\ 0\end{pmatrix}, \quad \boldsymbol{q}=\begin{pmatrix}0 \\ 1 \\ 0\end{pmatrix}, \quad \boldsymbol{r}=\begin{pmatrix}0 \\ 0 \\ 1\end{pmatrix}, \quad $ から $\boldsymbol{p}'$, $\boldsymbol{q}'$, $\boldsymbol{r}'$ を求めて、これらの基底ベクトルから行列 $\displaystyle \begin{pmatrix} \boldsymbol{p}' & \boldsymbol{q}' & \boldsymbol{r}' \end{pmatrix} \quad$ をつくると任意の軸の周りに回転させる3次元行列が求まる。


オイラー角 (Euler angle)

Euler (1707-1783, 「一連の複数の角変位は1つの角変位と同値である」ことを証明した)にちなんでつけられた名前。

1つの角変位を、互いに垂直な3本の軸の周りの3つの一連の回転として定義する。

慣性空間からオブジェクト空間への変換の回転の順番で よく使われるのが、 heading - pitch - bank である。 heading は慣性空間のy軸周りの回転で、pitch はobject空間のx軸周りの回転、bank はobject空間のz軸周りの回転である。 どれも、軸の無限大から原点を見たときに時計回りが正方向となる。

軸の無限大から原点を見て時計回りを正方向としているが、 「慣性空間(右手座標系)のx軸, z軸の回転と、object空間(左手座標系)のx軸、z軸の回転は 結果として向きが逆となる」ことに注意。

 object空間ではobjectはz軸の正方向を向いている。
    y     z
    |   /
    | /
    +-------x

heading は yaw はどちらもy軸周りの回転という点では同じだが、座標空間が異なっていることに注意。 ただし、y軸周りの回転は、慣性空間のy軸と Object 空間のy軸が一致しているときに実行されるので この区別は重要ではない。 rollは bank の同義語である。

roll - pitch - yaw は、object空間から慣性空間へ回転する順番で名前がつけられている。

Euler角の長所

Euler角の短所


四元数 (Quaternion)

四元数には、1つのスカラー要素と1つの3次元ベクトル要素が含まれる。 通常はスカラー要素を $w$ と表す。 $\begin{bmatrix} w & \vec{v} \end{bmatrix} = \begin{bmatrix} w & \begin{pmatrix} x & y & z \end{pmatrix} \end{bmatrix}$

ハミルトンによって 1843 年に発明された。

$i^2 = j^2 = k^2 = -1 $,
$ij = k, \quad ji = -k$,
$jk = i, \quad kj = -i$,
$ki = j, \quad ik = -j$
四元数 $\begin{bmatrix} w & \begin{pmatrix} x & y & z \end{pmatrix} \end{bmatrix}$ は、複素数 $ w + xi + yj + zk$ を定義する。

軸と角度の対としての四元数

Euler は、一連の回転は単一の回転と同値であることを証明した。 3次元の任意の角変位は、単一の軸の周りの単一の回転として表現することができる。 方向をこの形式で表現する形式を、軸・角度 (axis-angle) 表現という。

長さ1の $\boldsymbol{n}$ の周りの $\theta$ ラジアンの回転として角変位を定義する。 四元数は、角変位の軸・角度表現として解釈することができる。

$ \displaystyle \begin{align} \boldsymbol{q} &= \begin{bmatrix} \cos \frac{\theta}{2} & \sin \frac{\theta}{2} ~ \boldsymbol{n} \end{bmatrix} \\\ &= \begin{bmatrix} \cos \frac{\theta}{2} & \begin{pmatrix} \sin \frac{\theta}{2} ~ \boldsymbol{n}_x & \sin \frac{\theta}{2} ~ \boldsymbol{n}_y & \sin \frac{\theta}{2} ~ \boldsymbol{n}_z \end{pmatrix} \end{bmatrix} \end{align}$

四元数の符号反転

四元数は符号を反転することができる。四元数 $\boldsymbol{q}$ と反転した $-\boldsymbol{q}$ は同じ角変位を表している。 すなわち、四元数形式ではすべての角度に対して2つの異なる表現があり、それらは互いに符号反転になっている。

恒等四元数

幾何学的には、無の角変位を表現する2つの恒等四元数 $\begin{bmatrix}1 & \boldsymbol{0} \end{bmatrix}$ , $\begin{bmatrix}-1 & \boldsymbol{0} \end{bmatrix}$ が存在する。

四元数の大きさ

$\displaystyle \begin{eqnarray} ||\boldsymbol{q} || &=& || \begin{bmatrix} w & \begin{pmatrix} x & y & z \end{pmatrix} \end{bmatrix} || &=& \sqrt{w^2 + x^2 + y^2 + z^2} \\\ &=& \begin{bmatrix} w & \boldsymbol{v} \end{bmatrix} || &=& \sqrt{w^2 + || \boldsymbol{v} ||^2} \\\ &=& \sqrt{ \cos^2 \frac{\theta}{2} + (\sin\frac{\theta}{2} || \boldsymbol{n} ||)^2 } \\\ &=& \sqrt{ \cos^2 \frac{\theta}{2} + \sin^2 \frac{\theta}{2} || \boldsymbol{n} ||^2 }\\\ &=& \sqrt{ \cos^2 \frac{\theta}{2} + \sin^2 \frac{\theta}{2} } && (\because ||\boldsymbol{n}|| = 1) \\\ &=& 1 \end{eqnarray} $

四元数の共役と逆数

四元数の共役は $\boldsymbol{q}^{*}$ と表記され、四元数のベクトル部分を符号反転することで得られる。

$\displaystyle \begin{eqnarray} \boldsymbol{q}^* &=& \begin{bmatrix} w & \boldsymbol{v} \end{bmatrix}{}^{*} &=& \begin{bmatrix} w & -\boldsymbol{v} \end{bmatrix} \\\ &=& \begin{bmatrix} w & \begin{pmatrix} x & y & z \end{pmatrix} \end{bmatrix}{}^{*} &=& \begin{bmatrix} w & \begin{pmatrix} -x & -y & -z \end{pmatrix} \end{bmatrix} \end{eqnarray} $

四元数の逆数は $\boldsymbol{q}^{-1}$ と表記され、四元数の共役をその大きさで割ることで定義される。

$\displaystyle \boldsymbol{q}^{-1} = \frac{\boldsymbol{q}^{*}}{|| \boldsymbol{q} ||} $

四元数の乗算(外積)

$\displaystyle \begin{eqnarray} \begin{bmatrix} w & \boldsymbol{v}_1 \end{bmatrix} \begin{bmatrix} w & \boldsymbol{v}_2 \end{bmatrix} &=& \begin{bmatrix} w & \begin{pmatrix} x_1 & y_1 & z_1 \end{pmatrix} \end{bmatrix} \begin{bmatrix} w & \begin{pmatrix} x_2 & y_2 & z_2 \end{pmatrix} \end{bmatrix} \\\ &=& ( w_1 + x_1 i + y_1 j + z_1 k ) ( w_2 + x_2 i + y_2 j + z_2 k ) \\\ &=& w_1 w_2 + w_1 x_2 i + w_1 y_2 j + w_1 z_2 k \\\ & & + x_1 w_2 i + x_1 x_2 i^2 + x_1 y_2 ij + x_1 z_2 ik \\\ & & + y_1 w_2 j + y_1 x_2 ji + y_1 y_2 j^2 + y_1 z_2 jk \\\ & & + z_1 w_2 k + z_1 x_2 ki + z_1 y_2 kj + z_1 z_2 k^2 \\\ &=& w_1 w_2 - x_1 x_2 - y_1 y_2 - z_1 z_2 \\\ & & + (w_1 x_2 + x_1 w_2 + y_1 z_2 - z_1 y_2 ) i \\\ & & + (w_1 y_2 + y_1 w_2 + z_1 x_2 - x_1 z_2 ) j \\\ & & + (w_1 z_2 + z_1 w_2 + x_1 y_2 - y_1 x_2 ) k \\\ &=& \begin{bmatrix} w_1 w_2 - \boldsymbol{v}_1 \cdot \boldsymbol{v}_2 & w_1 \boldsymbol{v}_2 + w_2 \boldsymbol{v}_1 + \boldsymbol{v}_1 \times \boldsymbol{v}_2 \end{bmatrix} \end{eqnarray} $

四元数の積は結合可能であるが、交換可能でははない。

$ (\boldsymbol{a}\boldsymbol{b})\boldsymbol{c} = \boldsymbol{a}(\boldsymbol{b}\boldsymbol{c})\\\ \boldsymbol{a}\boldsymbol{b} \neq \boldsymbol{b}\boldsymbol{a} $

四元数の積の大きさは、大きさの積と等しい。

$\displaystyle \begin{eqnarray} || \boldsymbol{q}_1 \boldsymbol{q}_2 || &=& \sqrt{(w_1{}^2+x_1{}^2+y_1{}^2+z_1{}^2)(w_2{}^2+x_2{}^2+y_2{}^2+z_2{}^2)} \\\ &=& \sqrt{|| \boldsymbol{q}_1 ||^2 || \boldsymbol{q}_2 ||^2} \\\ &=& || \boldsymbol{q}_1 || ~ || \boldsymbol{q}_2 || \end{eqnarray} $

四元数の積の逆数は、順序を逆にした逆数の積と等しい。

$\displaystyle \begin{eqnarray} (\boldsymbol{a} \boldsymbol{b})^{-1} &=& \boldsymbol{b}^{-1} \boldsymbol{a}^{-1} \\\ (\boldsymbol{q}_1 \boldsymbol{q}_2 \cdots \boldsymbol{q}_{n-1} \boldsymbol{q}_n)^{-1} &=& \boldsymbol{q}_n{}^{-1} \boldsymbol{q}_{n-1}{}^{-1} \cdots \boldsymbol{q}_2{}^{-1} \boldsymbol{q}_1{}^{-1} \end{eqnarray} $

3次元座標 ( $x$, $y$, $z$ ) を四元数 $\boldsymbol{p} = \begin{bmatrix} 0 & \begin{pmatrix} x & y & z \end{pmatrix} \end{bmatrix}$ と表すことにする。 さらに、$\boldsymbol{n}$ を回転軸の単位ベクトル、$\theta$を回転角として 回転四元数 $\displaystyle \boldsymbol{q} = \begin{bmatrix} \cos\frac{\theta}{2} & \boldsymbol{n} \sin\frac{\theta}{2} \end{bmatrix}$ とすると、$\boldsymbol{p}'$ は $\boldsymbol{p}$ を $\boldsymbol{n}$ の周りに角度 $\theta$ 回転させた点となる。

$ \boldsymbol{p}' = \boldsymbol{q}^{-1} \boldsymbol{p} \boldsymbol{q} $

四元数の補間 (slerp, 球面線形補間 spherical linear interpolation)

slerp 演算は、四元数の間を滑かに補間できる。 $\boldsymbol{q}_0$ と $\boldsymbol{q}_1$ の間を $t=0 \sim 1$ とすると

$\displaystyle \boldsymbol{q} = \frac{\sin (1-t) \theta }{\sin\theta} \boldsymbol{q}_0 + \frac{\sin t \theta}{\sin \theta} \boldsymbol{q}_1 \\ \theta = \boldsymbol{q}_0 と \boldsymbol{q}_1のなす角 = \cos^{-1} (\boldsymbol{q}_0 \cdot \boldsymbol{q}_1) \quad\quad \because \boldsymbol{q}_0 \cdot \boldsymbol{q}_1 = || \boldsymbol{q}_0 || ~ || \boldsymbol{q}_1 || \cos\theta ~ , ~~ || \boldsymbol{q}_0 || = || \boldsymbol{q}_1 || = 1 $

四元数の長所

四元数の短所