参考书籍: 视觉SLAM十四讲
点与向量
点A: A = [ a 1 , a 2 , a 3 ] . A = [a_{1},a_{2},a_{3}]\,. A=[a1,a2,a3].
相关运算
a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos < a , b > a\cdot b = a^{T}b = \sum_{i=1}^{3} a_ib_i=|a||b| \cos <a,b> a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos<a,b>
a
×
b
=
∥
e
1
e
2
e
3
a
1
a
2
a
3
b
1
b
2
b
3
∥
=
[
a
2
b
3
−
a
3
b
2
a
3
b
1
−
a
1
b
3
a
1
b
2
−
a
2
b
1
]
=
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
=
a
^
b
a×b=\begin{Vmatrix} e_1 & e_2 & e_3 \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{Vmatrix}=\begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2-a_2b_1 \end{bmatrix}==\begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix}b = \widehat{a} b
a×b=∥∥∥∥∥∥e1a1b1e2a2b2e3a3b3∥∥∥∥∥∥=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤==⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=a
b
其中我们定义
a
^
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
\widehat{a}=\begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix}
a
=⎣⎡0a3−a2−a30a1a2−a10⎦⎤
变换矩阵 (transform matrix)
T
=
[
R
t
0
T
1
]
T = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix}
T=[R0Tt1]
其中
- T是变换矩阵,属于特殊欧式群(Special Euclidean Group) SE(3)
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3)= \begin{Bmatrix} T= \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix}\isin \R^{4×4}| R \isin SO(3), t\isin\R^3 \end{Bmatrix} SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3} - R是旋转矩阵,属于特殊正交群(Special Orthogonal )SO(n)
S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = 1 } SO(n) = \begin{Bmatrix} R\isin \R^{n×n}|RR^T=I,det(R)=1 \end{Bmatrix} SO(n)={R∈Rn×n∣RRT=I,det(R)=1} R ∈ S O ( 3 ) R \isin SO(3) R∈SO(3) - t是平移向量
齐次坐标
- 与变换矩阵相对应的就是齐次坐标
简单理解就是 T ∈ R 4 T\isin \R^{4} T∈R4 不能与 A = [ a 1 , a 2 , a 3 ] A = [a_{1},a_{2},a_{3}]\, A=[a1,a2,a3]直接相乘
所以我们需要引入齐次坐标 A ~ = [ a 1 , a 2 , a 3 , 1 ] \widetilde{A}=[a_{1},a_{2},a_{3},1]\, A =[a1,a2,a3,1]
这样就可以进行矩阵运算了
矩阵计算后得到的齐次坐标的第四个参数应该一直为1
矩阵表示的缺点:
- R ∈ R 3 × 3 R\isin \R^{3×3} R∈R3×3包含9个元素,但对于一次旋转只有三个自由度,所以旋转矩阵是冗余表达方式,同理,变换矩阵 T ∈ R 4 × 4 T\isin \R^{4×4} T∈R4×4用16个元素表示六个自由度的变换,也是冗余的。
- 旋转矩阵
R
∈
S
O
(
3
)
R\isin SO(3)
R∈SO(3)自身是一个正交矩阵,且
d
e
t
(
R
)
=
1
det(R)=1
det(R)=1,所以在计算中,这个约束会使得求解变得困难
综上我们需要找到一个紧凑得方式描述旋转和平移。
旋转向量
我们知道旋转具有3自由度,变换具有6个自由度。所以很容易的想到用一个三维向量描述旋转,六维向量描述变换。
旋转是由旋转轴和旋转角描述的。
所以旋转向量
- 方向等于旋转轴
- 长度等于旋转角
考虑一个向量
n
n
n,方向为旋转轴,长度为单位向量,旋转角为
θ
\theta
θ,那么向量
θ
n
\theta n
θn 就可以描述这个旋转,
那么旋转矩阵和其关系为:
R
=
cos
θ
I
+
(
1
−
cos
θ
)
n
n
T
+
sin
θ
n
^
R = \cos \theta \Iota + (1 - \cos \theta)nn^T + \sin \theta \widehat{n}
R=cosθI+(1−cosθ)nnT+sinθn
n
^
\widehat{n}
n
应该写为n^不过latex有点小问题。
^是向量到反对称矩阵的转换符。
对上式两端取trace
我们可以得到
θ
=
arccos
(
t
r
(
R
)
−
1
)
2
\theta =\frac{\arccos (tr(R)-1)}{2}
θ=2arccos(tr(R)−1)
关于转轴
n
n
n,旋转操作并不会改变旋转轴:
R
n
=
n
Rn=n
Rn=n
欧拉角
使用三个分离的转角,把一个旋转分解成3次绕不同轴的旋转
偏航-俯仰-滚转(yaw-pitch-roll)表示方法
- 绕物体的Z轴旋转,得到偏航角 yaw
- 绕旋转之后的Y轴旋转,得到俯仰角pitch
- 绕旋转之后的X轴旋转,得到滚转角roll
用 [ r , p , y ] T [r,p,y]^T [r,p,y]T 这样一个三维向量就可以描述任意旋转,十分直观易于理解
万向锁问题(Gimbal lock)
在俯仰角为
±
9
0
∘
\pm90^\circ
±90∘ 时,第一次旋转和第三次旋转将使用同一个轴,使得整个系统丢失了一个自由度,被称作奇异性问题。
理论上可以证明,只要想用三个实数表达三维旋转,都会遇到奇异性问题。所以欧拉角不适用于插值和迭代,往往仅使用于人机交互中。
四元数(Quaternion)
q = q 0 + q 1 i + q 2 j + q 3 k q = q_0 + q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k
- 紧凑且无奇异性
- 不够直观,运算复杂
i
,
j
,
k
i,j,k
i,j,k作为四元数的三个虚部,满足:
{
i
2
=
j
2
=
k
2
=
−
1
i
j
=
k
,
j
i
=
−
k
j
k
=
i
,
k
j
=
−
i
k
i
=
j
,
i
k
=
−
j
\begin{cases} i^2 = j^2 = k^2 = -1 \\ ij=k, ji = -k \\ jk=i, kj = -i \\ ki=j,ik=-j \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j
所以我们也可以用一个标量和一个向量来表达四元数:
q
=
[
s
,
v
]
T
,
s
=
q
0
∈
R
,
v
=
[
q
1
,
q
2
,
q
3
]
T
∈
R
3
q=[s,v]^T, s = q_0 \isin \R, v= [q_1,q_2,q_3]^T \isin \R^3
q=[s,v]T,s=q0∈R,v=[q1,q2,q3]T∈R3
四元数的运算
1. 加减法
q a ± q b = [ s a ± s b , v a ± v b ] T q_a \pm q_b = [s_a \pm s_b, v_a \pm v_b]^T qa±qb=[sa±sb,va±vb]T
2. 乘法
q
a
q
b
=
s
a
s
b
−
x
a
x
b
−
y
a
y
b
−
z
a
z
b
+
(
s
a
x
b
+
x
a
s
b
+
y
a
z
b
−
z
a
y
b
)
i
+
(
s
a
y
b
−
x
a
z
b
+
y
a
s
b
+
z
a
x
b
)
j
+
(
s
a
z
b
+
x
a
y
b
−
y
a
x
b
+
z
a
s
b
)
k
q_aq_b = s_as_b-x_ax_b-y_ay_b-z_az_b+(s_ax_b+x_as_b+y_az_b-z_ay_b)i+(s_ay_b-x_az_b+y_as_b+z_ax_b)j+(s_az_b+x_ay_b-y_ax_b+z_as_b)k
qaqb=sasb−xaxb−yayb−zazb+(saxb+xasb+yazb−zayb)i+(sayb−xazb+yasb+zaxb)j+(sazb+xayb−yaxb+zasb)k
q
a
q
b
=
[
s
a
s
b
−
v
a
T
v
b
,
s
a
v
b
+
s
b
v
a
+
v
a
×
v
b
]
T
q_aq_b=[s_as_b-v_a^Tv_b,s_av_b+s_bv_a+v_a×v_b]^T
qaqb=[sasb−vaTvb,savb+sbva+va×vb]T
NOTE:由于
v
a
×
v
b
v_a×v_b
va×vb的存在,所以乘法不可交换,除非
v
a
,
v
b
∈
R
3
v_a,v_b \isin \R^3
va,vb∈R3共线即
v
a
×
v
b
=
0
v_a×v_b=0
va×vb=0
3.模长
∥
q
a
∥
=
s
a
2
+
x
a
2
+
y
a
2
+
z
a
2
\lVert q_a\rVert=\sqrt{s_a^2+x_a^2+y_a^2+z_a^2}
∥qa∥=sa2+xa2+ya2+za2
∥
q
a
q
b
∥
=
∥
q
a
∥
∥
q
b
∥
\lVert q_aq_b \rVert =\lVert q_a\rVert \lVert q_b\rVert
∥qaqb∥=∥qa∥∥qb∥
4.共轭
q
a
∗
=
s
a
−
x
a
i
−
y
a
j
−
z
a
k
=
[
s
a
,
−
v
a
]
T
q_a^* = s_a-x_ai-y_aj-z_ak=[s_a,-v_a]^T
qa∗=sa−xai−yaj−zak=[sa,−va]T
q
∗
q
=
q
q
∗
=
[
s
a
2
+
v
T
v
,
0
]
T
q^*q=qq^*=[s_a^2+v^Tv,0]^T
q∗q=qq∗=[sa2+vTv,0]T
5.逆
q
−
1
=
q
∗
/
∥
q
∥
2
q^{-1} = q^*/ \lVert q \rVert ^2
q−1=q∗/∥q∥2
(
q
a
q
b
)
−
1
=
q
b
−
1
q
a
−
1
(q_aq_b)^{-1}=q_b^{-1}q_a^{-1}
(qaqb)−1=qb−1qa−1
6.数乘
k q = [ k s , k v ] T kq=[ks,kv]^T kq=[ks,kv]T
四元数表示旋转
点A:
a
=
[
x
,
y
,
z
]
∈
R
3
a=[x,y,z] \isin \R^3
a=[x,y,z]∈R3
转换为p:
p
=
[
0
,
x
,
y
,
z
]
T
=
[
0
,
v
]
T
p=[0,x,y,z]^T=[0,v]^T
p=[0,x,y,z]T=[0,v]T
p
′
=
q
p
q
−
1
p'=qpq^{-1}
p′=qpq−1
p
′
p'
p′的虚部就是旋转后的
A
’
A’
A’,可以发现,这样计算出的结果,实部为0
四元数与其他表示之间的转换
q
+
=
[
s
−
v
T
v
s
I
+
v
^
]
,
q
⨁
=
[
s
−
v
T
v
s
I
−
v
^
]
q^{+} =\begin{bmatrix} s & -v^T \\ v & sI+ \widehat{v} \end{bmatrix}, q^{\bigoplus}=\begin{bmatrix} s & -v^T \\ v & sI- \widehat{v} \end{bmatrix}
q+=[sv−vTsI+v
],q⨁=[sv−vTsI−v
]
q
+
,
q
⨁
∈
R
4
×
4
q^{+},q^{\bigoplus} \isin \R^{4×4}
q+,q⨁∈R4×4
∴
q
1
q
2
=
q
1
+
q
2
=
q
2
⨁
q
1
\therefore q_1q_2=q_1^+q2=q_2^{\bigoplus}q_1
∴q1q2=q1+q2=q2⨁q1
p
′
=
q
p
q
−
1
=
q
+
p
+
q
−
1
=
q
+
q
−
1
⨁
p
p'=qpq^{-1}=q^+p^+q^{-1}=q^+q^{-1\bigoplus}p
p′=qpq−1=q+p+q−1=q+q−1⨁p
其他变换
变换名称 | 矩阵形式 | 自由度 | 不变性质 |
---|---|---|---|
欧式变换 | [ R t 0 T 1 ] \begin{bmatrix} R &t \\ 0^T &1 \end{bmatrix} [R0Tt1] | 6 | 长度、夹角、体积 |
相似变换 | [ s R t 0 T 1 ] \begin{bmatrix} sR &t \\ 0^T &1 \end{bmatrix} [sR0Tt1] | 7 | 体积比 |
仿射变换 | [ A t 0 T 1 ] \begin{bmatrix} A &t \\ 0^T &1 \end{bmatrix} [A0Tt1] | 12 | 平行性、体积比 |
射影变换 | [ A t a T v ] \begin{bmatrix} A &t \\ a^T & v \end{bmatrix} [AaTtv] | 15 | 接触平面的相交和相切 |