视觉惯性单目SLAM (二) 算法基础知识

本文深入探讨了视觉惯性SLAM的基本原理及应用,详细介绍了VIORB-SLAM的工作流程,包括IMU数据处理、图像特征提取等内容。同时,文章系统阐述了李群和李代数的基础知识,讲解了它们在三维旋转和平移中的应用,并通过实例解析了指数映射、雅可比矩阵与海森矩阵等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 基本概念

  • 视觉惯性:Visual-Inertial (VI)
  • VI ORB-SLAM:视觉惯性ORB-SLAM
  • VI ORB-SLAM输入:
    • IMU数据(用B表示,加速度:aBωB;时间间隔:t
    • 单目图像
    • 在图像中提取KeyPoints时,对像素坐标进行畸变校正,即此KeyPoint坐标可与投影点坐标进行匹配
  • IMU数据(加速度和角速度)的测量除了被传感器噪声影响之外,还被缓慢变化的加速度(Accelerometer)偏差(ba)和陀螺仪(Gyroscope)偏差(bg
  • 加速度:受重力加速度(gw)影响,所在在计算运动时,需要减去重力加速度的作用。
  • SO(3):The group of rotations about the origin in 3 dimensions
  • SE(3):The group of rigid body motions (comprising rotations and translations) in 3 dimensions

2. 向量

  • 向量的运处可以由坐标运算来表达;下面的a、b都为列向量。

2.1 向量加减法

a±b=i=03(ai±bi)

2.2 向量内积/点乘(结果为实数)

ab=aTb=i=03aibi=|a||b|cos(a,b)

2.3 向量外积/叉乘(结果为向量)

a×b=ia1b1ja2b2ka3b3=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b

2.4 向量欧氏长度(向量2范数)

  • x:为列向量
  • ||x||:向量欧氏长度(向量2范数)
  • ||x||=(xTx)1/2

3. 特殊矩阵

3.1 旋转矩阵 (特殊正交群)

  • R是一个正交矩阵(RRT=I)
  • R的行列式为+1 (det(A)=+1
    SO(n)={RRn×n|RRT=I,det(A)=1}

3.2 对称矩阵 (Symmetric Matrix)

  • 对称矩阵:A=AT
  • 若A是对称矩阵,则有:
    A=UDUT

    • U:正交矩阵
    • D:对角矩阵
    • 实对称矩阵:有实特征值;且特征向量正交
  • Jacobismethod

3.3 反对称矩阵 (Skew-Symmetric Matrix)

  • 反对称矩阵:A=AT
  • 若S是反对称矩阵,则有:
    S=UBUT

    • B:块对角矩阵,其形式为:
      diag(a1Z,a2Z,...,amZ,0,...,0),whereZ=[0110]
    • S的特征向量都是纯虚数,奇数阶的反对称矩阵是奇异的(不可逆)
  • :若a=(a1,a2,a3)T是一个3维列向量, 其反对称矩阵为:
    [a]×=0a3a2a30a1a2a10

    • a:是3×1的列向量
    • [a]×:是3×3的反对称矩阵
    • 矩阵[a]×:是奇异矩阵(不可逆)
  • 向量叉乘与反对称矩阵的关系
    a×b=ab=ia1b1ja2b2ka3b3=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b=[a]×b=(aT[b]×)T

a×b=ab=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b=[a]×b=(aT[b]×)T

4. 3D坐标系

4.1 坐标系旋转

  • 灰色的为坐标系1 (V1=(322)T),黑色的为坐标系2 (V2=(3.540.7072)T$)
    这里写图片描述
  • 坐标系2的x轴和y轴相对于坐标系1有旋转,其旋转矩阵为:
    R=0.7070.70700.7070.7070001

V2=RV1=0.7070.70700.7070.7070001322=3.540.7072
  • 旋转矩阵R的直观理解:

    • R的列对应于单位向量

    • 此单位向量的的值为坐标系1的对应轴的单位向量在坐标系2中值
    • R的第一列:为坐标系1中点(100)T在坐标系2中的值
    • R的第二列:为坐标系1中点(010)T在坐标系2中的值
    • R的第三列:为坐标系1中点(001)T在坐标系2中的值
    • 只有满足以下要求的3×3矩阵(R)才能表示坐标轴旋转:

      • R的列向量的长度(2-范数)都为1
      • R的列向量相互正交(即内积为0)
      • R的行列式为1(detA=1

      4.2 坐标系平移

      • 灰色的为坐标系1 (V1=(322)T),黑色的为坐标系2 (V2=(112)T
        这里写图片描述
      • V2=V1+tt为坐标系1的原点在坐标系2中的位置(210)T

      4.3 坐标系旋转与平移的组合

      • 灰色的为坐标系1 (V1=(322)T),黑色的为坐标系2 (V2=(1.41402)T
        这里写图片描述
        R=0.7070.70700.7070.7070001,t=2.1210.7070V2=RV1+t

      4.4 齐次坐标系

      • 上面的旋转和平移需要用一个方程来表示:V2=RV1+t
      • :可把坐标系的旋转和平移用一个矩阵来表示
        T4×4=[R3×301×3t3×111×1]T14×4=[RT3×301×3RT3×3t3×111×1]0.7070.707000.7070.7070000102.1210.707013221=1.414021

      5. 李群与李代数(Lie Group and Lie Algebra)

      5.1 引入李群与李代数的原因

      • 三维世界刚体运动的描述:
      • 除了之外, 还需要对其进行
      • 旋转矩阵自身带有约束(1),作为优化变量时,会引入额外的约束,使优化变得困难
      • 李代数上可以变为

      5.2 特殊正交群与特殊欧氏群

      • 三维旋转矩阵构成了(SpecialOrthogonalgroup)
        SO(3)={RR3×3|RRT=I,det(R)=1}
      • 三维变换矩阵(旋转+平移)构成了(SpecialEuclideangroup)
        SE(3)={T=[R0Tt1]R4×4|RSO(3),tR3}
      • 群(Group):是一种集合(A)加上一种运算的代数结构,此运算满足以下性质(凤姐咬你):
        • 封闭性:a1,a2A,a1a2A
        • 结合律:a1,a2,a3A,(a1a2)a3=a1(a2a3)
        • 幺元:a0A,s.t.aA,a0a=aa0=a
        • 逆:aA,a1A,s.t.aa1=a0
        • 旋转矩阵集合+矩阵乘法:构成群(旋转矩阵群:SO(3)(3维特殊正交群))
        • 变换矩阵集合+矩阵乘法:构成群(变换矩阵群:SE(3)(3维特殊欧氏群))

        5.3 李群(Lie Group)(位于矩阵空间)

        • 李群(SO(3)):三维空间旋转矩阵的集合
        • 李群中的旋转矩阵有9个值,所以可以把SO(3)看作9维空间
          这里写图片描述

          • 上图是SO(3)表面(流形)(surface (manifold))的一部分
          • 绿点:表示单位矩阵
          • 蓝点:绕x轴旋转了10度
          • 红点:绕z轴旋转了10度
        • SO(3)中,如何表示单位矩阵附近的R矩阵?

          R=1bcb1fcf1
          • b,c,f:无穷小
          • 此矩阵有3个参数,因此在单位矩阵附近的矩阵看起来像一个三维空间
          • 此矩阵的来由:
            这里写图片描述
          • 把R表示为在单位矩阵附近的形式
            R=100010001f000001010+c001000100b010100000
          • α1=f,α2=c,α3=b,则有:
            R=I+α1G1+α2G2+α3G3(α1,α2,α3)G1=000001010G2=001000100G3=010100000
        • G1,G2,G3:叫做单位矩阵附近矩阵的导数分量,即生成矩阵(Generator Matrices)。

        • 李群的性质:

          • 具有连续(光滑)性质的群
          • 既是群,也是流形
          • 直观上看,一个刚体能够连续地在空间中运动,所以SO(3)SE(3)都是李群
          • ,即无法进行优化

        5.4 正切空间和导数:李代数(Lie Algebra)(位于向量空间)

        • identitymatrix
        • 向量空间+双线性运算 = 李代数 (Lie algebra)
        • 生成矩阵(Generator Matrices(G1G2G3)):是此向量空间的基
        • G1,G2,G3变为非无穷小,则它们创建了一个3维平面,此平面与SO(3)正切于单位向量,下图是一个二维表示:
          这里写图片描述
          • 红色R(t):表示流形表面上的路径
          • 橙色dR/dt:表示当它经过单位向量时,此路径对变量t的导数
          • 正切空间:可看作SO(3)在单位向量处可能的导数集合
        • 重点:若旋转矩阵R是变量t(如:弧度)的函数,则当t取一定的值时R(t)=I(如绿点处),在此点dR/dt必然位于正切空间上,且是生成矩阵(G1G2G3)的线性组合:
          dRdtR=I=i3αiGi
        • 举例说明:若变量t是绕x轴旋转的弧度值,则有:

          R=1000cos(t)sin(t)0sin(t)cos(t)
          • Rt的导数为:
            dRdt=0000sin(t)cos(t)0cos(t)sin(t)
          • 当t=0时,R=I,则导数为:
            dRdt|t=0=000001010=G1
          • G1:对应绕 x 轴的旋转
          • G2:对应绕 y 轴的旋转
          • G3:对应绕 z 轴的旋转
        • 李代数:与李群对应的一种结构,位于向量空间。

          • 记作:so(3)se(3)
          • 李代数是李群单位矩阵处的正切空间
        • 李代数的定义:
          • +线+
          • 组成:向量集合V + 数域F + 二元运算符[ , ] (叫做李括号,表示两个元素的差异)
        • 李代数的通用性质:
          • 封闭性:X,YV,[X,Y]V
          • 双线性:X,YZV,a,bF[aX+bY,Z]=a[X,Z]+b[Y,Z][Z,aX+bY]=a[Z,X]+b[Z,Y]
          • 自反性:XinV,[X,X]=0
          • 雅可比恒等式:X,Y,ZinV,[X,[Y,Z]]+[Y,[Z,X]]+[Z,[X,Y]]=0
          • 李括号具有反对称性(anit-symmetric):X,YinV,[X,Y]=[Y,X]
        • so(3)的性质(旋转向量):
          • so(3)={rR3,S=[r]×R3×3}S=[r]×=0r3r2r30r1r2r10
        • se(3)的性质(刚体变换:旋转+平移向量)
          • se(3)={e=[tr]R6,tR3,rso(3),[e]×=[[r]×0Tt0]R4×4}
          • se(3)组成:3个平移分量+3个旋转分量
          • 其旋转分量与so(3)相同
          • 平移是普通的向量,但不是SE(3)上的平移分量
          • [e]×不是反对称矩阵,只是保留了相同的记法
        • 把李代数理解为向量形式或矩阵形式都可以,但向量形式更加自然些

        5.5 指数映射

        • A是生成矩阵(导数分量)的线性组合(很明显,A反对称矩阵):
          A=i=03αiGi
        • ex的泰勒展开式:
          ex=1+x+12x2+16x3++1n!xn
        • eA泰勒展开式:
          M=eA=I+A+12A2+16A3++1n!An

          • M以这种方式计算,它必定是SO(3)的成员,即M为一个旋转矩阵
          • 任何SO(3)中的成员,都能以这种方式进行计算
        • 为什么M=eA必定是SO(3) 的成员
          eA=limn(I+1nA)n

          • 当n无穷大时,1nA变为无穷小,因此I+1nA 成为SO(3)的成员(
          • 因为:R=I+α1G1+α2G2+α3G3(α1,α2,α3)
          • 次数越高,eA越接近R,如下图所示:
            这里写图片描述
          • 举例说明:
            这里写图片描述
        • 结论:
          • 指数映射:建立了在单位矩阵处的导数(如速度)与群SO(3)SE(3)成员间的关系,它可以不同的方程进行表示:
            A=iαiGi()dRdt=ARR(0)=IR(t)=etAR(1)=eA
        • dRdt=AR的由来:
          • 任意旋转矩阵满足:
            RRT=I
          • 考虑R随着时间变化:
            R(t)R(t)T=I
          • 两侧对时间求导:
            dRdtR(t)T+R(t)(dRdt)T=0
          • 整理得:
            dRdtR(t)T=((dRdt)R(t)T)T
          • 可以看出这是一个反对称矩阵,记:
            dRdtR(t)T=A
          • 两侧右乘R(t),得:
            dRdt=AR
          • 可以看到,对R(t)求导后,左侧多出一个反对称矩阵A
            A=0a3a2a30a1a2a10

        5.6 SO(3)的生成与叉乘(Corss Product

        • v1×v2=abc×def=[a]×b=0cbc0aba0def=bfcecdafaebd

        • [a]×=0cbc0aba0=aG1+bG2+cG3

        • 这意味着SO(3)中旋转矩阵可表示为:R=e[V]×
        • 其参数为向量V中的元素,这3个参数在向量V与旋转矩阵R间建立了一个漂亮的关系
        • 基于此,旋转矩阵的直观理解:
          • 旋转轴:此旋转以向量V为旋转轴
          • 旋转角度:为向量V的长度
          • 旋转方向:沿着向量方向看,顺时针方向;沿着向量相反的方向看,逆时针方向;当V=0时,无旋转轴, 且旋转角度为0,即没有旋转
          • VR的关系的直观解释
            • [V]×:是在单位矩阵处的导数(即:dRdt|R=I=A=3iαiGi=[V]×),且在单位时间后产生了旋转R
            • [V]×:可被解释为产生一个速度向量域(velocity vector field),在空间的每一个点有一个速度向量(velocity vector)
            • 点P处的向量域(vector field):被定义为:[V]×P
            • 在旋转轴V上的点没有速度,因为V×V=0
            • 在旋转轴V外的点有速度,它与向量V的长度与[V]×P的长度成正比
            • 速度域如下图所示(由[V]×建立的速度域形成一个围绕V的圆形旋转)
              这里写图片描述

          5.7 SE(3)的生成

          • SE(3)表示欧拉变换(刚体变换),在三给空间中形成了6维流形
          • 它有3个平移生成矩阵和3个旋转生成矩阵
            这里写图片描述
          • G1,G2,G3:分别为沿x,y,z方向的平移生成矩阵
          • G4,G5,G6:分别为绕x,y,z轴旋转的旋转生成矩阵
          • 沿x方向的平移+绕z轴的旋转=沿y方向移动旋转中心
            这里写图片描述

          5.8 李括号(Lie bracket)

          • 李代数:在群的单位矩阵处的正切空间中的向量
          • 李括号:李括号=李代数+双线性反对称运算
          • 指数映射:把正切空间->(映射到)群中的元素,这样可以抓住群的局部结构
          • AB为正切空间中的矩阵(如为生成矩阵的线性组合),则有:
            eAeBeBeAABBA
          • ABBA的差异叫做Commutator(换位子),即李括号, 表示为[A, B]:
            [A,B]=ABBA
          • 李括号是反对称的:
            [A,B]=[B,A]
          • 生成矩阵间的关系:
            [G2,G1]=[G1,G2]=G3[G3,G1]=G2[G2,G3]=G1

          5.9 李代数求导与扰动模型

          • 在SLAM实际应用中,需要对位姿进行估计
          • 李群上只有乘法,没有加法,从而无从定义导数
          • 能否利用李代数上的加法,定义李群元素的导数?基本问题是:当在李代数中做加法时,是否等价于在李群上做乘法:
            eA1eA2=eA1+A2
            :此等式当A1A2为矩阵时,成立吗?
          • 根据BCH线性近似,可得:

          1)左乘雅可比:

          Jl=J=sinθθI+(1sinθθ)aaT+1cosθθ[a]×

          J1l=θ2cosθ2I+(1θ2cosθ2)aaTθ2[a]×

          2)右乘雅可比:

          Jr(v)=Jl(v)

          3)在李群上左乘小量时,李代数上的加法相差左雅可比的逆:
          e[v]×e[v]×=e[v+J1l(v)v]×

          4)李代数上进行小量加法时, 相当于李群上左乘一个带左雅可比的量,或右乘一个带右雅可比的量
          e[v+v]×=e[Jlv]×e[v]×=e[v]×e[Jrv]×

          - 通过BCH线性近似,可以定义李代数上的导数
          -
          (Rp)R

          - 由于R没有加法,导数无法定义
          - 存在两种解决办法
          - R对应的李代数上加上小量,求相对于小量的变化率(导数模型
          - R
          - 导数模型
          - 按照定义可得:
          (Rp)R=(e[v]×p)v=limv0e[v+v]×pe[v]×pv=[Rp]×Jl

          - 结果中含有左乘雅可比,比较复杂
          - 扰动模型
          - 左乘小量,令其李代数为0
          (Rp)v=limv0e[v]×e[v]×pe[v]×pvlimv0(1+[v]×)e[v]×pe[v]×pv=limv0[v]×Rpv=limv0[Rp]×vv=[Rp]×

          - 最终结果更为简洁,所以更实用

          5.10 总结

            • 由于AT=A,所以它主对角线元素必为0,而非对角线元素则只有三个自由度。
            • 可以把反对称矩阵对应到一个三维向量
            • 用途:它与叉积兼容,可以直接把矩阵与任意向量的乘积Ab写成 a×b,即Ab=a×b
          • SO(3)3

            • SO(3):三维旋转群,其元素为旋转矩阵
            • 每对旋转矩阵求一次导数,只需左乘一个即可
            • 由于反映了R的导数性质,故称它在SO(3)的正切空间(tangent space)上
          • so(3)33

            • so(3):是一个由三维向量(即)组成的集合,每个向量对应到一个反对称矩阵,可以表达旋转矩阵的导数
            • 反映了R的导数性质
            • 旋转轴:旋转向量的方向为旋转轴
            • 旋转弧度:旋转向量的长度为旋转的弧度
            • 描述了李群SO(3)中元素的局部性质
            • [a,b]=ABBA (A、B分别为向量a、b 对应的反对称矩阵)
            • [A,B]=[B,A]
            • aaT=AA+||a||2I3×3
          • (so(3)SO(3))()

            • R(t)=etA=e[V]×A[V]×
              1)r()θ=||r|| 
              2)rr=1θr

              3)e[V]×=eθ[r]×=I+θ[r]×+12!θ2[r]2×++1n!θn[r]n×=rrT+(θ13!θ3+15!θ5+)[r]×(112!θ2+14!θ4)[r]2×=[r]2×+I+sin(θ)[r]×cos(θ)[r]2×=(1cos(θ))[r]2×+I+sin(θ)[r]×=cos(θ)I+(1cos(θ))rrT+sin(θ)[r]×
            • 4) 又根据罗德里格斯(Rodrigues)公式R=cos(θ)I+(1cos(θ))rrT+sin(θ)[r]×

            • (5)所以结论为:

              R=eθ[r]×=e[V]×
            • 每个SO(3)中的元素,都可以找到so(3)一个或多个元素与之对应

          • so(3)SO(3)

            • 三维旋转表示: 除了采用旋转矩阵描述外,还可以用旋转向量来描述
            • 旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)
            • :可以通过Rodrigues变换进行转换
              1)r()θ=||r||2)rr=1θr3)RR=cos(θ)I+(1cos(θ))rrT+sin(θ)[r]×4)OpenCVintcvRodrigues2(constCvMatsrc,CvMatdst,CvMatjacobian=0);

            • 1)弧度:

              θ=arccos(tr(R)12)

              2)旋转轴:
              Rn=n

              3)旋转向量:
              v=θn
            • 旋转向量可以视为旋转矩阵导数,指导如何在旋转矩阵中进行微积分运算

            • 旋转矩阵:9个自由度,有正交性和行列式值为+1的约束
            • 旋转向量:3个自由度,没有约束
            • 旋转向量与旋转矩阵:只是表达方式的不同,但表达的东西可以是同一个
          • +
            这里写图片描述

          6. 雅可比矩阵与海森矩阵

          6.1 雅可比矩阵(Jacobian Matrix)

          • Reduced Jacobian matrix :降阶雅可比矩阵

          • :即一阶导数矩阵()

          • :它体现了一个可微方程在给定点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数。

          • :用于向量微积分

          • :是函数的一阶偏导数以一定方式排列成的矩阵

          • :多个函数(m个)+多个变量(n个) (RnRm)

          • :假设某函数从Rn 映射到 Rm, 其雅可比矩阵是从 RnRm 的线性映射,其重要意义在于它表现了一个多变量最佳线性逼近。因此,雅可比矩阵

          • 举例:假设F:RnRm 是一个从n维欧氏空间映射到到m维欧氏空间的函数。这个函数由m个实函数组成: y1(x1,...,xn),...,ym(x1,...,xn)。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵(m×n),这就是所谓的雅可比矩阵:

            y1x1ymx1y1xnymxn

          • JF(x1,,xn),(y1,,ym(x1,,xn

            1F
            2(x1,,xn)
            3JF(x1,,xn):是一个线性映射(矩阵的本质就是线性变换),表示向量函数F在P点(x1,,xn)处的Jacobian矩阵(一阶导数矩阵)
            • 如果pRn 中的一点,Fp点可微分,根据高等微积分, JF(p) 是在这点(p)的导数。
            • 在此情况下,JF(p)这个线性映射即F 在点p附近的最优线性逼近,也就是说当 x 足够靠近点p时,我们有:
            • F(x)F(p)+JF(p)(xp)

          6.2 海森矩阵(Hessian Matrix)

          • 海森矩阵用途:被应用于牛顿法解决的大规模优化问题
          • 海森矩阵变量与函数一个函数+多个变量 (RnR)
          • 海森矩阵定义:(Hessian matrix 或 Hessian)是一个多变量实值函数的二阶偏导数组成的方块矩阵,假设有一实数函数f(x1,x2,...,xn),如果f 所有的二阶偏导数都存在,则海林矩阵H为:
            这里写图片描述
          • x=(x1,x2,...,xn)
          • 当函数 f二阶连续可导时,Hessian矩阵H在临界点x0上是一个 n×n阶的对称矩阵。
            • 当H是正定矩阵时,临界点x0是一个局部的极小值。
            • 当H是负定矩阵时,临界点x0 是一个局部的极大值。
            • H=0,需要更高阶的导数来帮助判断。
            • 在其余情况下,临界点x0不是局部极值。

          6.3 雅可比矩阵与海森矩阵的比较

          矩阵属性雅可比矩阵 (Jacobian Matrix)海森矩阵 (Hessian Matrix)
          用途1)关节型机器人:关节空间微小运动dθ与手部作业空间微小位移dY的关系
          2)非线性最小二乘
          yy
          方程函数向量F由m个实值函数组成:
          y1=f1(x1,,xn)y2=f2(x1,,xn)ym=fm(x1,,xn)
          也可记为:Y=F(X)
          Y=(y1,,ym)T
          F=(f2,,fm)T
          X=(x1,,xn)T
          只有一个实值函数组成:
          y=f(x1,,xn)
          X=(x1,,xn)
          实值函数个数m (即m个n元素函数 )1 (即1个n元函数)
          微分方程组
          dy1dym=f1x1fmx1f1xnfmxndx1dxn

          dY=JF(X)dX线,
          定义
          JF(X)=f1x1fmx1f1xnfmxn
          2fx1x12fx2x12fxnx12fx1x22fx2x22fxnx22fx1xn2fx2xn2fxnxn
          导数阶数一阶偏导数二阶偏导数
          矩阵类型m×n (一般不为方阵)n×n (方阵)
          映射
          RnRmJYX线
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值