预备知识
SLAM:Simultaneous Localization and Mapping
同步定位及建图:搭载特定传感器的主体,在没有环境先验信息情况下,在运动过程中建立环境模型,同时估计自己位姿的过程。根据传感器分为深度相机,RGB相机和激光。不同传感器特点不一样,应用环境以及遇到的难点不同。本书主要是视觉SLAM:围绕RGB相机,也会引入Depth相机。
CV之初,人们想象有一天计算机将和人一样,通过眼睛去观察世界,理解周围的物体,探索未知的环境–这是一个美妙而又充满浪漫色彩的梦想,让无数科研人员日夜为之奋斗。
SLAM相关的应用点:室内扫地机,移动机器人;户外的自动驾驶以及空中无人机;乃至虚拟现实和增强现实设备。
SLAM研究的三十年,将主干分为四个大模块:
- 前端里程计(求pose):估计相邻图像相机的运动以及局部地图样子
- 后端优化(优化pose):根据多个时刻的相机位姿以及回环检测进行优化,得到全局一致的轨迹和地图
- 建图:根据轨迹建立与任务要求对应的地图
- 回环检测(优化全局pose):判断是否到达过先前的位置
1.定位问题:我在什么地方?
2.建图问题:周围环境是什么样?
方法很多:室内可以在地板铺设导引线,在墙上贴二维码,在桌子放置无线电定位设备;室外可以安装定位设备(GPS)等
传感器主要两类:1.安装在本体上,如轮式编码器,IMU,相机,激光; 2.安装在环境上,上述提到的
不同传感器的特性以及SLAM的影响
单目:图像是三维空间的二维投影,必须移动(Motion)才能估计结构(Structure).motion后只能根据视差估计相对的值,具有尺度不确定性。
问题:平移才能计算深度以及无法确定真实尺度,导致单目SLAM困难多多,但是成本较低。
双目:利于基线解决尺度不确定性,但视差的匹配依然效率不高,需要引入GPU和FPGA加速才能实时输出整张图的距离信息。双目测量距离受基线大小影响,所以无人车上一般搭载很大的家伙
问题:对于SLAM而言,传感器的配置与标定较为复杂。
RGB-D相机:通过TOF物理测量手段直接获得全图的深度信息
问题:低端TOF测量范围窄,噪声大,视野小;普遍存在日光干扰、无法测量投射材质以及高反高吸收率材质;所以主要用于室内应用,室外难以使用。
目前而言,如果工作环境理想:静态、刚体、光照变化小、没有人为干扰的场景,SLAM是相当成熟。
整书结构
1.数学基础
- SLAM概述
- 三维空间运动
- 李群和李代数
- 针孔模型及opencv
- 非线性优化
2.技术实践
- 特征点法的视觉里程计
- 直接法的视觉里程计
- 里程计实践
- 后端优化BA
- 后端优化位姿图
- 回环检测
- 地图构建
- SLAM的未来
基础知识须知:
- 高等数学、线性代数、概率论
- C++语言和Linux基础
课后习题
1.有线性方程 Ax = b,当我们知道 A, b,想要求解 x 时,如何求解?这对 A 和 b 需要哪些条件?提示:从 A 的维度和秩角度来分析
1)b等于0, n元齐次线性方程组$A_(m*n)x=0$有非0解的充必条件是系数矩阵的秩$Rank(A)<n$
2)b不等于0,非齐次线性方程组$Ax=b$有解的充必条件是系数矩阵的秩等与增广矩阵的秩; $R(A)=R(B)=n$,则有唯一解,$R(A)=R(B)<n$则有无穷多解
- 高斯分布是什么?它的一维形式是什么样子?它的高维形式是什么样子?
又名正态分布,由于中心极限定理,任何分布的抽样分布样本足够大时,其渐进分布都是高斯分布。
初识SLAM
目标:
- 理解VSLAM各个模块
- 搭建环境
- 掌握基本CMAKE
传感器
传感器类型:机器人自身和环境上
自身传感:mono, stereo, rgbd, lidar, event camera, imu, 编码器及新式传感器
一些相关术语:
- 尺度不确定性:2d的rgb图像没有真实尺度信息
- 运动motion: 相机外参R, t
- 结构structure: 物体的远近和大小
经典VSLAM框架
流程:
- 1.传感器信息读取融合:将所有观测数据正确读入并预处理
- 2.视觉里程计VO:估算相邻图像间的运动以及局部地图的样子,又称前端
- 3.后端优化:接受不同时刻VO的相机位姿,以及回环检测的信息,一并优化获得全局一致的轨迹和地图
- 4.回环检测:判断机器人是否曾经到达过先前的位置,如果有则放到步骤3优化
- 5.建图:根据估计的轨迹,建立与任务要求对应的地图
总体而言,如果把工作环境限定在静态、刚体以及光照变化不明显、没有人为干扰的场景,那么VSLAM系统相当成熟了
为什么叫里程计? 因为它和实际的里程计一样,只计算相邻时刻的运动,而和再之前过去的信息没有关联。所以属于短时记忆的方案
因此也引起累计漂移:随着相邻估计的误差叠加,后续的误差会更大和不可控
因而引入后端优化和回环检测的技术来校正
后端主要处理SLAM过程的噪声问题,具体是如何从带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定性有多大(Maximum-A-Posteriori),这里包括自身轨迹和地图。主要涉及滤波和非线性优化的算法。
回环检测主要让机器人具有识别曾到达过场景的能力,具体实施可以是二维码图片或者图像间的相似性。
最后建图包括度量和拓扑地图:2D栅格地图、2D拓扑地图、3D点云地图、3D网格地图;
度量地图:强调精确表示地图中物体的位置关系
拓扑地图:强调地图元素之间的关系,考虑节点间的连通性
SLAM数学建模
主要分为运动方程和观测方程,根据这两个方程是否线性以及噪声是否服从高斯分布进行分类,主要信息是位姿以及观测的路标
CMAKE的使用
1 | add_executable(exe main.cpp) # 编译执行文件 |
库文件是压缩包,包含编译好的二进制函数,但不知道函数是什么样和调用形式,所以需要结合头文件使用。只有拿到头文件和库文件才可以调用库。