SLAM中的李群与李代数【SLAM】

SLAM中为什么要用李代数?

本人从SLAM问题的角度出发得出的结论目前是这样的:在SLAM问题中,为了表示旋转姿态需要旋转矩阵或者四元数,在后端优化过程中为了求解非线性优化问题需要求雅可比矩阵,即求导;在运动学的描述中也需要求导;这两种情况中一般是对位姿求导,这时就产生了一个矛盾:根据导数的定义可知,对某一个变量求导,定义中需要该变量产生微小增量,为了保证物理意义的正确,我们希望该变量对加法是封闭的,而旋转矩阵或者四元数对加法都不封闭,所以引入李代数。李代数对李括号具有封闭性,李代数和李群中的元素通过指数映射和对数映射一一对应(对于 S O ( 3 ) SO(3) SO(3)李群需要规定旋转角在 ± π \pm \pi ±π之间),SLAM中引入的李代数的李括号刚好都是加法,这样我们就可以用李代数进行求导过程。

BCH线性近似解决了什么问题?

BCH线性近似提供了在SLAM中的李代数上做加法李群上做乘法的对应关系。

指数映射与对数映射

每个李群都有与之对应的李代数,李代数描述了李群的局部性质,即单位元的正切空间。

与 S O ( 3 ) SO(3) SO(3)对应的李代数为 s o ( 3 ) \mathfrak{so}(3) so(3):
s o ( 3 ) = { ϕ ∈ R 3 , Φ = ϕ ∧ ∈ R 3 × 3 } \mathfrak{so}(3) = \{ \phi \in \mathbb{R}^{3}, \mathit{\Phi} = \phi^{\wedge} \in \mathbb{R}^{3\times3} \} so(3)={ϕ∈R3,Φ=ϕ∧∈R3×3}

SO(3)上的指数映射

R = e x p ( ϕ ∧ ) = ∑ n = 0 ∞ 1 n ! ( ϕ ∧ ) n R = exp(\phi^{\wedge}) = \sum_{n=0}^{\infty} \frac{1}{n!}(\phi^{\wedge})^{n} R=exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n

如果把 ϕ \phi ϕ写成 θ n \theta \mathbf{n} θn,经过推导会发现:
e x p ( θ n ∧ ) = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n ∧ exp(\theta \mathbf{n}^{\wedge}) = cos\theta I + (1-cos \theta) \mathbf{n} \mathbf{n}^{T} + sin \theta \mathbf{n}^{\wedge} exp(θn∧)=cosθI+(1−cosθ)nnT+sinθn∧

这与罗德里格斯公式如出一辙。

这说明 s o ( 3 ) \mathfrak{so}(3) so(3)的物理意义是和旋转矩阵 R R R对应的旋转向量。

SO(3)上的对数映射

ϕ = l n ( R ) ∨ = ( ∑ n = 0 ∞ ( − 1 ) n n + 1 ( R − I ) n + 1 ) \phi = ln(R)^{\vee} = \left ( \sum_{n=0}^{\infty} \frac{(-1)^{n}}{n+1}(R-I)^{n+1} \right) ϕ=ln(R)∨=(n=0∑∞n+1(−1)n(R−I)n+1)

一般不用,要求 S O ( 3 ) SO(3) SO(3)的对数映射其实就是求对应的旋转向量,直接求 θ \theta θ和特征值为1的特征向量即可。

BCH线性近似

BCH公式提供了两个李代数指数映射乘积的完整形式:
l n ( e x p ( A ) e x p ( B ) ) = A + B + 1 2 [ A , B ] + 1 12 [ A , [ A , B ] ] − 1 12 [ B , [ A , B ] ] + ... ln(exp(A)exp(B)) = A+B+\frac{1}{2}[A,B]+\frac{1}{12}[A,[A,B]]-\frac{1}{12}[B,[A,B]]+\dots ln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]−121[B,[A,B]]+...

二元运算符 [ , ] [,] [,]为李括号。

线性近似表达:
l n ( e x p ( ϕ 1 ∧ ) e x p ( ϕ 2 ∧ ) ) ∨ ≈ { J l ( ϕ 2 ) − 1 ϕ 1 + ϕ 2 当 ϕ 1 为小量 J r ( ϕ 1 ) − 1 ϕ 2 + ϕ 1 当 ϕ 2 为小量 ln(exp(\phi_{1}^{\wedge})exp(\phi_{2}^{\wedge}))^{\vee} \approx \begin{cases} J_{l}(\phi_{2})^{-1}\phi_{1} + \phi_{2} & \text{ 当 } \phi_{1}\text{为小量} \\ J_{r}(\phi_{1})^{-1}\phi_{2} + \phi_{1} & \text{ 当 } \phi_{2}\text{为小量} \end{cases} ln(exp(ϕ1∧)exp(ϕ2∧))∨≈{Jl(ϕ2)−1ϕ1+ϕ2Jr(ϕ1)−1ϕ2+ϕ1 当 ϕ1为小量 当 ϕ2为小量

对于 ϕ = θ n \phi = \theta \mathbf{n} ϕ=θn:
J l ( ϕ ) = s i n θ θ I + ( 1 − s i n θ θ ) n n T + 1 − c o s θ θ n ∧ J_{l}(\phi) = \frac{sin\theta}{\theta}I + (1 - \frac{sin\theta}{\theta})\mathbf{n}\mathbf{n}^{T} + \frac{1 - cos\theta}{\theta}\mathbf{n}^{\wedge} Jl(ϕ)=θsinθI+(1−θsinθ)nnT+θ1−cosθn∧

J l ( ϕ ) − 1 = θ 2 c o t θ 2 I + ( 1 − θ 2 c o t θ 2 ) n n T − θ 2 n ∧ J_{l}(\phi)^{-1} = \frac{\theta}{2}cot\frac{\theta}{2}I + (1 - \frac{\theta}{2}cot\frac{\theta}{2})\mathbf{n}\mathbf{n}^{T} -\frac{\theta}{2}\mathbf{n}^{\wedge} Jl(ϕ)−1=2θcot2θI+(1−2θcot2θ)nnT−2θn∧

J r ( ϕ ) = J l ( − ϕ ) J_{r}(\phi) = J_{l}(-\phi) Jr(ϕ)=Jl(−ϕ)

相关推荐
paopaokaka_luck9 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
视觉小萌新25 分钟前
VScode+opencv——关于opencv多张图片拼接成一张图片的算法
vscode·opencv·算法
2的n次方_36 分钟前
二维费用背包问题
java·算法·动态规划
simple_ssn1 小时前
【C语言刷力扣】1502.判断能否形成等差数列
c语言·算法·leetcode
寂静山林1 小时前
UVa 11855 Buzzwords
算法
Curry_Math1 小时前
LeetCode 热题100之技巧关卡
算法·leetcode
ahadee1 小时前
蓝桥杯每日真题 - 第10天
c语言·vscode·算法·蓝桥杯
军训猫猫头2 小时前
35.矩阵格式的一到一百数字 C语言
c语言·算法
Mr_Xuhhh3 小时前
递归搜索与回溯算法
c语言·开发语言·c++·算法·github
SoraLuna3 小时前
「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计
算法·macos·cangjie