LIO-SAM代码流程详解

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

会慢慢更新……

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”

LIO-SAM代码流程详解_第1张图片

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轨迹。

LIO-SAM代码流程详解_第2张图片

2.imagePrejection.cpp

1)ImagePrejection

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

LIO-SAM代码流程详解_第3张图片

3.featureExtraction.cpp

在featureExtraction类,只订阅了来自imagePrejection类输出的信息:“lio_sam/deskew/cloud_info”。采用与LOAM一样的方法首先计算出点云中每一个点的曲率,并排除异常点(遮挡、平行),最后根据曲率选出平面点和边界点。
LIO-SAM代码流程详解_第4张图片

4.mapOptimization.cpp

你可能感兴趣的:(Lidar,SLAM,自动驾驶,人工智能,计算机视觉)