【SLAM】激光SLAM简介与常用框架

😏1. 激光SLAM概述SLAM(同步定位与地图构建)是一种机器人感知技术,用于在未知环境中同时确定机器人的位置并构建地图。

激光SLAM是利用机器人的激光传感器扫描周围环境,将激光点云数据与机器人当前位置相结合,通过运算和优化算法实时构建环境地图,并估计机器人在地图中的准确位置。这样,机器人在未知环境中不仅能够实时感知周围的障碍物、墙壁等信息,还能对自身位置进行估计,从而实现路径规划、避障以及导航等任务。

激光SLAM的核心思想是将机器人的定位和地图构建同时进行,通过激光扫描数据和运动模型等信息,在未知环境中实现自主导航和建立精确的地图。

根据分类标准不同,一般激光SLAM有两种分类方式:

基于滤波器的激光SLAM和基于图优化的激光SLAM基于特征的激光SLAM和基于全局扫描匹配的激光SLAM通过激光SLAM技术,机器人能够在不依赖外部定位系统的情况下,实现自主感知和导航,广泛应用于无人车、无人机、智能机器人以及工业自动化等领域。

😊2. 激光SLAM整体框架激光SLAM的整体框架通常包含以下几个主要组成部分:

1.数据获取和预处理:激光SLAM首先需要获取环境的激光扫描数据。这可以通过激光传感器(如激光雷达)实现。获取的激光数据可能包含噪声或不完整的信息,因此需要进行预处理,如去噪、补全等,以提高数据的质量。

2.特征提取与描述:从激光扫描数据中提取关键的地标或特征点,如角点、边缘等。通常需要使用特征提取算法,如Harris角点检测、线段提取等。同时,对每个特征点进行描述,生成能够表征其属性和位置的特征描述子,如SIFT、SURF等。

3.初始化:在开始时,需要对机器人的初始位姿进行估计。这可以通过里程计信息、惯性导航单元(IMU)或其他传感器来实现。也可以使用启发式方法,如随机放置机器人并进行迭代优化来估计初始位姿。

4.自我定位:基于激光数据和机器人的运动模型,通过滤波器(如扩展卡尔曼滤波器、粒子滤波器)进行自我定位。滤波器通过融合里程计数据和激光扫描数据,估计机器人在地图中的位置和方向。

5.地图构建:使用特征点或全局扫描匹配等方法,将激光扫描数据与机器人的位姿信息相结合,实现地图的构建。地图可以表示为空间中的点云、网格地图或拓扑地图等形式。

6.闭环检测与优化:在长时间运行的SLAM过程中,机器人可能会经过之前已经探索过的区域,产生闭环问题。通过检测闭环并使用回环检测算法,可以优化之前的轨迹和地图,减小误差。

7.增量更新与后端优化:随着机器人的移动和数据的不断积累,需要对地图和轨迹进行增量更新,并使用全局优化算法来进一步优化整个系统的一致性和精度。

8.实时性优化:在SLAM的实际应用中,实时性非常重要。因此,算法还需要考虑计算效率和资源消耗,如使用快速搜索算法、降低计算复杂度等方式来提高实时性能。

😆3. 常用激光SLAM框架及特点最常见的二维激光SLAM的应用就是扫地机器人了。

ROS社区提供了多种2D SLAM算法,可直接使用或进行二次开发:

gmapping:该功能包提供了一个基于粒子滤波器的SLAM算法,可以使用2D激光雷达构建环境地图。apt安装:sudo apt-get install ros-melodic-slam-gmapping

hector_slam:该功能包提供了一种基于反演测量束(raycasting)的SLAM算法,不需要里程计数据,直接使用2D激光雷达就可构建环境地图。apt安装:sudo apt-get install ros-melodic-hector-slam

cartographer:该功能包提供了一种高质量、实时的SLAM算法,可以使用2D激光雷达构建环境地图。

laser_scan_matcher:该功能包提供了一个激光雷达数据匹配算法,可以用于机器人的定位、校正和导航。

karto_slam:该功能包提供了一个基于图优化的SLAM算法,可以使用2D激光雷达构建环境地图。

gridmap:该功能包提供了一种用于2D环境地图的数据结构和算法,可以方便地处理和分析2D地图。

目前大多数智能汽车使用的是三维激光雷达,3D SLAM也有许多开源算法,可直接使用或进行二次开发:

OctoMap:该功能包提供了一种生成3D环境地图的算法,可以使用激光雷达等传感器。

LOAM(Lidar Odometry and Mapping):LOAM是一种基于激光雷达的实时SLAM方法。它通过将点云数据分割为特征点和地面点,使用扫描匹配和里程计估计来计算机器人的位姿和运动,同时构建稠密的地图。LOAM的特点是实时性能好,适用于快速移动的机器人。LOAM是Scan to Scan特征匹配形式的代表(即将输入scan的点云根据曲率大小分为平面点和边缘点,根据距离优化公式来构造优化方程求解位姿变化量)。

一种优化后的LOAM:https://github.com/SlamCabbage/Optimized-SC-F-LOAM

LeGO-LOAM:LeGO-LOAM是LOAM的改进版本,主要针对移动机器人系统进行了优化。它引入了全局地图和闭环检测模块,提高了定位的精度和鲁棒性。LeGO-LOAM还具有低计算复杂度和较小的资源消耗,适合于嵌入式系统和资源受限的环境。

LeGO-LOAM源码:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM

运行:roslaunch lego_loam run.launch

LIO-SAM(Lidar Odometry and SLAM):LIO-SAM是一种基于多帧优化的激光SLAM方法。它使用由激光雷达数据生成的局部地图进行特征匹配和位姿优化,同时解决了传统滤波器方法中的数据关联问题。LIO-SAM具有较高的定位精度和鲁棒性,并且可以在大规模环境下运行。

Cartographer:Cartographer是谷歌开发的一款通用的2D和3D SLAM框架。它支持多种传感器,包括激光雷达和IMU,并提供了定位、建图和闭环检测等功能。Cartographer使用分布式和并行计算方式,具有较高的效率和准确性。Cartographer是Scan to Map特征匹配的代表。

以上。