目录

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?

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

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

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

1.2 SLAM一些典型引用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LiDAR SLAM 一般初始化流程

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

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

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

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

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

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

3 Visual SLAM

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

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

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

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

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

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

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

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

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

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

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

3.1.1 Tracking

目标:解相机的 pose。

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

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

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

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

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

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

3.1.2 Mapping

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

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

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

3.1.3 Keyframes如何定义的?

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

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

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

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

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

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。

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

\

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

4.1.1 典型步骤

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

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

4.1.2 典型应用:在 Localization 过程中

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

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

4.2 漂移问题(Drifting)

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

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

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

4.3 闭环检测(Loop Closure)

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

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

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

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

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

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

4.4 Repetitive Structures

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

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

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

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

三维重建笔记_SLAM简介相关推荐

  1. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介

    python编程从入门到实践笔记--列表简介 #coding=utf-8 #列表--我的理解等于c语言和java中的数组 bicycles = ["trek","cann ...

  2. 读书笔记-TCP简介

    @(Network)[tcp, congestion control] 读书笔记-TCP简介 本文主要记录阅读linuxtcp文章,其第二章中主要介绍了TCP拥塞控制的基础和一些发展历程,这里作为整理 ...

  3. 咸鱼笔记—git简介

    咸鱼笔记-git简介 git简介 git的两大特点 安装与配置 创建一个版本库 新手刚接触python,跟着教程学的,仅供参考.欢迎各路大神指点. 学习版本: Django 1.8. Python 3 ...

  4. OptiX资料学习笔记1——简介

    OptiX资料学习笔记1--简介 OptiX引擎的现状 目前有三种开源的API支持NVIDIA的光线追踪功能,分别为: DirectX Raytracing (DXR) DX的光线追踪API Vulk ...

  5. (swing读书笔记)JTable简介(下)

    (swing读书笔记)JTable简介(下) by cszhao1980 六.Row 最初,JTable没有提供任何"Row"相关的类来控制Row,与Row相关的大量操作直接坐落在 ...

  6. (swing读书笔记)JTree简介(下)

    (swing读书笔记)JTree简介(下) By cszhao1980 六.TreeCellRenderer 通过JTable一样,JTree也使用一个接口定义它的单元绘制器,该接口仅有一个方法: C ...

  7. (swing读书笔记)JTree简介(中)

    (swing读书笔记)JTree简介(中) By cszhao1980 三.TreeModel(树模型) 同JTable相比,TreeModel接口显得不那么重要.这是Tree的特殊性造成的--Tre ...

  8. (swing读书笔记)JTable简介(中)

    (swing读书笔记)JTable简介(中) by cszhao1980 五.TableCellRenderer JTable将Cell的绘制工作委托给CellRenderer来完成--如果我们没有显 ...

  9. (swing读书笔记)JTable简介(上)

    (swing读书笔记)JTable简介(上) by cszhao1980 JTable是Swing中最复杂的组件之一.在JTable周围,环绕着JTableHeader.TableModel.Tabl ...

  10. (swing读书笔记)JTree简介(上)

    (swing读书笔记)JTree简介(上) By cszhao1980 同JTable类似,JTree也是一个负责的组件,其周围也有大量附属接口.类,如下图所示: 一.TreeNode(树节点) Tr ...

最新文章

  1. PRT(Precomputed Radiance Transfer)球谐光照(Spherical Harmonic Lighting)
  2. 上交三月月赛[SJTU] 1105 path
  3. How to become the truely yourself?
  4. 一个html有几个css,几个CSS的黑科技_html/css_WEB-ITnose
  5. Android开发用到的几种常用设计模式浅谈(一):组合模式
  6. C语言 const 修饰函数返回值 - C语言零基础入门教程
  7. 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
  8. mysql解压版有配置文件么_3分钟安装MySQL5.7解压版
  9. Ruby学习笔记1 -- 基本语法和数据类型, Class
  10. DFS判断回路及回路个数
  11. php webim的开发,WebIM H5 Demo 介绍
  12. SF58-ASEMI快恢复二极管SF58的发展意义
  13. 河海大学计算机考研方向,2020河海大学计算机学硕838经验贴
  14. 记录一次504超时的解决方案
  15. java 判断手机号_如何用java判断手机号运营商?
  16. 12306登录验证码识别(Java版)
  17. “二手”市场的困境:用户习惯培养阶段
  18. Python实现猫捉老鼠小游戏!虽然简陋但是童真永在!
  19. 考公 or 直接找工作,该怎么选?
  20. MT4如何使用软件开展自动交易详细步骤

热门文章

  1. 编程语言 - PHP
  2. VSphere服务器ESXI4.1.0设置虚拟主机来电开机自启动
  3. Python基础篇1
  4. 设计模式(十七)—— 迭代器模式
  5. MongoDB 可视化管理工具 MongoCola-1.1.0 测试版发布
  6. [SAP ABAP开发技术总结]动态修改选择屏幕
  7. phpmyadmin提示SELECT `prefs` FROM `phpmyadmin`.`pma_table_uiprefs` ······
  8. notepad++自动补全括号
  9. Ibatis结合MySQL数据库的使用方法
  10. 几个你可能不了解的CSS单位