视觉SLAM14讲——第1讲:前言
本文将的是第2讲内容,内容囊括:
1.SLAM 框架中的模块构成,各模块任务;
2.编程环境搭建;
3.Linux编译程序;
4.cmake基本使用;
上一讲中提到过SLAM的任务是定位(明白自身状态)和 建图 (了解外在环境);
一、安装于机器人本体;
轮式编码器;(测轮子角度)
相机;
激光;
IMU;(测运动角速度和加速度)
双目;
……
特性:间接测量位置信息,没有对环境提出任何要求,方案适用于未知环境;
二、安装于环境;(这类传感器可直接测量到机器人位置信息)
导轨;
二维码标志;
GPS;
……
特性:简单,直接测量位置信息,受外部环境约束,无法提供通用解决方案;
按照相机工作方式,相机可分为:单目(Monocular)、双目(Stereo)、深度相机(RGB-D);
其中RGB-D相机可获取每个像素离相机的距离。
相机还有全景相机,Event相机等~
单目相机:只使用一个摄像头进行SLAM 的做法称为单目SLAM(Monocular SLAM)。这种传感器结构特别的简单、成本特别的低,所以单目SLAM 非常受研究者关注。在单目相机中,我们无法通过单个图片来计算场景中物体离我们的距离(远近)。缺陷是通过单张图像无法确定深度;
想要恢复二维图像中目标的三维结构信息,必须移动相机的视角形成视差,因此单目SLAM中必须移动相机才能估计运动,才能估计物体的结构(远近和大小);
尺度不确定性:把相机运动和场景大小同时放大两倍,单目看到的像是一样的,即乘以任意倍数,看到一样的景象,说明单目SLAM估计的轨迹和地图将和真实轨迹地图相差一个因子,即尺度。
总之缺点:无深度信息,尺度不确定性问题;
双目相机(stereo)和深度相机:
这两种相机目的在于获取物体深度信息,如果知道距离,场景三维结构可通过单个图像恢复,消除了尺度不确定性。这两种相机测量深度的原理不一样。
双目相机:由两个单目相机组成,两个相机之间的距离(称为基线 Baseline)是事先知道的;基线距离越大,能够测量地越远,距离估计是比较左右眼图像获得的,适用于室内与室外,
缺点:配置和标定复杂,深度量程和精度受双目基线与分辨率限值,视差计算耗资源,需GPU和FPGA才能实时输出整图的距离信息。
深度相机(RGB-D):
原理:结构光或者 Time-of-Flight(ToF),像激光一样,通过向物体发射光并接受返回的光,测量物体离相机的距离。通过物理测量手段,相比双目的软件计算方式节省了大量的计算量。属于主动测量,功耗大,深度值较准确。
RGB-D常见产品:Kinect/Kinect V2、Xtion live pro、Realsense等;
缺点:测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等问题;
1. 传感器信息读取,主要是图像信息,(机器人中海油码盘,惯性传感器等)
2. 视觉里程计(VO),估算相邻图像间相机运动,以及局部地图样子;
叫它“里程计”是因为它和实际的里程计一样,只计算相邻时刻的运动,而和再往前的过去信息没有关联。只要把相邻时刻的运动串起来,就构成机器人的运动轨迹,解决了定位问题。根据每个时刻相机位置,计算各像素对应的空间点的位置,就得到了地图。然而不可避免出现累计漂移。为了解决漂移问题,需要后端优化和回环检测;该块属于前端,和计算机视觉相关,比如图像特征提取与匹配等;
3. 后端优化(Optimization), 接受不同时刻VO测量的相机位姿,以及回环检测信息,得到全局一致的轨迹和地图;处理SLAM中的噪声问题,后端优化要考虑的是如何从带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori,MAP),这个状态包括机器人自身轨迹也包含地图。该块主要是滤波与非线性优化算法。
4. 回环检测(Loop Closing),判断机器人是否曾经到过先前的位置,如果检测到回环,会把信息提供给后端进行处理;主要解决位置估计随时间偏移的问题,为了实现回环检测,需要让机器人具有识别曾到达过的场景的能力,例如可以判断图像间的相似性来完成回环检测。视觉回环检测实质是一种计算图数据相似性的算法。将“A”和“B”是同一点这信息告诉后端优化算法,后端根据这些信息把轨迹和地图调整到符合回环检测结果的样子,消除累计误差。
5. 建图(Mapping),根据估计的轨迹,建立与任务要求对应的地图;
地图形式随SLAM应用场合而定,大体可分为:度量地图和拓扑地图两种;
度量地图(Metric Map):强调精确表示地图中物体的位置关系,分为稀疏(Sparse)与稠密(Dense)。稀疏地图选择一部分路标(landmark)来组成地图,忽略其他不相关信息;稠密地图着重建模所有看到的东西;
定位时选择稀疏路标地图;
导航时选稠密地图;
拓扑地图(Topological Map):强调地图元素之间的关系,是一个Graph,由节点和边组成,只考虑节点间的连通性。