LeGO-LOAM算法详解

简介: LeGO-LOAM算法详解

LeGO-LOAM算法详解

整体框架

LeGO-LOAM算法的总体框架如下图所示:

图中新增加了绿框中的Segmentation环节,同时对后续的特征提取、Odometry以及Mapping部分均有一定的修改,主要包括:


增加Segmentation操作,把点云投影为距离图像,分离出地面点与非地面点(分割点,segmented point)。

平滑度计算公式不同,原始LOAM中为使用点集中的坐标相减,而LeGO-LOAM中为使用点集中的欧式距离作差。

特征点选取中原始LOAM为按照平滑度的值及已有特征点数量分为平面点/边缘点两类,而LeGO -LOAM中不仅考虑到平滑度的值还同时考虑到点的类型为“地面点/分割点”,分别进行提取不同的特征点集。

Lidar Odometry模块相邻帧之间特征点的对应关系也分别按照“地面点/分割点” 进行寻找,使得寻找匹配特征点的效率、精度更高。

Lidar Mapping模块中LeGO-LOAM提供了基于传感器视野范围与基于图优化获取的两种获取特征对应点方法。此外,还加入了iSAM2进行后端优化(闭环检测)。

综上,LeGO-LOAM的总体思路与LOAM基本相同,1)把原始点云投影为距离图像,并在进行特征提取之前区分为“地面点/分割点”。2)对具有相同类别的特征点进行匹配。3)加入iSAM2进行闭环检测。这三点是其主要创新。

1 Segmentation模块

文章中采用Velodyne VLP-16激光雷达采集的数据进行实验,首先把原始点云重投影为一个距离图像,分辨率为1800*16(因为VLP-16水平分辨率为0.2°,360/0.2 = 1800,同时垂直方向上位16线数据)。重投影之后,三维点云变为二维图像,以像素点到传感器之间的距离作为像素值。


以VLP-16竖直维度的特性来进行标记地面点和非地面点,其在垂直方向的扫描范围为[-15°, 15°],认为地面点出现在[-15°, -1°]之间的扫描线上,而被标记的地面点可以不用进行后续的分割。


随后,将距离图像分割为很多个聚类,同一个聚类的点被标记上唯一的标识。点数较少的聚类(少于30点)被作为噪声去除,这一步可以减少室外环境噪音点的干扰,如随风飘动的树叶,地面上的杂草等不稳定的特征,这样的处理就可以保留原始的地面点和相对较大的静态物体(树干,楼房等)来进行后续的特征提取工作了。如下图中 (a)为原始点云,(b)为进行分割处理后的点云。

2 Feature Extraction模块

这一模块在计算平滑度时与经典的LOAM相似,考虑到特征点在各个方向分布均匀,把距离图像水平均分为若干个子图像(360°划分为六等分)。随后对t时刻点云 P t中的每一个点 P i左右各选取5个点组合成点集 S,通过下式计算平滑度。

这里采用了距离图像中激光点到传感器之间的距离,与原始LOAM中直接使用两点坐标不同。

A

随后,从子图像中的地面点中选取image.png个平面点 F p,从分割点中选取image.png个边缘点 F e。

此外,从子图像中的地面点与分割点中选取 n F p 个平面点 F p, 从子图像中的非地面点中选取 n F e

个边缘点image.png,即存在以下关系,image.png以及image.png

如下图中所示,( c ) 中为有类别约束的平面点 F p及边缘点 F e ,(d) 中为子图像中所有的平面点 F p与边缘点 F e。

3 LiDAR Odometry

特征提取时,我们得到了四种特征点集image.png 。为了更好的寻找相邻两帧点云数据之间的对应特征点对,采用如下图所示的思路进行优化:

上图中的流程可以总结为:


对于平面点:在image.png中具有分割点标签的点云中寻找image.png的对应的关联点


对于边缘点:在image.png中具有分割点标签的点云中寻找image.png的对应的关联点


这可以使缩小对应点的候选范围,同时提高匹配的精度和效率。有了对应的特征点对之后,需要对其进行优化求解六个姿态变换参数,LeGO-LOAM使用两步LM优化方法进行处理。

首先,采用平面点Fp(t1)F p t 对应的约束,优化计算得到了{tz,troll, tpitch}随后,基image.pngimage.png对应的约束,以及之前优化得到的{tz,troll, tpitch},进行优化得到{ t x, t y, tyaw}。最终,两次优化结果融合,得到最终的变换参数image.png

4 LiDAR Mapping

作者在这里介绍了两种方法:1)基于传感器视域。 2)基于图优化。分别来把上一步输出的点云与局部位姿变换到全局地图中。


其中,第一种方法将全局点云地图分割为很多cube,然后根据传感器的有效探测距离(VLP-16为100m)选取一定数量的cube,组合成前 t − 1 时刻获取的点云地图 Q ( t − 1 ),然后对当前帧 Q t与其相交的部分进行匹配,与经典的LOAM算法基本相同。


第二种方法加入了位姿图和回环检测 (iSAM2),提高了建图效率与精度,但是目前还不太理解,这里就先不做详细的介绍了。

目录
相关文章
|
存储 传感器 编解码
3D激光SLAM:LeGO-LOAM论文解读---完整篇
![在这里插入图片描述](https://img-blog.csdnimg.cn/348d0b4467a24296a22413207566c67e.png) 论文的标题是:**LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain** - 标题给出的应用场景是 **可变地形** - 重点是 **轻量级** 并 利用 **地面优化** - 本质依然是一个 **激光雷达里程计和建图**
3D激光SLAM:LeGO-LOAM论文解读---完整篇
|
存储 前端开发 数据可视化
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
**LeGO-LOAM**的全称是 Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain 其中LeGO就是轻量级和利用地面优化,轻量级的实现就是通过两步的优化方式,利用地面优化的部分也在两步优化的第一步中。 和原始LOAM一样,通过前后两帧点云来估计两帧之间的运动,从而累加得到前端里程计的输出,和上述方法使用线面约束同时优化六自由度帧间位姿不同,LeGO-LOAM的前端分成两个步骤,每个步骤估计三自由度的变量。 通过这种方式进行帧间里程计的运算,可以提供运算效率,使得可以在嵌入式平台
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
|
8月前
|
算法 计算机视觉
[Halcon&图像] 图像滤波算法原理
[Halcon&图像] 图像滤波算法原理
274 1
|
机器学习/深度学习 传感器 人工智能
【图像去噪】基于自适应全变分算法实现图像去噪附matlab代码
【图像去噪】基于自适应全变分算法实现图像去噪附matlab代码
|
机器学习/深度学习 算法 PyTorch
100行Pytorch代码实现三维重建技术神经辐射场 (NeRF)
提起三维重建技术,NeRF是一个绝对绕不过去的名字。这项逆天的技术,一经提出就被众多研究者所重视,对该技术进行深入研究并提出改进已经成为一个热点。不到两年的时间,NeRF及其变种已经成为重建领域的主流。本文通过100行的Pytorch代码实现最初的 NeRF 论文。
1470 0
100行Pytorch代码实现三维重建技术神经辐射场 (NeRF)
|
前端开发 定位技术 C++
3D激光SLAM:A-LOAM :前端lidar点预处理部分代码解读
A-LOAM的cpp有四个,其中 kittiHelper.cpp 的作用是将kitti数据集转为rosbag 剩下的三个是作为 slam 的 部分,分别是: - laserMappin.cpp ++++ 当前帧到地图的优化 - laserOdometry.cpp ++++ 帧间里程计 - scanRegistration.cpp ++++ 前端lidar点预处理及特征提取 本片主要解读 前端lidar点预处理部分的代码
3D激光SLAM:A-LOAM :前端lidar点预处理部分代码解读
|
机器学习/深度学习 传感器 算法
【图像增强】基于麻雀搜索算法与非完全beta函数的自适应图像增强算法Matlab代码
【图像增强】基于麻雀搜索算法与非完全beta函数的自适应图像增强算法Matlab代码
|
机器学习/深度学习 算法 计算机视觉
【滤波跟踪】基于自适应UKF和UKF算法实现运动刚体的位姿估计附matlab代码
【滤波跟踪】基于自适应UKF和UKF算法实现运动刚体的位姿估计附matlab代码
|
编解码 算法 数据可视化
3D激光slam:LeGO-LOAM---基于广度优先遍历的点云聚类算法及代码分析
## 广度优先遍历(BFS)算计介绍 广度优先遍历(BFS)和深度优先遍历(DFS)同属于两种经典的图遍历算法 **广度优先遍历算法**:首先从某个节点出发,一层一层的遍历,下一层必须等到上一层节点全部遍历完之后才会开始遍历 **基本思想**:尽最大程度辐射能够覆盖的节点,并对其进行访问。
3D激光slam:LeGO-LOAM---基于广度优先遍历的点云聚类算法及代码分析
|
前端开发 算法 数据可视化
3D激光slam:LeGO-LOAM---地面点提取方法及代码分析
**地面点提取方法** LeGO-LOAM中前端改进中很重要的一点就是充分利用地面点,本片博客主要讲解 如何进行地面点提取 如下图所示,相邻的两个scan的同一列,打在地面上,形成两个点A和B。
3D激光slam:LeGO-LOAM---地面点提取方法及代码分析

热门文章

最新文章