三维重建笔记_SLAM简介

目录

1 引出

1.1 什么是SLAM?

1.2 SLAM一些典型引用

2 LiDAR SLAM

2.1 假设传感器的位姿是知道的,怎样构建地图?

2.2 假设地图是知道的,怎样计算传感器的位姿(pose)?

2.2.1 点云匹配问题 ICP 基本思想

2.2.2 给定最近邻点时,怎样求解运动?

3 Visual SLAM

3.1 基于关键帧的视觉SLAM(Key‐frame based Visual SLAM)

3.1.1 Tracking

3.1.2 Mapping

3.1.3 Keyframes如何定义的?

3.1.4 PTAM 2007 经典方案中,运行时间分布

3.2 A Brief History of Visual SLAM

4 高级功能 (Robustness Techniques)

4.1 重定位(Re‐localization)

4.1.1 典型步骤

4.1.2 典型应用:在 Localization 过程中

4.2 漂移问题(Drifting)

4.3 闭环检测(Loop Closure)

4.4 Repetitive Structures


1 引出

1.1 什么是SLAM?

------------------------------------------------------------

三维重建笔记_SLAM简介_第1张图片

------------------------------------------------------------

三维重建笔记_SLAM简介_第2张图片

------------------------------------------------------------

1.2 SLAM一些典型引用

增强现实:比如家具布置,虚拟装修,是否合适,直接购买下单;使用微软的 HoloLens 将游戏中的物体布置到实际场景中;

扫地机器人:上面有一个360度的全景镜头,拍照后三维重建,确定自己的位置,可以做路径跟踪,路径规划等;

------------------------------------------------------------

三维重建笔记_SLAM简介_第3张图片

------------------------------------------------------------

1.3 SLAM 分类

  • LiDAR SlAM
  • Visual SLAM
    • MonoSLAM (monocular visual SLAM):  Using only one camera for SLAM
    • Stereo Vision SLAM: Using multiple cameras as sensors
    • RGB-D SLAM: 将单目摄像机和红外传感器结合起来

2 LiDAR SLAM

------------------------------------------------------------

三维重建笔记_SLAM简介_第4张图片

------------------------------------------------------------

2D LiDAR SLAM 使用于平面中的运动。

使用激光的方式,获取的地图的描述的一种方式为:占用网格地图(Occupancy Grid Map),描述如下。

------------------------------------------------------------

三维重建笔记_SLAM简介_第5张图片

------------------------------------------------------------

2.1 假设传感器的位姿是知道的,怎样构建地图?

------------------------------------------------------------

三维重建笔记_SLAM简介_第6张图片

------------------------------------------------------------

2.2 假设地图是知道的,怎样计算传感器的位姿(pose)?

------------------------------------------------------------

2.2.1 点云匹配问题 ICP 基本思想

假设此时地图已知,也有了传感器的输入(一圈激光点),然后去确定传感器在地图中的位置(定位),即点云匹配问题。

首先,为当前传感器所在位置扫描得到的,一圈激光点云中的每一个点,在地图种找到一个最近邻的点。找到这个对应关系后,我们可以根据3D到3D的对应关系,把我输入的这一圈激光点云,register 到地图上面去。然后,第一次 registration 可能不会完美,我就暂停在那个地方,以这个 pose 为初始,重新去找他的对应点。当我的pose更新时,我的最近邻关系也会随之更新,所以我可以重新去找一次最近邻点,然后再次求解传感器的运动,逐步的迭代。

------------------------------------------------------------

三维重建笔记_SLAM简介_第7张图片

------------------------------------------------------------

2.2.2 给定最近邻点时,怎样求解运动?

即,怎样去求解一个旋转矩阵R和位移向量t,来确定当前传感器扫的一圈点,和地图中待确定的对应点之间的对应关系。显然,这是一个优化问题。即优化 E(R,t),如下图所示。

------------------------------------------------------------

三维重建笔记_SLAM简介_第8张图片

------------------------------------------------------------

LiDAR SLAM 一般初始化流程

  1. 时刻0,机器人先在初始点,使用激光雷达扫描一圈,初始化出来一个地图。
  2. 时刻1,使用激光雷达再扫描一圈,得到机器人的 pose,使用ICP法,与时刻0建的地图进行进行对比,找到时刻1的机器人的位置,并且对地图进行更新。
  3. 时刻2,重复时刻1,依次类推。

------------------------------------------------------------

三维重建笔记_SLAM简介_第9张图片

------------------------------------------------------------

典型的SLAM系统架构:LiDAR SLAM 对比 Visual SLAM

------------------------------------------------------------
三维重建笔记_SLAM简介_第10张图片

------------------------------------------------------------

3 Visual SLAM

简单理解,就是把 SfM 应用在一个 video sequence (视频序列) 上,基本上可以认为它是一个“增量式的SfM”。每来一帧解一帧。

鉴于 SLAM 特定的应用,所以有一些特定的特点:比如 “实时性”、“视频序列输入”。

------------------------------------------------------------

三维重建笔记_SLAM简介_第11张图片

------------------------------------------------------------

3.1 基于关键帧的视觉SLAM(Key‐frame based Visual SLAM)

只有在关键帧时,才会进行 三角测量 (triangulate),才会触发Bundle Adjustment。

------------------------------------------------------------

三维重建笔记_SLAM简介_第12张图片

------------------------------------------------------------

2007年提出的一种不错的方案是,将整个过程分为两个线程,一个负责图像采集(Tracking),解相机的 pose,一个负责地图优化(Mapping)。

------------------------------------------------------------

三维重建笔记_SLAM简介_第13张图片

------------------------------------------------------------

3.1.1 Tracking

目标:解相机的 pose。

KLT 特征跟踪:当你在这一帧中,有一些图像的特征点,有一个很快速的机制,可以很快的算出来对应的图像点在哪里,通过这样的方式,就可以得到相邻的两帧之间的 feature correspondence。

另外一种方式:当新来的当前帧,我在这一帧里面,作特征提取,提完这一帧后,我再跟上一帧进行 match;不过因为我知道相机运动是连续的,我就知道我提取出来的这一个特征点,它的 correspondence,一定是在附近,不会跑太远。同时,因为相机的运动也比较小,我们可以根据相机的运动,预测一下,我对应的特征点在什么地方。然后,在这个邻域里面去做 search。

------------------------------------------------------------

三维重建笔记_SLAM简介_第14张图片

------------------------------------------------------------

三维重建笔记_SLAM简介_第15张图片

------------------------------------------------------------

三维重建笔记_SLAM简介_第16张图片

------------------------------------------------------------

3.1.2 Mapping

------------------------------------------------------------

三维重建笔记_SLAM简介_第17张图片

------------------------------------------------------------

三维重建笔记_SLAM简介_第18张图片

------------------------------------------------------------

3.1.3 Keyframes如何定义的?

------------------------------------------------------------

三维重建笔记_SLAM简介_第19张图片

------------------------------------------------------------

3.1.4 PTAM 2007 经典方案中,运行时间分布

------------------------------------------------------------

三维重建笔记_SLAM简介_第20张图片

------------------------------------------------------------

3.2 A Brief History of Visual SLAM

  •  MonoSLAM, Andrew Davison [ICCV 2003] [PAMI 2007]
    • The first work of visual SLAM with a single camera
  •  Visual Odometry, David Nister [CVPR 2004]
    • Visual slam by SfM
  • PTAM, Klein & Murray [ISMAR 2007] (open source)
    • Separating tracking and mapping
  • LSD‐SLAM, Engel et al. [ECCV 2014] (open source)
    • Direct method
  • ORB‐SLAM, Mur‐Artal et al. [PAMI 2015] (open source)
    • A stronger version than PTAM, with re‐localization, pose‐graph, etc
  • DSO, Engel et al. [PAMI 2017] (open source)
    • A stronger version of LSD‐SLAM, with photometric auto‐calibration, etc
       

4 高级功能 (Robustness Techniques)

4.1 重定位(Re‐localization)

即,当 tracking lose (追踪丢失)时,怎么样 re-localization(重新定位)的问题。

基本思想:假定之前已经跑了一段的SLAM了,即历史上已经建立了一段地图在哪里了,只是因为某种偶然的原因,中间突然有个几帧出现一些极端情况,使得你的系统挂掉,再然后,又来了很好的一帧,我想要,根据这一帧,跟之前地图(的关键帧)建立联系,进行registrate。

------------------------------------------------------------

三维重建笔记_SLAM简介_第21张图片\

------------------------------------------------------------

4.1.1 典型步骤

------------------------------------------------------------

三维重建笔记_SLAM简介_第22张图片

------------------------------------------------------------

4.1.2 典型应用:在 Localization 过程中

------------------------------------------------------------

三维重建笔记_SLAM简介_第23张图片

------------------------------------------------------------

4.2 漂移问题(Drifting)

即,不管做 localization 还是 mapping 的过程中,总是会有误差,且误差总是会累积。如转了一圈,本来计划回到原点,缺因为累积误差,有了gap,如下图所示。解决方法:闭环检测(Loop Closure)。

------------------------------------------------------------

三维重建笔记_SLAM简介_第24张图片

------------------------------------------------------------

4.3 闭环检测(Loop Closure)

首先,先检查是否有闭环应该存在,若是,通过图像搜索的方式,添加帧之间的 constrain。通常在每一个keyframe上都需要做这样的事情,这样就会形成一个 pose-graph (每一个关键帧,就是这个 pose-graph 的 vertex,每两个有 relative constrain motion 的关键帧之间,就要连一条边,形成一个graph)。

------------------------------------------------------------

三维重建笔记_SLAM简介_第25张图片

------------------------------------------------------------

然后,就可以做闭环优化了。最简单也是最早期的方式,就是加上一条 constrain,做一次 BA(Bundle Adjustment)。当 drifting error 过大时(如初始值距离 groundtruth 太远),BA 就优化不过去了(收敛到正确解就很困难)。这时,就变成了一个 global SfM 的问题了;因为 pose-graph 里面放的是 keyframes 和 两两 keyframes 之间的 relative motion,想要的是每一个 keyframe 在世界坐标下的一个绝对姿态。

------------------------------------------------------------

三维重建笔记_SLAM简介_第26张图片

------------------------------------------------------------

4.4 Repetitive Structures

------------------------------------------------------------

 三维重建笔记_SLAM简介_第27张图片

------------------------------------------------------------

三维重建笔记_SLAM简介_第28张图片

------------------------------------------------------------

参考:SFU 浙江大学 计算机视觉课程 谭平教授 https://www.jiqizhixin.com/articles/19052902

你可能感兴趣的:(计算机视觉算法,三维重建)