本系列文章由 youngpan1101 出品,转载请注明出处。
文章链接: http://blog.csdn.net/youngpan1101/article/details/70193823
作者:宋洋鹏(youngpan1101)
邮箱: yangpeng_song@163.com
若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】
若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】
若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】
本书内容
SLAM : Simultaneous Localization and Mapping, 同时定位与地图构建
- 定义: 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自身的运动(位姿)。
- 如果这里的传感器是相机,就称之为 视觉 SLAM。
SLAM 的目的是解决“定位”与“地图构建”这两个问题
- 希望实时地、在没有先验知识的情况下进行 SLAM,要解决这个问题就很不简单
- SLAM 发展了将近 30 多年,相机才能认识到自身的位置,才能估算自己的运动
SLAM 应用点
- 室内扫地机
- 室内服务机器人
- 自动驾驶
- 空中的无人机
- 虚拟现实
- 增强现实
国内 SLAM 相关资料非常匮乏,入门较难,虽然理论框架基本趋于稳定,但编程实现较为复杂,有一定的技术门槛
该书将会结合 SLAM 的理论和实际代码来让初学者真正认识和学习 SLAM,有一种跟着高博做科研的感觉。
与 SLAM 相关的书籍
- Probabilistic Robotics
- Multiple View Geometry in Computer Vision
[TUM Course] - State Estimation for Robotics: A Matrix-Lie-Group Approach
- Optimal Estimation of Dynamic Systems, Second Edition
- Quaternion kinematics for the error-state KF
- 这些书籍内容丰富、论述全面、推导严谨
- 存在两个重要问题
- 主要是介绍基础理论,SLAM 只是它们应用之一,并不能算是专门讲解 SLAM 的书籍
- 偏重于数学理论,不涉及编程实现
- 主要是介绍基础理论,SLAM 只是它们应用之一,并不能算是专门讲解 SLAM 的书籍
SLAM 系统分成几个模块:视觉里程计、后端优化、建图以及回环检测
编程过程中会接触到的第三方库:Eigen、OpenCV、PCL、g2o、Ceres 等
——————————– 分割线<< 家有小武,如有一母 >>分割线 ——————————–
如何使用这本书
介绍并理解算法所必须的数学知识,不追求看似完美但实际复杂冗长的证明(SLAM 更像是一个工程问题,要在这个领域发优秀 Paper 的还是要深钻理论)
目录
第二讲 初始 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 项目以及未来的发展方向。
代码托管
[Github]具备基本知识
- 高等数学、线性代数、概率论
- C++ 基础
- Linux 基础
——————————– 分割线<< 家有小武,如有一母 >>分割线 ——————————–
习题
有线性方程 Ax=b ,当我们知道 A,b ,想要求解 x 时,如何求解? 这对
A 和 b 需要哪些条件? 提示: 从A 的维度和秩角度来分析。详细解答见另一篇博客 [数学]线性方程组的解、SVD
高斯分布是什么?它的一维形式是什么样子?它的高维形式有是怎样的?
参考 多维高斯分布讲解
你知道 C++ 类吗?你知道 STL 吗?你使用过它们吗?
你以前怎样书写 C++ 程序?
以前更多的是用微软的 Visual Studio IDE 来写 C++ 程序。
你知道 C++11 标准吗?其中哪些新特性你之前听说过或使用过?有没有其他的标准?
C++11新特性 详细介绍了 C++11
你知道 Linux 吗?你有没有至少使用过其中之一(安卓不算),比如 Ubuntu?
使用过 Ubuntu
Linux 的目录结构是什么样的?你知道哪些基本命令,比如 ls, cat 等等?
Linux 的学习教程: 鸟哥的 Linux 私房菜 – 基础学习篇
如何在 Ubuntu 中安装软件(不打开软件中心的情况下)?
一般是用命令: $ sudo apt-get install ….
学习 Vim