0. 简介
这几个月,博主已经从SLAM算法的使用向着算法的数学推导进行了记录和分享,之前也分享了李群李代数关注核心一文,从现象中解释了李群和李代数表达的含义。但是这还不够,所以这次作者作为SLAM本质剖析的番外,来介绍李群李代数的微分和导数。
1. 旋转点求导
李群或者李代数上叠加微小量的情况呢?传统的求导过程中,我们常见的做法是对自变量添加一个微小值来进行:
但是这种形式对于旋转矩阵 我们不能这么做,因为李群对加法不封闭,因此两个旋转矩阵相加不一定是旋转矩阵,但是利用李代数,根据下面两个方向的 BCH 近似不难看出我们有两种思路进行求导,分别是:
-
用李代数(旋转向量)来表示姿态,然后利用李代数加法叠加微小量并对该微小量进行求导
- 李代数求导:在李群对应的李代数的局部坐标上,即:( ) 上添加扰动,即: ,由于李代数本身对应旋转向量,因此对旋转向量添加扰动相当于同时改变旋转轴和旋转角度。
-
用李群(旋转矩阵)表示姿态,然后左/右乘上一个扰动,然后对该扰动求导,即左扰动模型和右扰动模型
- 旋转矩阵右扰动求导:由于旋转矩阵没有加法,因此要对旋转矩阵本身添加扰动,需要先通过指数映射将李代数转化为李群,然后根据李群的运算来添加扰动,即: ,由于是旋转矩阵右乘扰动,因此相当于是在局部坐标系下对旋转矩阵进行更新
- 旋转矩阵左扰动求导:和右扰动同理,我们也可以将扰动添加在旋转矩阵左侧,即: ,由于是旋转矩阵左乘扰动,因此相当于在全局坐标系下对旋转矩阵进行更新
李代数这样的形式我们可以理解,Ceres也是通过这样的形式进行来实现李代数的累加。但是李群就需要根据BCH来进行计算了。
2 是什么
为了明白在李群李代数公式中各个成员的含义,我们给出例子来解释不同的变量。假设我们对空间一个点 使用旋转矩阵 进行旋转得到 :
该式子在实际计算时可以施加微小扰动 ,通过最小化扰动来对误差进行线性化,并近似转换为,从而求出在 到 的情况下 的变化。此刻默认 是已知的。
得到基于 的偏导 --------也就是 是函数在 的雅可比矩阵
3 、 和 的含义
对于李群而言,由于其没有向量空间上的加法操作,因此为了引入导数的概念,这里用一个映射将局部坐标 映射到李群元素 在李群空间附近的邻域上,用来作为李群上的 “加法” 操作,所以常常会使用 来表示李群的加法,如下所示:
式中, 是 系下的局部坐标,这个也是我们所说的极小值右乘的做法,以李群 SO(3) 为例,局部坐标可以表示为 ,其几何意义为以 作为参考系下的一个角度扰动;
为 的对应李代数,当然也可以像上面表示为 ;
为李代数到李群的指数映射;
为李代数,李代数可以转化为反对称矩阵。通过
来表示角度扰动(旋转轴+旋转角度)的旋转向量。
4 由BCH得到的左扰动和右扰动基础公式
首先将旋转矩阵(李群 )转换为旋转向量(李代数 ),并对旋转向量求导:
最后我们得到以下结果:
因为 一般乘上的是极小值,所以在一般情况是可以省略的。这就可以根据类似的推导得到左扰动公式:
不难看出来,利用左扰动模型计算的导数比使用李代数直接求导省去了一个 的计算,因此更为实用,同时理论上精度也会更高(因为在计算该矩阵时需要近似)。
下面是右扰动公式:
相比于左扰动的模型中计算 的反对称矩阵,右扰动模型计算的是 的反对称矩阵,因此有细微的区别,使用时注意区分。
5 连乘李群的求导
除了旋转点以外,我们还经常需要对两个旋转叠加的结果 对其中一个旋转进行求导,这也是我们在SLAM中最常用的公式,经常是一个李群乘以一个极小的李群来作为状态量的的累加,从而推算出当前机器人的位姿。
求导形式取决于我们对函数定义方式,通常来说函数需要将变量映射到向量空间,因此这里我们将旋转通过对数映射转化为对应李代数的坐标(3维向量),并对该函数进行线性化从而求解雅可比矩阵,即:
首先,对 求导,此时固定 :
- 右扰动模型
如下所示:
- 左扰动模型
过程大同小异
进一步再对 求导,此时固定 , 为极小值。
- 右扰动模型
过程如下:
- 左扰动模型
过程如下:
可以发现,无论是对 还是 使用左扰动或者右扰动求导,我们总是想办法使用 BCH 或者 伴随性质将 凑到一起与第二项相减,将扰动单独分离出来获得结果,过程大同小异。
根据极小值可以推导得到下面的简式:
6. 参考链接
https://hermit.blog.csdn.net/article/details/121034589
https://zhuanlan.zhihu.com/p/356409543
https://xiaotaoguo.com/p/gtsam-math-derivatives/
https://www.bilibili.com/read/cv13649489
评论(0)
您还未登录,请登录后发表或查看评论