读书笔记——视觉SLAM十四讲(1)
初认SLAM
初认SLAM
传感器的分类
相机以二维形式记录了三维世界,但单张图片无法计算物体与相机之间的距离。
单目相机
如果需要恢复物体的三维结构,需要改变相机视角以估计其运动,场景中物体的远近和大小被叫做结构。
当相机移动时,物体在图像中产生了视差,通过视差定量判断哪些物体离得远,哪些物体离得近。
但单目相机获取的只是相对的值,也就是说其估计的轨迹和地图将与真实的轨迹和地图相差一个因子,即尺度不确定性。
由此可见其具有以下缺点:平移后才能计算深度,以及无法确定真实尺度。
双目相机
双目由两个单目构成,相机之间的距离是基线。
双目测量到的深度范围与基线相关。基线距离越大,能够测量到的物体就越远。
优点在于:原理简单,不依赖于其他传感设备,可应用于室内或者室外。
缺点在于:配置标定复杂,视差计算极其消耗计算资源。
深度相机
通过红外结构光原理,通过主动向物体发射光并接收以测出物体距离。
优点在于:通过物理测量手段可以大幅减少计算量。
缺点在于:测量范围窄,噪声大,视野小,易受日光干扰,无法测量透射物质;多用于室内。
经典视觉SLAM框架
如果把工作环境限定在静态、刚体、光照变化不明显、没有人为干扰的场景,那么当下SLAM技术已经相当成熟。
在V-SLAM中,前端和计算机视觉研究领域更为相关,比如特征提取与匹配等,后端则主要是滤波与非线性优化算法。
组成模块:
1、传感器信息读取:相机图像读取和预处理
2、前端视觉里程计:估算相邻图像间相机的运动,以及局部地图的样子
3、后端(非线性)优化:接收里程计和回环检测的信息,优化后得出全局一致的轨迹和地图
4、回环检测:判断机器人是否到达过先前位置,如果有回环发送信息给后端优化
5、建图:根据估计的轨迹建立地图
视觉里程计:
为了定量估计相机运动,必须了解相机与空间点的几何关系。
视觉里程计通过相邻帧图像估计相机运动,恢复场景空间结构。(与过去图像无关,只负责短时记忆)
如果仅通过视觉里程计估计轨迹,将出现累计漂移。(轨迹计算的误差将如滚雪球一般越滚越大)
为了解决漂移问题,需要后端优化和回环检测。
后端优化:
后端优化主要负责处理SLAM过程中的噪声问题;即如何从带有噪声的数据中估计整个系统的状态,这里的状态包括运动轨迹和地图。
早期的SLAM是一个状态估计问题,即运动主体自身和周围环境空间不确定性的估计。(最大后验概率估计)
为了解决SLAM问题,我们需要状态估计理论,把定位和建图的不确定性表达出来,然后采用滤波器或非线性优化,估计状态的均值和不确定性(方差)。
回环检测:
回环检测主要解决位置估计随时间漂移的问题;即检测出“原点”,再对位置估计“纠偏”。
为了实现回环检测,需要让算法识别到过的场景,即通过判断图像间的相似性来完成回环检测。
检测到回环之后,“A与B是同一个点”的信息将被传送到后端优化算法,从而将轨迹和地图调整到符合回环检测结果的样子。
也就是说,如果有充分且正确的回环检测,可以消除累积误差,得到全局一致的轨迹和地图。
建图:
地图形式大体分为:度量地图和拓扑地图。
度量地图:
强调精确表示图中物体的位置关系,通常用稀疏和稠密进行分类。
稀疏地图进行了一定程度的抽象,不需要表达所有物体。(由“路标”组成的地图)
稠密地图由许多小块组成,小块用以表达该位置是否有物体。地图可以给出能否通过的信息,多用于导航算法。
拓扑地图:
强调地图元素之间的关系。拓扑地图是一个图,由节点和边组成,只考虑节点之间的连通性,不考虑如何到达。
SLAM问题的数学表述
位姿(旋转+平移)
运动方程
观测方程
参数化
状态估计问题
线性/非线性(高斯/非高斯)系统
卡尔曼滤波/非线性优化