• 视觉slam十四讲CH4 ---李群与李代数求导


    视觉slam十四讲 ---CH4 李群与李代数求导

    李群与李代数相较于CH3是比较的抽象的数学知识,这个工具的提出目的是解决一些旋转位姿描述的优化问题。本讲最终的目的是解决如何描述对旋转求导的问题。

    1. 什么是群

    群是一种集合加上一种运算的代数结构

    记集合为A,运算为" role="presentation">,则若此结构满足以下几条性质,构成一个群。
    image

    第三讲中的旋转矩阵R以及变换矩阵T加上乘法运算就构成一种群。

    特殊正交群

    SO(3)={RRn×n|RRT=I,det(R)=1}" role="presentation">SO(3)={RRn×n|RRT=I,det(R)=1}

    特殊欧式群

    SE(3)={T=[Rt0T1]R4×4|RSO(3),tR3}" role="presentation">SE(3)={T=[Rt0T1]R4×4|RSO(3),tR3}

    对于SO(3)以及SE(3),它们对于乘法是封闭的,也就是说对于多个旋转矩阵或者变换矩阵相乘,结果仍为旋转矩阵或者变换矩阵。这一点在上一章描述多次旋转时可以看作是多个旋转矩阵相乘是相同的。

    本章的章节名是李群与李代数。那么什么是李群呢?

    李群是具有连续(光滑)性质的群。类似于二维函数的连续。数学上已经证明SO(3)以及SE(3)都是李群。

    在涉及一些优化问题时,我们需要对于旋转这一位姿变换进行求导操作来找出一些类似于"旋转的变化率"的概念帮助我们去优化。(如梯度下降)。但是对于SO(3)以及SE(3),仅满足乘法的封闭性,并不满足加法的封闭性,也就是并不处于线性空间中。如下导数的定义,显然想要求导且导数有意义的话,该代数结构应该在线性空间中才可以实现。

    image

    2. 李代数

    对于R或者T来说,并不能直接对其求导,那么能否找到一种映射关系将其映射到线性空间中呢?

    给出如下推导,假设旋转是随时间变化的函数。

    R(t)SO(3),R(t)R(t)T=I()R(t)˙R(t)T+R(t)R(t)T˙=0R(t)˙R(t)T=R(t)R(t)T˙(ab)T=bTaTR(t)˙R(t)T=(R(t)R(t)T˙)Ta=aTR(t)˙R(t)TR(t)˙R(t)T=ϕ(t)" role="presentation">R(t)SO(3),R(t)R(t)T=I()R(t)˙R(t)T+R(t)R(t)T˙=0R(t)˙R(t)T=R(t)R(t)T˙(ab)T=bTaTR(t)˙R(t)T=(R(t)R(t)T˙)Ta=aTR(t)˙R(t)TR(t)˙R(t)T=ϕ(t)

    需要注意的是,这里的ϕ(t)" role="presentation">ϕ(t)中的^代表着一个三维向量ϕ" role="presentation">ϕ扩充为一个反对称阵。比如

    a=(1,2,3)Ta=[012103230]" role="presentation">a=(1,2,3)Ta=[012103230]

    因此ϕ(t)" role="presentation">ϕ(t)代表我们假设R由ϕ" role="presentation">ϕ扩充而来。
    接着推理有

    RR(t)˙=ϕ(t)R(t)t=0R=It=0ϕ(t)ϕ0ln(R(t))=ϕ0R(t)=exp(ϕ0)" role="presentation">RR(t)˙=ϕ(t)R(t)t=0R=It=0ϕ(t)ϕ0ln(R(t))=ϕ0R(t)=exp(ϕ0)

    可以看出,经过一通推导,我们发现旋转矩阵与一个东西有着对数形式上的映射。这里的ϕ0" role="presentation">ϕ0就是SO(3)对应的李代数
    与李群一样,李代数的构成也要满足一定的性质。如下
    image

    可以知道对于ϕ0" role="presentation">ϕ0来说,满足如上的定义
    image

    其李括号的定义的运算类型为

    image

    对于SE(3)上的李群,直接给出其李代数对应形式
    image

    其李括号的定义为

    image

    这里的" role="presentation">操作与so(3)的定义不同,不再表示由三维向量扩充反对称阵,而是表示将ξ" role="presentation">ξ这个六维向量扩充为一个四维矩阵。不难看出ξ" role="presentation">ξ的前三维由平移向量得出,后三维就是se(3)。

    数学上已经证明,李代数处于线性空间中,可以进行求导操作

    3. 对数映射与指数映射

    上面我们给出了李代数与李群的映射关系,即

    ln(R(t))=ϕ0lnR(t)=ϕ0 R(t)=exp(ϕ0)" role="presentation">ln(R(t))=ϕ0lnR(t)=ϕ0 R(t)=exp(ϕ0)

    但是这只是抽象的公式,并没有告诉我们如何将其中的一些具体元素对应转换。但是通过这个我们可以知道对于已知李群求李代数是一种对数映射,已知李代数求李群是一种指数映射。

    exp(ϕ)ex=n=0xnn!=1+x+x22!+x33!+x44!+ϕ=θa,a" role="presentation">exp(ϕ)ex=n=0xnn!=1+x+x22!+x33!+x44!+ϕ=θa,a

    具体形式与化简如下图
    image

    化简应用的性质如下

    image

    最终我们得出这样的一个式子
    image

    不难看出,这个公式与上一讲旋转矩阵转角轴(旋转向量)的罗德里格斯公式如出一辙。这也揭示了so(3)的物理意义就是旋转向量。

    因此由so(3)的李代数指数映射求其对应的李群SO(3)的过程本质上就是旋转向量向旋转矩阵的转换。

    对于已知旋转矩阵求其so(3)上的李代数的过程,我们有对数映射形式lnR(t)=ϕ" role="presentation">lnR(t)=ϕ,尽然可以使用与求指数映射形式类似的泰勒展开来推导,这样比较麻烦。

    但是我们已经知道了so(3)上的李代数实际上就是角轴,因此使用第三章中旋转向量转角轴的公式即可。

    角度θ=arcos(tr(R)12)轴向量Rn=nR1" role="presentation">角度θ=arcos(tr(R)12)轴向量Rn=nR1

    关于方向向量的求解,因为使用角轴描述旋转时,旋转前后的单位方向向量是不变的(因为是绕着这个轴转的嘛)。因此对轴乘以旋转矩阵进行旋转操作后的结果仍是其本身,依据这个列出的特征方程。

    至于SE(3)与se(3)之间的转换,由下图总结给出

    最后总结以下李群与李代数的映射关系以及变换
    image

    4. 李群与李代数的近似

    既然李代数处于线性空间,而且李群与李代数可以通过指数映射以及对数映射进行转换,那么我们是否可以直接使用李代数表述李群的求导操作呢?

    一个朴素的思想

    R1R2=exp(ϕ1)exp(ϕ2)exp(x1)exp(x2)=exp(x1+x2)R1R2=exp(ϕ1)exp(ϕ2)=exp(ϕ1+ϕ2)=exp((ϕ1+ϕ2))" role="presentation">R1R2=exp(ϕ1)exp(ϕ2)exp(x1)exp(x2)=exp(x1+x2)R1R2=exp(ϕ1)exp(ϕ2)=exp(ϕ1+ϕ2)=exp((ϕ1+ϕ2))

    但是根据BCH近似公式
    image

    可以知道对于两个矩阵,exp(A)exp(B)exp(A+B)exp(A+B+)" role="presentation">exp(A)exp(B)exp(A+B)exp(A+B+)

    不过根据如下公式可以将上式进行线性近似
    image

    其中Jl" role="presentation">Jl为左乘雅可比矩阵,Jr" role="presentation">Jr为右乘雅可比矩阵。具体表示方法如下

    image

    image

    也就是说当两个量中有一个为小量时可以使用BCH近似来实现李群乘法转化为李代数加法。但是还是不够直观,给出如下推导。注意雅可比矩阵视为常系数。

    exp((Jl(ϕ2)ϕ1))exp(ϕ2)=exp(Jl(ϕ2)(ϕ1))exp(ϕ2)BCHJl(ϕ2)(ϕ1)exp(Jl(ϕ2)(ϕ1))exp(ϕ2)=exp(Jl1(ϕ2)Jl(ϕ2)ϕ1+ϕ2)=exp(ϕ1+ϕ2)=exp((ϕ1+ϕ2))" role="presentation">exp((Jl(ϕ2)ϕ1))exp(ϕ2)=exp(Jl(ϕ2)(ϕ1))exp(ϕ2)BCHJl(ϕ2)(ϕ1)exp(Jl(ϕ2)(ϕ1))exp(ϕ2)=exp(Jl1(ϕ2)Jl(ϕ2)ϕ1+ϕ2)=exp(ϕ1+ϕ2)=exp((ϕ1+ϕ2))

    即最后得出了这样一个等式,且将Jl(ϕ2)" role="presentation">Jl(ϕ2)简写为Jl" role="presentation">Jl

    exp((ϕ1+ϕ2))=exp(Jlϕ1)exp(ϕ2)" role="presentation">exp((ϕ1+ϕ2))=exp(Jlϕ1)exp(ϕ2)

    依据这个等式,我们就可以将李代数的加法与李群的乘法近似且简洁的联系在一起了。下面贴出SE(3)与se(3)的关系,推导类似。
    image

    5. 李代数求导

    以上我们就已经具备了实现李代数求导的准备。

    求导的方法有两种

    • 李代数求导
    • 扰动模型求导
      对于旋转矩阵求导的应用场景如下

    p,RRpR" role="presentation">p,RRpR

    李代数求导

    李代数求导就是将上式中的旋转矩阵李群直接用对应的李代数来进行替换,然后在李代数中套用导数定义来实现
    image

    • 第二步使用了上面推导的exp((ϕ1+ϕ2))=exp(Jlϕ1)exp(ϕ2)" role="presentation">exp((ϕ1+ϕ2))=exp(Jlϕ1)exp(ϕ2)
    • 第三步近似,因为Jlδϕ" role="presentation">Jlδϕ是一个小量,因此由泰勒展开或者说等价无穷小,ex=1+x" role="presentation">ex=1+xJlδϕ=(I+(Jl)δϕ)" role="presentation">Jlδϕ=(I+(Jl)δϕ)
    • 第四步展开括号或者提公因式可以得出
    • 第五步由反对称阵与向量叉乘的关系a×b=ab=b×a=ba" role="presentation">a×b=ab=b×a=baab=ba" role="presentation">ab=ba
    • 第六步上下约掉δϕ" role="presentation">δϕ

    扰动模型求导

    扰动模型求导的思路是在原来的旋转矩阵上左乘一个小的扰动旋转。然后对这个扰动求导。
    不严谨的表示为

    limΔR0ΔRRpRpΔR" role="presentation">limΔR0ΔRRpRpΔR

    要做的就是将上述中的李群换成对应的李代数。设ΔRδφ" role="presentation">ΔRδφ,推导如下图。
    image

    推导所使用的化简方法与李代数求导并无二异。
    可以看出,使用扰动求导的方法得出的结果更加简洁,没有最后的左乘雅可比矩阵。

    但是使用两种方法求出的结果是有差异的。

    • 李代数求导的对象是对旋转矩阵本身,令导数等于0求出的旋转矩阵即为最优的旋转。
    • 扰动模型求导的对象是ΔR" role="presentation">ΔR,令导数等于0求出的为最优的ΔR" role="presentation">ΔR,最终的R=ΔRR" role="presentation">R=ΔRR

    最后贴出SE(3)求导的推导。
    image

    需要注意的是(Tp)" role="presentation">(Tp)中的" role="presentation">符号代表着SE(3)求导。

    最后想要支持李代数李群相关运算,可以使用Sophus库来实现,Sophus库是Eigen的一个关于李代数李群的一个扩展库。

  • 相关阅读:
    (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
    11.15 知识总结(模板层、模型层)
    公共Mono模块
    Vue中使组件置顶后悬浮
    React 组件实例的三大核心—props
    DevExpress Office文件API打印 PDF 文档
    Flink-CDC-快速入手(MySQL为例)
    【C++二级】题一:构造函数
    2023最新多功能XL软件库APP源码+PHP后端系统源码/功能强大/软件库自带后台管理系统
    Libgdx游戏开发(3)——通过柏林噪音算法地图随机地形
  • 原文地址:https://www.cnblogs.com/CrescentWind/p/18052814