【SLAM数学基础】李群与李代数 BCH近似公式

2023-10-03 15:42

本文主要是介绍【SLAM数学基础】李群与李代数 BCH近似公式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三维旋转构成了三维旋转群 SO(3),其对应的李代数为 s o \mathfrak{so} so(3);三维变换构成了三维变换群 SE(3),其对应的李代数为 s e \mathfrak{se} se(3)。

1.指数映射

李代数元素到李群元素的映射为指数映射,其中 s o \mathfrak{so} so(3) 至 SO(3) 的指数映射为:

exp ⁡ ( ϕ ∧ ) = R = Exp ( ϕ ) \exp(\bm{\phi}^{\wedge}) = \bm{R} = \text{Exp}(\bm{\phi}) exp(ϕ)=R=Exp(ϕ)

具体计算公式由罗德里格斯公式给出:

R = cos ⁡ θ ⋅ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ ⋅ n ∧ = exp ⁡ ( ϕ ∧ ) \bm{R} = \cos\theta \cdot \bm{I} + (1-\cos \theta) \bm{n}\bm{n}^T + \sin\theta\cdot \bm{n}^{\wedge} = \exp(\bm{\phi}^{\wedge}) R=cosθI+(1cosθ)nnT+sinθn=exp(ϕ)

其中 ϕ ∈ s o ( 3 ) \bm{\phi}\in \mathfrak{so}(3) ϕso(3) 可以分解为 ϕ = θ n \bm{\phi} =\theta\bm{n} ϕ=θn.

2.对数映射

从李群元素到李代数元素的映射为对数映射,记作

ϕ = log ⁡ ( R ) ∨ = Log ( R ) \bm{\phi} = \log(\bm{R})^{\vee} = \text{Log}(\bm{R}) ϕ=log(R)=Log(R)

其中 ϕ ∈ s o ( 3 ) \bm{\phi}\in \mathfrak{so}(3) ϕso(3) 可以分解为 ϕ = θ n \bm{\phi} =\theta\bm{n} ϕ=θn,具体的计算过程由下式给出:

θ = arccos ⁡ ( t r ( R ) − 1 2 ) R n = n \theta = \arccos\left(\frac{tr(\bm{R}) - 1}{2}\right) \\ \bm{R}\bm{n} = \bm{n} θ=arccos(2tr(R)1)Rn=n

其中 转轴 n \bm{n} n 是矩阵 R R R 特征值1对应的单位特征向量。

3. BCH公式及其线性近似表达

两个李代数指数映射乘积的完整形式,由 Baker-Campbell-Hausdorff 公式(BCH公式)给出,其展开式的前几项为:

ln ⁡ ( exp ⁡ ( A ) exp ⁡ ( B ) ) = A + B + 1 2 [ A , B ] + 1 12 [ A , [ A , B ] ] − 1 12 [ B , [ A , B ] ] + ⋯ \ln\left(\exp(A)\exp(B)\right) = A + B + \frac{1}{2}[A, B] + \frac{1}{12}[A,[A,B]] - \frac{1}{12}[B,[A,B]] + \cdots ln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]121[B,[A,B]]+

其中 [ ] 为李括号。特别地,考虑 SO(3) 上的李代数 ln ⁡ ( exp ⁡ ( ϕ 1 ∧ ) exp ⁡ ( ϕ 2 ∧ ) ) ∨ \ln\left(\exp(\bm{\phi}^{\wedge}_1)\exp(\bm{\phi}^{\wedge}_2)\right)^{\vee} ln(exp(ϕ1)exp(ϕ2)),当 ϕ 1 \bm{\phi}_1 ϕ1 ϕ 2 \bm{\phi}_2 ϕ2 为小量时,小量二次以上的项可以忽略,此时 BCH 具有线性近似表达:

在这里插入图片描述

第一个近似公式表明,当对一个旋转矩阵 R 2 \bm{R}_2 R2(李代数为 ϕ 2 \bm{\phi}_2 ϕ2) 左乘一个微小旋转矩阵 R 1 \bm{R}_1 R1(李代数为 ϕ 1 \bm{\phi}_1 ϕ1)时,可以近似看作在原来的李代数 ϕ 2 \bm{\phi}_2 ϕ2 加上了一项 J l ( ϕ 2 ) − 1 ϕ 1 \bm{J}_l(\bm{\phi}_2)^{-1}\bm{\phi}_1 Jl(ϕ2)1ϕ1。同理,第二个近似公式描述了右乘一个微小旋转的情况。

因此,李代数在BCH近似下分成了左乘和右乘近似两种,使用时需要注意区分。

4. SO(3)上的BCH近似公式

BCH公式给出了李代数上的小量加法与李群上小量乘法之间的关系(李代数加法 ⇔ \Leftrightarrow 李群乘法),其线性近似公式广泛应用于各种函数的线性化。

在SO(3)中,某个旋转 R \bm{R} R 对应的李代数为 ϕ \bm{\phi} ϕ,左乘一个微小旋转,记作 Δ R \Delta \bm{R} ΔR,对应的李代数为 Δ ϕ \Delta \bm{\phi} Δϕ,那么在李群上得到的结果就是 Δ R R \Delta \bm{R} \bm{R} ΔRR,而在李代数上,根据BCH近似,为 J l ( ϕ ) − 1 Δ ϕ + ϕ \bm{J}_l(\bm{\phi})^{-1}\Delta\bm{\phi} + \bm{\phi} Jl(ϕ)1Δϕ+ϕ,合并后可以简单写成:

Δ R R = exp ⁡ ( Δ ϕ ∧ ) exp ⁡ ( ϕ ∧ ) = exp ⁡ ( ( ϕ + J l ( ϕ ) − 1 Δ ϕ ) ∧ ) \Delta \bm{R} \bm{R} = \exp(\Delta \bm{\phi}^{\wedge})\exp(\bm{\phi}^{\wedge}) = \exp \left( (\bm{\phi} + \bm{J}_l(\bm{\phi})^{-1}\Delta\bm{\phi})^{\wedge} \right) ΔRR=exp(Δϕ)exp(ϕ)=exp((ϕ+Jl(ϕ)1Δϕ))

反过来,如果在李代数上进行加法,让一个 ϕ \bm{\phi} ϕ 加上小量 Δ ϕ \Delta \bm{\phi} Δϕ,那么可以近似为李群上带左右雅克比矩阵的乘法:

exp ⁡ ( ( ϕ + Δ ϕ ) ∧ ) = exp ⁡ ( ( J l ( ϕ ) Δ ϕ ) ∧ ) exp ⁡ ( ϕ ∧ ) = exp ⁡ ( ϕ ∧ ) exp ⁡ ( ( J r ( ϕ ) Δ ϕ ) ∧ ) \exp((\bm{\phi} + \Delta \bm{\phi})^{\wedge}) = \exp((\bm{J}_l(\bm{\phi})\Delta \bm{\phi})^\wedge) \exp(\bm{\phi}^\wedge) = \exp( \bm{\phi}^\wedge) \exp((\bm{J}_r(\bm{\phi})\Delta\bm{\phi})^\wedge) exp((ϕ+Δϕ))=exp((Jl(ϕ)Δϕ))exp(ϕ)=exp(ϕ)exp((Jr(ϕ)Δϕ))

其中SO(3)的左雅克比矩阵为

J l ( θ a ) = sin ⁡ θ θ I + ( 1 − sin ⁡ θ θ ) a a T + ( 1 − cos ⁡ θ θ ) a ∧ J l − 1 ( θ a ) = θ 2 cot ⁡ θ 2 I + ( 1 − θ 2 cot ⁡ θ 2 ) a a T − θ 2 a ∧ \bm{J}_l(\theta\bm{a}) = \frac{\sin\theta}{\theta} \bm{I} + (1-\frac{\sin\theta}{\theta})\bm{a}\bm{a}^T+(\frac{1-\cos\theta}{\theta})\bm{a}^{\wedge} \\ \bm{J}^{-1}_l(\theta\bm{a}) = \frac{\theta}{2}\cot\frac{\theta}{2} \bm{I} + (1-\frac{\theta}{2}\cot\frac{\theta}{2})\bm{a}\bm{a}^T-\frac{\theta}{2}\bm{a}^{\wedge} Jl(θa)=θsinθI+(1θsinθ)aaT+(θ1cosθ)aJl1(θa)=2θcot2θI+(12θcot2θ)aaT2θa

而SO(3)的右雅克比矩阵为

J r ( ϕ ) = J l ( − ϕ ) \bm{J}_r(\bm{\phi}) = \bm{J}_l(-\bm{\phi}) Jr(ϕ)=Jl(ϕ)

值得注意的是,由于李代数 ϕ \bm{\phi} ϕ 可以和旋转矩阵 R \bm{R} R 简单地对应起来,因此有时也把 J r ( ϕ ) \bm{J}_r(\bm{\phi}) Jr(ϕ) 简单地记作 J r ( R ) \bm{J}_r(\bm{R}) Jr(R) 而不是 J r ( Log ( R ) ) \bm{J}_r(\text{Log}(\bm{R})) Jr(Log(R))。另外,在很多情况下,也会省略 J r ( ϕ ) \bm{J}_r(\bm{\phi}) Jr(ϕ) 括号里的内容,而直接记为 J r \bm{J}_r Jr J l \bm{J}_l Jl,这都是为了让公式看上去更加简洁。

参考教程

  1. 自动驾驶与机器人中的SLAM技术:从理论到实践/高翔著. —北京:电子工业出版社,2023.8
  2. 视觉SLAM十四讲:从理论到实践/高翔等著.— 2版. —北京:电子工业出版社,2019.9

这篇关于【SLAM数学基础】李群与李代数 BCH近似公式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546

相关文章

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re