赞
踩
在阅读源码的过程中,往往会遇到不知道每个回调函数是在什么时候对数据进行处理,又是如何将处理的信息传递给其他的回调函数。因此,本文旨在根据每一个类给出代码的流程图,让我们在阅读源码的过程中能后更加清晰明了的认识到这一个类在做什么,以及做了什么。
好消息: 我最近做了一些关于LIO-SAM回环检测的工作,回环检测效果优于SC-LIO-SAM,大家感兴趣可以去star:NDTMC-LIO-SAM和NDTMC。
一共有两个class:1)IMUPreintegration;2)TransformFusion
在整个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”
在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轨迹。
1)ImagePrejection
在ImageProjection类中,作者一共订阅了三个话题:(1).IMU原始信息 (2).IMU里程计增量信息 (3).原始激光点云数据。其主要作用是:(1)、利用当前激光帧起止时刻间的imu数据计算旋转增量,IMU里程计数据(来自ImuPreintegration)计算平移增量,进而对该激光帧每一时刻的激光点进行运动畸变矫正
(利用相对激光帧起始时刻的位姿增量,变换当前激光点到起始时刻激光点的坐标系下,实现矫正);
(2)、同时利用IMU数据的姿态角(RPY,roll,pitch,yaw)、IMU里程计数据的位姿,对当前帧激光位姿进行粗略初始化。最后发布矫正了运动畸变的点云数据。
在featureExtraction类,只订阅了来自imagePrejection类输出的信息:“lio_sam/deskew/cloud_info”。采用与LOAM一样的方法首先计算出点云中每一个点的曲率,并排除异常点(遮挡、平行),最后根据曲率选出平面点和边界点。
该cpp包括了lidar odometry以及回环。lidar odometry接收来自3中的lio_sam/feature/cloud_info,发布lio_sam/mapping/odometry_incremental(这里与1中的接收信息对上了,作为观测更新1中的imu bias)。
ps:LM优化部分推荐链接LeGO-LOAM中的数学公式推导
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。