前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SLAM】激光SLAM简介与常用框架

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

作者头像
DevFrank
发布2024-07-24 15:24:22
710
发布2024-07-24 15:24:22
举报
文章被收录于专栏:C++开发学习交流

😏1. 激光SLAM概述

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

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

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

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

  1. 基于滤波器的激光SLAM和基于图优化的激光SLAM
  2. 基于特征的激光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算法,可直接使用或进行二次开发:

  1. gmapping:该功能包提供了一个基于粒子滤波器的SLAM算法,可以使用2D激光雷达构建环境地图。

apt安装:sudo apt-get install ros-melodic-slam-gmapping

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

apt安装:sudo apt-get install ros-melodic-hector-slam

  1. cartographer:该功能包提供了一种高质量、实时的SLAM算法,可以使用2D激光雷达构建环境地图。
  2. laser_scan_matcher:该功能包提供了一个激光雷达数据匹配算法,可以用于机器人的定位、校正和导航。
  3. karto_slam:该功能包提供了一个基于图优化的SLAM算法,可以使用2D激光雷达构建环境地图。
  4. gridmap:该功能包提供了一种用于2D环境地图的数据结构和算法,可以方便地处理和分析2D地图。

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

  1. OctoMap:该功能包提供了一种生成3D环境地图的算法,可以使用激光雷达等传感器。
  2. LOAM(Lidar Odometry and Mapping):LOAM是一种基于激光雷达的实时SLAM方法。它通过将点云数据分割为特征点和地面点,使用扫描匹配和里程计估计来计算机器人的位姿和运动,同时构建稠密的地图。LOAM的特点是实时性能好,适用于快速移动的机器人。LOAM是Scan to Scan特征匹配形式的代表(即将输入scan的点云根据曲率大小分为平面点和边缘点,根据距离优化公式来构造优化方程求解位姿变化量)。 一种优化后的LOAM:https://github.com/SlamCabbage/Optimized-SC-F-LOAM
  3. LeGO-LOAM:LeGO-LOAM是LOAM的改进版本,主要针对移动机器人系统进行了优化。它引入了全局地图和闭环检测模块,提高了定位的精度和鲁棒性。LeGO-LOAM还具有低计算复杂度和较小的资源消耗,适合于嵌入式系统和资源受限的环境。 LeGO-LOAM源码:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 运行:roslaunch lego_loam run.launch
  4. LIO-SAM(Lidar Odometry and SLAM):LIO-SAM是一种基于多帧优化的激光SLAM方法。它使用由激光雷达数据生成的局部地图进行特征匹配和位姿优化,同时解决了传统滤波器方法中的数据关联问题。LIO-SAM具有较高的定位精度和鲁棒性,并且可以在大规模环境下运行。
  5. Cartographer:Cartographer是谷歌开发的一款通用的2D和3D SLAM框架。它支持多种传感器,包括激光雷达和IMU,并提供了定位、建图和闭环检测等功能。Cartographer使用分布式和并行计算方式,具有较高的效率和准确性。Cartographer是Scan to Map特征匹配的代表。

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😏1. 激光SLAM概述
  • 😊2. 激光SLAM整体框架
  • 😆3. 常用激光SLAM框架及特点
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档