loam论文与Aloam代码学习归纳(二)--整体介绍及各部分功能

本文详细介绍了A-LOAM,一种简化版的激光SLAM算法,对比原版LOAM,A-LOAM利用Eigen和ceres库优化代码,提高了可读性和效率,适合初学者。文章分析了两者的区别,包括IMU信息处理、特征点筛选、优化方法等,同时提供了A-LOAM的运行性能数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Aloam简介

秦通对LOAM的一个简化版本,没有IMU的信息,是入手激光SLAM非常简单的程序,初学者必备。其将原版LOAM代码中手写的求解旋转矩阵,欧拉角,推到LM及雅克比矩阵,改成了运用Eigen库和ceres库进行求解优化,极大的简化了代码的复杂性,非常适合初学者进行学习。
Git链接:
https://github.com/HKUST-Aerial-Robotics/A-LOAM
在这里插入图片描述

二.loam与Aloam对比

1.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也有一个低频率调用的全局优化线程。
目前网上也有对LOAM的多个中文注释版本:
(1)https://zhuanlan.zhihu.com/p/57351961
(2)https://blog.csdn.net/Nksjc/article/details/76401092
(3)https://github.com/cuitaixiang/LOAM_NOTED

2.ALOAM
另外,下面的算法都使用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秒(并不影响实时性)。

三.Aloam整体框架

1.工程基于ROS进行的开发,如图所示:
在这里插入图片描述
在这里插入图片描述
1>launch文件夹:算法的启动接口,通过该文件夹下的不同的launch文件,让算法驱动不同版本的激光雷达,从而进行建图工作;
2>include文件夹 :主要包含一个简单的通用头文件common.h和一个计时器的类tictoc.h文件夹,计时单位为ms,其中common.h主要包含俩个功能:
(1)通过typedef对pcl pointcloud进行重命名,方便对后面代码进行简化。
(2)角度转换。
tictoc.h主要是对std::chrono代码进行封装,用于后面的时间操作。
3>rviz_cfg:包含loam启动时的rviz配置相关记录;
4>src文件夹:包含的是LOAM算法整体部分,核心代码:4个cpp分别对应节点图中4个节点,1个hpp为基于Ceres构建的残差函数,用以计算点到直线与点到平面的距离,从而进行点云配准;
5>picture文件夹:预留的编译产出目录,README.md中的图片;
6>docker文件夹:提供了docker环境,方便开发者搭建环境;
2.运行节点图
在这里插入图片描述

四.参考文献

https://blog.csdn.net/weixin_44492024/article/details/101452315
https://www.cnblogs.com/wellp/p/8877990.html
https://mp.weixin.qq.com/s/ou4ynyt9PXMBj0nVnR7YpA

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值