1、旋转矩阵
n
n
n维旋转矩阵的集合定义:
S
O
(
n
)
=
{
R
∈
R
n
×
n
∣
R
R
T
=
I
,
d
e
t
(
R
)
=
1
}
SO(n) = \{ R \in \mathbb{R}^{n \times n} \mid RR^{T} = I, det(R) = 1 \}
SO(n)={R∈Rn×n∣RRT=I,det(R)=1}
S
O
(
n
)
SO(n)
SO(n)是特殊正交群(Special Orthogonal Group)。
R
R
R是正交矩阵,满足
R
R
T
=
I
RR^{T} = I
RRT=I。行列式为
1
1
1是人为定义的,实际行列式可以为
±
1
\pm1
±1,行列式为
−
1
-1
−1的称为瑕旋转,即一次旋转加一次反射,三维矩阵行列式的意义是变换后的体积与原体积的比,行列式为
1
1
1说明体积不变,旋转变换就是体积不变。
缺点:
1、
S
O
(
3
)
SO(3)
SO(3)的旋转矩阵有
9
9
9个量,一次旋转只有
3
3
3个自由度,所以这种表达方式是冗余的。
2、旋转矩阵自身带有约束,必须满足正交矩阵和行列式为
1
1
1,在优化旋转矩阵的情况中给求解带来困难。
2、旋转向量
用旋转轴和旋转角来表示一个旋转。使用一个向量,方向与旋转轴一致,长度等于旋转角,称为旋转向量,或轴角/角轴(Axis-Angle)。
旋转向量与旋转矩阵的转换
θ
n
\theta \mathbf{n}
θn为旋转向量,转换为旋转矩阵用罗德里格斯公式:
R
=
c
o
s
θ
I
+
(
1
−
c
o
s
θ
)
n
n
T
+
s
i
n
θ
n
∧
R = cos\theta I + (1 - cos\theta)nn^{T} + sin\theta n^{\wedge}
R=cosθI+(1−cosθ)nnT+sinθn∧
旋转矩阵
R
R
R转换为旋转向量:
θ
=
a
r
c
c
o
s
t
r
(
R
)
−
1
2
\theta = arccos \frac{tr(R) - 1}{2}
θ=arccos2tr(R)−1
n
\mathbf{n}
n是矩阵
R
R
R特征值为
1
1
1的特征向量。
3、欧拉角
把一个旋转分解成三次绕不同的轴旋转。
缺点:万向锁问题,例如ZYX欧拉角,Y为90度时,Z和X在旋转时是同一个直线上的轴,使系统丢失一个自由度。理论上可以证明,只要想用3个实数表达三维旋转就会碰到奇异性问题,旋转向量也具有奇异性,发生在转角
θ
\theta
θ超过
2
π
2\pi
2π而产生周期性时。
4、四元数
旋转矩阵表示有冗余性,旋转向量和欧拉角表示具有奇异性。四元数是紧凑的,且没有奇异性。四元数分为JPL四元数和Hamilton四元数,JPL四元数是 i j = − k ij=-k ij=−k,Hamilton四元数是 i j = k ij=k ij=k,这里用Hamilton四元数。
三维旋转用单位四元数表示。
三维空间点
p
p
p用虚四元数表示,给一个旋转变换
q
q
q,结果为:
p
′
=
q
p
q
−
1
p' = qpq^{-1}
p′=qpq−1
结果一定是虚四元数。
四元数到旋转矩阵的变换
单位四元数
q
=
[
s
,
v
T
]
T
q=[s, \mathbf{v}^{T}]^{T}
q=[s,vT]T,旋转矩阵为:
R
=
v
v
T
+
s
2
I
+
2
s
v
∧
+
(
v
∧
)
2
R=\mathbf{v}\mathbf{v}^{T} + s^{2}I + 2s\mathbf{v}^{\wedge} + (\mathbf{v}^{\wedge})^{2}
R=vvT+s2I+2sv∧+(v∧)2
四元数到旋转向量的变换
θ
=
2
a
r
c
c
o
s
(
s
)
\theta = 2arccos(s)
θ=2arccos(s)
n
=
v
s
i
n
θ
2
\mathbf{n} = \frac{\mathbf{v}}{sin \frac{\theta}{2}}
n=sin2θv
旋转向量到四元数的变换
q = [ c o s θ 2 , n T s i n θ 2 ] T q = [cos \frac{\theta}{2}, \mathbf{n}^{T} sin \frac{\theta}{2}]^{T} q=[cos2θ,nTsin2θ]T