【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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

csu1328(近似回文串)

题意:求近似回文串的最大长度,串长度为1000。 解题思路:以某点为中心,向左右两边扩展,注意奇偶分开讨论,暴力解即可。时间复杂度O(n^2); 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>#include<string>#inclu

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close