浅谈SLAM学习过程中的疑惑(1)

注:这是我在知乎写的文章,现搬运至此。

1.《14讲》 p51页提到“事实上,我们找不到不带奇异性的三维向量描述方式”。那么我们平时使用的李代数,例如so(3),表现为一个三维向量,是否具有奇异性?如果李代数有奇异性,为什么还要使用李代数呢?(以下观点谨代表个人思考,并不代表正确,欢迎各位交流)

答:SLAM后端使用李代数表示位姿的原因是,旋转矩阵有单位正交的约束,使用李代数可以构建无约束优化问题。李群SO(3)和李代数so(3)之间的关系是满射但并不是单射,详见<状态估计>p191页最后一行,原文抄录于此:

从数学上看,从so(3)到SO(3)的指数映射是一个满射。这说明每一个SO(3)中的元素都可以对应多个so(3)中的元素。

李群的确具有奇异性,详见<机器人中的状态估计>p191,脚注10:

满射在旋转的参数化中,与奇异性(或非唯一性)的概念相关,我们知道每一个用三个参数表示旋转的方法都无法保证全局且唯一。非唯一性表明给定旋转矩阵C,我们无法唯一的找到一个  [公式] 去产生它,因为对应的  [公式] 有无数个。

但是如果我们限制旋转的角度 [公式] ,那么李群与李代数是一一对应的。所以,在SLAM系统里我们对李代数的范围加以限制,那么就不用考虑奇异性问题。


2.李代数求导中,扰动模型和直接求导有什么区别?迭代过程中我们的自变量是姿态并不是扰动,为什么却使用扰动的导数?(以下观点谨代表个人思考,并不代表正确,欢迎各位交流)

答: 首先需要说明的是,我们求导的目的是为了找到一个迭代方向和步长,来使重投影误差最小化。直接求导和扰动模型的确有很大差别,详情可参考<状态估计>p215,微积分和优化。现简要陈述如下:

1. 在后端优化中,直接求导即直接对李代数求导,自变量为李代数所表示的姿态。

2.针对于扰动模型,我们求导的自变量并不是姿态。而是扰动,换句话说,我们在挑选一个扰动,使得添加扰动后重投影误差减小。更进一步地说,我们先求解出扰动的方向,然后再选择一个步长,使重投影误差的下降最大化。举个例子,针对于某个旋转 [公式] ,其李代数表示为 [公式] ,我们在 [公式] 附近对 [公式] 施加一个扰动 [公式] 。然后我们在 [公式] 附近展开 :

[公式]

扰动后的旋转 [公式] 和点 [公式] 相乘时可以(不严谨地)写为:

[公式]

那么现在,我们设某个关于 [公式] 的非线性优化函数[公式],我们将扰动带入,然后在R0附近展开:

[公式]

如果我们可以求得 [公式] 和 [公式] ,那么我们只要选择一个使函数值减小的扰动就可以完成对非线性函数的迭代,使它的值不断减小。详情可以参阅<状态估计> p215-p219页,里面也有对高斯牛顿法的另外一种解释。


看到一篇好文章,也是关于李代数扰动的,推荐给大家!

https://zhuanlan.zhihu.com/p/75714471

猜你喜欢

转载自www.cnblogs.com/liuweixin/p/11901194.html
今日推荐