半闲居士视觉SLAM十四讲笔记(1)前言

本系列文章由 youngpan1101 出品,转载请注明出处。
文章链接: http://blog.csdn.net/youngpan1101/article/details/70193823
作者:宋洋鹏(youngpan1101)
邮箱: [email protected]



该讲详细资料下载链接 【Baidu Yun】【Video】

若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】
若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】
若您觉得本博文对您有帮助,请支持高博的新书《视觉SLAM十四讲》,【点击购买】


本书内容

  1. SLAM : Simultaneous Localization and Mapping, 同时定位与地图构建

    • 定义: 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自身的运动(位姿)。
    • 如果这里的传感器是相机,就称之为 视觉 SLAM
  2. SLAM 的目的是解决“定位”与“地图构建”这两个问题

    • 希望实时地、在没有先验知识的情况下进行 SLAM,要解决这个问题就很不简单
    • SLAM 发展了将近 30 多年,相机才能认识到自身的位置,才能估算自己的运动
  3. SLAM 应用点

    • 室内扫地机
    • 室内服务机器人
    • 自动驾驶
    • 空中的无人机
    • 虚拟现实
    • 增强现实
  4. 国内 SLAM 相关资料非常匮乏,入门较难,虽然理论框架基本趋于稳定,但编程实现较为复杂,有一定的技术门槛

  5. 该书将会结合 SLAM 的理论和实际代码来让初学者真正认识和学习 SLAM,有一种跟着高博做科研的感觉。

  6. 与 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 的书籍
      • 偏重于数学理论,不涉及编程实现
  7. SLAM 系统分成几个模块:视觉里程计、后端优化、建图以及回环检测

  8. 编程过程中会接触到的第三方库:Eigen、OpenCV、PCL、g2o、Ceres 等


——————————– 分割线<< >>分割线 ——————————–


如何使用这本书

  1. 介绍并理解算法所必须的数学知识,不追求看似完美但实际复杂冗长的证明(SLAM 更像是一个工程问题,要在这个领域发优秀 Paper 的还是要深钻理论)

  2. 目录

    • 第二讲 初始 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 项目以及未来的发展方向。

  3. 代码托管
    [Github]

  4. 具备基本知识

    • 高等数学、线性代数、概率论
    • C++ 基础
    • Linux 基础

——————————– 分割线<< >>分割线 ——————————–


习题

  1. 有线性方程 Ax=b ,当我们知道 A,b ,想要求解 x 时,如何求解? 这对 A b 需要哪些条件? 提示: 从 A 的维度和秩角度来分析。

    详细解答见另一篇博客 [数学]线性方程组的解、SVD

  2. 高斯分布是什么?它的一维形式是什么样子?它的高维形式有是怎样的?

    参考 多维高斯分布讲解

  3. 你知道 C++ 类吗?你知道 STL 吗?你使用过它们吗?

    • C++ 的基本教程可参考 C++ 教程
    • STL 的总结 链接
  4. 你以前怎样书写 C++ 程序?

    以前更多的是用微软的 Visual Studio IDE 来写 C++ 程序。

  5. 你知道 C++11 标准吗?其中哪些新特性你之前听说过或使用过?有没有其他的标准?

    C++11新特性 详细介绍了 C++11

  6. 你知道 Linux 吗?你有没有至少使用过其中之一(安卓不算),比如 Ubuntu?

    使用过 Ubuntu

  7. Linux 的目录结构是什么样的?你知道哪些基本命令,比如 ls, cat 等等?

    Linux 的学习教程: 鸟哥的 Linux 私房菜 – 基础学习篇

  8. 如何在 Ubuntu 中安装软件(不打开软件中心的情况下)?

    一般是用命令: $ sudo apt-get install ….

  9. 学习 Vim

    • 跟我一起学习VIM - The Life Changing Editor
    • 简明 VIM 练级攻略

你可能感兴趣的:(视觉SLAM十四讲)