视觉SLAM十四讲阅读笔记五-图优化与g2o基础


这篇文章是阅读视觉SLAM十四讲第6讲非线性优化部分和高翔关于图优化与g2o库的博客过程中总结和记录的内容,属于SLAM系统优化的基础理论内容。

概述

SLAM问题的处理方法主要分为滤波和图优化两类。滤波的方法中常见的是扩展卡尔曼滤波、粒子滤波、信息滤波等,这种方法是递增的、实时的处理数据并矫正机器人位姿。比如基于粒子滤波的SLAM的处理思路是假设机器人知道当前时刻的位姿,利用编码器或者IMU之类的惯性导航又能够计算下一时刻的位姿,然而这类传感器有累计误差,所以再将每个粒子的激光传感器数据或者图像特征对比当前建立好的地图中的特征,挑选和地图特征匹配最好的粒子的位姿当做当前位姿,如此往复。当然在gmapping、hector_slam这类算法中,不会如此轻易的使用激光数据,激光测距这么准,当然不能只用来计算粒子权重,而是将激光数据与地图环境进行匹配(scan match)估计机器人位姿,比用编码器之流精度高出很多。

目前SLAM主流研究热点几乎都是基于图优化的,对于处理视觉SLAM,如果用EKF,随着时间推移地图扩大,内存消耗,计算量都很大;而使用图优化计算在高建图精度的前提下效率更高。

关于图优化

阅读参考资料1,通过例子更直观地理解图优化的原理。

图优化是目前视觉SLAM里主流的优化方式。其思想是把一个优化问题表达成图(Graph),以便我们理解、观察。一个图中有很多顶点,以及连接各顶点的边。当它们表示一个优化问题时,顶点是待优化的变量,而是指误差项。我们把各个边的误差加到一起,就得到了整个优化问题的误差函数。

图优化SLAM问题能够分解成两个任务:

  1. 构建图,机器人位姿当做顶点,位姿间关系当做边,这一步常常被成为前端(front-end),往往是传感器信息的堆积。
  2. 优化图,调整机器人位姿顶点尽量满足边的约束,这一步称为后端(back-end)。

图优化过程:先堆积数据,机器人位姿为构建的顶点,边是位姿之间的关系,可以是编码器数据计算的位姿,也可以是通过ICP匹配计算出来的位姿,还可以是闭环检测的位姿关系。首先是构建图,得到原始未经优化的地图,构建完成地图后,调整顶点满足边的约束,最后得到优化后的地图。

图的表达

下面这些图都是不同的表达形式,前三个是ORB-SLAM2中用到图。(关于图优化和常用的优化库g2o还需要再深入学习)

Covisibility Graph

共视图,是一个无向有权图(Graph),这个概念最早来自2010的文章[Closing Loops Without Places]。该图中每个顶点就是关键帧,如果两个关键帧有相同的地图点(即它们有共视点),就把这两个顶点连接起来,连接边的权重就是两个关键帧共享的3D点的个数。

Essential Graph

为了在优化阶段减小计算量,ORB-SLAM2作者提出了Essential Graph的概念,主要用它来进行全局优化。它是共视图的子集,即Covisibity Graph的最小生成树(MST)。该图中顶点是关键帧,但只连接某个关键帧和与之拥有最多共享的地图点的关键帧。这样能够连接所有的顶点,但是边会减少很多。

Spanning Graph

生成树

Pose Graph

如果我们对特征点的空间位置并不关心,就可以构建只带有关键帧结点,以及它们之间的边这样的图。由于一个照片中常常有上千个特征点,这样做可以节省许多计算量。

参考资料

  1. graph slam tutorial : 从推导到应用1
  2. graph slam tutorial :从推导到应用2
  3. graph slam tutorial :从推导到应用3
  4. 【SLAM】(二)Cartographer的原理探究——GraphSLAM理论基础
  5. 深入理解图优化与g2o:图优化篇
  6. 知乎问题

本文标题:视觉SLAM十四讲阅读笔记五-图优化与g2o基础

文章作者:阿翔

发布时间:2018年08月31日 - 10:08

最后更新:2019年05月28日 - 21:05

原始链接:http://ttshun.com/2018/08/31/视觉SLAM十四讲阅读笔记五-图优化与g2o基础/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

点击给我一些鼓励叭!
-------------本文结束感谢您的阅读-------------
0%