激光雷达SLAM算法综述

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看完会有一定的收获。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。

激光雷达SLAM算法综述

单位:陆军工程大学

doi:10.3778/j.issn.1002-8331.2308-0455

一、文章概述

1.1 摘 要

即时定位与地图构建(simultaneous localization and mapping,SLAM)是自主移动机器人和自动驾驶的关键 技术之一,而激光雷达则是支撑SLAM算法运行的重要传感器。基于激光雷达的SLAM算法,对激光雷达SLAM总体框架进行介绍,详细阐述前端里程计、后端优化、回环检测、地图构建模块的作用并总结所使用的算法;按由2D到 3D,单传感器到多传感器融合的顺序,对经典的具有代表性的开源算法进行描述和梳理归纳;介绍常用的开源数据集,以及精度评价指标和测评工具;从深度学习、多传感器融合、多机协同和鲁棒性研究四个维度对激光雷达SLAM 技术的发展趋势进行展望。

1.2问题导向

SLAM最早是由Smith和Cheeseman于1986提出,发展至今已有30多年。激光雷达可 以直接测量距离,对环境的感知更加准确,可以获取物 体的空间位置和形状信息,构建高精地图进行精确定 位,对长时间运行的SLAM系统也更加可靠和稳定。激 光SLAM被广泛应用于室内导航、三维重建和自动驾驶。本文将系统地对激光SLAM进行综述,对相关的激光SLAM算法进 行分析总结。

二、SLAM系统框架

传感器数据采集处理、前端里程计、后端优化、回环检测和地图构建。

2.1前端里程计

2.1.1点云去畸变

激光SLAM中的点云畸变是指点云的运动畸变:激光雷达在扫描过程中,载体机器人是在不断运动的,这就会导致同一帧中的点云数据,是由在不同位置下的激光雷达坐标系测量得到的。常见的点云运动畸变去除方法有纯估计法和传感器辅助法。

  • 纯估计法
    VICP(velocity updating ICP,VICP)[9]是ICP算法的变种,考虑了激光的运动畸变。VICP算法假设在 一帧激光雷达数据中机器人是匀速运动,对ICP估计的 位姿采用线性插值法对点云作运动补偿,将补偿后的数 据再次放入 ICP中求解,形成一个迭代闭环求解最优值。

  • 传感器辅助法
    传感器辅助法主要是利用高频率传感器如惯性测量单元(inertial measurement unit,IMU)极高测量频率的特点,直接测量角速度和线速度,得出每个时刻的位 姿,对点云作运动补偿

    2.1.2点云配准

  • ICP
    1.PP-ICP (point-to-plane ICP)原来计算点与点之间的距离改成计算的是点到面之间的距离,相对于 ICP的一阶收敛速度,PP-ICP是二阶的,收敛速度更快。
    2.PL-ICP(point-to-line ICP)与PP-ICP类似,通过求取点线之间的最小距离使算法快速 收敛,提高匹配精度
    3.NICP(normal ICP)将点云表面法向量信息加入到了 ICP 算法中,用于提高配准的准确度和鲁棒性
    4.IMLS-ICP (implicit moving least square ICP)采用隐式函数来表示点云表面,并且通过最小化MLS逼近和隐式函数之间的距离来进行点云配准,能有效处理非刚性物体的配准问题
    5.广义迭代最近点法(generalized ICP,GICP)引入一个全局参考框架来增强ICP算法的全局优化能力,解决了ICP算法运行缓慢、容易陷入局部最优解等问题
    6.VGICP(voxelized GICP)是一种扩展的广义迭代最近点法,通过将点云转换为一组小体素网格,提出一种多点分布聚合方法估计体素分布,使匹配更加高效。

  • 基于数学特征NDT
    P2D-NDT(point-todistribution NDT):NDT算法从2D推广到3D场景
    基于极大团的配 准假设生成方法MAC:实现了 无需样本、无需训练、同时兼顾精度和效率的三维配准重建效果。

  • 基于学习的方法
    基于深度学习的点云配准方法通过数据驱动方式学习,能获得比人工设计更精准的模型,但其模型的前 期训练和模型部署需要消耗大量的GPU资源,暂时无 法实现在CPU上的实时计算运行。
    1.FCGF提出一种全卷积几何特征,摆脱了先前SOTA方案需要低级特征输入的限制,但在对具有不同旋转分布的点云配准时效果不好;
    2.SpinNet:由一个空间点转换器和一个基于3D卷积神经网络的特征提取器组成,能够提取点云表面特征,具有旋转不变性
    3.Lepard:算法引入Transformer注意力机制,通过结合 RANSAC和ICP完成点云配准
    4.REGTR:使用注意力机制取代显性特征匹配和RANSAC,提出一个包含自注意和交叉注意的 transformer网络架构

    2.2 后端优化

    2.2.1基于滤波

    相比于传统的EKF,研究学者们往往更倾向于使用误差状态卡尔曼滤波器ESKF,相比于其他卡尔曼滤波算法,ESKF估计的是状态的误差量,维度较小且总是在 原点附近,离奇异点较远,不会由于离工作点太远而导致线性化近似不够的问题,在现有的开源算法中已展现其优秀的性能。
    滤波算法缺点是无法校正累计误差,在噪声大、回环多的场景下长时间运行会产生严重的误差漂移。

    2.2.1基于图优化

    图优化(graph optimization)利用图论的方法对系统进行建模求解。因子图优化(factor graph optimization)在图优化的基础上将图划分为变量节点和因子节点。因子图用变量节点表示问题的状态变量,用 因子节点连接它们并表示约束条件,利用迭代最小化算 法,在因子图上反复更新变量节点和因子节点的估计值,直至达到收敛状态。源非线性优化算法库有
    Ceres-Solver
    G2O
    iSAM
    GTSAM
    SE-Sync
    SE

    2.3 回环检测

    回环检测模块用于消除累计误差,提高定位和地图精度,对在大环境、回环多、长时间下运行的SLAM系统至关重要。
    Scan Context++
    Scan Context
    FPFH

    2.4 地图构建

    2D地图用栅格
    3D地图形式如下

三、激光SLAM方案

3.1 2D激光SLAM

  • Fast-SLAM:采用粒子滤波技术, 可以处理非线性系统。大环境下或者在里程计误差较大时需要更多的粒子才能得到较好的估计,这可能会造成内存 爆炸,而粒子的重采样会导致粒子耗散。
  • GMapping:通过降低粒子数量的 方法大幅度缓解内存爆炸;采用选择性重采样方法,对粒子进行重要性权重排序,对权值低的粒子进行重采样,解决RBPF算法中粒子耗散问题。基于滤波的算法且无 回环检测,长时间运行存在较大累计误差,无法在室外 构建大环境地图。
  • Karto:第一个基于图优化的开源SLAM算法
  • Hector-SLAM:创新性地采用高斯牛顿法直接进行帧-图匹配(scan-to-map)优化,构建栅格地图。缺少闭环检测,没有修正能力
  • Cartographer:是目前精度最高、实时性、鲁棒性最好、二次开发最为便捷的开源SLAM算法之一。引入子图(submap)概念,使用 CSM和梯度优化相结合的方法使帧与子图进行匹配。后端基于图优化算法,将当前激 光帧和之前建立的所有子图都加入闭环检测模块,采用分支定界法提升搜索速度。

详情请见...

激光雷达SLAM算法综述 - 古月居 (guyuehome.com)

相关推荐
xiaoshiguang33 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
别NULL3 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇3 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
CYBEREXP20084 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos
yuanbenshidiaos4 小时前
c++------------------函数
开发语言·c++
yuanbenshidiaos5 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习5 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA5 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
tianmu_sama5 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++