1.1 SLAM 问题表述
直观表述:机器人在未知环境中从任一位置开始移动,移动过程中根据对环境的探测确定自身位姿与运动轨迹,同时构建出室内地图。
数学表述:知道运动测量的读数$ \boldsymbol{u} $,以及传感器的读数$ \boldsymbol{z} $,根据运动方程和观测方程,求解定位问题(估计$ \boldsymbol{x} $)和建图问题(估计$ \boldsymbol{y} $)。
(1)位姿--轨迹:机器人各时刻的位姿如下,一组位姿构成机器人一段时间内的运动轨迹。
$$
\boldsymbol{x}_{1}, \boldsymbol{x}_{2}, \ldots, \boldsymbol{x}_{k}
$$
(2)路标--地图:地图由多个路标点组成。机器人行驶过程中,传感器不断探测路标点,得到观测数据。
$$
\boldsymbol{y}_{1}, \boldsymbol{y}_{2}, \ldots, \boldsymbol{y}_{k}
$$
(3)运动方程:由上一时刻的位姿得到当前时刻的位姿,$ \boldsymbol{u}_k $为输入,$ \boldsymbol{\omega}_k $是运动传感器的噪声 。
$$
\boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}, \boldsymbol{\omega}_{k}\right)
$$
(4)观测方程:机器人在位姿点$ \boldsymbol{x}_k $看到某个路标点$ \boldsymbol{y}_j $,产生一个观测数据$ \boldsymbol{z}_{k,j} $。$ \boldsymbol{v}_{k,j} $是观测噪声。
$$
\boldsymbol{z}_{k, j}=h\left(\boldsymbol{y}_{j}, \boldsymbol{x}_{k}, \boldsymbol{v}_{k, j}\right)
$$
1.2 通用框架

1.2.1 传感器
传感器类型:激光雷达,相机(单目/双目/RGB-D),码盘,IMU 等。
数据读取和处理:稳定的系统中会使用多个传感器,因此涉及到数据读取、同步、外点剔除等问题。
1.2.2 前端
前端主要实现里程计,里程计用于估计机器人的运动轨迹,从而解决 SLAM 中的定位问题。
-
基础方案:
- 视觉里程计:利用相邻帧间的图像估计相机运动,并恢复场景的空间结构。将相邻时刻的运动串起来,就构成了轨迹。
- 码盘里程计:基于机器人电机编码器实现。如果机器人行驶过程中,轮子打滑会造成里程计误差很大。
-
融合方案:
- 单个传感器实现的里程计噪声较大,存在累计误差,可用多传感数据进行融合得到里程计信息,常见有相机、码盘、IMU、RTK 组合融合方案。
1.2.3 后端
后端用于优化,从带有噪声的数据中,估计整个系统的状态(定位和地图),以及这个状态的估计的不确定性多大,即最大后验概率估计(Maximum-a-Posteriori,MAP)。优化方法有:滤波器、非线性优化、图优化。
1.2.4 回环检测
漂移问题:机器人经过一段时间回到了原点,但由于漂移,位置估计并没有回到原点。
回环检测:通过判断环境相似性,检测机器人是否回到原点,回环检测结果发送给后端,后端将轨迹和地图调整成回环检测的结果。因此如果回环检测成功,可显著减小累计误差。
视觉回环检测:计算图像数据相似性的算法。
1.2.5 地图构建
-
度量地图:强调精确地表示地图中物体的位置关系,分为稀疏地图和稠密地图,对于定位,稀疏地图就足够了。而用于导航时,往往需要稠密的地图。
- 稀疏地图:进行了一定程度的抽象,并不需要表达所有的物体。
- 稠密地图:着重于建模所有看到的东西。稠密地图按照某种分辨率,由许多个小块组成。二维度量地图是许多个小格子(Grid),三维则是许多小方块(Voxel)。一个小块含有占据、空闲、未知三种状态,以表达该格内是否有物体。当导航算法查询某个空间位置时,地图能够给出该位置是否可以通过的信息。
- 拓扑地图:拓扑地图是一个图,由节点和边组成,只考虑节点间的连通性,放松了对精确位置的需要,去掉了地图的细节问题。



暂无评论内容