SLAM后端优化(续)

一、“续”的由来

上一篇文章已经讲了SLAM的后端优化,使用的是Bundle Adjustment方法。而且介绍了如何利用矩阵的稀疏性加速运算。不过现实往往比我们想象的更残酷,即使利用稀疏性加速,随着地图越来越大,计算量仍然会增大到无法承受的地步。

于是,聪明的人们又想出各种方法加速优化,这就是本文将要介绍的内容。

在上一篇文章提到的BA图优化中,是把所有相机位姿和路标点都放在一起优化。从优化目标的数量入手,我们可以想办法做一些简化。比如,只优化相机位姿而不优化路标点,就是所谓的“位姿图(Pose Graph)优化”。只优化局部区域的相机位姿和路标点,并考虑不同位姿的权重,称为“共视图(Covisibility Graph)优化”。将图化简为最小生成树再优化,称为“本质图(Essential Graph)优化”。共视图优化和本质图优化是ORB-SLAM中采用的优化方式,具体内容可以参考相关论文。本文着重介绍一下位姿图优化。

二、位姿图(Pose Graph)的意义

这里所说的图其实就是图优化中图的概念。仍然是用顶点表示优化变量,用边表示误差项。回忆上一篇文章中的BA优化,是把相机位姿和路标点当成优化变量,把路标点的重投影误差当成误差项,只在相机位姿顶点和路标点之间建立边的连接。现在,为了减小运算量,我们只把相机位姿当成优化变量,让相邻的相机位姿之间用边连接起来。此时,边表达的就不是重投影误差了,而是两个相机位姿之间相对运动估计的误差。这个误差是用相机位姿顶点的值计算出的相对运动与用特征点法估计的相机运动之间的偏差,本质上与重投影误差没有区别,都是调整相机位姿使路标点在相机平面上的投影最准确。

定义好优化变量和误差项后,接下来就是求误差项关于优化变量的偏导数。求导过程请脑补,此处省略5000字:-)

三、位姿图优化的效果

下图是一个待优化的相机位姿图,看起来有些扭曲。

优化前的位姿图

优化后变成了下面这个样子。

优化后的位姿图

多么完美的球体啊!

事实上,优化前的位姿图就是在生成的球体上添加了观测噪声后形成的。看来位姿图优化完全去除了噪声,恢复了正确的位姿。

这个例子的完整代码请到高翔博士的GitHub上下载,地址是:https://github.com/gaoxiang12/slambook/tree/master/ch11

四、参考资料

《视觉SLAM十四讲》第11讲 后端2 高翔
有人知道orb-slam中的covisibility graph的定义吗? 知乎
ORB-SLAM Raúl Mur-Artal, Juan D. Tardós, J. M. M. Montiel

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 前言 开始做SLAM(机器人同时定位与建图)研究已经近一年了。从一年级开始对这个方向产生兴趣,到现在为止,...
    壹米玖坤阅读 1,150评论 4 8
  • 一、什么是后端优化 上一篇文章介绍了视觉里程计的设计与实现,也就是所谓的“前端”。既然有前端就一定有后端,本文就来...
    金戈大王阅读 11,660评论 2 6
  • 协作SLAM通常是部署在多台机器人上的多个SLAM系统,它们各自实现自己的定位和建图,当地图区域出现重叠时进行地图...
    金戈大王阅读 2,741评论 0 2
  • 林李大战如期而至,打开电视,为我们这一代人的记忆画上句号。 羽毛球在球拍之间清脆的声音在里约赛场上响起,让我想起了...
    旌奚阅读 188评论 0 2
  • 以前上班的时候,好像每天都在加班,回到租的地方,也没力气再做点什么,无非就是无意义的消遣。想想那几年挺傻,因为还自...
    RenaX阅读 159评论 0 0