其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
什么是视觉SLAM
SLAM是“Simultaneous Localization And Mapping”的缩写,可译为同步定位与建图。概率 SLAM 问题 (the probabilistic SLAM problem) 起源于 1986 年的IEEE Robotics and Automation Conference 大会上,研究人员希望能将估计理论方法 (estimation-theoretic methods) 应用在构图和定位问题中。 SLAM最早被被应用在机器人领域,其目标是在没有任何先验知识的情况下,根据传感器数据实时构建周围环境地图,同时根据这个地图推测自身的定位[1]。
假设机器人携带传感器 (相机) 在未知环境中运动,为方便起见,把一段连续时间的运动变成离散时刻 t=1,…k,而在这些时刻,用 x 表示机器人的自身位置,则各时刻的位置就记为 x1,x2…xk,它构成了机器人的轨迹。地图方面,假设地图由许多个路标组成,而每个时刻,传感器会测量到一部分路标点,得到它们的观测数据。设路标点共有 N 个,用 y1,y2…yn 表示。通过运动测量 u 和传感器读数 z 来求解定位问题 (估计 x)和建图问题 (估计 y)。
图 1 SLAM系统示意图[16]
只利用相机作为外部感知传感器的SLAM称为视觉SLAM (vSLAM [2])。相机具有视觉信息丰富、硬件成本低等优点,经典的vSLAM系统一般包含前端视觉里程计、 后端优化、 闭环检测和构图四个主要部分[3]。
图 2 经典vSLAM系统流程图[5,16]
● 视觉里程计 (Visual Odometry):仅有视觉输入的姿态估计[4];
● 后端优化 (Optimization): 后端接受不同时刻视觉里程计测量的相机位姿,以及闭环检测的信息,对它们进行优化,得到全局一致的轨迹和地图[5];
● 闭环检测 (Loop Closing): 指机器人在地图构建过程中, 通过视觉等传感器信息检测是否发生了轨迹闭环, 即判断自身是否进入历史同一地点[6];
● 建图 (Mapping): 根据估计的轨迹,建立与任务要求对应的地图[5]。
根据生成方法的不同,SLAM可以分成两大类:间接方法和直接方法。下面依次介绍这两种方法。
间接法及其典型系统
间接法首先对测量数据进行预处理来产生中间层,通过稀疏的特征点提取和匹配来实现的,也可以采用稠密规则的光流,或者提取直线或曲线特征来实现。然后计算出地图点坐标或光流向量等几何量,因此间接法优化的是几何误差:
其中 ui 为 Ik-1 中任意像素点,它投影到空间点的坐标为 Pi, u′i是 Pi 投影到 Ik 上的坐标。之后利用中间层的数值来估计周围环境的三维模型和相机运动。
图 3 间接法示意图[3]
MonoSLAM
MonoSLAM 是第一个实时的单目视觉 SLAM 系统[7]。 MonoSLAM 以EKF(扩展卡尔曼滤波)为后