SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”[1]。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动 [2]。如果这里的传感器主要为相机,那就称为“视觉SLAM”。
1.SLAM的主要作用是解决Localization 和 Mapping的问题 同时可以完成Navegation
(1)可以实时的完成在没有先验知识的情况下就的SLAM,入门的门槛有点高,首先需要大量先验知识的学习,包括概率论、线性代数、矩阵分析、李群李代数、计算机视觉中的多视图几何,状态估计等系列的理论。
(2)需要一定的编程能力,c/c++、python等,总而言之引用沈劭劼教授的标准,变成牛、数学牛
2.SLAM的应用领域有哪些
SLAM 相关的书籍主要有《概率机器人》(Probabilistic robotics)[5]、《计算机视觉中的多视图几何》(Multiple View Geometry in Computer Vision)[3]、《机器人学中的状态估计》(State Estimation for Robotics: A Matrix-Lie-Group Approach)[6] 等。它们内容丰富、论述全面、推导严谨,在 SLAM 研究者中间是脍灸人口的经典教材。
SLAM 系统分成几个模块:视觉里程计、后端优化、建图以及回环检测。一点点实现这些模块中的核心部分,探讨它们在什么情况下有效,什么情况下会出问题,如何在自己的机器上运行这些代码。会接触到一些必要的数学理论和许多编程知识,会用到 Eigen、OpenCV、PCL、g2o、Ceres 等库 ,掌握它们在 Linux 操作系统中的使用方法。
本书主要介绍并理解算法所必须的数学知识,但是其中的一些理论有些复杂,并且晦涩难懂,所以需要几倍的时间去弥补相关的知识,SLAM看起来像是一个工程,因此让整个系统完美的运行运行起来就是我们需要做的事情。
第一讲 前言
第二讲 初始 SLAM (SLAM 系统概述)
介绍 SLAM 系统的模块以及模块的具体工作内容,实践部分介绍编程环境的搭建、CMake 的语法、IDE 的使用方法。
第三讲 三维空间刚体运动
旋转矩阵、四元数、欧拉角的相关知识,Eigen 库的使用。
第四讲 李群与李代数
李代数的定义和使用方式,Sophus 库的使用。
第五讲 相机与图像
针孔相机模型以及图像的表示方法,OpenCV 库调取相机内参、外参。
第六讲 非线性优化
状态估计理论基础、最小二乘问题、梯度下降方法,使用 Ceres 和 g2o 进行曲线拟合的方法介绍。
第七讲 视觉里程计 1 (特征点法)
特征点的提取与匹配、对极几何约束的计算、PnP、ICP 等,用这些方法去估计两幅图像之间的运动。
第八讲 视觉里程计 2 (直接法)
学习光流和直接法的原理,利用 g2o 实现一个简单的 RGB-D 直接法。
第九讲 实践章:设计前端
搭建一个视觉里程计框架,综合应用之前所学知识,实现它的基本功能。其中会涉及到优化的必要性、关键帧的选择等问题。
第十讲 后端 1
Bundle Adjustment 的深入讨论,包括基本的 BA 以及如何利用稀疏性加速求解过程,使用 Ceres 和 g2o 分别书写一个 BA 程序。
第十一讲 后端 2
位姿图是表达关键帧之间约束的一种更紧凑的形式,将用 g2o 和 gtsam 对一个位姿球进行优化。
第十二讲 回环检测
介绍以词袋方法为主的回环检测,将使用 dbow3 书写字典训练程序和回环检测程序。
第十三讲 建图
使用单目进行稠密深度图的估计(不可靠);RGB-D 的稠密地图构建过程。编写极线搜索与块匹配的程序,构建点云地图和八叉树地图。
第十四讲 SLAM: 现在与未来
当前开源 SLAM 项目以及未来的发展方向。
ORB_SLAM2:https://github.com/raulmur/ORB_SLAM2
相关学习资源:https://www.cnblogs.com/gaoxiang12/tag/%E8%A7%86%E8%A7%89SLAM/