总的来说,相比于基于激光雷达和基于深度相机的 SLAM,atv,基于视觉传感器的 vSLAM 和 VIO 还不够成熟,操作比较难,通常需要融合其他传感器或者在一些受控的环境中使用。 Visual SLAM 为什么比较难? 我们通过分析传感器的测量信息做个定性的分析。激光雷达或者 RGBD 相机可以直接获取环境的点云。对于点云中的一个点,它告诉我们在某个方位和距离上存在一个障碍点。而视觉传感器获取的是灰度图像或者彩色图像。对于图像中的一个像素,它只能告诉我们在某个方位有障碍点、障碍点周围的表观(local appearance)如何,但它不能告诉我们这个障碍点的距离。要想计算该点的距离,需要把相机挪动一个位置再对它观察一次,然后按照三角测量的原理进行推算。 原理上很清晰,实际做起来并不简单。首先需要在两幅图像中寻找点的对应,这涉及到特征点的提取和匹配、或者准稠密点之间的匹配。计算机视觉发展到今天,其实还不存在性能和速度上很好满足 vSLAM 的特征提取和匹配算法。常见的特征点提取算法,性能上大致可以认为 SIFT>SURF>ORB>FAST,效率上可以认为 FAST>ORB>SURF>SIFT(大于号左边代表更优。性能主要包括匹配精度、特征点的数量和空间分布等)。为了在性能和效率上取得折中,通常采用 FAST 或者 ORB,只能舍弃性能更好的 SIFT、SURF 等。 其次,匹配点的图像坐标与空间坐标之间的关系是非线性的,例如 2D-2D 点的对应满足对极几何、2D-3D 点的对应满足 PnP 约束。这些匹配数量较多,前后两帧图像中一般有几十至数百的匹配。这些匹配会引入众多约束关系,使得待估计变量的关系错综复杂。为了得到一个较优的估计,通常需要建立优化问题,整体优化多个变量。说起来这无非是一个非线性最小二乘优化问题,但实现起来并不简单,因为存在非线性约束、约束数量很多、存在误差和野值点,并且要将计算时间控制在允许范围。目前广泛采用关键帧技术,并且通过很多方法来控制问题规模、保持问题的稀疏性等。
atv,了解技术发展大趋势" src="http://www.wzatv.cc/atv/uploads/allimg/170414/040541G21_0.jpeg" /> 非线性优化问题的形象图示。圆饼代表待优化的变量(相机姿态、特征点的空间坐标),杆子代表约束(对线几何、PnP 等)。图片来源自 https://www.pinterest.com/81chevycowper/70s-80s-toys/ 前面分析了 vSLAM 的两个困难。前者导致了前端的特征跟踪不易,后者导致了后端的优化不易。想做出一个高效率、鲁棒的 vSLAM 系统还是一个非常有挑战的任务。效率方面,SLAM 必须是实时运行的。如果不能做到实时,就不能称作 SLAM。不考虑实时性,采用从运动恢复结构(structure-from-motion)效果会更好。鲁棒性方面,一个脆弱的系统会导致用户体验很差,功能有限。
使用 structure-from-motion 对玲珑塔进行三维重建 vSLAM 的核心算法 预备阶段,包括传感器的选型和各种标定。Visual SLAM 自 PTAM 算法以来,框架基本趋于固定。通常包括 3 个线程,前端 tracking 线程、后端 mapping 优化线程、闭环检测(loop closure)线程。 前端 tracking 线程主要涉及到: 特征的提取、特征的匹配; 多视图几何的知识,包括对极几何、PnP、刚体运动、李代数等。 后端优化线程涉及到非线性最小二乘优化,属于数值优化的内容。闭环检测线程涉及到地点识别,本质上是图像检索问题。对于 VIO,还涉及到滤波算法、状态估计等内容。 将 SLAM 算法拆解了看,用到的技术是偏传统的。与当前大热的深度学习「黑箱模型」不同,SLAM 的各个环节基本都是白箱,能够解释得非常清楚。但 SLAM 算法并不是上述各种算法的简单叠加,而是一个系统工程,里面有很多 tradeoff。如果仅仅跑跑开源程序,没有什么核心竞争力。不论是做产品还是做学术研究,都应当熟悉各种技术,才能有所创造。 SLAM 的未来发展趋势 (责任编辑:本港台直播) |