LOAM论文阅读

news2025/1/10 17:17:21

1. 摘要

本文提出一种实现激光雷达里程计与建图方法,使用6自由度的双轴激光雷达进行距离测量。问题的难点在于激光雷达的每一个点的时间戳都不同,运动估计的误差会影响激光点云的配准。目前相关的3D地图一般使用离线批处理方法构建,且使用闭环来较正漂移。本文在不需要高精度测量和惯性测量的情况下实现了低漂移和低计算复杂度。获取如此高性能的关键是把复杂SLAM问题拆分。SLAM需要同时优化大量的变量。用两种算法,其一对激光雷达的但低置信度的速度估计;另一个算法低频运行,完成点云的精细匹配与对准。它们共同实现了系统的实时运行。

2. 引言

本文创新地提出了通过两种算法对SLAM问题进行划分。里程计算法通过前后两帧点云之间的匹配,高频率但低精度地估计机器人位姿。建图算法低频但高精度地匹配当前帧点云与地图,得到精度更高的里程计数据,并构造点云地图

本算法所要解决的问题描述:给定一个点云序列,包含每次扫描的点云,据此计算激光雷达的自运动,并构建环境地图。

3. 系统概述

本节介绍了实验的硬件和软件流程

3.1. 激光雷达硬件

论文采用的激光雷达比较特殊,是一个2D激光雷达加一个电机扫描得到3维点云。

2D激光雷达具有180°视野,0.25°分辨率,40行/秒的扫描速度。电机每秒在-90°到90°之间旋转,因此该“3D”激光雷达为40线,线间角分辨率为4.5°,半球形扫描面。

LOAM论文中采用的激光雷达

3.2. 软件系统概述

LOAM软件系统

对雷达扫描得到的点云,首先进行畸变去除,再提取特征点,组合成一帧点云。

之后通过两帧之间匹配,得到雷达里程计数据,以10Hz发布。

接下来,将当前帧点云与局部子地图进行匹配,得到更精确的里程计数据,并更新地图,以1Hz发布融合雷达里程计数据和地图匹配数据,得到位姿变换,并以10Hz速率发布。

4. 雷达里程计(Lidar Odometry)

4.1. 特征点提取

首先从激光点云P_k中提取特征点。激光雷达产生非均匀分布的激光点云P_k。 激光雷达单次扫描的分辨率是0.25度。这些激光点在一个扫描平面内。由于激光雷达旋转的角速度是180度/秒,采样频率是40Hz,故垂直方向的分辨率是4.5度。仅使用单次扫描的点云提取到的特征点有共面几何关系。

选择比较锋利的边缘和平面块作为特征点。设i为P_k中的一个点,S是它的一个邻域。定义平滑性如下

根据平滑度进行排序,平滑度值最大的即为边缘点,平滑度值最小的即为平面点。

将一次扫描分为四个子区域,每个区域最多选择两个边缘点,四个平面点,且要保证点的平滑度符合设定的阈值。

选要点了避免选取的特征点相邻较近,又要避免平面与激光方向平行。这些点通常都是不可靠的。

不选择与激光束方向平行的点,如下图(a)中的B点。

在激光束方向上,点集S中没有点与点i有缝隙(不选择可能有遮挡的点),如下图(b)中的A点。

LOAM特征点筛选

总的来说,根据c值最大选择边缘点,根据c值最小选择平面点,且需要满足下列要求:

  • 局部范围内特征点的数量不能超过阈值。
  • 该点的附近没有其它特征点。
  • 它不能是平面于激光的方向的平面点,也不能是被遮挡造成的边缘点。

4.2. 寻找特征点的对应关系

里程计算法利用激光雷达的单次扫描来估计激光雷达的运动。设t_k是扫描k的起始时刻。每次扫描结束之后,把产生的点云P_k投影到时刻t_{k+1},记为\bar{P}_{k+1},然后和P_{k+1}进行匹配来估计激光雷达的运行。

下图中(a)表示寻找边线与边点对应的过程。假设已经有了\bar{P_k}P_{k+1},需要寻找两帧激光点云之间的对应关系。对于P_{k+1},按上一节方法找到边缘点和平面点,分别用\mathcal{E}_{k+1}\mathcal{H}_{k+1}表示。接下会在\bar{P_k}中寻找与\mathcal{E}_{k+1}相对应的边缘线和与\mathcal{H}_{k+1}相对应的平面块。

注意到,在扫描开始时P_{k+1}是空集,在扫描过程中收到的点数逐渐增长。在扫描过程中,激光里程计迭代地估计6自由度的运动并逐步地扩充P_{k+1}所包含的点数。在每次迭代时利用刚刚估计的位姿把\mathcal{E}_{k+1}\mathcal{H}_{k+1}重投影回扫描的初始时刻。用\widetilde{\mathcal{E}}_{k+1}\widetilde{\mathcal{H}}_{k+1}代码重投影后的边缘点集合和平面点集合。对于它们中的每一个点,都在\bar{P_k}之中搜索最近邻点,使用的方法是KD树。

下图表示搜索边缘线和边缘点对应关系的过程。用i表示\widetilde{\mathcal{E}}_{k+1}中的点,边线用两个点表示。用j表示在\bar{P_k}中i的最近邻点,用l表示j的两个连续的扫续中i的最近邻,故(j, l)形成i的一个关联。接下来验证j和l是边缘点,只需检查局部平滑性。这里特别要求,j和l来源于不同的扫描,因为一个扫描不能包含来自同一条边线的两个点。有一种异常情况:边缘线在一个扫描平面上。这种情况下,边缘化会友扫描平面上退化为一条直线,它上面的特征点不会被提取。

下图中(b)表示寻找平面块与平面点对应的过程。用i表示\widetilde{\mathcal{H}}_{k+1}中的点。平面块用三个点表示。与边缘线部分类似,在\bar{P_k}中寻找i的最近邻点,记为j。接下面寻找另外两个点l和m,它们是i的最近邻点,一个与j处于相同的扫描,另一个在j的相信扫描上。这保证了三个点是非共线的。为了验证三个点是共面点,需要检查局部平面的平滑性。

利用找到的特征点关联关系,计算关联的特征点之间的距离。用最小化总距离的方式求解激光雷达的运动。首先计算边缘点距离,对于边缘点i \in \widetilde{\mathcal{E}}_{k+1},如果(j, l)是对应的边缘线,j, l \in \bar{P}_k,那么点到线的距离是

同理,平面点的距离是

4.3. 运动估计

把激光雷达运动建模为均速平移且均角速度旋转。因为在计算不同时间戳的点的位姿转换时可以使用线性插值。设t是当前时间戳,t_{k+1}是k+1采样的初始时刻。用T^L_{k+1}表示[t_{k+1}, t]之间的位净转换。T^L_{k+1}包含激光雷达的6自由度运动, T^L_{k+1} = [t_x, t_y, t_z, \theta_x, \theta_y, \theta_z]^T。线性插值得到t_i时刻的位姿是

 为求解激光雷达的线性运动,需要建立\mathcal{E}_{k+1}\widetilde{\mathcal{E}}_{k+1}或者\mathcal{H}_{k+1}\widetilde{\mathcal{H}}_{k+1}之间的几何关系。位姿转换关系如下:

4.4. 雷达里程计算法

雷达里程计算法伪代码

5. 激光雷达建图

建图算法低频运行。

通过里程计算法得到的T^W_{k+1},将\bar{P_k}投影到世界坐标系下,作为\bar{Q}_{k+1},之后,通过优化T^W_{k+1}与之前的地图Q_k匹配。

特征点提取方法与之前相同,但采用10倍的特征点,将新的点保存在10m平方的区域上,将其中与新一帧的点云重合的点生成KD-tree。

对于特征点的匹配,采用主成分分析方法,找到特征点相邻点集S,对于边缘点,只保留S中的边缘点,对于平面点,只保留S中的平面点。

对S进行主成分分析,即计算协方差矩阵,进行特征值分解。

对于边缘点,最大的特征值对应的特征向量代表的方向即为边缘点对应的边线的方向;对于平面点,最小的特征值对应的特征向量代表的方向即为平面点对应的平面的方向。

对于边缘点和边线的距离、平面点和平面的距离,只选取边线上的两个点,或平面上的三个点,即可按照之前的计算方法得到距离。同样采用LM方法优化,得到变换矩阵。将新一帧点云加入到地图中,可以采用体素滤波的方法降采样之后再加入。

构造与上一节相同的距离方程,优化该方程,输出最终位姿。

最后,将雷达里程计位姿与建图位姿集成并发布。

6. 实验

论文在自己的数据集和kitti数据集上进行了一系列实验。

参考文献

LOAM 论文阅读记录 - 知乎

LOAM论文阅读_weixin_45906560的博客-CSDN博客_loam原文

LOAM论文阅读笔记_Jiqiang_z的博客-CSDN博客_loam处理运动畸变

LOAM: Lidar Odometry and Mapping in Real-time 

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

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

相关文章

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出 目录回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出预测效果基本介绍程序设计参考资料预测效果 基本介绍 麻雀搜索算法(Sparrow Search Algorithm, SSA)是于…

2_Oracle_手工建库

一、手工建库的目的 1、方便理解Oracle的体系结构 2、更快更好的创建数据库 3、方便了解建库的每步细节 4、手工建库的实用性 二、dbca生成的脚本 /app/oracle/admin/orcl/scripts/ orcl.sh #!/bin/sh OLD_UMASKumask umask 0027 mkdir -p /app/oracle/admin/orcl/adump mkdi…

2022年度调味品十大热门品牌排行

调味品行业总量大,种类繁多,需求量大,且调味品作为生活必需品,与饮食文化紧密联系,也与人们的生活息息相关,如近日各省陆续全面放开后,也出现了北方抢黄头罐头南方抢醋的风潮。总体来说&#xf…

C++11后的常用容器和迭代器

文章目录一、string容器二、vector容器三、list容器1.构造函数2.特性操作3.元素操作4.赋值操作5.交换、反转、排序、归并6.比较操作7.插入和删除五、pair键值对四、map容器1.红黑树(平衡二叉排序树)2.构造函数3.特性操作4.元素操作5.赋值操作6.交换操作7…

Docker学习笔记5(狂神)

Docker网络: 我们学习docker的网络首先要删除我们所有的镜像: 我们发现我们有这么多的镜像。 我们现在来安装一下tomcat: linux能够ping通docker容器内部 再次测试ip addr 我们再启动一个容器测试: 发现又多了一对网卡。 3.我们来…

条件执行指令 CMP

CMP可以比较两个数的关系&#xff0c;其本质就是一条减法指令&#xff0c;只是不会将运算结果保存到寄存器&#xff0c;因为对于CPU而言&#xff0c;比较两个数时只关心结果是false还是true 指令格式&#xff1a;CMP <第一操作寄存器> <第二操作数> 第一操作寄…

【渐进式:深度光谱变换】

P2Sharpen: A progressive pansharpening network with deep spectral transformation &#xff08;P2Sharpen&#xff1a;一种具有深度光谱变换的渐进式全色锐化网络&#xff09; 大多数现有的基于深度学习方法pansharpening的监督任务仅仅依靠伪ground-truth多光谱图像,展示…

【猿如意】猿如意初用之感及editplus工具解绍

​​​​​​【猿如意】猿如意初用之感及editplus工具解绍 目录 一、猿如意初用之感 二、editplus工具下载安装渠道 三、工具介绍 四、功能介绍首先&#xff0c;EditPlus是一套功能强大的文本编辑器。 五、软件截图 六、软件安装过程 6.1在猿如意中的下载步骤 七、使用…

升级JSONB列式存储,Hologres助力淘宝搜索2022双11降本增效!

作者&#xff1a;陆晨炜&#xff08;花名遣云&#xff09;阿里巴巴智能引擎事业部数据开发 前言&#xff1a; 2022年的双11&#xff0c;阿里淘宝搜推集群承载上千万每秒的的流量峰值&#xff0c;消费者的每一次浏览、点击都通过搜推集群进行流转&#xff0c;与往年双11不同的…

[附源码]Python计算机毕业设计高校学生心理健康信息咨询系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

万字长文——MySQL基础一篇打通

准备工作 直接使用MySQL提供的数据&#xff0c;下载MySQL示例数据库 MySQL示例数据库模式由以下表组成&#xff1a; Customers&#xff1a;存储客户的数据。Products&#xff1a;存储比例模型车列表。ProductLines&#xff1a;存储产品系列类别列表。Orders&#xff1a;存储…

Web(九)JavaScript概述-JavaSript知识训练-入门基础

1、JavaScript是运行在( B)的脚本语言。 A、 服务器端 B、 客户端 C、 在服务器运行后&#xff0c;把结果返回到客户端 D、 在客户端运行后&#xff0c;把结果返回到服务端 2、JavaScript代码通常是用&#xff08; D&#xff09;标签嵌入到html文档的。 A、 JavaScript B、 La…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.5 查询Tomcat【实现查询】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.5 查询Tomcat【实现查询】48.5.1 使用Http函数查询数据48 多级缓存 48.5 查询Tomcat【…

docker容器监控

docker容器监控 一、docker介绍 Docker的中文意思就是码头工人&#xff0c;进入到Docker的官方网站后&#xff0c;也可以看到Docker的图标&#xff0c;如下图所示。 这个Docker图标上就是一条鲸鱼&#xff0c;上面有很多集装箱&#xff0c;集装箱就相当于虚拟环境&#xff0c…

股票信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

基于java+springmvc+mybatis+vue+mysql的志愿者招募网站

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把志愿者招募管理与现在网络相结合&#xff0c;利用java技术建设志愿者招募网站&#xff0c;后端使用ssm框架&#xff0c;前端使用vue技术&#xff0c;实现志愿者招募的信息化。对于进一步提高志愿者招募管理发展&#xf…

【Java寒假打卡】Java基础-面向对象

【Java寒假打卡】Java基础-面向对象一、面向对象和面相过程二、类的定义三、对象的使用四、手机类的创建和使用五、单个对象的内存图六、两个引用指向同一内存图七、成员变量和局部变量八、priavte九、this关键字十、封装十一、构造方法十二、标准类一、面向对象和面相过程 对象…

童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿

“辣条第一股”的神话破了&#xff1f; 今日&#xff08;12月15日&#xff09;“辣条大王”卫龙美味全球控股有限公司&#xff08;下称“卫龙”&#xff0c;09985.HK&#xff09;正式挂牌港交所&#xff0c;但上市首日即遭破发。 作为千禧一代撑起的童年“神话”&#xff0c;…

GNN Algorithms (1): DeepWalk

DeepWalk Concept 图表示Graph Embedding based on Random Walk -> Graph GNN based neighbor aggregation. Graph Embedding使用低维稠密向量的形式表示图中的节点&#xff0c;使得在原始图中相似的节点在低维表达空间中也相似。 DeepWalk关键基础是Random Walk和word…

Hubbell EDI 855 采购订单确认报文详解

Hubbell于纽约证券交易所上市&#xff0c;全球员工近12000名&#xff0c;在欧美地区以其高品质获得人们的青睐&#xff0c;成为家喻户晓的品牌&#xff0c;同类产品占有份额达95%以上。 在数字化的今天&#xff0c;HUBBELL延续了在一个多世纪前建立的增长和创新传统&#xff0…