前言

此为学习《视觉SLAM十四讲》第1、2讲及其他相关SLAM内容的总结与整理。

什么是SLAM

SLAM是Simultaneous Location and Mapping,同时定位与地图构建。是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
目的是解决自主机器人“定位”和“建图”两个问题。同时要求能够实时地,没有先验知识地进行。

SLAM问题的本质是对主体自身(位姿)和周围环境空间(点云)的不确定性的估计。

经典SLAM算法框架

sfm算法python sfm算法和slm算法_sfm算法python

  • 传感器信息获取:相机图像的读取和预处理,码盘、IMU等的读取和时间同步。
  • 前端视觉里程计(Visual Odometry,VO):通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。仅通过VO估计轨迹会出现累计漂移。主要是特征点法和直接法。
  • 后端优化(Optimization):接收不同时刻视觉里程计输出的相机位姿,以及回环检测的信息,对其进行优化,得到全局一致的轨迹和地图。主要是滤波和非线性优化算法。
  • 回环检测(Loop Closing):解决位置估计误差随时间漂移的问题,得到全局一致的地图。利用图像相似性判断机器人是否曾经到达过此位置,如果检测到回环,会把信息提供给后端进行处理。
  • 建图(Mapping):根据估计出的轨迹,建立于任务要求对应的地图。

SLAM数学模型

运动方程和观测方程:

sfm算法python sfm算法和slm算法_sfm算法python_02


SLAM可建模为一个状态估计问题:当知道运动测量读数u,以及传感器的读数z时,如何求解定位问题(估计机器人自身位置x)和建图问题(估计路标点y),其中w和v为运动噪声和观测噪声。

状态估计问题的求解,与系统是否线性,噪声服从哪种分布有关。系统可分为线性/非线性和高斯/非高斯系统。其中线性高斯系统(LG)的无偏最优估计可由卡尔曼滤波器(KF)给出。目前优化技术已经明显优于滤波器技术,主流视觉SLAM使用以图优化为代表的优化技术进行状态估计。

传感器的分类

1、外置:安装在环境中,如导轨、二维码等,这类传感器简单有效,但约束了外界环境;
2、内置:携带在机器人本体上,如轮式编码器、相机、激光、声纳、IMU等,通常测量间接的物理量而非直接位置数据,具有通用性。

相机简单介绍

相机是以一定速率采集环境信息得到照片,形成视频流。照片的本质是拍照时的场景在相机的成像平面下的投影,是以二维的形式反应三维世界,丢失了场景的深度。

单目相机SLAM:通过移动时物体产生的视差计算深度,无法确定真实尺度(Scale)(尺度不确定性)。
尺度表示为单目SLAM估计的轨迹和地图与真实轨迹和地图之间相差的因子。

双目相机(stereo):由两个单目相机组成,通过基线(Baseline)估计每个像素的深度。
优点:不依赖其他传感器,可应用于室内/室外。
缺点:配置与标定复杂,深度量程和精度受双目基线和分辨率所限,视差的计算非常消耗计算资源,需要GPU。

深度相机(RGB-D):通过红外结构光或者Time-of-Fight(TOF)原理,主动测量物体的距离。
优点:通过物理手段测量,可以节省大量运算;
缺点:目前存在测量范围窄、噪声大、视野小、易受阳光干扰、无法测量投射材质等问题,主要应用于室内。

地图的分类

地图是对环境的描述,主要分为:

  • 度量地图(Metric Map):精确地表示地图中物体的位置关系。
  • 拓扑地图(Topological Map):强调地图元素之间的关系,是一个图(Graph),由节点和边组成,只考虑节点间的连通性。

度量地图又可分为:

  • 稀疏地图(Sparse)对环境进行一定尺度的抽象,不表达所有物体,如选择一部分具有代表意义的物体,成为路标(Landmark)。
  • 稠密地图(Dense):建模所有看到的东西,一般由许多小块组成,包含占据、空闲、未知三种状态。

SFM、单目多视角三维重建和vSLAM的区别

SFM又叫structure from motion,即从运动恢复结构。

1、SFM以及单目多视角三维重建的图像是无序的,匹配时需要进行较为暴力的匹配,选择初始两张图像以及加入最好的下一张图像需要技巧;
SLAM是有序的图像序列,一般通过前后帧间匹配和局部窗口法,只有回环检测时需要进行图像间的匹配。
2、SFM中的structure对应于vSLAM中的mapping,camera pose对应于vSLAM中location。从目的考虑,SFM主要是要为了实现三维重建(3D reconstuction),而vSLAM主要是要实现定位(location)。
3、SFM 是离线处理的,对处理时间要求不严格,但对结果的精确度要求高;SLAM需要在线处理,一般要求达到实时性。且SLAM更希望能在小型电脑或嵌入式设备中应用。

视觉SLAM的主要挑战

  1. 回路序列和多视频序列
  2. 高效高精度处理大尺度场景
  3. 动态场景
  4. 快速运动和强旋转问题

机器人绑架

指在丢失之前位置信息的情况下,去确定机器人的当前位姿。比如机器人在移动过程中,由于传感器的暂时性功能故障或相机的快速移动导致跟踪失败,从而得到一个错误的位姿估计;或者外界强行将其放到另外一个位姿。

"绑架问题"可以分为初始化绑架和追踪丢失状态绑架。
1)初始化绑架可采用粒子滤波方法,重新分散随即状态粒子到三维空间,经不断更新后粒子收敛到可解释观察结果的区域。
2)追踪丢失状态绑架,即在绑架之前系统已经保存当前状态估计,则可以融合多传感器和增加替代传感器的方式解决。