点击上方“计算机视觉life”,选择“星标”
快速获得最新干货
本文由csdn博主hhhliuye授权发布,禁止二次转载
https://blog.csdn.net/weixin_44492024/article/details/101452315
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也有一个低频率调用的全局优化线程。
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秒(并不影响实时性)。
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秒一次。
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机器视觉及其应用》,计算机视觉life免费送4本!书籍介绍:
原价88元,现向计算机视觉life公众号读者免费赠送4本,并且包邮送到家。
如何免费获得该书呢?
请在本文留言区留言你关于3D视觉方面的话题讨论,截止5月12日19:00点留言点赞排名前4名均可获得本书。到时会有人联系你。
注意不符合要求的留言不会放出,且后台会设置监控,禁止恶意刷赞。
如果没有中奖,喜欢本书的粉丝也可以在如下链接7.3折优惠购买
从0到1学习SLAM,戳↓
欢迎加入SLAM公众号读者群一起和同行交流,请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿也欢迎联系:simiter@126.com
长按关注计算机视觉life
据说点赞中奖率会更高!