LIO-SAM代码流程详解

在阅读源码的过程中,往往会遇到不知道每个回调函数是在什么时候对数据进行处理,又是如何将处理的信息传递给其他的回调函数。因此,本文旨在根据每一个类给出代码的流程图,让我们在阅读源码的过程中能后更加清晰明了的认识到这一个类在做什么,以及做了什么。


好消息20240630: NDT-Map-Code(NDTMC)被IROS 2024录取啦!!!

好消息: 我最近做了一些关于LIO-SAM回环检测的工作,回环检测效果优于SC-LIO-SAM,大家感兴趣可以去star:NDTMC-LIO-SAMNDTMC

1.imuPreintegration.cpp

一共有两个class:1)IMUPreintegration;2)TransformFusion

1)IMUPreintegration

在整个IMUPreintegration类中,作者的目的是将mapOptimization得到的上一帧位姿变换(即从k-2到k-1帧的里程计增量信息)lio_sam/mapping/odometry_incremental与imu在k-2到k-1帧之间的预计分量一同进行因子图优化更新IMU预积分器在第k-1帧的状态和偏置(PreState_preBias_),再通过因子图优化后的第k-1帧状态和偏置(preStateOdom( = preState_)preBiasOdom( = preBias))与第k-1帧之后的imu信息预测imu里程计,并发布到Topic “odometry/imu_incremental”

在这里插入图片描述

2)TransformFusion

在TransformFusion类中,一共接受了两个信息:1.来袭MapOptimization的激光里程计:“lio_sam/mapping/odometry”;2.来自IMUPreintegration的IMU里程计:“odometry/imu_incremental”。它的主要功能是:根据第k-1帧激光里程计,和第k-1帧到第k帧的IMU里程计变换增量odometry/imu_incremental,计算当前时刻IMU里程计odometry/imu。并输出局部IMU轨迹。

在这里插入图片描述

2.imagePrejection.cpp

1)ImagePrejection

在ImageProjection类中,作者一共订阅了三个话题:(1).IMU原始信息 (2).IMU里程计增量信息 (3).原始激光点云数据。其主要作用是:(1)、利用当前激光帧起止时刻间的imu数据计算旋转增量,IMU里程计数据(来自ImuPreintegration)计算平移增量,进而对该激光帧每一时刻的激光点进行运动畸变矫正
(利用相对激光帧起始时刻的位姿增量,变换当前激光点到起始时刻激光点的坐标系下,实现矫正);
(2)、同时利用IMU数据的姿态角(RPY,roll,pitch,yaw)、IMU里程计数据的位姿,对当前帧激光位姿进行粗略初始化。最后发布矫正了运动畸变的点云数据。

3.featureExtraction.cpp

在featureExtraction类,只订阅了来自imagePrejection类输出的信息:“lio_sam/deskew/cloud_info”。采用与LOAM一样的方法首先计算出点云中每一个点的曲率,并排除异常点(遮挡、平行),最后根据曲率选出平面点和边界点。
请添加图片描述

4.mapOptimization.cpp

该cpp包括了lidar odometry以及回环。lidar odometry接收来自3中的lio_sam/feature/cloud_info,发布lio_sam/mapping/odometry_incremental(这里与1中的接收信息对上了,作为观测更新1中的imu bias)。

ps:LM优化部分推荐链接LeGO-LOAM中的数学公式推导
在这里插入图片描述

### 如何使用EVO评估LIO-SAM生成的轨迹准确性 为了评估LIO-SAM生成的轨迹准确性,可以采用工具`evo`来进行详细的分析。此过程涉及将轨迹文件转换成统一格式以便比较,并利用特定命令执行定量和定性的评价。 #### 准备工作 确保已经安装了`evo`库[^3]。如果尚未安装,则可以通过pip安装最新版本: ```bash pip install evo ``` 对于轨迹数据而言,通常需要将其转换为`.tum`格式,这是一种常见的用于表示时间戳、位置以及姿态信息的文字形式。当处理来自不同传感器的数据时,这种标准化有助于简化后续的操作流程。 #### 轨迹转换 假设已经有了由LIO-SAM产生的估计轨迹文件(例如:`estimated_trajectory.bag`),那么第一步就是提取这些信息并将它们转存为`.tum`格式。这一步骤可能涉及到ROS bag文件解析以及其他必要的预处理操作。一旦完成上述准备工作之后,就可以继续下一步了。 针对Kitti数据集的情况,需特别注意的是要将kitti类型的轨迹转化为tum格式的轨迹,因为这是进行准确度评测所必需的前提条件之一。 #### 执行评估 接下来便是调用`evo`来计算两个轨迹之间的差异。这里以官方提供的地面实况(`groundtruth.txt`)作为参照标准,而待测对象则是之前准备好的估计轨迹文件(如前所述已更改为`.tum`格式)。具体命令如下所示: ```bash evo_ape tum groundtruth.txt estimated_trajectory.tum -va --plot --save_plot result.png ``` 这条指令会输出一系列统计指标,比如绝对位姿误差(APE),同时还会绘制出两者的对比图表供直观查看。通过这种方式能够全面了解算法性能的好坏程度。 此外,还可以进一步探索其他功能选项,像相对位姿误差(RPE)等不同的衡量方式,从而获得更加丰富的视角去审视系统的优劣之处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值