三维世界中描述刚体运动可以使用旋转矩阵,旋转向量,欧拉角,四元数等.

但是在SLAM中,除了表示之外,我们还要对它们进行估计和优化.因为在SLAM中位姿是未知的,而我们需要解决形如"在什么样的相机位姿最符合当前观测数据"这样的问题.一种典型的方式是将它构建成一个优化问题,求解最优的R,t,使得误差最小化.

比如说相机旋转,我们估计它旋转了15度,但是观测值是16度,那么如何将我们的估计值调整到16度呢,这就牵涉到了怎么求目标函数关于运动的导数(目标函数是关于旋转或关于运动的函数f®),也就是说,我们需要弄清楚当运动发生变化的时候,目标函数是怎么变化的.

旋转矩阵自身是带有约束的(正交且行列式为1),它们作为优化变量时,会引入额外的约束,使优化变得复杂困难.通过李群–李代数之间的转换关系,可以把位姿估计变成无约束的优化问题,简化求解方式.

个人理解:为什么要引入李群与李代数?

在slam问题中,进行位姿估计以及优化等操作的时候,就不可避免地需要对目标地运动进行求导,而导数的本质就是一个函数值减去另外一个函数值然后再除以一个无穷小量。 比如说我们需要对相机的运动进行估计,相机的位姿我们可以由旋转矩阵以及平移向量来表述,所以很自然地,在进行运动求导地时候就一定会进行类似的相机旋转矩阵加减的运算。这就出现了一个很致命的问题:旋转矩阵之间进行乘法运算的时候具有封闭性,即旋转矩阵乘以一个旋转矩阵还是一个旋转矩阵,但是它对加法不具有封闭性(一个旋转矩阵加上一个旋转矩阵得到的矩阵就不一定是一个旋转矩阵了)。这也就意味着,我们无法通过对旋转矩阵求导完成相机的运动估计以及优化等问题。

而李群与李代数的引入就解决了这个问题。在SLAM中,我们可以直接将旋转矩阵当成李群,由旋转矩阵推导出来的旋转向量我们可以直接当成李代数。我们通过李群与李代数,将原本旋转矩阵(李群)的乘法运算转换成旋转向量(李代数)的加法运算,然后再利用李群与李代数之间的指数映射与对数映射,将通过加法运算得出来的结果映射回李群,这样就相当于间接地完成了旋转矩阵的加法运算,然后就可以对运动进行求导。

1.李群

三维旋转矩阵构成了特殊正交群SO(3):
SO(3)={R∈R3×3∣RRT=I,det(R)=1}SO(3)=\left\{ R \in \mathbb{R}^{3 \times 3} \ | \ RR^T=I,det(R)=1 \right\} SO(3)={R∈R3×3 ∣ RRT=I,det(R)=1}
三维变换矩阵构成了特殊欧式群SE(3):
SE(3)={T=[Rt0T1]∈R4×4∣R∈SO(3),t∈R3}SE(3)=\left\{ T=\left[ \begin{matrix} R & t\\ 0^T & 1 \end{matrix} \right] \in \mathbb{R}^{4 \times 4}\ | \ R \in SO(3),t \in \mathbb{R}^3 \right\} SE(3)={T=[R0T​t1​]∈R4×4 ∣ R∈SO(3),t∈R3}

什么是群?
群是一种集合加上一种运算的代数结构,我们把集合记作A,运算记作"⋅\cdot⋅",那么群可以记作G=(A,⋅)G=(A,\cdot)G=(A,⋅).群要求运算要满足一下几个条件: **封 结 幺 逆 **
1.封闭率
2.结合律
3.幺元
4.逆

其中,封闭率和结合率不必解释.幺元的意思就是说,在集合A中,一定要存在一个元素(a0a_0a0​),使得这个元素和任意其他集合中的元素(aaa)进行运算的时候都等于那个元素,比如说,如果这个集合是整数集,运算是加法,那么这个幺元就是0,因为任何数与0相加都不变;如果运算是乘法,那么这个幺元就是1,因为任何数与1相乘都等于它本身.

至于第四个条件逆的意思就是说,在集合A中,对于任何一个元素a,都有另外一个元素b,它们两个的运算结果为1

李群是指具有连续(光滑)性质的群.–整数群是离散的,所以不是李群

直观上看,一个刚体能够连续地在空间中运动,所以SO(3)和SE(3)都是李群.但是SO(3)和SE(3)只有定义良好地乘法,没有加法(关于加法不封闭),所以很难进行取极限,求导等操作.但是在后面进行位姿估计与优化的时候需要对相近的运动进行求导,否则我们是无法确定什么样的位姿更适合当前的观测的.所以有了下面的李代数.

2.李代数,指数映射

  • 李代数:与李群相对应的一种结构,位于向量空间.

    • 通常以小写的so(3)和se(3)表示,书中以哥特体突出显示.
    • 事实上是李群单位元处的正切空间.
    • 每个李群都有与之对应的李代数(如SO(3)SO(3)SO(3)–so(3)so(3)so(3), SE(3)SE(3)SE(3)–se(3)se(3)se(3))
  • 李代数的引出:

    • 任意旋转矩阵RRR,它满足:RRT=IRR^T=IRRT=I.如果它表示某个相机的旋转,随时间连续变化,那么它可以这么表示:
      R(t)R(t)T=IR(t)R(t)^T=I R(t)R(t)T=I
      等式两边对时间求导,得:
      R˙(t)R(t)T+R(T)R˙(t)T=0=>R˙(t)R(t)T=−(R˙(t)R(t)T)T\dot{R}(t)R(t)^T+R(T)\dot{R}(t)^T=0 \\ =>\ \dot{R}(t)R(t)^T=-(\dot{R}(t)R(t)^T)^T R˙(t)R(t)T+R(T)R˙(t)T=0=> R˙(t)R(t)T=−(R˙(t)R(t)T)T
      可以看出,R˙(t)R(t)T\dot{R}(t)R(t)^TR˙(t)R(t)T是一个反对称矩阵.那么我们就可以找到一个三维向量ϕ(t)∈R3\phi(t) \in \mathbb{R}^3ϕ(t)∈R3与它对应:
      R˙(t)R(t)T=ϕ(t)∧\dot{R}(t)R(t)^T=\phi(t)^{\wedge} R˙(t)R(t)T=ϕ(t)∧
      等式两边右乘RRR,由于RRR为正交阵,有:
      R˙(t)=ϕ(t)R(t)=[0−ϕ3ϕ2ϕ30−ϕ1−ϕ2ϕ10]R(t)\dot{R}(t)=\phi(t)R(t)=\left[ \begin{matrix} 0 & -\phi_3 & \phi_2\\ \phi_3 & 0 & -\phi_1\\ -\phi_2 & \phi_1 & 0 \end{matrix} \right]R(t) R˙(t)=ϕ(t)R(t)=⎣⎡​0ϕ3​−ϕ2​​−ϕ3​0ϕ1​​ϕ2​−ϕ1​0​⎦⎤​R(t)
      可以看到每对旋转矩阵求一次导数,就相当于左乘一个ϕ(t)T\phi(t)^Tϕ(t)T矩阵即可.可以看到,上式是一个关于R(t)R(t)R(t)的微分方程.考虑t0=0t_0=0t0​=0时,设此时旋转矩阵为R(0)=IR(0)=IR(0)=I,同时在t0t_0t0​附近,设ϕ\phiϕ保持为常数ϕ(t0)=ϕ0\phi(t_0)=\phi_0ϕ(t0​)=ϕ0​.那么就有:
      R˙(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)\dot{R}(t)=\phi(t_0)^{\wedge}R(t)=\phi_0^{\wedge}R(t)\\ R˙(t)=ϕ(t0​)∧R(t)=ϕ0∧​R(t)
      解这个微分方程方程得:
      R(t)=exp(ϕ0∧t)\color{fuchsia} R(t)=exp(\phi_0^{\wedge}t) R(t)=exp(ϕ0∧​t)
      这说明:在t=0t=0t=0附近,旋转矩阵可以由 exp(ϕ0∧t)exp(\phi_0^{\wedge}t)exp(ϕ0∧​t) 计算出来.

    上面的ϕ\phiϕ就是一种李代数.SO(3)SO(3)SO(3)对应的李代数是定义在R3\mathbb{R}^3R3上的向量,记作ϕ\phiϕ.每一个ϕ\phiϕ都有一个反对称矩阵:
    Φ=ϕ∧=[0−ϕ3ϕ2ϕ30−ϕ1−ϕ2ϕ10]∈R3×3\Phi=\phi^{\wedge}=\left[ \begin{matrix} 0 & -\phi_3 & \phi_2\\ \phi_3 & 0 & -\phi_1\\ -\phi_2 & \phi_1 & 0 \end{matrix} \right]\in \mathbb{R}^{3 \times 3} Φ=ϕ∧=⎣⎡​0ϕ3​−ϕ2​​−ϕ3​0ϕ1​​ϕ2​−ϕ1​0​⎦⎤​∈R3×3

那么又如何计算exp(ϕ0∧)exp(\phi_0^{\wedge})exp(ϕ0∧​)?显然它是一个矩阵的指数,在李群和李代数中,称它为指数映射.

任意矩阵的指数映射,我们可以将它泰勒展开:
exp(A)=∑n=0∞1n!Anexp(A)=\sum_{n=0}^{\infty}\frac{1}{n!}A^n exp(A)=n=0∑∞​n!1​An
同样的,对so(3)中的任意元素ϕ\phiϕ,我们也可以按此方式定义它的指数映射:
exp(ϕ∧)=∑n=0∞1n!(ϕ∧)nexp(\phi^{\wedge})=\sum_{n=0}^{\infty}\frac{1}{n!}{(\phi^{\wedge})}^n exp(ϕ∧)=n=0∑∞​n!1​(ϕ∧)n
但是这个式子中包含了矩阵的无穷次幂,是不好直接计算的. 因为ϕ\phiϕ是三维向量,我们可以定义ϕ\phiϕ的模长和方向:

ϕ\phiϕ的模长记作: θ\thetaθ ϕ\phiϕ的方向记作: a\boldsymbol{a}a

这里a\boldsymbol{a}a是一个长度为1的方向向量,即∣∣a∣∣=1\left| \right | a \left| \right |=1∣∣a∣∣=1.对于a\boldsymbol{a}a,有一下两条性质:
a∧a∧=[−a22−a32a1a2a1a3a1a2−a12−a32a2a3a1a3a2a3−a12−a22]∈R3×3\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge}= \left[ \begin{matrix} -a_2^2-a_3^2 & a_1a_2 & a_1a_3 \\ a_1a_2 & -a_1^2-a_3^2 & a_2a_3 \\ a_1a_3 & a_2a_3 & -a_1^2-a_2^2 \end{matrix} \right]\in \mathbb{R}^{3 \times 3} \\ a∧a∧=⎣⎡​−a22​−a32​a1​a2​a1​a3​​a1​a2​−a12​−a32​a2​a3​​a1​a3​a2​a3​−a12​−a22​​⎦⎤​∈R3×3
a∧a∧a∧=a∧(aaT−I=−a∧)\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge}=\boldsymbol{a}^{\wedge}(\boldsymbol{a}\boldsymbol{a}^T-I=-\boldsymbol{a}^{\wedge}) a∧a∧a∧=a∧(aaT−I=−a∧)
这两个式子提供了处理a∧\boldsymbol{a}^{\wedge}a∧高阶项的做法.我们就可以将指数映射写成:

exp(ϕ∧)=exp(θa∧)=∑n=0∞1n!(a∧)n=I+θa∧+12!θ2a∧a∧+13!θ3a∧a∧a∧+14!θ4(a∧)4+...=...=cosθI+(1−cosθ)aaT+sinθa∧\begin{aligned} exp(\phi^{\wedge})&=exp(\theta \boldsymbol{a}^{\wedge} ) = \sum_{n=0}^{\infty}\frac{1}{n!}{(\boldsymbol{a}^{\wedge})}^n\\ &=I+\theta \boldsymbol{a}^{\wedge} +\frac{1}{2!}\theta ^2\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge} + \frac{1}{3!}\theta ^3\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge}\boldsymbol{a}^{\wedge}+ \frac{1}{4!}\theta ^4(\boldsymbol{a}^{\wedge})^4+\ ...\\ &=\ ... \\ &=cos\theta I + (1-cos\theta)\boldsymbol{a}\boldsymbol{a}^T+sin\theta \boldsymbol{a}^{\wedge} \end{aligned} exp(ϕ∧)​=exp(θa∧)=n=0∑∞​n!1​(a∧)n=I+θa∧+2!1​θ2a∧a∧+3!1​θ3a∧a∧a∧+4!1​θ4(a∧)4+ ...= ...=cosθI+(1−cosθ)aaT+sinθa∧​

可以看到,最后的结果,将exp(ϕ0∧)exp(\phi_0^{\wedge})exp(ϕ0∧​)进行泰勒展开之后得到了这样一个式子:
exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧exp(\theta \boldsymbol{a}^{\wedge} )=cos\theta I + (1-cos\theta)\boldsymbol{a}\boldsymbol{a}^T+sin\theta \boldsymbol{a}^{\wedge} exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧

罗德里格斯公式.这表明so(3)实际上就是又所谓的旋转向量组成的空间,而所谓的指数映射就是上面的这个罗德里格斯公式 .通过它们,我们将so(3)中的任意一个向量对应到了一个位于SO(3)中的旋转矩阵.

反之,如果定义对数映射,也能把SO(3)中的元素对应到so(3)中:
ϕ=ln(R)∨=(∑n=0∞(−1)nn+1(R−I)n+1)∨=>θ=arccostr(R)−12,Ra=a\phi=ln(R)^{\vee}=\left (\sum_{n=0}^{\infty}\frac{(-1)^n}{n+1}(R-I)^{n+1}\right )^{\vee}\\ =>\ \ \theta =arccos\frac{tr(R)-1}{2}\ ,\ \ Ra=a ϕ=ln(R)∨=(n=0∑∞​n+1(−1)n​(R−I)n+1)∨=>  θ=arccos2tr(R)−1​ ,  Ra=a

上面是关于李代数so(3)及其指数映射与对数映射


下面是关于李代数se(3)及其指数映射与对数映射

对于SE(3),它也有对应的李代数se(3).与so(3)类似,se(3)位于R6\mathbb{R}^6R6空间中:
se(3)={ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧ρ0T0]∈R4×4}se(3)=\left\{ \xi= \left[\begin{matrix} \rho \\ \phi \end{matrix} \right] \in \mathbb{R}^6, \rho\in\mathbb{R}^3, \phi\in so(3), \xi^{\wedge}=\left[\begin{matrix} \phi^{\wedge} & \rho \\ \bold{0}^T & 0 \end{matrix} \right] \in \mathbb{R}^{4 \times 4} \right\} se(3)={ξ=[ρϕ​]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0T​ρ0​]∈R4×4}
我们把们个se(3)元素记作ξ\xiξ,它是一个六维向量,前三维为平移(ρ\rhoρ),后三维为旋转(ϕ\phiϕ).

se(3)的指数映射如下:
exp(ξ∧)=[∑n=0∞1n!(ϕ∧)n∑n=0∞1(n+1)!(ϕ∧)nρ01]≜[RJρ01]=T\begin{aligned} exp(\xi^{\wedge})&=\left [ \begin{matrix} \sum_{n=0}^{\infty}\frac{1}{n!}{(\phi^{\wedge})}^n & \sum_{n=0}^{\infty}\frac{1}{(n+1)!}{(\phi^{\wedge})}^n\rho \\ \boldsymbol{0} & 1 \end{matrix} \right ] \\ &\triangleq \left [ \begin{matrix} R & J\rho \\ \boldsymbol{0} & 1 \end{matrix} \right ]=\boldsymbol{T} \end{aligned} exp(ξ∧)​=[∑n=0∞​n!1​(ϕ∧)n0​∑n=0∞​(n+1)!1​(ϕ∧)nρ1​]≜[R0​Jρ1​]=T​

其中JJJ:
J=sinθθI+(1−sinθθaaT+1−cosθθa∧)J=\frac{sin\theta }{\theta} I + \left( 1-\frac{sin\theta}{\theta}\boldsymbol{a}\boldsymbol{a}^T+ \frac{1-cos\theta}{\theta}\boldsymbol{a}^{\wedge} \right) J=θsinθ​I+(1−θsinθ​aaT+θ1−cosθ​a∧)
该式与罗德里格斯公式类似,但不完全一样. 可以看到,平移部分经过指数映射之后,发生了一次以JJJ为系数矩阵的线性变换.

反过来,对数映射如下:
θ=arccostr(R)−12,Ra=a,t=Jρ\theta =arccos\frac{tr(R)-1}{2}\ ,\ \ Ra=a\ ,\ \ t=J\rho θ=arccos2tr(R)−1​ ,  Ra=a ,  t=Jρ

3.李代数求导与扰动模型

待补充…

<视觉SLAM十四讲> 李群与李代数相关推荐

  1. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  2. 视觉SLAM十四讲笔记-第四讲 李群与李代数

    目录 前提摘要: 一.群 1.1注意对象不同 1.2 概念 二.李群与李代数 2.1 李群 (Lie Group) 2.2 李代数 三.指数映射和对数映射 3.1 李代数so(3)指数映射 3.2 s ...

  3. 视觉SLAM十四讲——第四讲李群与李代数

    @ <视觉SLAM十四讲>知识点与习题 <视觉SLAM十四讲>第四讲知识点整理+习题 正在学习SLAM相关知识,将一些关键点及时记录下来. 知识点整理 本讲主要解决**什么样的 ...

  4. 视觉slam十四讲 学习笔记-3(李群和李代数)

    第一次听没有怎么懂这一章节,后来又重新学习了一遍才弄懂了一点.我发现pdf教材一行一行抠细节全部看一遍还是能够理解的,很多推导和逻辑都比视频清晰很多. 目录 李群和李代数: 李群 : 李代数引出: 李 ...

  5. 视觉SLAM十四讲学习笔记-第四讲-Sophus实践、相似变换群与李代数

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  6. 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模型

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  9. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  10. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. POJ 1837 Balance(01背包变型)
  2. 为什么static成员一定要在类外初始化?
  3. Python多线程——LOCK锁
  4. python 发邮件 timeout_python发送邮件
  5. py06-python基础-字典
  6. linux启动本地远程服务,如何使用SSH在本地控制远程服务器执行命令
  7. 基于斗鱼的娱乐直播视频平台--Vue移动端页面
  8. 怎么删除映射网络里的计算机,win10系统删除右键中“映射网络驱动器和断开网络驱动器”选项的详细办法...
  9. 怎样使用裁剪图片软件随意裁剪图片尺寸?
  10. Linux服务器命令
  11. 学计算机的应届生怎么面试自我介绍,最新应届生面试自我介绍(精选3篇)
  12. linux外接无线网卡,外接无线网卡+linux配置指南
  13. 【golang】go app 优雅关机 Graceful Shutdown How?
  14. Eigen内存分配器aligned_allocator
  15. 在资源管理器中隐藏指定分区
  16. 机器学习入门 - Google的机器学习速成课程
  17. 佟年计算机大赛,《亲爱的,热爱的》热播,吴白见到佟年第一眼,这眼神亮了!...
  18. 智慧城市地下综合管廊环境监控系统
  19. OSPF建立邻居、邻接关系
  20. T2080复位时序分析

热门文章

  1. 小米SN保修_一次真实但糟糕的小米笔记本售后
  2. 音频信号的基波、谐波
  3. cad角度怎么画_软件CAD | 各种“线”工具
  4. python-人工智能-遗传算法的实现
  5. 【Unicode编码表】UniCode编码表+转化器
  6. 墨者安全调查:2018年DDoS威胁与黑灰产业调查报告
  7. SWITCH 和ROUTE的故事(来自Csico论坛)
  8. html文件记事本打开乱码,如何解决记事本打开出现乱码
  9. sphinx分词搜索
  10. Windows Git 多用户多仓库配置