LOAM, ALOAM, LegoLOAM, hdl graph slam比较

LOAM, ALOAM, LegoLOAM, hdl graph slam比较A-LOAMLOAM:•LOAMuseanewdefinedfeaturesystem(cornerandflatpoint),forthedetailseeitsarticle.•LOAMsupposelinearmotionwithinthescanswap(VLOAMfurtherusesvisualodometrytoe…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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 result
下面是对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 result
下面是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衍生算法的一半左右的时间。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/230896.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • idea搭建javaweb环境_java怎么打开项目

    idea搭建javaweb环境_java怎么打开项目【第一步】新建项目【第二步】点击JavaEnterprise,选择Webapplication,选择已经下载好的Tomcat,选择服务的jdk【第三步】选择框架支撑【第四步】完成创建目录介绍【第五步】配置jar包和classes包,首先在WEB-INF下面新建两个文件夹,classes和lib(装载jar包的,利于使用jstl标签)【第六步】在file中找到ProjectStructure【第七步】点击Modules,选择P…

  • laravel5 报错419,form 添加crrf_field 后让然失败,本地环境配置问题

    laravel5 报错419,form 添加crrf_field 后让然失败,本地环境配置问题

  • Python安装scrapy库

    Python安装scrapy库由于本人在安装scrapy库的道路上遇到过很多坑,由此不能再坐视不管,来帮帮广大同胞首先在此网站https://www.lfd.uci.edu/~gohlke/pythonlibs/找到twisted库:在此中间找适合自己电脑配置的文件twisted下载然后用命令行进入此目录然后再命令行执行pipinstall+"你所下载的那个文件名"+"(注意这里有个点).wh…

  • SynchronousQueue的使用

    SynchronousQueue的使用https://blog.csdn.net/cn_yaojin/article/details/80852395原文地址:https://blog.csdn.net/zmx729618/article/details/52980158SynchronousQueue是这样一种阻塞队列,其中每个put必须等待一个take,反之亦然。同步队列没有任何内部容量,甚至连一个队…

  • 实时示波器_示波器proteus怎么找

    实时示波器_示波器proteus怎么找原创:转载请著名出处。代码整理后将在GIThub发出。本文主要介绍驱动以及连接问题。首先,如果我们要使用NI-VISA协议,我们必须安装VISA的驱动。我们可以先检查一下有没有。C:\Windows\System32或者C:\Windows\SysWOW64如果有,恭喜你,你省去一大笔时间。如果没有,恭喜你,这里将告诉你如何安装。https://dl…

  • 为Eclipse指定Java VM[通俗易懂]

    重装系统后,Eclipse无法启动,说找不到JavaVM.   网上搜了一下,解决方法如下:   创建快捷方式,右键快捷方式,打开属性.在目标处输入” -vm你的Java根目录\jre\bin\javaw.exe”.然后用快捷方式打开就可以了.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号