SLAM涉及的知识面很广,我简单总结了 “SLAM知识树” 如下所示:


(公众号菜单栏回复 “树” 可获得清晰版)

可以看到涉及的知识面还是比较广的。这里放出一张SLAM圈子里喜闻乐见的表达悲喜交加心情的漫画图,大家可以感受一下:

每个学SLAM的小伙伴可以说都是冒着“头顶凉凉”的巨大风险,勇气可嘉。下面结合SLAM知识树展开具体说说。

编程环境

首先先说电脑环境和编程。

1、电脑环境:Linux环境,推荐Ubuntu16.04。

有人问Windows行不行?这么说吧,如果你是一位SLAM领域的大牛,并且具有超强的解决bug能力,你可以用Windows,否则,非常不建议在Windows下编译,因为你早晚会被各种依赖库,各种bug搞崩溃的。而且大部分的SLAM开源代码都在Linux环境下编译,很多第三方依赖库在Linux下可以非常方便的安装。

如果之前没有接触过Ubuntu的,也不用担心。刚开始用命令行界面可能不太习惯,慢慢习惯后就会发现Linux的内在美。所以要学SLAM就先装一个Ubuntu系统吧,如果电脑本身是Windows系统,建议装双系统,不要装虚拟机。学习Linux的话,就看那本经典的书:《鸟哥的Linux私房菜》吧,书的内容比较多,建议先学习一下基本的文档操作指令。可以快速浏览一遍,不需要死记,以后用到了再去查就行。这书的作者鸟哥有个网站也可以查命令,挺方便的:

http://cn.linux.vbird.org/linux_basic/1010index.php

2、编程相关

编程语言:

主要是C++。推荐红宝书《C++ Primer》。内容非常多而全。如果是初学者没那么多时间学一遍,就重点选择前几章基础看看,动手敲一敲代码。然后了解后面几章常用的数据结构和C++的一些特性(重载、多态、继承)等。有时候也需要会一些python,网上资料很多,不多说。

集成开发环境:

CLion(用edu结尾邮箱可以申请免费使用一年)、kdevelop(免费),个人觉得前者好用一点。

编译工具:

cmake。统一使用cmake编译,好处很多,比如代码可以很方便的跨平台使用等。使用起来也很方便。有个小册子《CMake practice》照着学一下。

文档编辑:

有很多,比如gedit、Nano、vim等。

第三方函数库:

使用到的第三方库主要包括:OpenCV(计算机视觉),OpenGL(计算机图形学),Eigen(几何变换),Sophus(李代数),Ceres(非线性优化),G2o(图优化)等。

数学

主要是大学里学的:线性代数、概率论和微积分。虽然很多人大学里学的早都还给老师了,不过也不用太担心,SLAM里也不需要非常难的数学问题。主要包括:

矩阵的性质。比如矩阵乘法、求逆、矩阵分解(SVD,QR,Cholesky)、反对称矩阵等。

李群李代数。这个可能很多人以前没接触过,也是挺重要的,不过高翔的十四讲里也讲的比较详细了,仔细推一下公式。

非线性优化问题。比如梯度下降、牛顿法、高斯-牛顿法、LM算法、bundle adjustment等。

此外,还有泰勒展开,求(偏)导,积分等。

计算机视觉相关

SLAM里涉及很多图像处理、计算机视觉知识,总结一下主要有:

相机相关:单目、双目、RGB-D等相机的物理参数意义、相机成像模型、相机的标定、去畸变等。双目的话还涉及到视差计算,RGB-D的话涉及到RGB和depth图像的对齐等。

图像处理相关。比如和特征点相关的有:特征点描述子、特征点提取、特征点匹配。图像梯度计算、边缘检测、直线检测等。

多视角几何相关。比如对极约束、本质矩阵、单应矩阵、光流估计、三角化等。

英语

学习SLAM必须具备一定的英语阅读能力。因为SLAM相关的大部分资料(论文、书籍、技术文档等)都是英文的。不过即使英文不好也不用太担心,利用好查单词软件,遇到不认识的 就去查,时间长了也就都混的“脸熟”了,英语阅读速度和理解能力也会逐渐提升。

开源代码

虽然SLAM比较难,但是令人欣慰的是,SLAM领域有很多优秀的开源代码可以学习。列举几个主流的如下:

稀疏法:

ORB-SLAM2:支持单目,双目,RGB-D相机

https://github.com/raulmur/ORB_SLAM2

半稠密法:

LSD-SLAM:支持单目,双目,RGB-D相机

https://vision.in.tum.de/research/vslam/lsdslam

DSO:单目

https://vision.in.tum.de/research/vslam/dso

稠密法

Elastic Fusion:RGB-D相机

https://github.com/mp3guy/ElasticFusion

BundleFusion:RGB-D相机

https://github.com/niessner/BundleFusion

RGB-D SLAM V2:RGB-D相机

https://github.com/felixendres/rgbdslam_v2

多传感器融合:

VINS:单目 + IMU(惯性测量单元)

https://github.com/HKUST-Aerial-Robotics/VINS-Mono

OKVIS:(单目、双目、四目)+ IMU

https://wp.doc.ic.ac.uk/sleutene/2016/02/04/release-of-okvis-open-keyframe-based-visual-inertial-slam/

数据集

主要列举几个主流的数据集

1、TUM RGB-D SLAM Dataset and Benchmark


德国慕尼黑理工大学计算机视觉组制作的数据集,使用Kinect相机采集的数据集,包括IMU数据,并且用高精度运动采集系统提供了groundtruth(真值)。提供测试脚本,可以方便的实现量化评估。

https://vision.in.tum.de/data/datasets/rgbd-dataset

2、KITTI Vision Benchmark Suite


德国卡尔斯鲁厄理工学院和丰田工业大学芝加哥分校一起合作制作的用于自动驾驶的数据集。

使用一辆改装的汽车采集,该车配备了两台高分辨率彩色和灰度摄像机,还有Velodyne激光扫描仪和GPS定位系统,用来提供精确的groundtruth。主要采集区域是卡尔斯鲁厄市区、农村地区和高速公路。提供测试脚本可以方便的实现量化评估。

http://www.cvlibs.net/datasets/kitti/

3、EuRoC MAV Dataset


苏黎世联邦理工大学制作的数据集,采用装备了双目相机和IMU的四旋翼无人机采集数据,使用高精度运动采集系统提供了groundtruth。提供测试脚本,可以方便的实现量化评估。

https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

作业

题目1

我们知道SLAM是处理序列图像的,有时候需要格式化的图像名字用作输入。前面提到的TUM的RGB-D数据集中图像是根据时间命名的,请从下面链接下载数据集fr1/desk

https://vision.in.tum.de/data/datasets/rgbd-dataset/download#

并解压。请编程实现将文件夹/rgb下以时间命名的序列图片重新命名为0000-9999的格式。

本程序学习目的:

熟悉cmake的使用、OpenCV读写操作、C++的string操作

题目2

已知相机的位姿用四元数表示为q=[0.35,0.2,0.3,0.1],顺序为x,y,z,w,请编程实现:

输出四元数对应的旋转矩阵、旋转矩阵的转置,旋转矩阵的逆矩阵,旋转矩阵乘以自身的转置,验证旋转矩阵的正交性。

本程序学习目的:

熟悉cmake的使用、学习eigen的基本操作;根据实践验证旋转矩阵的约束

下图是用于参考的代码框架:


参考输出如下,用于验证结果。

欢迎留言讨论,或者在公众号:计算机视觉life菜单栏进入知识星球「从零开始学习SLAM」一起学习交流(有参考答案)~

相关阅读

从零开始一起学习SLAM | 为什么要学SLAM?

零基础小白,如何入门计算机视觉?

原文链接更精彩:从零开始一起学习SLAM | 学习SLAM到底需要学什么?

从零开始一起学习SLAM | 学习SLAM到底需要学什么?相关推荐

  1. 如何学习大数据,到底怎么学?数据科学概论与大数据学习误区在哪

    数据科学家走在通往无所不知的路上,走到尽头才发现,自己一无所知." 最近不少网友向我咨询如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问 ...

  2. 如何开始SLAM学习?

    作者丨王方浩@知乎 来源丨https://zhuanlan.zhihu.com/p/379070942 编辑丨3D视觉工坊 为了方便大家更好的系统学习激光SLAM,工坊邀请行业专家推出了面向工业级实战 ...

  3. SLAM 学习与开发经验分享

    导语 毫无疑问,SLAM是当前最酷炫的技术.在这里,我给大家分享一些在学习SLAM的过程中的一些资料与方法(不断更新中...) AR开发者社区: 目录 入门 基础 进阶 优秀文章 技术博客 网站与研究 ...

  4. SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...

  5. SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)

    写在前面 关于安装配置,博客LIO_SAM实测运行,论文学习及代码注释[附对应google driver数据] 我觉得已经写的比较完善了.但是我觉得在注释方面,这位博主写的还不够完善,因此在学习以后, ...

  6. Slam学习笔记——ROS踩坑记录

    Slam学习笔记--ROS踩坑记录 1. 安装 2. ROS文件系统 2.1 工作区 2.2 包package 2.2.1 包的操作 2.2.2 描述文件package.xml 2.3 节点node ...

  7. 【ROS】中级操作学习整理-激光SLAM

    系列文章目录 ·[ROS]中级操作学习整理-gazebo机器人仿真 ·[ROS]中级操作学习整理-TF坐标变换 ·[ROS]中级操作学习整理-传感器建模 ·[ROS]中级操作学习整理-激光SLAM 文 ...

  8. SLAM学习资料汇总-超全

    SLAM 学习与开发经验分享 导语 毫无疑问,SLAM是当前最酷炫的技术.在这里,我给大家分享一些在学习SLAM的过程中的一些资料与方法(不断更新中...) AR开发者社区: 目录 入门 基础 进阶 ...

  9. SLAM学习--视觉slam学习教材推荐(附相关技术文档下载链接)

    (理论上看完前三本,足够掌握视觉slam的所有理论知识,实践部分参考各种开源代码) 一.<视觉slam十四讲>,高翔,清华大学出版社,(目前已出第二版,优先推荐) 以上教材,其实是基于国外 ...

  10. 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》

    这篇博客主要记录了我在深蓝学院视觉slam课程中的课后习题,因为是为了统计知识点来方便自己以后查阅,所以有部分知识可能不太严谨,如果给大家造成了困扰请见谅,大家发现了问题也可以私信或者评论给我及时改正 ...

最新文章

  1. 停电后程序员怎么写代码 | 每日趣闻
  2. poj 1830 开关问题
  3. Python 开发的 10 个小贴士,你知道几个?
  4. Oracle数据库更新时间的SQL语句
  5. [转载] Java中Runtime的使用
  6. Android Intent Action 大全
  7. JavaScript学习(六十五)—数组知识点总结
  8. 力扣题目——25. K 个一组翻转链表
  9. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载
  10. 漫画 | 强化学习这都学不会的话,咳咳,你过来下!
  11. Lync问题解决之前端服务器Wmf2008R2错误
  12. python架构师是做什么的_架构师的工作都干些什么?!想做架构师必看!
  13. python运维脚本简书_Python运维篇:会Python的运维工程师价值多少?
  14. html选择日期的组件,怎样实现一个datePicker(日期选择)组件
  15. s8 android8 黑域,【转帖】 8.0未Root禁用系统软件(不用黑域、冰箱之类的软件)...
  16. 深度学习 花书中的概念——百晓生知识处理库自动抽取
  17. 腾讯短链接在线生成工具
  18. neogeo模拟器 linux,neogeo模拟器
  19. 我的世界java版无效会话_我的世界局域网联机显示无效的会话和搜不到主机
  20. Error:Execution failed for task ':app:validateSigningDevDebug'. Keystore file E:\workspace\trunk\H

热门文章

  1. 黑苹果macOS Catalina 10.15.4 安装过程详细记录
  2. 小米wifi 苹果驱动安装教程macOS Mojave 10.14,Sierra 10.12测试通过
  3. 3. DICOM图像层级分类-DCMTK-数据字典避坑
  4. ubuntu安装deep-wine下载qq,tim等文件
  5. Linux Command hping3 测试网络安全工具
  6. 极光笔记丨搭建UMS私有云文件服务器
  7. Android开发之——统计代码行数
  8. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-855】-【V5.0 Android-Q-TD1】...
  9. VMWare虚拟机Linux系统忘记登录密码
  10. [转][darkbaby]任天堂传——失落的泰坦王朝(上)