LOAM

LOAM:

  • LOAM使用了作者定义的特征点提取和匹配方法,主要去边角点和平面点。LOAM use a new defined feature system (corner and flat point), for the detail see its article.
  • LOAM假设每一次激光扫描过程中是匀速运动,并且用这个假设修正激光雷达数据的运动扭曲问题。在VLOAM中则是更进一步,使用视觉的里程计估计每一个扫描数据的运动。LOAM suppose linear motion within the scan swap (VLOAM further uses visual odometry to estimate it), and undistort the lidar points.
  • LOAM也有一个低频率调用的全局优化线程。

A-LOAM

ALOAM github page

另外,下面的算法都使用hdl_graph_slam给到的室外数据集做了结果的测试,建模的图像如下所示。由于没有找到轨迹的真实值,没有对轨迹误差做比较分析。

LOAM和ALOAM的区别(Difference LOAM vs A-LOAM):

  • LOAM中提供了使用IMU信息修正的接口, ALOAM中省略了这一块。LOAM has IMU refinement.
  • ALOAM中缺少了对提取到的特征点的筛选过程,具体可以参见LOAM的代码部分(对一些不好的边角点做了筛选)。Lack feature filter in A-LOAM.
  • LOAM中的优化LM方法是作者自己编写的,ALOAM则是使用了Ceres库完成这一部分。LOAM implies the LM solver itself. A-LOAM uses Ceres solver.
  • 补充上面的一点,LOAM中作者解析地求出了雅各比的表达式(其中使用了一些小技巧统一了不同特征点的残差函数的导数表达),ALOAM则是简单地使用了ceres提供的自动求导工具(这样可以节省开发的时间,得到了也是准确的解,但是运算时间会稍稍长些,具体可以参见ceres的官方文档)。LOAM use analytical derivatives for Jacobians, but A-LOAM uses the automatic derivatives offered by Ceres (which is exact solution but a little bit slower).
  • 相比于原本的LOAM, ALOAM的可读性更高,非常适合学习。尤其是雅各比的部分,LOAM原本的雅各比推导非常的难理解。ALOAM直接用自动求导,整个SLAM最复杂的运算就不需要推导了!

Performance:
• A-LOAM seems good,less redundant points.
• but has more error in far edges.
• LOAM method has no assumption of a consistent “floor”, that is better for our case.
• A-LOAM has the same logical with LOAM, but its performance is much worse.
下面是对ALOAM的三个线程的运行时间的分析(以下的运行测试都是再i5 9300 cpu上进行的),分别是scan registration线程,odometry线程,和mapping线程。其中mapping是进行全局优化的线程,另外两个线程则和实时性息息相关。

  • ALOAM - scan refistration
    the maximum time is : 0.034434
    the mean of time is : 0.0148146394612
  • ALOAM - odometry
    the maximum time is : 0.027296
    the mean of time is : 0.0157431030928
  • ALOAM - mapping
    the maximum time is : 0.326849
    the mean of time is : 0.257764385093

For one input scan, it takes 0.0305s in average. 对于一个新的扫描帧,需要大概0.03秒的处理时间,另外低频优化每次的耗时大概0.25秒(并不影响实时性)。

LEGO LOAM

lego LOAM

vs LOAM:

  • Lego LOAM针对处理运算量做了优化,它的运算速度增加,同时并没有牺牲精度。Faster and similar accuracy as LOAM, and has a better global map visual effect.

Difference LOAM:

  • LogoLOAM 增加了更多预处理的步骤,其中主要包括一个地面的提取(并没有假设地面是平面),和一个点云的分割。使用更多筛选之后的点云再提取特征点,效率会更高。Add segmentation before processing (gound extraction and image-based segmentation)
  • 在提取特征点时,将点云分成小块,分别提取特征点,以保证特征点的均匀分布。Sub-divide the range image before feature extraction → more evenly distributed features.
  • 再特征点匹配的时候,使用预处理得到的segmenation标签筛选,又提高了效率。Label match
  • 一个双步骤的LM优化,先使用平面点优化高度,同时利用地面的方向优化两个角度信息;再使用边角点优化剩下的三个变量。以这种方式分别优化,效率提升40%,但是并没有造成精度的损失(根据原文章所述)。Two step LM. Seperate the optimization based on different property of edge and planar points. Becomes faster while similar accuracy.
  • 不用的地图点存储方式。LOAM中将所有历史的点云存储到同一张点云图中,并做了grid sampling。Lego LOAM则是分别存储每一帧的特征点信息和每一帧的位姿数据。这样提供了两种全局优化方式,一种是仿照LOAM的方法;另一种是可以使用图优化理论。Difference map storage method, can use pose graph optimization and use loop closure.

另外LeGO LOAM需要对激光设备的标定。应该是在预处理中,使用了将激光数据转化为range image的步骤中需要这些数据,只有正确的设定才能正确执行算法。
在源代码中对Velodyne的一些设备都有完整的参数设置,但是对速腾(rslidar)并没有设置好,需要自己完成这方面的工作,才能使用速腾的设备运行算法。虽然话是这么说。。我之前也问题这个遇到过问题。但是我发现就用源代码提供的velodyne的参数就可以顺利运行了。

对我来说,在这个室外场景的数据,我觉得LeGO LOAM是本文列举的几个算法中最好的。 它可以高速运行,有较高的精度,同时相比于LOAM可以加入回环优化。

但是,在室内运行发现,LeGO LOAM很容易丢失误匹配,但是LOAM就好很多,即使有相对大的运动也能够正确的处理。

Performance:
• lego slam has the best result, error is small.
• Flat plane has good look, achieve a dense map, while keep its consistence.


下面是LeGO LOAM的三个主要线程的处理时间的分布曲线。分别是image projection线程(将扫描帧投影到二维矩阵,并做一系列的预处理),feature association线程(与LOAM大概一致,特征点的提取和匹配),以及map optimization线程(低频激发的全局优化线程)。

  • LEGO LOAM - image projection
    the maximum time is : 0.029819
    the mean of time is : 0.0123906096595
  • LEGO LOAM - feature association
    the maximum time is : 1.226773
    the mean of time is : 0.0126770831335
  • LEGO LOAM - map optimization
    the maximum time is : 0.427468
    the mean of time is : 0.30585172524

For one input scan, it takes 0.0249s in average. It is about 25% faster than ALOAM. 对于每一个输入的扫描帧,处理时间大约是0.025秒,相对于ALOAM快了25%左右。另外由于在LeGO LOAM中使用了另外的地图结构和优化方式(也加入了回环优化),所以map optimization的处理时间稍长一些,大概是0.3秒一次。

HDL GRAPH SLAM

hdl graph slam

hdl_graph_slam:

  • 它是一个简单的图优化模型。 It is basically a graph optimization algorithm.
  • 它提供了ICP为基础的和NDT为基础的一系列点云标配方法。Use ICP-based or NDT-based methods to register new point cloud, and match candidates of loop closure.
  • 它假设有一个共享的地面,但是假设了地面是一个平面,这个假设可能过于强了,限制了算法的鲁棒性。
  • 在全局图优化的步骤,只是使用了相邻两帧的相对位姿和每一帧检测到的地面信息。其实使用的信息很少,图优化的结构也十分简单。For the graph optimization part, it use the most sample edge for consecutive frames, along with the floor observation edge.
  • 它提供了回环优化的模块,但是回环比较粗糙。简单来说,就是在当前帧地附近搜索历史地每一帧,分别标配得到可能的回环,再进行优化。
  • 总的来说,它提出了使用图优化来处理激光SLAM,这是很好的想法。In summary, it uses the most basic algorithms, however it has a complete structure.

Performance:
• not that much error for the far points, as it has loop closure
• lots of redundant points as it has no optimization on point cloud, floors and walls are very thick in the global map.

HDL graph slam有四个主要线程,对于点云的预处理降采样prefiltering线程,floor detection线程(检测一个共有的平面作为地面),odometry线程(在测试中使用的是使用openmp加速的NDT算法),和graph optimization线程(优化包括:相邻帧的约束,回环约束,和每一帧检测到的地面约束)。

  • HDL - prefiltering
    the maximum time is : 0.395365
    the mean of time is : 0.00943357786885
  • HDL - floor detection
    the maximum time is : 0.856617
    the mean of time is : 0.0456638586777
  • HDL - odometry
    the maximum time is : 0.309964
    the mean of time is : 0.0742533234078
  • HDL - graph slam
    the maximum time is : 2.140327
    the mean of time is : 0.13695704878

Its processing time is much more than the other two methods, as it use NDT, while the other use feature points. 相比于上面的LOAM为基础的特征点标配方法,使用NDT(openmp加速过的NDT)仍然慢了很多,NDT大概需要0.07秒/帧。在全局优化的线程中,由于约束只是简单的相对位姿(帧与帧的相对位姿和帧与地面的相对位姿)所以graph optimization线程速度很快,只需要LOAM衍生算法的一半左右的时间。

LOAM, ALOAM, LegoLOAM, hdl graph slam比较相关推荐

  1. LOAM、LEGO-LOAM与LIO-SAM的知识总结

    文章目录 LOAM.LEGO-LOAM与LIO-SAM的知识总结 1.概要 2.传感器信息读取 3.数据的预处理 4.激光雷达里程计 4.1特征点提取 4.2特征点关联匹配 4.2.1 标签匹配 4. ...

  2. 彻底搞懂基于LOAM框架的3D激光SLAM全套学习资料汇总!

    地图定位算法是自动驾驶模块的核心,而激光SLAM则是地图定位算法的关键技术,其重要性不言而喻,在许多AI产品中应用非常多(包括但不限于自动驾驶.移动机器人.扫地机等).相比于传统的视觉传感器,激光传感 ...

  3. graph slam tutorial : 从推导到应用1

    前言 SLAM问题的处理方法主要分为滤波和图优化两类.滤波的方法中常见的是扩展卡尔曼滤波.粒子滤波.信息滤波等,熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的.实时的处理数据并矫正机器人位姿. ...

  4. LOAM系列——LeGO-LOAM配置、安装、问题解决及VLP16测试效果(完结版)

    LOAM系列--LeGO-LOAM配置.安装.问题解决及VLP16测试效果 安装依赖 安装 VLP16 bag测试 问题解决 问题1 解决1 安装依赖 ros gtsam wget -O ~/Down ...

  5. graph slam tutorial :从推导到应用3

    为了更好地理解graph based slam的过程,本文以二维平面的激光SLAM为例子,先简单介绍如何根据传感器信息构建图,即图优化的前端(front-end).然后再针对上篇博客的疑问,结合mat ...

  6. graph slam tutorial :从推导到应用2

    在上一部分中通过一个例子大致了解了graph based slam的优化过程.在本篇博客中将提升一个层次,对图优化的求解过程进行推导.由于博文关注的在图构建好以后,如何调整机器人位姿使误差最下.因此, ...

  7. Efficient Dense Frontier Detection for 2D Graph SLAM Based on Occupancy Grid Submaps

    基于占用栅格子图的2D 图-SLAM 的密集边界高效检测 摘要 介绍 相关工作 准备工作 边界检测 边界检测算法 算法1:子图更新事件的处理 算法2:姿态图优化事件的处理 摘要 边界是世界地图上已探索 ...

  8. 八种常用激光雷达和视觉SLAM算法的评估与比较

    文章:Evaluation and comparison of eight popular Lidar and Visual SLAM algorithms 作者:Bharath Garigipati ...

  9. [SLAM]激光SLAM初学者代码及论文推荐【转】

    目录 2D激光SLAM Gmapping Hector_slam Karto Cartographer 3D激光SLAM LOAM A-LOAM LeGO-LOAM Lio-mapping hdl_g ...

最新文章

  1. 灰度值取值范围_灰度实战(二):Apollo配置中心(2)
  2. 《HTML5游戏编程核心技术与实战》一2.6 其他全局属性
  3. csgo准星设置代码_csgo控制台的这些神秘的指令你知道多少
  4. powerbuilder判断复选框是否选中_如何判断基金经理投资风格呢?方法仅供参考
  5. 基于线性预测的语音编码原理解析
  6. unity3d 截屏
  7. Angular和SAP C4C的事件处理队列 1
  8. Dynagen0.11+Pemuwrapper入手麻烦二三事——告诉初学者直路
  9. 永远要跟比你更成功的人在一起
  10. vue开发一个实用美观的轮播图组件
  11. 无线Wifi模块AP和STA工作模式详解
  12. 移动端布局,C3新增属性
  13. Spring 通过XML配置装配Bean
  14. 卡巴斯基的离线更新以及病毒库备份
  15. arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
  16. python牛顿迭代公式_牛顿迭代法Python实现
  17. 阿里双十一 11 年:购物狂欢背后的技术演进
  18. html右边显示不全,显示器右边显示不全怎么办
  19. 咳血的独角兽丨互联网的幕后攻防
  20. python实现商品管理系统_商品管理系统(示例代码)

热门文章

  1. speeding up your web site 前端性能优化
  2. 为什么花大钱买来的BI还不如免费的Excel
  3. idea开发之设置jdk编译版本
  4. Fixflow工作流程——介绍
  5. 需要看的技术类的书籍
  6. CES Asia 2016落下帷幕,VR展台看点大盘点
  7. 星环科技TDH社区版版本来啦!!!快来看看
  8. ZanUI-WeApp -- 一个颜值高、好用、易扩展的微信小程序 UI 库
  9. python元组:元组遍历
  10. ipad水彩流金笔刷套装,画出的效果绝了【62】