• slam 14讲笔记


    中秋抽时间混囵吞枣看了slam 14讲的前一半,稍微记录下.

    slam的框架

    在这里插入图片描述

    • 视觉里程计, 估计相邻两帧图像之间的位姿(特帧匹配)以及局部地图(又称为前端)
    • 后端优化, 主要利用前端返回的一些稀疏点,相机初步位姿, 传感器等信息, 回环检测,使用非线性优化来估计全局的位姿和地图.

    数学知识

    • 向量的内积
      a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⁡ ⟨ a , b ⟩ \boldsymbol{a} \cdot \boldsymbol{b}=\boldsymbol{a}^{\mathrm{T}} \boldsymbol{b}=\sum_{i=1}^3 a_i b_i=|\boldsymbol{a}||\boldsymbol{b}| \cos \langle\boldsymbol{a}, \boldsymbol{b}\rangle ab=aTb=i=13aibi=a∣∣bcosa,b
    • 向量的外积
      a × b = [ i j k 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 \boldsymbol{a} \times \boldsymbol{b}=\left[
      ijka1a2a3b1b2b3" role="presentation">ijka1a2a3b1b2b3
      \right]=\left[
      a2b3a3b2a3b1a1b3a1b2a2b1" role="presentation" style="position: relative;">a2b3a3b2a3b1a1b3a1b2a2b1
      \right]=\left[
      0a3a2a30a1a2a10" role="presentation" style="position: relative;">0a3a2a30a1a2a10
      \right] \boldsymbol{b} \triangleq \boldsymbol{a}^{\wedge} \boldsymbol{b}
      a×b= ia1b1ja2b2ka3b3 = a2b3a3b2a3b1a1b3a1b2a2b1 = 0a3a2a30a1a2a10 bab

      这里^符号是反对称矩阵的意思, 即,
      a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \boldsymbol{a}^{\wedge}=\left[
      0a3a2a30a1a2a10" role="presentation" style="position: relative;">0a3a2a30a1a2a10
      \right]
      a= 0a3a2a30a1a2a10

      这样可以将叉乘运算转换成矩阵和向量的乘法运算。注意:当一个矩阵 A = − A t A=-A^t A=At时, 我们称A为反对称矩阵。类似的,符号∨则是将一个反对称矩阵转换位向量。
      在这里插入图片描述

    坐标系转换

    假设一个单位正交基 ( e 1 , e 2 , e 3 ) \left(e_1, e_2, e_3\right) (e1,e2,e3)经过旋转变成了 ( e 1 ′ , e 2 ′ , e 3 ′ ) \left(e_1^{\prime}, e_2^{\prime}, e_3^{\prime}\right) (e1,e2,e3), 那么对于一个向量a有如下关系。
    [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] \left[\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3\right]\left[

    a1a2a3" role="presentation" style="position: relative;">a1a2a3
    \right]=\left[\boldsymbol{e}_1^{\prime}, \boldsymbol{e}_2^{\prime}, \boldsymbol{e}_3^{\prime}\right]\left[
    a1a2a3" role="presentation">a1a2a3
    \right] [e1,e2,e3] a1a2a3 =[e1,e2,e3] a1a2a3
    两边同时左乘 [ e 1 T e 2 T e 3 T ] \left[
    e1Te2Te3T" role="presentation" style="position: relative;">e1Te2Te3T
    \right]
    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 ′ ] ≜ R a ′ \left[
    a1a2a3" role="presentation" style="position: relative;">a1a2a3
    \right]=\left[
    e1Te1e1Te2e1Te3e2Te1e2Te2e2Te3e3Te1e3Te2e3Te3" role="presentation" style="position: relative;">e1Te1e1Te2e1Te3e2Te1e2Te2e2Te3e3Te1e3Te2e3Te3
    \right]\left[
    a1a2a3" role="presentation" style="position: relative;">a1a2a3
    \right] \triangleq \boldsymbol{R} \boldsymbol{a}^{\prime}
    a1a2a3 = e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3 a1a2a3 Ra

    这里就能得到坐标系的旋转矩阵R。

    • 旋转矩阵
      旋转矩阵是一个行列式位1的正交矩阵, 用公式来描述就是:
      SO ⁡ ( n ) = { R ∈ R n × n ∣ R R T = I , det ⁡ ( R ) = 1 } \operatorname{SO}(n)=\left\{\boldsymbol{R} \in \mathbb{R}^{n \times n} \mid \boldsymbol{R} \boldsymbol{R}^{\mathrm{T}}=\boldsymbol{I}, \operatorname{det}(\boldsymbol{R})=1\right\} SO(n)={RRn×nRRT=I,det(R)=1}
      这里的SO(n)是特殊正交群(Special Orthogonal Group)的缩写, 对于二维平面上的旋转位SO(2), 三维空间中的旋转这是SO(3).

    • 变换矩阵T
      类似的, 对于同时包含旋转和平移的矩阵我们成为变换矩阵, 三维空间的变换矩阵又称为特殊欧式群(SE(3)).
      S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } \mathrm{SE}(3)=\left\{\boldsymbol{T}=\left[

      Rt0T1" role="presentation" style="position: relative;">Rt0T1
      \right] \in \mathbb{R}^{4 \times 4} \mid \boldsymbol{R} \in \mathrm{SO}(3), \boldsymbol{t} \in \mathbb{R}^3\right\} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3}

    李群和李代数


    • 群(Group)是一种集合加上一种运算的代数结构, 它要满足“封结幺逆”这四个条件。旋转矩阵乘以一个旋转矩阵还是一个旋转矩阵, 变换矩阵乘以一个变换矩阵仍然是个变换矩阵,所以他们才能叫做特殊正交群和特殊欧式群。
    • 李群
      李群是指具有连续(光滑)性质的群。像整数群Z那样离散的群没 有连续性质,所以不是李群。而SO(n)和SE(n)在实数空间上是连续的。 我们能够直观地想象一个刚体能够连续地在空间中运动,所以它们都是李群
    • 李代数
      旋转矩阵对时间求导

      就是说, 如果想对R进行求导, 只要左乘一个 ϕ ( t ) \phi(t) ϕ(t)矩阵即可,可以看出 ϕ ( t ) \phi(t) ϕ(t)反应了R的导数性质。R(t)在t0处泰勒展开, 那么有:
      在这里插入图片描述
      在这里插入图片描述
      解上面的微分方程可以得到:
      在这里插入图片描述
      也就是说, 任意时刻一个矩阵R(SO(3))都有一个李代数(so(3)) ϕ ( t ) \phi(t) ϕ(t)与之对应, 只要将李代数下的一个向量经过指数转换即可得到一个对应的旋转矩阵。
      每个李群都有一个李代数与之对应。
      SO(3) ----> so(3)
      SE(3) ----> se(3)

    在这里插入图片描述
    使用包含旋转矩阵的优化问题时, 直接求解旋转矩阵则是一个带约束的优化问题(满足求出来的矩阵时正交的,而且行列式位1)这是很难的, 但是用李代数表示时,则是一个无约束的优化问题, 更加的简单, 这也就是为啥slam要学习李代数。

    非线性优化

    在这里插入图片描述
    如果使用一阶梯度近似(最速下降法)

    二阶近似(牛顿法)有:
    在这里插入图片描述求右侧等式的导数为0处有:
    在这里插入图片描述

    • 高斯牛顿法
      在这里插入图片描述
    • 列文伯格—马夸尔特方法
      使用了信赖区域
      在这里插入图片描述

    矩阵求逆

    • QR分解
    • Cholesky分解
  • 相关阅读:
    RabbitMQ
    在软件测试行业这种情况下,凭什么他能拿25k?我却约面试都难?
    简易实现通讯录3.0 (实现文件操作)
    一个文件的开源项目,开启你的开源之旅
    Python的打包神器—Nuitka!
    从SPL看开放计算能力的意义
    Linux安装DataHub (开源元数据管理工具)
    【Python】{已解决}在命令行窗口查看的版本号与安装版本不一致问题
    互联网摸鱼日报(2023-11-20)
    1031 Hello World for U
  • 原文地址:https://blog.csdn.net/lyyiangang/article/details/126819314