一起自学SLAM算法:8.3 LOAM算法

news2024/11/28 11:58:12

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

不管是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安装与运行

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

参考文献

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序 java失物招领系统uniAPP设计

开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 基于微信小程序的失物招领系…

四轮两驱小车(三):STM32驱动MPU6050进行转弯

前言: 寒假已经过了一半了,前段时间跟学弟一起从零开始搞了一下深度学习,现在才想起来这个系列还没有更完。本篇博客主要介绍一下这个小车转直角弯的神器----MPU6050 MPU6050介绍: 我所采用的MPU6050是某宝上十几块钱的这种&…

FPGA:Verilog HDL程序的基本结构

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥本文已收录于FPGA系列专栏:FP…

Redis从入门到精通-常用命令

本文使用命令行模式进行操作 (1)keys keys的作用是返回所有符合条件的key的列表 *是返回所有的,名字不限制 也可以使用限制 这个命令的原理是查询到所有名字符合条件的,然后返回 练习可以用,但是千万别在生产环境使…

C++学习笔记之数组,结构体...

1️⃣.一维数组的声明: 一般声明:typeName arrayName[arraysize]; 要创建数组,可使用声明语句。数组的声明应该指出数组的①存储在每个元素中的值的类型②数组名③数组中的元素数 比如: short month[12] //create an array o…

各位软件工程师,你知道如何转行跨入Web3.0领域吗?

本篇博客介绍一些 Web3 领域相关知识,由于擦哥长期从事的 Python 研发工作,所以很多内容将从 Python 程序员的视角出发进行阐述。 本系列文章由擦哥撰写,下述用第三人称橡皮擦转述。 文章目录Web3 的学习路径Web3 是什么?语义网络…

轻松玩转树莓派Pico之六、pico-project-generator使用

之前几个项目,都是通过copy老项目的CMakeLists.txt方式来编译项目,今天来体验一下树莓派官方提供的工具pico-project-generator。pico-project-generator是树莓派官方出的Pico C SDK 项目的自动生成工具,该工具可以通过配置,自动生…

JavaEE9-Spring Boot概念,创建和运行

目录 1.Spring Boot是什么?为什么要学? 1.1.概念 1.2.优点 2.Spring Boot项目创建 2.1.使用Idea创建(ide开发商提供) 2.1.1.使用Idea社区版 2.1.2.使用Idea专业版 2.2.网页版创建(Spring官方提供) …

基于深度学习的车道线检测论文解读

Ultra Fast Structure-aware Deep Lane Detection 论文地址:https://arxiv.org/abs/2004.11757 1.任务概述 车道线检测使用OpenCV就能够实现,而基于深度学习的车道线检测尝试解决车道线检测中的遮挡问题。 数据集介绍: 常用数据集:CULane Dataset,Tusimple(特点就是非常…

PostgreSQL 逻辑复制搭建测试

一、 准备工作 1. Publication(发布)节点 postgersql.conf wal_level logical max_replication_slots 8 #每个订阅需要消耗一个slot max_wal_senders 10 #每个订阅需要使用一个wal sender max_worker_processes128 #必须 >max_wal_senders加并…

BIO NIO AIO IO多路复用的区别

1、基础概念 1.1、阻塞非阻塞和同步异步的结合 下面通过例子来具体说明: 同步阻塞: 小明一直盯着下载进度条,到100%的时候完成。 同步体现在:小明关注下载进度条并等待完成通知。(可以看成同步是我主动关注任务完成的…

进度管理(上)

规划进度管理 定义:规划进度管理是为实施项目进度管理制定计划的过程。 输入: 1、项目管理计划 2、项目章程(包含里程碑,这个和规划进度有直接干系) 3、组织过程资产 4、事业环境因素。 输出:进度管…

2 线性回归demo数据-参数配置|训练回归模型|常见的tensor格式|Hub模块简介|气温数据集与任务介绍

文章目录线性回归demo数据-参数配置线性回归demo数据-训练回归模型常见的tensor格式scalarvectormatrix线性回归demo数据-参数配置 # 先传入数据,可以是手动定义,也可以导入,这边就直接拿一条直线y2x1,来进行模拟了。 # 构造x和y…

一篇五分生信临床模型预测文章代码复现——Figure 7 外部数据集验证模型

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

python爬虫学习笔记-SQL学习

Sql概述 先来看一个例子:小王第一次使用数据库,然后跟数据库来了个隔空对话 其实,我们想一想,mysql是一个软件,它有它自己一套的管理规则,我们想要跟它打交道,就必须遵守它的规则,如…

【stl -- 常用算法】

目录:前言一、遍历算法for_each、transform二、查找、统计算法find、find_ifadjacent_findbinary_searchcount、count_if三、排序算法sortrandom_shufflemergereverse拷贝、替换算法copyreplace、replace_ifswap算数生成算法accumulatefill集合算法set_intersection…

Day10 @Import整合第三方框架原理

1 前言Spring与MyBatis注解方式整合有个重要的技术点就是lmport,第三方框架与Spring整合xml方式很多是凭借自定义标签完成的,而第三方框架与Spring整合注解方式很多是靠import注解完成的。然后Import可以导入如下三种类:普通的配置类&#xf…

【蓝桥杯】历届真题 画廊(决赛)Java

【资源限制】 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 【问题描述】 小蓝办了一个画展,在一个画廊左右两边陈列了他自己的作品。为了使画展更有意思,小…

英语学习打卡day6

2023.1.26 1.promiscuous adj.混杂的;杂乱的;滥交的 pro(往前)misc(mix):在混乱上勇往直前 2.susceptible adj.易受影响(或伤害等);敏感;过敏;感情丰富的;善感的 accept(抓)接受 be susceptible to对…敏感 She isn…

【数据结构】7.3 树表的查找

文章目录7.3.1 二叉排序树1. 二叉排序树的定义2. 二叉排序树的查找二叉排序树算法二叉排序树算法分析3. 二叉排序树的插入4. 二叉排序树的生成5. 二叉排序树的删除7.3.2 平衡二叉树1. 平衡二叉树的定义2. 平衡二叉树的平衡调整方法LL型调整RR型调整LR型调整RL型调整3. 构造平衡…