作者:半闲居士
链接:https://www.zhihu.com/question/50385799/answer/120902345
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我来答吧,提纲如下:
1. 单目SLAM难点
2. 视觉SLAM难点
3. 可能的解决思路

图片中非原创部分均已加引用,请勿盗图,转载请私信告知。

单目slam的障碍来自于理论实践两个方面。理论障碍可以看做是固有的,无法通过硬件选型或软件算法来解决的,例如单目初始化和尺度问题。实践问题包括计算量,视野等,可以依靠选型、算法、软件设计等方法来优化。不过在同等硬件水平下,优化也存在极限的。比如对O(1)的算法不满意从而设计O(1/n)的算法似乎是不可能的……
---------------我是分割线-----------------
1. 单目SLAM难点
单目的优点是成本低,最大的局限性是测不到空间物体的距离,只有一个图像。所以早期视觉SLAM也被称为“只有角度的SLAM”(Bearing Only)。距离在定位中至关重要,双目和RGBD相机的使用就是为了能够计算(或测量)这个距离。上一个图你们直观体会一下距离的重要性:

很显然,没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小——我们称之为尺度(Scale)。
可以说,单目的局限性主要在于我们没法确定尺度,而在双目视觉、RGBD相机中,距离是可以被测量到的(当然测量也有一定的量程和精度限制)。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。RGBD则是把(通常是红外)光投射到物体表面,再测量反射的信息来计算距离的。具体原理分结构光和ToF两种,在此不多做解释,还是上图直观感受一下。

距离未知导致单目SLAM存在以下问题:

  • 需要初始化
  • 尺度不确定
  • 尺度漂移

而一旦我们拥有了距离信息,上述几条就都不是问题,这也是双目和RGBD存在的意义。下面分别讲一下以上几条。
---------------我是分割线-----------------
1.1 初始化
单目SLAM刚开始时,只有图像间的信息,没有三维空间的信息。于是一个基本问题就是:怎么通过两张图像确定相机自身运动,并且确定像素点的距离。这个问题称为单目SLAM初始化问题。一般是通过匹配图像特征来完成的。

匹配好的特征点给出了一组2D-2D像素点的对应关系,但由于是单目,没有距离信息。初始化的意义是求取两个图像间的运动和特征点距离,所以初始化完毕后你就知道这些特征点的3D位置了。后续的相机运动就可以通过3D点-2D点的匹配信息来估计。后续的问题叫PnP(Perspective n Point)。
对,你想的没错,单目的流程就是:初始化——PnP——PnP——……

初始化的运动是通过对极几何来求解的,结构是由三角测量得到的。初始化问题是一个2D-2D求运动结构的问题,比3D-2D的PnP要难(信息更少,更不确定)。我不展开对极几何求运动的原理,但是理解它,对理解单目局限性是很有帮助的。如题主感兴趣,请看Multiple View Geometry第8章。如果在知乎上写,会占掉很大的篇幅。

对极几何最终会分解一个本质矩阵(Essential Matrix)(或基本矩阵(Fundametal Matrix))来得到相机运动。但分解的结果中,你会发现对平移量乘以任意非零常数,仍满足对极约束。直观地说,把运动和场景同时放大任意倍数,单目相机仍会观察到同样的图像!这种做法在电影里很常见。例用用相机近距离拍摄建筑模型,影片看起来就像在真实的高楼大厦一样(比如奥特曼打怪兽实际是两个穿着特摄服装的演员,多么无情的现实)。

这个事实称为单目的尺度不确定性(Scale Ambiguity)。所以,我们会把初始化的平移当作单位1,而之后的运动和场景,都将以初始化时的平移为单位。然而这个单位具体是多少,我们不知道(摊手)。并且,在初始化分解本质矩阵时,平移和旋转是在一起的。如果初始化时只有旋转而没有平移,初始化就失败了——所以业界有种说法,叫做“看着一个人端相机的方式,就知道这个人有没有研究过SLAM”。有经验的人会尽量带平移,没经验的都是原地打转……

所以,从应用上来说,单目需要一个带平移的初始化过程,且存在尺度不确定问题,这是它理论上的障碍。

员工:老板你这样移动相机不行啊,要有平移的……
老板:我花20k请你来做slam,一个初始化都搞不定?

1.2 结构问题
由于单目没有距离信息,所有特征点在第一次出现时都只有一个2d投影,实际的位置可能出现在光心与投影连线的任意一处。只有在相机运动起来以后,才可能通过三角测量,估计特征点的距离。

三角测量的应用范围很广,传说高斯在十几岁的时候就已经用最小二乘法测量山的距离,来吊打这些二十大几还在水paper的博士们。现代天文学测星星的距离也使用三角测量。

然而三角测量的前提是——你得有三角啊。

高斯用三角测量是站在两座山上去量另一座,这就构成了三角。双目视觉左右两个相机,存在一定的平移,和目标点也构成了三角。但在单目情形下,你必须移动相机之后,才可能去估计空间点的3D位置。换句话说,如果相机摆在那儿不动——就没有三角了。这导致单目在机器人避障中应用存在困难,不过既然在谈AR我们就先不说机器人吧。

1.3 尺度漂移
用单目估计出来的位移,与真实世界相差一个比例,叫做尺度。这个比例在初始化时确定,但单纯靠视觉无法确定这个比例到底有多大。进而,由于SLAM过程中噪声的影响,这个比♂例还不是固定不变的。当你用单目SLAM,会发现,咦怎么跑着跑着地图越来越小了……[1]?

这种现象在当前state-of-the-art的单目开源方案出亦会出现,修正方法是通过回环检测。但是有没有出现回环,则要看实际的运动方式。所以……

员工:老板你这样移动相机不行啊,要经常把它移回去……
老板:我花20k请你来做slam,怎么搞的地图一会儿大一会儿小,这怎么用?

---------------我是分割线-----------------
2. 视觉SLAM的困难
双目相机和RGBD相机能够测量深度数据,于是就不存在初始化和尺度上的问题了。但是,整个视觉SLAM的应用中,存在一些共同的困难,主要包括以下几条:

  • 相机运动太快
  • 相机视野不够
  • 计算量太大
  • 遮挡
  • 特征缺失
  • 动态物体或光源干扰

2.1 运动太快

运动太快可能导致相机图像出现运动模糊,成像质量下降。传统卷帘快门式的相机,在运动较快时将产生明显的模糊现象。不过现在我们有全局快门的相机了,即使动起来也不会模糊的相机,只是价格贵一些。

(你真以为啥图都可以用来SLAM吗?拿衣服啊,图片来自TUM数据集)

(全局快门相机在拍摄高速运动的物体仍是清晰的,图片来自网络)

运动过快的另一个结果就是两个图像的重叠区(Overlap)不够,导致没法匹配上特征。所以视觉SLAM中都会选用广角、鱼眼、全景相机,或者干脆多放几个相机。

2.2 相机视野不够

如前所述,视野不够可能导致算法易丢失。毕竟特征匹配的前提是图像间真的存在共有的特征。

2.3 计算量太大

基于特征点的SLAM大部分时间会花在特征提取和匹配上,所以把这部分代码写得非常高效是很有帮助的。这里就有很多奇技淫巧可以用了,比如选择一些容易计算的特征/并行化/利用指令集/放到硬件上计算等等,当然最直接的就是减少特征点啦。这部分很需要工程上的测试和经验。总而言之特征点的计算仍然是主要瓶颈所在。要是哪天相机直接输出特征点就更好了。

2.4 遮挡

相机可能运动到一个墙角,还存在一些邪恶的开发者刻意地用手去挡住你的相机。他们认为你的视觉SLAM即使不靠图像也能顺利地工作。这些观念是毫无道理的,所以直接无视他们即可。

2.5 特征缺失、动态光源和人物的干扰

老实说SLAM应用还没有走到这一步,这些多数是研究论文关心的话题(比如直接法)。现在AR能够稳定地在室内运行就已经很了不起了。

---------------我是分割线-----------------

3. 可能的解决思路

前边总结了一些单目视觉可能碰到的困难。我们发现大部分问题并不能在当下的视觉方案能够解决的。你或许可以通过一些工程技巧加速特征匹配的过程,但像尺度、遮挡之类的问题,明显无法通过设计软件来解决。

所以怎么办呢?——既然视觉解决不了,那就靠别的来解决吧。毕竟一台设备上又不是只有一块单目相机。更常见的方案是,用视觉+IMU的方式做SLAM。

当前广角单目+IMU被认为是一种很好的解决方案。它价格比较低廉,IMU能在以下几点很好地帮助视觉SLAM:

  • IMU能帮单目确定尺度
  • IMU能测量快速的运动
  • IMU在相机被遮挡时亦能提供短时间的位姿估计

所以不管在理论还是应用上,都出现了一些单目+IMU的方案[2,3,4]。众所周知的Tango和Hololens亦是IMU+单目/多目的定位方式。

(用Tango玩MC,缺点是盖的房子尺寸和真实世界一样。盖二楼你就得真跑到楼上去盖——这怎么造圆明园?)

(这货就是靠后边这鱼眼+IMU做跟踪的)

(Hololens图就不上了吧……横竖也不是自己的)

[1]. Strasdat, Montiel, A.J.Davison, Scale drift-aware large scale monocular SLAM, RSS 2006.
[2]. Leutenegger et. al., Keyframe-based visual-inertial odometry using nonlinear optimization, IJRR 2015.
[3]. Huang Guoquan, Kaess and Leonard, Towards Consistent Visual-Inertial Navigation, ICRA 2014.
[4]. Li Mingyang and Mourikis, High-precision, consistent EKF-based visual-inertial odometry, IJRR, 2013.

高博关于单目的介绍及推导相关推荐

  1. 在结构化场景中基于单目的物体与平面SLAM方案

    点云PCL免费知识星球,点云论文速读. 文章:Monocular Object and Plane SLAM in Structured Environments 作者:Shichao Yang, S ...

  2. CaDDN:基于单目的3D目标检测新方法(CVPR2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨元气满满的打工人 来源丨CV研习社 文章导读 导读:在自动驾驶的技术中,3D目标检测能够提更加丰 ...

  3. 基于单目的3D人体姿态估计

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:彡枫| 来源:知乎 https://zhuanlan.zhihu.com/p/148251873 ...

  4. 高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何

    高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何 基本问题 对极约束 对极约束推导过程 本质矩阵 八点法 八点法推导过程 本质矩阵$\ E$的SVD分解 单目SLAM的一些问题 尺度不确 ...

  5. APS系统如何让企业实现“多赢”?看高博通信是怎么做的

    高博通信(上海)有限公司凭籍在超精密产业中的技术积累, 强大的资金优势以及与一流大学的联合,使得其正成为国内超精密电子制造行业的领导者. 雄厚的技术实力和专业的团队赢得了波音,空客公司等国际航空器制造 ...

  6. 死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

    点关注公众号,回复"1024"获取2TB学习资源! 前面我们学习:MySQL 高可用之组复制(MGR)技术的相关原理知识,今天我将详细的为大家介绍 MySQL 高可用技术组复制的单 ...

  7. 对话高博(二)| 换工作这件事

    高博,1983年生,上海交通大学计算机科学与工程专业本科.软件工程硕士.现任博晓文化传媒集团总裁,香港卫视科教台台长.职场经历丰富,曾在数家世界500强IT和互联网企业打造明星团队.专业兴趣包括软件测 ...

  8. 对话高博(一)| 机器码、Pascal,以及计算机学习的分形

    高博,1983年生,上海交通大学计算机科学与工程专业本科.软件工程硕士.现任博晓文化传媒集团总裁,香港卫视科教台台长.职场经历丰富,曾在数家世界500强IT和互联网企业打造明星团队.专业兴趣包括软件测 ...

  9. python刷阅读_Python 刷高博客阅读量

    [事情起因] 前段时间我开始写博客,后来发现博客文章的阅读量实际上是文章对应网页的被打开次数.于是我有了个想法:可不可以写一个程序,让她不断访问某篇文章的页面,以此刷高博客的阅读量呢?要回答这个问题很 ...

最新文章

  1. Oracle procedure
  2. angular元素属性绑定_【Angular】表单
  3. 400分理科学计算机,理科400分能上哪些大学 高考400分算什么水平
  4. c++运算符重载中很多人易忘的小细节
  5. 资源分享 | 统计学最全思维导图,附下载链接
  6. 获取所有汉字与 Unicode 的对照表
  7. Spark Shuffle详解剖析
  8. pcb设计入门02-PCB封装库
  9. swift编程语言和c,Swift与Objective C对比:选择更快的开发语言
  10. 2021年六级翻译:云南
  11. 微博营销的价值和优缺点
  12. 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式
  13. A Sample Crash Log
  14. 使用NanoHTTPD在Android上建立本地服务器
  15. IE显示对象不支持此属性或方法 的解决方法
  16. 区块链技术,模仿B特币,java模拟区块链技术,(摘自GitHub)
  17. 小学计算机社团活动简报,多彩社团活动 幸福校园生活——南街小学社团活动报道...
  18. 在…视域下是什么意思_视域是什么意思?
  19. 2018-Self-Attention with Relative Position Representations
  20. Weblogic之weblogic数据源配置及jndi调用

热门文章

  1. 地下水污染防治之源头防控
  2. 【XLL 文档翻译】【第3部分】必要的和有用的 C API XLM 函数
  3. 华北理工大学计算机专业录取分数线,华北理工大学2019年本科分省分专业录取分数线...
  4. 双十字星K线图解中双十字星的出现该如何解读
  5. Linux下find命令的使用详解
  6. 姚期智计算机科学实验班,清华大学成立量子信息班 姚期智院士领衔
  7. 凯斯西储数据集(CWRU)十分类处理与训练代码(Pytorch)
  8. [JLOI2011]不等式组
  9. 计算机在金融专业有哪些应用,信息技术及其在金融中的应用
  10. ShareSDK Google平台注册指南