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中提供了使用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).
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.
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 – 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秒一次。
它是一个简单的图优化模型。 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 – 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衍生算法的一半左右的时间。