第四讲 李群与李代数

 为什么讲李群与李代数?要解决李群上只有乘法没有加法的问题,没法定义导数(没办法对旋转矩阵和变换矩阵做加法,令这个加法趋于0)。引入李代数之后就有了求导的途径。

目录

0、引入

1、李群与李代数基础

1.1 李群

1.2 李代数的引出

 1.3 李代数的定义

1.4 李代数so(3)

1.5 李代数se(3)

2、指数与对数映射

2.1 so(3)上的指数映射

 2.2 se(3)上的指数映射

2.3 SO(3),SE(3),so(3),se(3)的对应关系

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

4、实践:Sophus

5、涉及公式

6、代码运行踩坑记录(slambook与slambook2)


0、引入

三维旋转矩阵构成了特殊正交群SO(3),变换矩阵构成了特殊欧式群SE(3)。两者对加法不封闭,对乘法是封闭的。

 特殊正交群SO(n)=R \in \mathbb{R}^{n\times n}|RR^{T}=I,det(R)=1

特殊欧式群SE(3)=\left \{ T=\begin{bmatrix} R & t \\ 0^{T} & 1 \end{bmatrix} \in \mathbb{R}^{4\times 4}| R \in SO(3), t \in \mathbb{R}^{3} \right \}

1、李群与李代数基础

1.1 李群

  • 群是一种集合加上一种运算的代数结构。群记作G=(A,▪)。群要求这个运算满足以下四个条件(封结幺逆)
    • 封闭性:\forall a_1,a_2\in A, a_1\cdot a_2\in A
    • 结合律:\forall a_1,a_2,a_3\in A, (a_1\cdot a_2)\cdot a_3=a_1\cdot (a_2\cdot a_3)
    • 幺元:\exists a_0 \in A, s.t. \forall a\in A,a_0\cdot a=a\cdot a_0=a
    • 逆:\forall a\in A,\exists a^{-1}\in A,a\cdot a^{-1}=a_0
  • 旋转矩阵集合和矩阵乘法构成群;同样变换矩阵集合和矩阵乘法构成群。
  • 李群是指具有连续(光滑)性质的群。像整数群那样离散的群没有连续性质,因此不是李群。而SO(n),SE(n)在实数空间上是连续的,能够直观想象一个刚体能够连续地在空间中运动,所以它们都是李群。

1.2 李代数的引出

  • 对于任意旋转矩阵R,满足RR^T=IR是某个相机的旋转,随时间连续变化,即为时间的函数R(t)可以推导出在t=0附近:\dot{R}(t)=\phi (t_0)^{\wedge}R(t)=\phi_0^{\wedge}R(t),进而推导出R(t)=\exp (\phi_0^{\wedge}t)
    •  由于仍然是旋转矩阵,有R(t)R(t)^T=I,对两边求导得到\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
    • 可以看出\dot{R}(t)R(t)^T是一个反对称矩阵,我们可以找到一个三维向量\o \O \AE\phi (t)\in \mathbb{R}与之对应:\dot{R}(t)R(t)^T=\phi (t)^{\wedge}
    • 上式两边右乘R(t)得到:\dot{R}(t)=\phi (t)^{\wedge}R(t)=\begin{bmatrix} 0 & -\phi_3 & \phi_2 \\ \phi_3 & 0 & -\phi_1 \\ -\phi_2 & \phi_1 & 0 \end{bmatrix}R(t)
    • 可以看出,每对旋转矩阵求一次导数,只需左乘一个\phi (t)^{\wedge}矩阵即可
    • 将R(t)在t=0附近进行泰勒展开:R(t)\approx R(t_0)+\dot{R}(t_0)(t-t_0)=I+\phi(t_0)^{\wedge}(t)
    • 可以看到\phi反映了R的导数性质,故称它在SO(3)原点附近的正切空间上。同时在t_0附近,设\phi保持为常数\phi(t_0)=\phi_0,因此在t_0附近有\dot{R}(t)=\phi (t_0)^{\wedge}R(t)=\phi_0^{\wedge}R(t)
    • 上式是一个关于R的微分方程,而且有初始值R(0)=I,求解得:R(t)=\exp (\phi_0^{\wedge}t)
  • 因此,在t=0附近,旋转矩阵可以由\exp (\phi_0^{\wedge}t)计算出来。
  • 我们可以看到,旋转矩阵R与另一个反对称矩阵\phi_0^{\wedge}t通过指数关系发生了联系,但是矩阵的指数是什么?这里有两点需要注意:
    • 给定某时刻的R,我们就能求得一个\phi它描述了R在局部的导数关系与R对应的\phi有什么含义呢?\phi正是对应到SO(3)上的李代数so(3)。
    • 给定某个向量\phi时,矩阵指数\exp (\phi^{\wedge})如何计算?反之给定R,能否有相反的运算来计算\phi?事实上,这正是李群与李代数间的指数/对数映射。

 1.3 李代数的定义

  • 每个李群都有与之对应的李代数。李代数描述了李群的局部性质,准确来说,是单位元附近的正切空间。
  • 李代数由一个集合\mathbb{V},一个数域\mathbb{F}和一个二元运算[,]组成。如果它们满足以下性质,则称(\mathbb{V},\mathbb{F},[,])为一个李代数,记作\mathfrak{g}
    • 封闭性
    • 双线性
    • 自反性:\forall X\in \mathbb{V},[X,X]=0。李代数要求元素与自己做李括号之后为零。
    • 雅可比等价
  • 示例:三维向量上定义的叉积是一种李括号,因此\mathfrak{g}=(\mathbb{R}^3,\mathbb{R},\times )构成了一个李代数。

1.4 李代数so(3)

  • 第二章提到的\phi事实上是一种李代数。SO(3)对应的李代数是定义在\mathbb{R}^3上的向量,我们记作\phi
  • 在此定义下,两个向量\phi_1,\phi_2的李括号:[\phi_1,\phi_2]=(\Phi _1\Phi _2-\Phi _2\Phi _1)^{\vee}。(^{\vee}代表从矩阵到向量)
  • 由于向量\phi与反对称矩阵是一一对应的,在不引起歧义的情况下,就说\mathfrak{so}(3)的元素是三维向量或者三维反对称矩阵,不加区别:\mathfrak{so}(3)=\{\phi \in \mathbb{R},\Phi=\phi^{\wedge}\in\mathbb{R}^{3\times 3} \}
  • \mathfrak{so}(3)的内容,它们是一个由三维向量组成的集合,每个向量对应一个反对称矩阵,可以用于表达旋转矩阵的导数。它与SO(3)的关系由指数映射给定:R=\exp (\phi^{\wedge})

1.5 李代数se(3)

  • SE(3)对应的李代数\mathfrak{se}(3)位于\mathbb{R}^6空间中:\mathfrak{se}(3)= \left \{ \xi = \begin{bmatrix} \rho \\ \phi \end{bmatrix}\in\mathbb{R}^6,\rho \in \mathbb{R}^3,\phi \in \mathfrak{so}(3),\xi^{\wedge}=\begin{bmatrix} \phi^{\wedge} & \rho\\ 0^T & 0 \end{bmatrix} \in \mathbb{R}^{4\times 4} \right \}
  • \mathfrak{se}(3)元素记作\xi,是一个六维向量。前三维是平移,后三维是旋转。
  • ^指代从向量到矩阵,^{\vee}代表从矩阵到向量
  • \rho不直接是平移
  • 李代数\mathfrak{se}(3)的李括号:[\xi_1,\xi_2]=(\xi_1^{\wedge}\xi_2^{\wedge}-\xi_2^{\wedge}\xi_1^{\wedge})^{\vee}

2、指数与对数映射

2.1 so(3)上的指数映射

  • 如何计算\exp (\phi^{\wedge}),这是一个矩阵的指数,在李群与李代数中,成为指数映射
  • 任意矩阵A的指数映射可以写成一个泰勒展开(只在收敛的情况下有结果,结果仍是矩阵):\exp (A)=\sum_{n=0}^{\infty}\frac{1}{n!}A^n
  • 因此,\exp (\phi^{\wedge})=\sum_{n=0}^{\infty}\frac{1}{n!}(\phi^{\wedge})^n,推导可得:\exp (\phi^{\wedge})=\exp (\theta a^{\wedge})=cos\theta I + (1-cos\theta)aa^T+sin\theta a^{\wedge}
    • \phi是三维向量,可以定义它的模长和方向。\phi=\theta a,这里a是一个长度为1的方向向量。
    • 对于a^{\wedge}有以下两个性质a^{\wedge}a^{\wedge}=aa^T-Ia^{\wedge}a^{\wedge}a^{\wedge}=a^{\wedge}(aa^T-I)=-a^{\wedge}
    • 结合以上2个性质,以及cos\thetasin\theta的泰勒展开形式进行推导,最终可得\exp (\phi^{\wedge})=\sum_{n=0}^{\infty}\frac{1}{n!}(\theta a^{\wedge})^n=cos\theta I + (1-cos\theta)aa^T+sin\theta a^{\wedge}
  • 上式与罗德里格斯公式一致。so(3) 实际上就是所谓的旋转向量组成的空间,而指数映射即罗德里格斯公式
  • 通过指数映射(罗德里格斯公式),可以把so(3)中任意一个向量对应到一个位于SO(3)的旋转矩阵
  • 反之如果定义对数映射,也能把SO(3)中的元素对应到so(3)中:\phi=ln(R)^{\vee}=(\sum_{n=0}^{\infty }\frac{(-1)^n}{n+1}(R-I)^{n+1})^{\vee}。与指数映射一样,可以利用迹的性质分别求解转交和转轴。
  • 如果把旋转角度规定在-180到180,那么李群和李代数元素是一一对应。
  • 通过指数映射,旋转矩阵的导数可以由旋转向量指定,指导着如何在旋转矩阵中进行微积分运算。

 2.2 se(3)上的指数映射

2.3 SO(3),SE(3),so(3),se(3)的对应关系

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

  • 通过BCH线性近似,可以定义李代数的导数,进而可以推导so(3)和se(3)上的导数和扰动模型。
  • 考虑一个基本问题:旋转后的点关于旋转的导数,不严谨地记为:\frac{\partial (Rp)}{\partial R},由于R没有加法,导数无从定义。
  • 存在两种解决办法:
    • 对R对应的李代数加上小量,求相对于小量的变化率(导数模型)
    • 对R左乘或右乘一个小量,求相对于小量的李代数的变化率(扰动模型)
    • 通常扰动模型比导数模型更简洁。

4、实践:Sophus

5、涉及公式

  • f(x)在点a的泰勒展开一般形式:f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^{2} + \frac{f'''(a)}{3!}(x-a)^{3} + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^{n} + \cdots
  • exp(x)在x=0的泰勒展开:\exp(x) = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \cdots + \frac{x^n}{n!} + \cdots

6、代码运行踩坑记录(slambook与slambook2)

  • slambook
    • 安装第三方库Sophus时,cmake .. 时,报警告,无需担心,不影响后面编译使用。
    • make 报错。
    •  参考网上方法解决,如下图所示。

  • slambook2
    • Sophus 下载最新版本安装时,报错:CMake 3.24 or higher is required.  You are running version 3.10.2。  但是使用ubuntu18.04 安装cmake版本就是3.10,怕冒然自己升级有问题。因此下载了Sophus 1.22.10 安装。
    • 安装第三方库Sophus编译报错
    • 解决方法:参考网友方法,安装fmt解决。
    • 安装之后sophous不报错,但编译ch4代码时报以下错误
    • 解决方法:引入fmt lib库

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值