激光SLAM框架总结
一 、激光SLAM简介
基于激光雷达的同时定位与地图构建技术(simultaneous localization and mapping , SLAM)以其准确测量障碍点的角度与距离 、 无须预先布置场景、可融合多传感器 、 在光线较差环境工作 、 能够生成便于导航的环境地图等优势 ,成为目前定位方案中不可或缺的新技术 。
激光 SLAM 任务是搭载激光雷达的主体于运动中估计自身的位姿,同时建立周围的环境地图 。而准确的定位需要精确的地图 ,精确的地图则来自于准确的定位 ,定位侧重自身位姿估计 ,建图侧重外部环境重建 。
SLAM系统一般分为五个模块:传感器数据 、视觉里程计 、后端 、建图及回环检测 。
传感器数据:主要用于采集实际环境中的各类型原始数据 。包括激光扫描数据 、视频图像数据 、点云数据等 。
视觉里程计:主要用于不同时刻间移动目标相对位置的估算 。包括特征匹配 、直接配准等算法的应用 。
后端:主要用于优化视觉里程计带来的累计误差 。包括滤波器 、图优化等算法应用。
建图:用于三维地图构建 。
回环检测:主要用于空间累积误差消除
SLAM工作的主要流程为:
传感器读取数据后 ,视觉里程计估计两个时刻的相对运动(Ego-motion) ,后端处理视觉里程计估计结果的累积误差 ,建图则根据前端与后端得到的运动轨迹来建立地图 ,回环检测考虑了同一场景不同时刻的图像 ,提供了空间上约束来消除累积误差 。
激光雷达采集到的物体信息呈现出一系列分散的、具有准确角度和距离信息的点 ,被称为点云。通常,激光SLAM系统通过对不同时刻两片点云的匹配与比对 ,计算激光雷达相对运动的距离和姿态的改变 ,也就完成了对机器人自身的定位 。
激光雷达距离测量比较准确,误差模型简单 ,在强光直射以外的环境中运行稳定 ,点云的处理也比较容易 。同时,点云信息本身包含直接的几何关系 ,使得机器人的路径规划和导航变得直观。激光SLAM理论研究也相对成熟 ,落地产品更丰富 。
二 、激光SLAM(二维)框架整理
三 、开源激光SLAM方案
根据所采用的凸优化框架 , 激光 SLAM 可分为两大类:基于滤波器(Filter-based)和基于图优化(Graph-based)的激光 SLAM 。
3.1 基于滤波器的激光SLAM方案
3.2 基于图优化激光SLAM方案
在真实环境中 ,由于周围特征点能够辅助机器人定位和建图 ,构建的栅格地图会比仿真环境中效果好 。Hector-SLAM 方案的缺点是对初值敏感 ,同时难以处理闭环问题 。 Hector-SLAM 的整体建图精度高于Gmapping ,但对参数配置要求较高 。Hector -SLAM 适用于对地图要求较高的场合 , Gmapping 易用性更好 。
3.3 3D 激光SLAM
在 3D 激光 SLAM 领域中 , 由 Zhang J 等人提出的LOAM 方案,利用 3D 激光雷达采集数据 , 进行基于特征点的扫描匹配 , 利用非线性优化方法进行运动估计, 激光里程计的输出与地图进行匹配 , 包括直线匹配和平面匹配 , 无回环检测模块,点面特征还不够可靠 。
三、小结
Gmapping可以实时构建室内地图 ,在构建小场景地图所需的计算量较小且精度较高 。相比Hector SLAM对激光雷达频率要求低 、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配 ,建出的地图发生错位 ,原因主要是优化算法容易陷入局部最小值);而相比Cartographer在构建小场景地图时 ,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多 。Gmapping有效利用了车轮里程计信息 ,这也是Gmapping对激光雷达频率要求低的原因:里程计可以提供机器人的位姿先验。而Hector和Cartographer的设计初衷不是为了解决平面移动机器人定位和建图 ,Hector主要用于救灾等地面不平坦的情况 ,因此无法使用里程计 。而Cartographer是用于手持激光雷达完成SLAM过程 ,也就没有里程计可以用 。
随着场景增大所需的粒子增加 ,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图 。并且没有回环检测 ,因此在回环闭合时可能会造成地图错位 ,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价 。所以不能像Cartographer那样构建大的地图,虽然论文生成几万平米的地图 ,但实际我们使用中建的地图没有几千平米时就会发生错误。Gmapping和Cartographer一个是基于滤波框架SLAM另一个是基于优化框架的SLAM ,两种算法都涉及到时间复杂度和空间复杂度的权衡 。Gmapping牺牲空间复杂度保证时间复杂度,这就造成Gmapping不适合构建大场景地图 ,试想一下你要构建200乘200米的环境地图 ,栅格分辨率选择5厘米 ,每个栅格占用一字节内存 ,那么一个粒子携带的地图就需要16M内存 ,如果是100个粒子就需要1.6G内存 。如果地图变成500乘500米 ,粒子数为200个 ,可能电脑就要崩溃了 。翻看Cartographer算法 ,优化相当于地图中只用一个粒子 ,因此存储空间比较Gmapping会小很多倍,但计算量大 ,一般的笔记本很难跑出来好的地图 ,甚至根本就跑不动 。优化图需要复杂的矩阵运算,这也是谷歌为什么还有弄个ceres库出来的原因 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!