连载文章,长期更新,欢迎关注:


写在前面

第1章-ROS入门必备知识

第2章-C++编程范式

第3章-OpenCV图像处理

第4章-机器人传感器

第5章-机器人主机

第6章-机器人底盘

第7章-SLAM中的数学基础

第8章-激光SLAM系统

8.1 Gmapping算法

8.2 Cartographer算法

8.3 LOAM算法

第9章-视觉SLAM系统

第10章-其他SLAM系统

第11章-自主导航中的数学基础

第12章-典型自主导航系统

第13章-机器人SLAM导航综合实战


不管是Gmapping还是Cartographer,通常都是采用单线激光雷达作为输入并且只能在室内环境运行。虽然Cartographer支持2D建图和3D建图模式,但是Cartographer采用3D建图模式构建出来的地图格式仍然为2D形式的地图。

这里介绍一种用在室外环境的激光SLAM算法,即LOAM算法。该算法利用多线激光雷达,能构建出3D点云地图。LOAM算法是一款非常经典的SLAM算法,曾经霸占KITTI数据集效果榜首很长一段时间。下面将从原理分析、源码解读和安装与运行这3个方面展开讲解LOAM算法。

8.3.1 LOAM原理分析

这里结合LOAM算法的核心论文[4]对LOAM的原理展开分析。LOAM的核心思想是将SLAM问题拆分成独立的定位和建图分别来处理,其过程如图8-25所示。首先,特征提取模块(Point Cloud Registration)从雷达点云中提取特征点(corner和surface)。然后,定位模块(Lidar Odometry)利用scan-to-scan方法对相邻两帧雷达点云中的特征点进行匹配,这种帧间特征匹配能得到较低精度的里程计(10Hz Transform),用该里程计来校正雷达特征点云的运动畸变。接着,建图模块(Lidar Mapping)利用scan-to-map方法进行高精度定位,该方法以前面低精度的里程计作为位姿初始值,将校正后的雷达特征点云与地图进行匹配,这种扫描帧到地图的匹配能得到较高精度的里程计(1Hz Transform),基于该高精度的里程计所提供的位姿将校正后的雷达特征点云加入已有地图。最后将低精度里程计和高精度里程计融合,输出更新速度和精度都较高的里程计(10Hz Transform Output)。

图8-25  LOAM算法框架

LOAM算法的价值主要体现在两个方面,一方面是LOAM解决了雷达运动畸变问题,另一方面是LOAM解决了建图效率问题。雷达运动畸变是一个很普遍的问题,具体成因见4.2.3节相关内容,而低成本的雷达由于扫描频率和转速较低,运动畸变问题会更突出。LOAM利用帧间特征匹配得到的里程计来校正雷达运动畸,使得低成本的雷达的应用成为可能。而SLAM问题涉及到同时定位与建图,计算量本来就很大,处理3D点云数据时计算量会更大。LOAM利用低精度里程计和高精度里程计将SLAM问题巧妙地拆分成独立的定位和建图分别来处理,大大降低了计算量,让低算力的计算机设备的应用成为可能。下面对LOAM的四个主要模块进行讨论。

1.特征提取

特征提取模块(Point Cloud Registration)从雷达点云中提取特征点(corner和surface)。特征提取过程其实很简单,对当前帧点云中的每个点计算平滑度,将平滑度小于某阈值(min)的点判断为corner特征点,而平滑度大于某阈值(max)的点判断为surface特征点。所有的corner特征点被存放在corner点云中发布,所有的surface特征点被存放在surface点云中发布,也就是说特征提取结果将发布到两个点云中。

2.定位

定位模块(Lidar Odometry)利用scan-to-scan方法对相邻两帧雷达点云中的特征点进行匹配。这里的匹配属于帧间匹配,利用前后两帧配对的特征点,很容易计算其位姿转移关系。在低速运动场景,直接利用帧间特征匹配就能得到低精度的里程计(10Hz Transform),并利用该里程计在匀速模型假设下对雷达运动畸变做校正。在高速运动场景,就需要借助IMU、VO、轮式里程计等提供的外部定位信息来加快帧间特征匹配速度,以响应高速运动场景下位姿的变化,同时这些外部定位信息可以用于雷达运动畸变校正。

3.建图

建图模块(Lidar Mapping)利用scan-to-map方法进行高精度定位,该方法以前面低精度的里程计作为位姿初始值,将校正后的雷达特征点云与地图进行匹配,这种扫描帧到地图的匹配能得到较高精度的里程计(1Hz Transform),基于该高精度的里程计所提供的位姿将校正后的雷达特征点云加入已有地图。

4.里程计融合

定位模块输出的里程计虽然精度较低,但是更新速度高。而建图模块输出的里程计虽然精度较高,但是更新速度低。将二者融合可以得到更新速度和精度都较高的里程计,融合通过插值过程实现。以1Hz的高精度里程计为基准,利用10Hz的低精度里程计对其进行插值,那么1Hz的高精度里程就能以10Hz速度输出了。

如果激光雷达本身帧率很高或者有IMU、VO、轮式里程计等外部定位辅助时,建图模块输出的里程计更新速度很高时,那么里程计融合模块中的插值过程也就没有必要了。

8.3.2 LOAM源码解读

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

8.3.3 LOAM安装与运行

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

源码仓库

  • Github下载:github.com/xiihoo/Books_Robot_SLAM_Navigation

  • Gitee下载(国内访问速度快):gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

一起自学SLAM算法:8.3 LOAM算法相关推荐

  1. 一起自学SLAM算法:8.1 Gmapping算法

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  2. 一起自学SLAM算法:8.2 Cartographer算法

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  3. 一起自学SLAM算法:7.1 SLAM发展简史

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  4. 一起自学SLAM算法:9.2 LSD-SLAM算法

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  5. 在Ubuntu18.04中使用gazebo配合LOAM算法仿真

    目录 写在前面 操作 环境准备 代码准备 LOAM代码 gazebo代码 联合运行 总结 写在前面 我的本科毕设需要使用到LOAM算法,最近因为疫情原因,可能没有小车来操作,故学习了如何在gazebo ...

  6. LOAM算法(论文+代码)详解(一)—— 引言+特征提取

    目录 引言 符号定义 一.算法流程 二.雷达里程计 1. 特征提取 1.1 平滑度计算 1.2 特征提取 引言 LOAM: Lidar Odometry and Mapping in Real-tim ...

  7. 对LOAM算法原理和代码的理解

    LOAM概况 V-LOAM和LOAM在KITTI上的排名一直是前两名. LOAM在KITTI上的排名 原始LOAM代码(带中文注释)的地址:https://github.com/cuitaixiang ...

  8. Loam算法详解(配合开源代码aloam)

    参考论文:LOAM: Lidar Odometry and Mapping in Real-time 代码:A-LOAM Ubuntu 18.04 + ROS Melodic + eigen 3.3. ...

  9. 激光雷达SLAM激光的前端配准算法

    激光雷达SLAM激光的前端配准算法 ICP匹配方法 两组三维点集的最小二乘拟合 ICP匹配方法 两组三维点集的最小二乘拟合 给定两个三维点集: {xi}={x1,x2,-,xN}{pi}={p1,p2 ...

最新文章

  1. 设置android启动器,教程:在任意 Android 设备上安装 HTC 专属桌面启动器
  2. 2.3 快速搭建你的第一个系统,并进行迭代-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  3. [Issue Fixed]-分卷压缩解压:gzip: stdin: not in gzip format
  4. LVS DR模式搭建,keepalived + LVS
  5. 版是什么版本的教材_acca教材有哪些版本
  6. linux的备份命令及其参数,linux cpio命令参数及用法详解--linux备份文件命令
  7. [opencv] 图像线性混合
  8. 三维坐标 偏转_三维坐标变换原理-平移, 旋转, 缩放
  9. 《软件构架实践》阅读笔记4
  10. 7. Browser 对象 - History 对象
  11. App隐私合规辅助检测工具
  12. Android 登陆界面
  13. 【Python学习】sklearn层次聚类
  14. 老王家esp8266及老五家WS2818灯带
  15. iphone与android共享位置,在iPhone或Android上分享你的位置
  16. 链路追踪:SkyWalking
  17. listview pyqt5 添加_PyQt学习随笔:ListView控件增加列表项
  18. linux命令Istat,Linux stat命令和AIX istat命令 (查看文件修改时间)
  19. 小记:IMX8QXP连接TTM2000
  20. 计算机控制技术(第一章 绪论)

热门文章

  1. [人际]与老板的相处之“道”
  2. 笔记本连接并获取 Bizhub C221 扫描件
  3. 如果QIR能够换回项目成功,我愿用一生敏捷
  4. 计算机办公软件应用实训,计算机专业职业教育实训系列教材:Office 2007办公软件实训教程...
  5. windows server 2008的安装
  6. 澳洲墨尔本大学的计算机专业,澳洲留学:墨尔本大学计算机专业介绍
  7. multiple 属性,上传多个文件或图片
  8. ARP***原理及解决方法(NBTSCAN扫描工具下载和nbtscan使用方法)
  9. 计算机网络——IP数据报的发送和转发过程
  10. Aqua Data Studio