本书内容
- SLAM:Simultaneous Localization and Mapping,同时定位与地图构建;SLAM的目的是解决“定位”与“地图构建”
基础知识支撑
- 线性代数
- 概率统计
- C++
- Linux
- Vim
第一讲:预备知识
1.1 本书讲什么
SLAM第一节概述
1.2 如何使用本书
每一讲对应一个固定主题,穿插理论和实践两部分,理论在前,实践在后。本节还对每一讲的主要内容进行了概述。指明本书所有代码在github上的托管未知
1.3 风格约定
主要是对本书的数学公式、代码的格式进行说明
第二讲:初识SLAM
主要内容包括:
- SLAM组成模块,对应任务
- 编程环境搭建
- Linux编译、运行、调试程序
- cmake基本使用
2.1 引子:小萝卜的例子
当我们需要机器人能够具备自主运动能力,就需要给机器人安装轮子,还需要规划和控制来负责机器人的运行,需要感知告诉机器人周边环境。因此机器人需要做好定位与建图两个工作,明确自己的位置和周边环境。这就需要加入传感器来协助。
传感器根据安装位置主要分为两类:在机器人本体、安装在环境。下面是一些不常见的传感器说明:
- 轮式编码器:测量轮子转动的角度
- 惯性测量单元(IMU):测量角速度、加速度
SLAM下还划分了视觉SLAM和激光SLAM,前者指使用相机完成定位和建图,后者指使用激光完成定位和建图。
相机的类别包括单目相机、双目相机和深度相机(RGB-D)
2.1.1 单目相机和单目SLAM
使用单目相机完成SLAM的做法称为单目SLAM。
估计场景中物体的远近和大小称为估计结构;不同物体在运动的视觉中表现出的差异叫做视差;单目SLAM估计的轨迹和地图与真实的轨迹和地图之间相差一个因子,称为尺度,例如相机拍摄的人我们从照片上并不能知道对方的真实身高,只能看到照片上那个人的占据照片的大致长度,将长度转换为真实身高的映射,就是尺度。尺度不确定性指的是无法通过单目相机确定真实的尺度。
2.1.2 双目相机和深度相机
双目相机和深度相机正是为了解决物体与相机之间的距离而产生。双目相机通过视差,属于软件手段。深度相机通过红外结构光/ToF测量,属于物理手段。一旦知道距离,场景的三维结构就可以通过单个图像恢复,同时消除尺度不确定性。
人利用左右眼睛能够大致判断物体与自身的距离,双目相机也是同样道理,双目相机之间的距离成为基线。但双目相机的缺点是部署与标定比较复杂,且深度量程和精度受限于双目基线与分辨率,视差计算也非常消耗计算资源。
(此处插入一个FPGA介绍:什么是FPGA?)
(此处插入一个ToF介绍:Time of flight相机原理)
2.2 经典视觉SLAM框架
经典视觉SLAM框架包括:传感器信息读取、前端视觉里程计、后段非线性优化、回环检测、建图。