Help us understand the problem. What is going on with this article?

SO3のLOG

More than 1 year has passed since last update.

SO3 Log の導出 備忘録

SfMなどにおいて3D空間での計算を行う時に,立体空間の回転行列を「ノルムが回転角度」で「方向が回転軸」となるベクトルから導出すること, もしくははその逆が頻繁に行われる.
この計算がどのようにして行われているのかを整理した.

ベクトル↔︎回転行列

ベクトル $\boldsymbol{\omega}_\times \in se(3)$ (厳密にはリー群)とそれに対応する行列$R \in SE(3)$の間を行き来するのが指数写像($se(3) \rightarrow SE(3)$)と対数写像($SE(3) \rightarrow se(3)$)である.

ベクトルから回転行列を導出するのは「ロドリゲスの公式」としてよく知られるが,今回はその逆を計算した.

ベクトル→回転行列

以下のロドリゲスの公式で計算可能.
ベクトル$\boldsymbol{\omega}$を回転行列$R$に変換する.

R = 
\left[
\begin{matrix}
n_1^2(1-cos\theta) + cos\theta & n_1n_2(1-cos\theta) - n_3sin\theta & n_1n_3(1-cos\theta) + n_2sin\theta \\
n_1n_2(1-cos\theta) + n_3sin\theta & n_2^2(1-cos\theta) + cos\theta & n_2n_3(1-cos\theta) - n_1sin\theta \\
n_1n_3(1-cos\theta) - n_2sin\theta & n_2n_3(1-cos\theta) + n_1sin\theta & n_3^2(1-cos\theta) + cos\theta
\end{matrix}
\right]
\\

\left(
\begin{matrix}
n_1\\n_2\\n_3
\end{matrix}
\right)
=\frac{\boldsymbol{\omega}}{|\boldsymbol{\omega}|}
,
\theta = |\boldsymbol{\omega}|

回転行列→ベクトル

ロドリゲスの回転行列$R$は,いくつかの対称行列歪対称行列の和と分解できる.
$\frac{R + R^T}{2}$で対称行列成分を, $\frac{R - R^T}{2}$で歪対称行列成分を取り出すことができる.
歪対象成分$\frac{R - R^T}{2}$を$A$とする.

A = 
\left[
\begin{matrix}
0 & - n_3sin\theta & n_2sin\theta \\
n_3sin\theta & 0 &  - n_1sin\theta \\
 - n_2sin\theta & n_1sin\theta & 0
\end{matrix}
\right]

また,この行列$A$は
$A = \frac{sin\theta}{\theta}\boldsymbol{\omega}_\times$を満たす

ここで,$\theta = |\boldsymbol{\omega}|$,

$\boldsymbol{n}=\frac{\boldsymbol{\omega}}{|\boldsymbol{\omega}|}
,$

とすると,

$A = sin\theta(n_1G_1 + n_2G_2 + n_3G_3)$
$A^2 = sin^2\theta(n_1G_1 + n_2G_2 + n_3G_3)^2$
$tr(A^2) = -2sin\theta$
$\sqrt{-\frac{tr(A^2)}{2}} = sin\theta$
$\theta = arccos\sqrt{1+\frac{tr(A^2)}{2}} \quad or \quad \theta = arccos(\frac{tr(R)-1}{2})$
※$arcsin$よりも$arccos$を使った方が簡潔($\theta$の定義域を$[0, \pi)$にしたいため)
よって, $A$から$\theta$と$sin\theta$が導出でき,
$\boldsymbol{\omega}_\times = \frac{\theta}{sin\theta}A$
として(厳密にはまだ行列の形であるが)ベクトルが計算できる

参考資料

http://ethaneade.com/lie.pdf

MikiyaShibuya
CVの研究中...
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away