SLAM第三讲笔记(1)之矩阵


一、名词解释

  1. :空间基本元素,没有长度、体积。
  2. 向量:把两个点连接起来,就构成向量。
  3. 刚体:既有位置(三维空间),还有自身的姿态。
  4. 基底:张成这个空间的一组线性无关的向量,也就是坐标系。
  5. 三维坐标系:通常由3个正交的坐标轴组成(也有非正交,很少)根据坐标的定义不同,分为左手系和右手系。
  6. 反对称矩阵:英文Skew-symmetric Matrix,满足 A = − A T \textbf{A}=-\textbf{A}^T A=AT,反对称符号^,此符号是一一映射,意味着任意向量都对应着唯一的一个反对称矩阵。
  7. 惯性坐标系:也称世界坐标系,特点固定不动。
  8. 刚体运动:两个坐标系之间的运动由一个旋转加上一个平移组成。
  9. 欧式变换:英文EuclideanTransform,从一个坐标系到另一个坐标系之间,相差了一个欧式变换。欧式变换由旋转和平移组成的。
  10. 坐标变换:对于同一个向量p,在不同的坐标系下的向量是不同的,这个变换关系由变换矩阵 T 来描述。
  11. 内积:描述向量间的投影关系,结果为 ∣ a ∣ ∣ b ∣ c o s |\textbf{a}||\textbf{b}|cos abcos<a,b>
  12. 外积:外积的结果是个向量,它的方向是垂直于这两个向量,大小是 ∣ a ∣ ∣ b ∣ s i n |\textbf{a}||\textbf{b}|sin absin<a,b>
  13. 旋转矩阵:由两组基之间的内积组成,刻画了旋转前后同一个向量坐标的变换关系。是用来描述旋转本身。
  14. 齐次坐标:n维的向量用n+1维向量表示,是指一个用投影几何的坐标系统。齐次坐标可以表示无穷远处的点。

二、旋转矩阵

1.点、向量和坐标系

  1. 物体的位置是指在空间中的哪个地方,姿态则是指方向。用线性代数的知识来描述三维空间中的某个点的坐标,先找到该空间的基底( e 1 e_1 e1, e 2 e_2 e2 e 3 e_3 e3),那么任意向量a在这组基下就有一个坐标:
    a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 a = [e_1,e_2,e_3] { \left[ \begin{array}{ccc} a_1 \\ a_2 \\ a_3 \end{array} \right ] } = a_1e_1+a_2e_2+a_3e_3 a=[e1,e2,e3]a1a2a3=a1e1+a2e2+a3e3
    这里 ( a 1 , a 2 , a 3 ) T (a_1,a_2,a_3)^T (a1,a2,a3)T称为a在此基下的坐标。坐标的具体取值,一是和向量本身有关,二是和坐标系(基)的选取有关。
  2. 根据线性代数的基本知识,我们可以谈论向量与向量,以及向量与数之间的运算。例如:数乘、加法、减法、内积、外积等。向量加法就是把他们的各自的坐标相加,减法则是相减。内积是"·"乘,外积是"x"乘:
    a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ c o s < a , b > \textbf{a} · \textbf{b} = \textbf{a}^T \textbf{b} = ∑_{i=1}^3 a_i b_i = |a||b|cos<\textbf{a},\textbf{b}> ab=aTb=i=13aibi=abcos<a,b>
    其中<a,b>指向量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 = d e f a ∧ b \textbf{a} \times \textbf{b} = {\begin{gathered} \begin{Vmatrix} e_1&e_2 &e_3 \\ a_1 &a_2,&a_3 \\ b_1 &b_2 &b_3 \end{Vmatrix} \end{gathered}} = {\begin{gathered} \begin{bmatrix} a_2b_3-a_3b_2\\ a_3b_1-a_1b_3 \\ a_1b_2-a_2b_1 \end{bmatrix} \end{gathered}} = {\begin{gathered} \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1\\ -a_2 & a_1 & 0 \end{bmatrix} \end{gathered}}\textbf{b} =^{def} \textbf{a}^\land\textbf{b} a×b=e1a1b1e2a2,b2e3a3b3=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b=defab
    外积的结果是一个向量,它的方向垂直于这两个向量,大小为|a||b|sin<a,b>,是两个向量张成的四边形的有向面积。对于外积运算,我们引入^符号,把a写成一个矩阵。事实上是一个反对称矩阵。外积把 a × b \textbf{a}\times\textbf{b} a×b写成了矩阵与向量的乘法 a ∧ b \textbf{a}^\land \textbf{b} ab,把它变成了线性运算。a向量的反对称矩阵:
    a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \textbf{a}^\land = {\begin{gathered} \begin{bmatrix} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1\\ -a_2 & a_1 & 0 \end{bmatrix} \end{gathered}} a=0a3a2a30a1a2a10
    向量和加减法、内外积,即使在不谈论它们的坐标时也可以计算。例如:虽然内积在有坐标时,可以用两个向量的分量乘积之和表达,但是即使不知道它们的坐标,也可以通过长度和夹角来计算二者的内积,所以两个向量的内积结果和坐标系的选取是无关的。

2.坐标系间的欧式变换

在实际场景中,定义各种各样的坐标系。在机器人学中,我们会给每一个连杆和关节定义它们的坐标系。在运动中,设定一个惯性坐标系(世界坐标系)。刚体运动是两个坐标系之间的运动由一个旋转加上一个平移组成,两个坐标系之间相差了一个欧式变换。分别考虑旋转和平移。

2.1 旋转矩阵

设某个单位正交基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3)经过一次旋转转变成了 ( e 1 , , e 2 , , e 3 , ) (e_1^,,e_2^,,e_3^,) (e1,,e2,,e3,)。那么,对于同一个向量 a a a(该向量并没有随着两个坐标系的旋转而发生运动),它在两个坐标系下的坐标为 [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T [ a 1 , , a 2 , , a 3 , ] T [a_1^,,a_2^,,a_3^,]^T [a1,,a2,,a3,]T。因为向量本身没有变化。所以根据坐标定义有:
[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] [e_1,e_2,e_3] {\begin{gathered} \begin{bmatrix} a_1\\ a_2\\ a_3 \end{bmatrix} \end{gathered}} = [e_1',e_2',e_3'] {\begin{gathered} \begin{bmatrix} a_1'\\ a_2'\\ a_3' \end{bmatrix} \end{gathered}} [e1,e2,e3]a1a2a3=[e1,e2,e3]a1a2a3
为了描述两个坐标系的关系,我们对上述等式的左右两边同时左乘 [ e 1 T e 2 T e 3 T ] {\begin{gathered} \begin{bmatrix} e_1^T\\ e_2^T\\ e_3^T \end{bmatrix} \end{gathered}} e1Te2Te3T,那么左边就变成单位矩阵了。所以:
[ a 1 a 2 a 3 ] = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] = d e f Ra ′ {\begin{gathered} \begin{bmatrix} a_1\\ a_2\\ a_3 \end{bmatrix} \end{gathered}}= {\begin{gathered} \begin{bmatrix} e_1^T e_1' & e_1^T e_2' & e_1^T e_3' \\ e_2^T e_1' & e_2^T e_2' & e_2^T e_3' \\ e_3^T e_1' & e_3^T e_2' & e_3^T e_3' \end{bmatrix} \end{gathered}} {\begin{gathered} \begin{bmatrix} a_1'\\ a_2'\\ a_3' \end{bmatrix} \end{gathered}}=^{def}\textbf{Ra}' a1a2a3=e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3a1a2a3=defRa
我们把中间的矩阵拿出来,定义一个矩阵R。这个矩阵由两组基之间的内积组成,刻画了旋转本身。因此,称为旋转矩阵同时,该矩阵各个分量是两个坐标系基的内积,由于基向量的长度为1,所以实际上是各基向量夹角的余弦值。所以这个矩阵也叫方向余弦矩阵
旋转矩阵有些特别的性质,它是一个行列式为1的正交矩阵,行列式为1的正交矩阵也是一个旋转矩阵。所以,可以将n维的旋转矩阵的集合定义如下:
S O ( n ) = { R ∈ R n × n ∣ RR T = I , d e t ( R = 1 ) } SO(n)= \{ \textbf{R} \in R^{n \times n} | \textbf{RR}^T = I , det(\textbf{R}=1) \} SO(n)={RRn×nRRT=I,det(R=1)}
SO(n)是特殊正交群(Special Orthogonal Group),这个集合由n维空间的旋转矩阵组成。SO(3)就是指三维空间的旋转。通过旋转矩阵,我们可以直接谈论两个坐标系之间的旋转变换。由于旋转矩阵为正交矩阵,它的逆(转置)描述了一个相反的旋转,即:
a ′ = R − 1 a = R T a \textbf{a}'=\textbf{R}^{-1}\textbf{a}=\textbf{R}^T\textbf{a} a=R1a=RTa
R T R^T RT刻画了一个相反的旋转。

2.2 平移

在欧式变换中,除了旋转还有平移,考虑世界坐标系中的向量a,经过一次旋转(用旋转矩阵R)和一次平移t后,得到了 a ′ \textbf{a}' a那么旋转加平移:
a ′ = Ra + t \textbf{a}' = \textbf{Ra} + \textbf{t} a=Ra+t
其中,t 称为平移向量。

2.3 欧式变换

用一个旋转矩阵R和一个平移向量t完整地描述了一个欧式空间的坐标变换关系。实际中,我们会定义坐标系1和坐标系2,那么向量a在两个坐标系下的坐标为 a 1 \textbf{a}_1 a1 a 2 \textbf{a}_2 a2,它们之间的关系:
a 1 = R 12 a 2 + t 12 \textbf{a}_1 = \textbf{R}_{12}\textbf{a}_2 + \textbf{t}_{12} a1=R12a2+t12
其中, R 12 R_{12} R12是指“把坐标系2的向量变换到坐标系1”中。 t 12 t_{12} t12是坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标,即从1到2的向量。 t 21 t_{21} t21,是从2指向1的向量,在坐标系2下的坐标,却并不等于 − t 21 -t_{21} t21,而是和两个系的旋转还有关系。

3 变换矩阵与其次矩阵

a = Ra ′ + t \textbf{a}=\textbf{Ra}'+\textbf{t} a=Ra+t 完美的描述了欧式空间的旋转和平移。不过还有小个问题:这里的变换不是一个线性关系。假设进行两次变换: R 1 t 1 \textbf{R}_1\textbf{t}_1 R1t1 R 2 t 2 \textbf{R}_2\textbf{t}_2 R2t2
b = R 1 a + t 1 , c = R 2 b + t 2 \textbf{b} = \textbf{R}_1\textbf{a}+\textbf{t}_1 , \quad \textbf{c} =\textbf{R}_2\textbf{b}+\textbf{t}_2 b=R1a+t1,c=R2b+t2
那么从ac的变换:
c = R 2 ( R 1 a + t 1 ) + t 2 \textbf{c} = \textbf{R}_2 ( \textbf{R}_1\textbf{a} + \textbf{t}_1 ) + \textbf{t}_2 c=R2(R1a+t1)+t2
在三维向量的末尾添加1(单位向量),将其变成四维向量,称为齐次坐标。对于四维向量我们可以把旋转平移写在一个矩阵里:
[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] = d e f T [ a 1 ] {\begin{gathered} \begin{bmatrix} a'\\ 1 \end{bmatrix} \end{gathered}} = {\begin{gathered} \begin{bmatrix} \textbf{R} & \textbf{t}\\ 0^T&1 \end{bmatrix} \end{gathered}} {\begin{gathered} \begin{bmatrix} a\\ 1 \end{bmatrix} \end{gathered}} =^{def} \textbf{T} {\begin{gathered} \begin{bmatrix} a\\ 1 \end{bmatrix} \end{gathered}} [a1]=[R0Tt1][a1]=defT[a1]
整个关系变成了线性关系,该式中,矩阵T称为变换矩阵。它具有比较特别的结构:左上角为旋转矩阵,右侧为平移矩阵,左下角为0向量,右下角为。这种矩阵又称为特殊欧式群(Special Euclidean Group):
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 ) } SE(3)= \{ \textbf{T}= {\begin{gathered} \begin{bmatrix} \textbf{R} & \textbf{t}\\ \textbf{0}^T& 1 \end{bmatrix} \end{gathered}} \in R^{4 \times 4} | \textbf{R} \in SO(3) , \text{t} \in R^3) \} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3)}
与SO(3)一样,求解该矩阵的逆表示一个反向的变换:
T − 1 = [ R T − R T t 0 T 1 ] \textbf{T}^{-1} =\begin{bmatrix} \textbf{R}^T & -\textbf{R}^T\textbf{t}\\ \textbf{0}^T & 1 \end{bmatrix} T1=[RT0TRTt1]
我们同样用 T 12 \textbf{T}_{12} T12表示从2到1的变换。为了保持符号的简洁,在不引起歧义的情况下,不可以区分齐次坐标系和普通坐标系,当我们写Ta时,使用的时齐次坐标,而Ra时,使用的是非齐次坐标。
a ~ \tilde{a} a~表示a的齐次坐标,用齐次坐标和变换矩阵,两次变换的叠加就可以线性的表示:
b ~ = T 1 a ~ , c ~ = T 2 b ~ ⇒ c ~ = T 2 T 1 a ~ \tilde{b}=\textbf{T}_1\tilde{a} , \tilde{c}=\textbf{T}_2\tilde{b} \quad\Rightarrow \tilde{c}=\textbf{T}_2\textbf{T}_1\tilde{a} b~=T1a~,c~=T2b~c~=T2T1a~


三 、总结

  1. 向量及其坐标的表示,向量间的运算:数乘、加减法、内外积。
  2. 坐标系之间的运动由欧式变换描述,由旋转和平移组成:旋转矩阵SO(3)描述,平移直接由一个 R 3 R^3 R3向量描述。
  3. 变换矩阵SE(3):使用齐次坐标的数学技巧,把平移和旋转放在一个矩阵中。

在《视觉SLAM十四》中,章节安排如下: 1. 数学基础部分:介绍这本书的基本信息,包括自测题。概述SLAM系统的组成和各模块的工作。介绍三维空间运动、李群和李代数、针孔相机模型以及非线性优化。完成一个曲线拟合的实验。 2. SLAM技术部分:解特征点法的视觉里程计,包括特征点的提取与匹配、对极几何约束的计算、PnP和ICP等方法。学习直接法的视觉里程计,包括光流和直接法的原理,并使用g2o实现一个简单的RGB-D直接法。构建一个视觉里程计框架,解决优化和关键帧选择的问题。深入讨论后端优化,包括Bundle Adjustment和位姿图的优化。介绍回环检测和地图构建的方法。最后,介绍当前的开源SLAM项目和未来的发展方向。 另外,对于四元数的学习,可以先了解复平面的概念。复平面是一个用来描述复数的平面,其中实部和虚部分别对应平面的横坐标和纵坐标。了解复平面后,可以开始学习四元数的概念和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [视觉SLAM十四笔记](https://blog.csdn.net/dada19980122/article/details/111404967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【视觉SLAM十四笔记【逐行代码带你解析】【适合纯小白 ps:因为我就是】(持续更新中)](https://blog.csdn.net/R_ichun/article/details/131964588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai_Sj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值