开始学习SLAM。

1. SLAM 与视觉 SLAM 是啥

SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译做“同时定位与地图构建”。 它定义的是这样一种技术: 在不知道周边地形的条件下,一个带有传感器的主体(如扫地机器人)通过自身运动和对传感器数据的分析, 同时建模自己的运动信息和周边地形。具体来说,建模“运动”,就是计算主体旋转了多少、平移了多少;而地形建模, 就是建立一个地图(如点云地图)。

视觉 SLAM,也即 Visual SLAM/VSLAM, 是指使用的传感器主要是相机。除了视觉 SLAM,还有 激光 SLAM(Lidar SLAM).

2. 当前 SLAM 问题的拆解

目前,SLAM 核心分三大部分: 视觉里程计(前端),回环检测,后端优化。

视觉里程计: Visual Odometry, VO. 里程计,就是度量里程的工具,视觉里程计就是说通过视觉度量里程的工具。 通过连续图像的变化,估算相邻图像间相机的运动,以及局部地图。有累计误差。

回环检测: Loop Clousure Detection. 检测是否回到了原来经过的位置。传给后端,用于消除VO的累计误差。 通过判断当前经过的位置是否曾经也经过,就完成了回环检测。在环境上做标记是最贱的方法,但不通用。 故一般就是做图像匹配,找到和历史相似的图片,就完成了回环确认。

后端优化: Optimization. 接受视觉里程计和回环检测,做优化,得到全局一致的轨迹和地图。

前端和计算机视觉更相关(如图像特征提取和匹配); 后端主要是滤波和非线性优化算法。 从历史上来说,现在的后端在很长一段时间就被直接称为 SLAM研究,其被定位为一个状态估计问题。

3. SLAM问题的数学表述

描述性介绍:

在一个场景中,有一个运动物体,其知道每个时刻 $k$ 的

  1. 运动输入:里程计,如与上个时刻相比,平移了多少距离,旋转了多少角度

  2. 观测情况:对场景中的可观测路标(LandMark),物体相距各路标的位置

每个运动输入、观测情况都是有噪声的。

基于上面的已知,要求物体的位置,以及场景地图。

对应公式表述:

物体在 $t = 1, 2, \dots, K$ 连续时刻的每个位置 $x_k$, 有在该位置的运动输入 $u_k$;对环境中的路标$y_j$, 有观测数据 $z_{k,j}$ .

则构建运动方程 $ f $:

\[x_k = f(x_{k-1}, u_k, w_k)\]

其中 $w_k$ 为运动中噪声。

观测方程 $ h $:

\[z_{k,j} = h(y_j, x_k, v_{k,j})\]

其中 $v_{k,j}$ 是观测噪声。

随物体运动,我们已知每个时刻的运动输入 $u_k$, 观测输入 $z_{k,j}$, 且上述输入有未知噪声, 求

  1. $x$, 物体的位置——即求解定位
  2. $y$, 路标的位置——即求解建图

由上,这也解释了SLAM为何是一个状态估计问题:是要通过有噪声测量数据(运动、观测), 去估计内部隐藏的状态(位置,地图)。