0. 简介
这几个月,博主已经从SLAM算法的使用向着算法的数学推导进行了记录和分享,之前也分享了李群李代数关注核心一文,从现象中解释了李群和李代数表达的含义。但是这还不够,所以这次作者作为SLAM本质剖析的番外,来介绍李群李代数的微分和导数。
1. 旋转点求导
李群或者李代数上叠加微小量的情况呢?传统的求导过程中,我们常见的做法是对自变量添加一个微小值来进行:
f ′ ( x ) = lim  Δ x → 0 f ( x + Δ x ) Δ x f'(x) = \lim_{\Delta x\rightarrow0}\frac{f(x+\Delta x)}{\Delta x} f′(x)=Δx→0limΔxf(x+Δx)
但是这种形式对于旋转矩阵 S O ( 3 ) SO(3) SO(3) 我们不能这么做,因为李群对加法不封闭,因此两个旋转矩阵相加不一定是旋转矩阵,但是利用李代数,根据下面两个方向的 BCH 近似不难看出我们有两种思路进行求导,分别是:
-  用李代数(旋转向量)来表示姿态,然后利用李代数加法叠加微小量并对该微小量进行求导 - 李代数求导:在李群对应的李代数的局部坐标上,即:( ϕ , ϕ ∧ ∈ s o ( 3 ) \boldsymbol{\phi}, \boldsymbol{\phi}^\wedge\in \mathfrak{so}(3) ϕ,ϕ∧∈so(3)) 上添加扰动,即: ϕ ← ϕ + δ ϕ \boldsymbol{\phi} \leftarrow \boldsymbol{\phi} + \delta\boldsymbol{\phi} ϕ←ϕ+δϕ,由于李代数本身对应旋转向量,因此对旋转向量添加扰动相当于同时改变旋转轴和旋转角度。
 
-  用李群(旋转矩阵)表示姿态,然后左/右乘上一个扰动,然后对该扰动求导,即左扰动模型和右扰动模型 -  旋转矩阵右扰动求导:由于旋转矩阵没有加法,因此要对旋转矩阵本身添加扰动,需要先通过指数映射将李代数转化为李群,然后根据李群的运算来添加扰动,即: R ← R exp  ( ϕ ∧ ) \boldsymbol{R} \leftarrow \boldsymbol{R}\exp{(\boldsymbol{\phi}^\wedge)} R←Rexp(ϕ∧),由于是旋转矩阵右乘扰动,因此相当于是在局部坐标系下对旋转矩阵进行更新 
-  旋转矩阵左扰动求导:和右扰动同理,我们也可以将扰动添加在旋转矩阵左侧,即: R ← exp  ( ϕ ∧ ) R \boldsymbol{R} \leftarrow \exp{(\boldsymbol{\phi}^\wedge)}\boldsymbol{R} R←exp(ϕ∧)R,由于是旋转矩阵左乘扰动,因此相当于在全局坐标系下对旋转矩阵进行更新 
 
-  
李代数这样的形式我们可以理解,Ceres也是通过这样的形式进行来实现李代数的累加。但是李群就需要根据BCH来进行计算了。
2 J R 0 \boldsymbol{J}_{\boldsymbol{R}_0} JR0是什么
为了明白在李群李代数公式中各个成员的含义,我们给出例子来解释不同的变量。假设我们对空间一个点 
    
     
      
       
        p
       
      
      
       p
      
     
    p 使用旋转矩阵 ${R_0} $ 进行旋转得到
    
     
      
       
        
         R
        
        
         0
        
       
       
        p
       
      
      
       {R_0} p
      
     
    R0p:
 
     
      
       
        
         
          J
         
         
          R
         
        
        
         =
        
        
         
          
           ∂
          
          
           e
          
          
           (
          
          
           R
          
          
           ,
          
          
           p
          
          
           )
          
         
         
          
           ∂
          
          
           R
          
         
        
        
         =
        
        
         
          
           ∂
          
          
           
            
             R
            
            
             p
            
           
          
         
         
          
           ∂
          
          
           R
          
         
        
       
       
         \boldsymbol{J}_{R} = \frac{\partial \boldsymbol{e}(\boldsymbol{{R}}, \boldsymbol{p})}{\partial \boldsymbol{{R}}} = \frac{\partial \boldsymbol{{R}p}}{\partial \boldsymbol{R}} 
       
      
     JR=∂R∂e(R,p)=∂R∂Rp
该式子在实际计算时可以施加微小扰动 ϕ {\phi} ϕ,通过最小化扰动来对误差进行线性化,并近似转换为,从而求出在 R 0 R_0 R0到 R R R的情况下 p p p的变化。此刻默认 e ( R 0 , p ) \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) e(R0,p)是已知的。
e ( R , p ) = e ( R 0 , p ) + J R 0 δ ϕ \boldsymbol{e}(\boldsymbol{R}, \boldsymbol{p}) = \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{J}_{\boldsymbol{R}_0}\delta\boldsymbol{\phi} e(R,p)=e(R0,p)+JR0δϕ
得到基于 R 0 {R_0} R0的偏导 --------也就是 J R 0 \boldsymbol{J}_{\boldsymbol{R}_0} JR0 是函数在 R 0 \boldsymbol{R}_0 R0的雅可比矩阵
3 ⊕ \oplus ⊕、 ∧ \wedge ∧ 和 × _{\times} × 的含义
对于李群而言,由于其没有向量空间上的加法操作,因此为了引入导数的概念,这里用一个映射将局部坐标 ξ \xi ξ 映射到李群元素 a a a 在李群空间附近的邻域上,用来作为李群上的 “加法” 操作,所以常常会使用 ⊕ \oplus ⊕来表示李群的加法,如下所示:
a ⊕ ξ ≜ a exp  ( ξ ^ ) a\oplus \xi \triangleq a \exp{(\hat{\xi})} a⊕ξ≜aexp(ξ^)
式中, ξ ∈ R n \xi\in\mathbb{R}^n ξ∈Rn 是 a a a 系下的局部坐标,这个也是我们所说的极小值右乘的做法,以李群 SO(3) 为例,局部坐标可以表示为 ξ = ω t \xi = \omega t ξ=ωt,其几何意义为以 a a a 作为参考系下的一个角度扰动;
ξ ^ \hat{\xi} ξ^ 为 ξ \xi ξ 的对应李代数,当然也可以像上面表示为 ξ ∧ \xi^{\wedge} ξ∧;
exp  ξ \exp{\xi} expξ 为李代数到李群的指数映射;
    
     
      
       
        
         ξ
        
        
         ^
        
       
       
        =
       
       
        [
       
       
        ω
       
       
        t
       
       
        
         ]
        
        
         ×
        
       
      
      
       \hat{\xi} = [\omega t]_{\times}
      
     
    ξ^=[ωt]× 为李代数,李代数可以转化为反对称矩阵。通过
    
     
      
       
        
        
         ×
        
       
      
      
       _{\times}
      
     
    ×来表示角度扰动(旋转轴+旋转角度)的旋转向量。
 
4 由BCH得到的左扰动和右扰动基础公式
首先将旋转矩阵(李群 S O ( 3 ) SO(3) SO(3))转换为旋转向量(李代数 s o ( 3 ) \boldsymbol{\mathfrak{so}}(3) so(3)),并对旋转向量求导:
e ( R , p ) = R p = exp  ( ϕ ∧ ) p = exp  ( ( ϕ 0 + δ ϕ ) ∧ ) p = exp  ( ϕ 0 ∧ + δ ϕ ∧ ) p 将 J l ( ϕ 0 ) 简化为 J l ( ϕ 0 ) = ( R 0 R δ ) p B C H 近似 ≈ exp  ( ( J l δ ϕ ) ∧ ) exp  ( ϕ 0 ∧ ) p 泰勒展开并去除高阶项 ≈ ( I + ( J l δ ϕ ) ∧ ) exp  ( ϕ 0 ∧ ) p = exp  ( ϕ 0 ∧ ) p + ( J l δ ϕ ) ∧ exp  ( ϕ 0 ∧ ) p = R 0 p + ( J l δ ϕ ) ∧ R 0 p = e ( R 0 , p ) + ( J l δ ϕ ) ∧ R 0 p 利用 a ∧ b = − b ∧ a 性质 = e ( R 0 , p ) − ( R 0 p ) ∧ J l δ ϕ 根据之前的的公式默认为 = e ( R 0 , p ) + J R 0 δ ϕ ⇒ J R 0 = − ( R 0 p ) ∧ J l \begin{aligned} \boldsymbol{e}(\boldsymbol{R}, \boldsymbol{p}) &= \boldsymbol{Rp} = \exp{(\boldsymbol{\phi}^\wedge})\boldsymbol{p}\\ &= \exp{((\boldsymbol{\phi}_0 + \delta\boldsymbol{\phi})^\wedge})\boldsymbol{p}\\ &= \exp{(\boldsymbol{\phi}_0^\wedge + \delta\boldsymbol{\phi}^\wedge})\boldsymbol{p}\\ 将{J_l({\phi}_0)}简化为{J_l({\phi}_0)} &= (R_0R_{\delta})\boldsymbol{p}\\ \mathrm{BCH 近似}&\approx \exp{((\boldsymbol{J}_l\delta\boldsymbol{\phi})^\wedge})\exp{(\boldsymbol{\phi}_0^\wedge)}\boldsymbol{p} \\ \mathrm{泰勒展开并去除高阶项}&\approx (\boldsymbol{I} + (\boldsymbol{J}_l\delta\boldsymbol{\phi})^\wedge)\exp{(\boldsymbol{\phi}_0^\wedge)}\boldsymbol{p} \\ &= \exp{(\boldsymbol{\phi}_0^\wedge})\boldsymbol{p} + (\boldsymbol{J}_l\delta\boldsymbol{\phi})^\wedge\exp{(\boldsymbol{\phi}_0^\wedge)}\boldsymbol{p} \\ &= \boldsymbol{R}_0\boldsymbol{p} + (\boldsymbol{J}_l\delta\boldsymbol{\phi})^\wedge\boldsymbol{R}_0\boldsymbol{p} \\ &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + (\boldsymbol{J}_l\delta\boldsymbol{\phi})^\wedge\boldsymbol{R}_0\boldsymbol{p} \\ \mathrm{利用a^\wedge b = -b^\wedge a 性质}&= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) - (\boldsymbol{R}_0\boldsymbol{p})^\wedge\boldsymbol{J}_l\delta\boldsymbol{\phi} \\ 根据之前的的公式默认为 &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{J}_{\boldsymbol{R}_0}\delta\boldsymbol{\phi} \\ \Rightarrow \boldsymbol{J}_{\boldsymbol{R}_0} &= - (\boldsymbol{R}_0\boldsymbol{p})^\wedge\boldsymbol{J}_l \end{aligned} e(R,p)将Jl(ϕ0)简化为Jl(ϕ0)BCH近似泰勒展开并去除高阶项利用a∧b=−b∧a性质根据之前的的公式默认为⇒JR0=Rp=exp(ϕ∧)p=exp((ϕ0+δϕ)∧)p=exp(ϕ0∧+δϕ∧)p=(R0Rδ)p≈exp((Jlδϕ)∧)exp(ϕ0∧)p≈(I+(Jlδϕ)∧)exp(ϕ0∧)p=exp(ϕ0∧)p+(Jlδϕ)∧exp(ϕ0∧)p=R0p+(Jlδϕ)∧R0p=e(R0,p)+(Jlδϕ)∧R0p=e(R0,p)−(R0p)∧Jlδϕ=e(R0,p)+JR0δϕ=−(R0p)∧Jl
最后我们得到以下结果:
J R 0 = − ( R 0 p ) ∧ J l ( ϕ 0 ) \boldsymbol{J}_{\boldsymbol{R}_0} = - (\boldsymbol{R}_0\boldsymbol{p})^\wedge\boldsymbol{J}_l(\boldsymbol{\phi}_0) JR0=−(R0p)∧Jl(ϕ0)
因为 J l \boldsymbol{J}_l Jl一般乘上的是极小值,所以在一般情况是可以省略的。这就可以根据类似的推导得到左扰动公式:
     
      
       
        
         
          
           
            
             e
            
            
             (
            
            
             R
            
            
             ,
            
            
             p
            
            
             )
            
           
          
         
         
          
           
            
            
             =
            
            
             
              
               R
              
              
               p
              
             
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             exp
            
            
             
            
            
             
              (
             
             
              ψ
             
             
              
               )
              
              
               ∧
              
             
            
            
             
              R
             
             
              0
             
            
            
             p
            
           
          
         
        
        
         
          
           
            泰勒展开并去除高阶项
           
          
         
         
          
           
            
            
             ≈
            
            
             (
            
            
             I
            
            
             +
            
            
             
              ψ
             
             
              ∧
             
            
            
             )
            
            
             
              R
             
             
              0
             
            
            
             p
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             
              R
             
             
              0
             
            
            
             p
            
            
             +
            
            
             
              ψ
             
             
              ∧
             
            
            
             
              R
             
             
              0
             
            
            
             p
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             +
            
            
             
              ψ
             
             
              ∧
             
            
            
             
              R
             
             
              0
             
            
            
             p
            
           
          
         
        
        
         
          
           
            
             利用
            
            
             
              a
             
             
              ∧
             
            
            
             b
            
            
             =
            
            
             −
            
            
             
              b
             
             
              ∧
             
            
            
             a
            
            
             性质
            
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             −
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             p
            
            
             
              )
             
             
              ∧
             
            
            
             ψ
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             +
            
            
             
              J
             
             
              
               R
              
              
               0
              
             
            
            
             ψ
            
           
          
         
        
        
         
          
           
            
             ⇒
            
            
             
              J
             
             
              
               R
              
              
               0
              
             
            
           
          
         
         
          
           
            
            
             =
            
            
             −
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             p
            
            
             
              )
             
             
              ∧
             
            
           
          
         
        
       
       
         \begin{aligned} \boldsymbol{e}(\boldsymbol{R}, \boldsymbol{p}) &= \boldsymbol{Rp}\\ &= \exp{(\boldsymbol{\psi})^\wedge}\boldsymbol{R}_0\boldsymbol{p}\\ \mathrm{泰勒展开并去除高阶项}&\approx (\boldsymbol{I} + \boldsymbol{\psi}^\wedge)\boldsymbol{R}_0\boldsymbol{p}\\ &= \boldsymbol{R}_0\boldsymbol{p} + \boldsymbol{\psi}^\wedge\boldsymbol{R}_0\boldsymbol{p}\\ &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{\psi}^\wedge\boldsymbol{R}_0\boldsymbol{p}\\ \mathrm{利用a^\wedge b = -b^\wedge a 性质}&= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) - (\boldsymbol{R}_0\boldsymbol{p})^\wedge\boldsymbol{\psi} \\ &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{J}_{\boldsymbol{R}_0}\boldsymbol{\psi} \\ \Rightarrow \boldsymbol{J}_{\boldsymbol{R}_0} &= - (\boldsymbol{R}_0\boldsymbol{p})^\wedge \end{aligned} 
       
      
     e(R,p)泰勒展开并去除高阶项利用a∧b=−b∧a性质⇒JR0=Rp=exp(ψ)∧R0p≈(I+ψ∧)R0p=R0p+ψ∧R0p=e(R0,p)+ψ∧R0p=e(R0,p)−(R0p)∧ψ=e(R0,p)+JR0ψ=−(R0p)∧
 不难看出来,利用左扰动模型计算的导数比使用李代数直接求导省去了一个 
    
     
      
       
        
         J
        
        
         l
        
       
       
        (
       
       
        
         ϕ
        
        
         0
        
       
       
        )
       
      
      
       \boldsymbol{J}_l(\boldsymbol{\phi}_0)
      
     
    Jl(ϕ0) 的计算,因此更为实用,同时理论上精度也会更高(因为在计算该矩阵时需要近似)。
下面是右扰动公式:
 
     
      
       
        
         
          
           
            
             e
            
            
             (
            
            
             R
            
            
             ,
            
            
             p
            
            
             )
            
           
          
         
         
          
           
            
            
             =
            
            
             
              
               R
              
              
               p
              
             
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             
              R
             
             
              0
             
            
            
             exp
            
            
             
            
            
             
              (
             
             
              ψ
             
             
              
               )
              
              
               ∧
              
             
            
            
             p
            
           
          
         
        
        
         
          
           
            泰勒展开并去除高阶项
           
          
         
         
          
           
            
            
             ≈
            
            
             
              R
             
             
              0
             
            
            
             (
            
            
             I
            
            
             +
            
            
             
              ψ
             
             
              ∧
             
            
            
             )
            
            
             p
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             
              R
             
             
              0
             
            
            
             p
            
            
             +
            
            
             
              R
             
             
              0
             
            
            
             
              ψ
             
             
              ∧
             
            
            
             p
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             +
            
            
             
              R
             
             
              0
             
            
            
             
              ψ
             
             
              ∧
             
            
            
             p
            
           
          
         
        
        
         
          
           
            
             利用
            
            
             
              a
             
             
              ∧
             
            
            
             b
            
            
             =
            
            
             −
            
            
             
              b
             
             
              ∧
             
            
            
             a
            
            
             性质
            
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             −
            
            
             
              R
             
             
              0
             
            
            
             
              p
             
             
              ∧
             
            
            
             ψ
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             e
            
            
             (
            
            
             
              R
             
             
              0
             
            
            
             ,
            
            
             p
            
            
             )
            
            
             +
            
            
             
              J
             
             
              
               R
              
              
               0
              
             
            
            
             ψ
            
           
          
         
        
        
         
          
           
            
             ⇒
            
            
             
              J
             
             
              
               R
              
              
               0
              
             
            
           
          
         
         
          
           
            
            
             =
            
            
             −
            
            
             
              R
             
             
              0
             
            
            
             
              p
             
             
              ∧
             
            
           
          
         
        
       
       
         \begin{aligned} \boldsymbol{e}(\boldsymbol{R}, \boldsymbol{p}) &= \boldsymbol{Rp}\\ &= \boldsymbol{R}_0\exp{(\boldsymbol{\psi})^\wedge}\boldsymbol{p}\\ \mathrm{泰勒展开并去除高阶项}&\approx \boldsymbol{R}_0(\boldsymbol{I} + \boldsymbol{\psi}^\wedge)\boldsymbol{p}\\ &= \boldsymbol{R}_0\boldsymbol{p} + \boldsymbol{R}_0\boldsymbol{\psi}^\wedge\boldsymbol{p}\\ &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{R}_0\boldsymbol{\psi}^\wedge\boldsymbol{p}\\ \mathrm{利用a^\wedge b = -b^\wedge a 性质}&= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) - \boldsymbol{R}_0\boldsymbol{p}^\wedge\boldsymbol{\psi} \\ &= \boldsymbol{e}(\boldsymbol{R}_0, \boldsymbol{p}) + \boldsymbol{J}_{\boldsymbol{R}_0}\boldsymbol{\psi} \\ \Rightarrow \boldsymbol{J}_{\boldsymbol{R}_0} &= - \boldsymbol{R}_0\boldsymbol{p}^\wedge\\ \end{aligned} 
       
      
     e(R,p)泰勒展开并去除高阶项利用a∧b=−b∧a性质⇒JR0=Rp=R0exp(ψ)∧p≈R0(I+ψ∧)p=R0p+R0ψ∧p=e(R0,p)+R0ψ∧p=e(R0,p)−R0p∧ψ=e(R0,p)+JR0ψ=−R0p∧
相比于左扰动的模型中计算 R p \boldsymbol{Rp} Rp 的反对称矩阵,右扰动模型计算的是 p \boldsymbol{p} p 的反对称矩阵,因此有细微的区别,使用时注意区分。

![[杂记]算法:前缀和与差分数组](https://img-blog.csdnimg.cn/6cc1aac1b545428f929eb0da1ba90050.png)
















