SLAM本质剖析番外-李群李代数的微分和导数

本文深入探讨了SLAM算法中的李群和李代数的微分与导数概念,详细介绍了如何在李群李代数框架下进行旋转点求导,并给出了左扰动模型和右扰动模型的具体推导过程。

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

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)=Δx0limΔ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)} RRexp(ϕ),由于是旋转矩阵右乘扰动,因此相当于是在局部坐标系下对旋转矩阵进行更新

    • 旋转矩阵左扰动求导:和右扰动同理,我们也可以将扰动添加在旋转矩阵左侧,即: R ← exp ⁡ ( ϕ ∧ ) R \boldsymbol{R} \leftarrow \exp{(\boldsymbol{\phi}^\wedge)}\boldsymbol{R} Rexp(ϕ)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=Re(R,p)=RRp

该式子在实际计算时可以施加微小扰动 ϕ {\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近似泰勒展开并去除高阶项利用ab=ba性质根据之前的的公式默认为JR0=Rp=exp(ϕ)p=exp((ϕ0+δϕ))p=exp(ϕ0+δϕ)p=(R0Rδ)pexp((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)泰勒展开并去除高阶项利用ab=ba性质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)泰勒展开并去除高阶项利用ab=ba性质JR0=Rp=R0exp(ψ)pR0(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 的反对称矩阵,因此有细微的区别,使用时注意区分。

5 连乘李群的求导

…详情请参照古月居

<think>嗯,用户想了解因子图优化中雅可比矩阵的作用与计算方法。我需要先回忆一下因子图相关的知识,尤其是在优化过程中雅可比矩阵的应用。记得因子图是一种概率图模型,常用于SLAM、状态估计等问题,通过分解联合概率分布为多个因子的乘积。优化时通常使用非线性最小二乘法,比如高斯-牛顿法或列文伯格-马夸尔特法,这时候雅可比矩阵就很重要了。 首先,雅可比矩阵在优化中的作用应该是线性化非线性误差函数,对吧?每个因子对应一个误差项,优化过程中需要计算误差函数对状态变量的导数,也就是雅可比矩阵。这些导数帮助确定搜索方向,从而迭代更新状态变量,逐步最小化总误差。例如,在视觉SLAM中,特征点的重投影误差对相机位姿的导数就需要通过雅可比矩阵来表示。 然后,计算方法方面,可能需要分解为每个因子单独计算雅可比块,再组合成整体的稀疏矩阵。因为因子图的优势之一就是稀疏性,所以雅可比矩阵通常也是稀疏的,这样可以高效地利用稀疏求解器,比如使用Cholesky分解或QR分解。此外,自动微分或者符号微分可能在计算雅可比时用到,尤其是当手动推导复杂时,工具如Ceres Solver或GTSAM会自动处理这些导数。 不过,用户提供的引用里提到改进牛顿法中避免显式形成雅可比矩阵,而是通过前推回代来操作,这可能涉及到隐式利用雅可比的结构,比如在状态估计中,UDUT分解或者利用问题的结构来避免存储大的雅可比矩阵,从而节省内存提高计算效率。比如,在因子图中,每个因子只涉及少量变量,因此对应的雅可比块也是稀疏的,可以分块计算,然后组合起来,而不需要显式构造整个矩阵。 另外,引用[2]提到高斯牛顿法中雅可比的计算,以及如何求等效旋转矢量的雅可比,这可能涉及到李代数上的导数,比如在SLAM中相机位姿用SE(3)表示时,需要用到扰动模型来计算导数。这部分可能需要更深入的数学知识,比如李群的局部坐标参数化,以及对应的雅可比矩阵推导。 总结来说,雅可比矩阵在因子图优化中起到线性化误差函数、指导迭代方向的作用,计算方法则涉及对每个因子的导数分块计算,利用稀疏性进行高效求解,同时可能结合自动微分或特定的参数化方法来处理复杂的变量空间,如旋转矩阵的李代数表示。此外,优化方法如高斯-牛顿或LM算法会利用雅可比矩阵的结构来高效更新状态变量,避免显式存储大矩阵,从而提高计算效率。</think>### 因子图优化中雅可比矩阵的作用与计算方法 #### 1. **雅可比矩阵的作用** 在因子图优化中,雅可比矩阵的核心作用是**线性化非线性误差函数**,从而通过迭代优化算法(如高斯-牛顿法、列文伯格-马夸尔特法)求解状态变量的最优值[^1][^2]。具体功能包括: - **误差线性化**:将非线性误差函数在当前状态点附近近似为线性模型,便于求解梯度方向。 - **构建正规方程**:通过雅可比矩阵与残差向量的乘积,生成线性方程组,计算状态变量的修正量。 - **稀疏性利用**:因子图的稀疏结构使得雅可比矩阵天然稀疏,可结合稀疏求解器(如Cholesky分解)加速计算[^1]。 #### 2. **雅可比矩阵的计算方法** 雅可比矩阵的计算需针对**每个因子**独立分析,具体步骤如下: ##### **步骤1:定义误差函数** 每个因子对应一个误差函数 $e_i(x)$,例如: - SLAM中,观测路标点的重投影误差。 - 状态估计中,传感器测量的残差。 ##### **步骤2:分块计算雅可比块** 对每个因子 $e_i(x)$,计算其误差对相关状态变量 $x_j$ 的偏导数,生成子矩阵块 $J_{ij}$: $$ J_{ij} = \frac{\partial e_i}{\partial x_j} $$ 例如,在相机位姿优化中,需计算误差对旋转平移参数的导数,涉及李代数扰动模型。 ##### **步骤3:组合全局雅可比矩阵** 将各子矩阵块按因子变量的关联关系拼接成全局雅可比矩阵 $J$,例如: $$ J = \begin{bmatrix} J_{11} & 0 & \dots \\ 0 & J_{22} & \dots \\ \vdots & \vdots & \ddots \end{bmatrix} $$ 稀疏结构可通过**消元排序算法**(如COLAMD)进一步优化。 ##### **步骤4:结合优化算法迭代求解** 利用雅可比矩阵构建正规方程: $$ J^T J \Delta x = -J^T e $$ 通过稀疏分解(如QR或Cholesky)求解 $\Delta x$,更新状态变量直至收敛[^1]。 #### 3. **优化中的关键技巧** - **自动微分**:借助工具(如Ceres Solver)自动计算雅可比矩阵,避免手动推导复杂模型。 - **隐式表示**:对特定结构(如UDUT分解),直接通过前推回代操作雅可比矩阵的隐含形式,避免显式存储。 - **鲁棒核函数**:对异常值引入鲁棒核(如Huber函数),需在雅可比计算中额外考虑核函数的导数--- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敢敢のwings

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

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

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

打赏作者

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

抵扣说明:

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

余额充值