激光SLAM开源哪家强?LOAM, A-LOAM, LegoLOAM, HDLGRAPH (文末送新书)

2020 年 5 月 10 日 计算机视觉life

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货


本文由csdn博主hhhliuye授权发布,禁止二次转载 

https://blog.csdn.net/weixin_44492024/article/details/101452315                                                                                 

LOAM

https://github.com/laboshinl/loam_velodyne

  • 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


https://github.com/HKUST-Aerial-Robotics/A-LOAM

另外,下面的算法都使用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


https://github.com/RobustFieldAutonomyLab/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


https://github.com/koide3/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衍生算法的一半左右的时间。


送上海交大最新3D视觉书籍!

上海交大刘佩林教授、应忍冬教授最近刚出了新书《玩转3D视界 —3D机器视觉及其应用》,计算机视觉life免费送4本!书籍介绍:



原价88元,现向计算机视觉life公众号读者免费赠送4本,并且包邮送到家。

如何免费获得该书呢?

请在本文留言区留言你关于3D视觉方面的话题讨论,截止5月12日19:00点留言点赞排名前4名均可获得本书。到时会有人联系你。

注意不符合要求的留言不会放出,且后台会设置监控,禁止恶意刷赞。

  如果没有中奖,喜欢本书的粉丝也可以在如下链接7.3折优惠购买

 

从0到1学习SLAM,戳↓

一文概览视觉SLAM详细学习路线、思维脑图

交流群

欢迎加入SLAM公众号读者群一起和同行交流,请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

投稿也欢迎联系:simiter@126.com

长按关注计算机视觉life


据说点赞中奖率会更高!  

                         

登录查看更多
4

相关内容

专知会员服务
109+阅读 · 2020年3月12日
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
354+阅读 · 2020年2月15日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
专知会员服务
86+阅读 · 2019年12月13日
【泡泡图灵智库】面向无人机的高效双目SLAM
泡泡机器人SLAM
6+阅读 · 2019年5月31日
【泡泡图灵智库】LIMO: LiDAR-单目相机视觉里程计(arXiv)
泡泡机器人SLAM
48+阅读 · 2019年5月14日
现在开源的RGB-D SLAM有哪些?
计算机视觉life
30+阅读 · 2019年5月8日
【泡泡一分钟】基于运动估计的激光雷达和相机标定方法
泡泡机器人SLAM
25+阅读 · 2019年1月17日
【泡泡一分钟】用于平面环境的线性RGBD-SLAM
泡泡机器人SLAM
6+阅读 · 2018年12月18日
【泡泡一分钟】RoomNet:端到端房屋布局估计
泡泡机器人SLAM
18+阅读 · 2018年12月4日
Maplab:研究视觉惯性建图和定位的开源框架
泡泡机器人SLAM
16+阅读 · 2018年4月4日
Real-time Scalable Dense Surfel Mapping
Arxiv
5+阅读 · 2019年9月10日
Arxiv
6+阅读 · 2018年6月21日
VIP会员
相关资讯
【泡泡图灵智库】面向无人机的高效双目SLAM
泡泡机器人SLAM
6+阅读 · 2019年5月31日
【泡泡图灵智库】LIMO: LiDAR-单目相机视觉里程计(arXiv)
泡泡机器人SLAM
48+阅读 · 2019年5月14日
现在开源的RGB-D SLAM有哪些?
计算机视觉life
30+阅读 · 2019年5月8日
【泡泡一分钟】基于运动估计的激光雷达和相机标定方法
泡泡机器人SLAM
25+阅读 · 2019年1月17日
【泡泡一分钟】用于平面环境的线性RGBD-SLAM
泡泡机器人SLAM
6+阅读 · 2018年12月18日
【泡泡一分钟】RoomNet:端到端房屋布局估计
泡泡机器人SLAM
18+阅读 · 2018年12月4日
Maplab:研究视觉惯性建图和定位的开源框架
泡泡机器人SLAM
16+阅读 · 2018年4月4日
Top
微信扫码咨询专知VIP会员