>
返回

LIO-SAM 代码分析(零):系统总览

整理一下 LIO-SAM 的代码思路。

简介

LIO-SAM 的完整注释代码以及流程图见 LIO-SAM With Chinese Comments

LIO-SAM 基本流程

LIO-SAM 的基本流程如下所示:

LIO-SAM 基本流程
LIO-SAM 基本流程

和 LOAM 类似,LIO-SAM 也发布高频和相对低频的里程计位姿信息。低频位姿信息由 Lidar 里程计进行点云地图匹配估计,高频位姿信息则由 IMU 里程计根据 IMU 测量信息估计。且两者互相耦合。对 IMU 和 Lidar 里程计而言,其估计的位姿又分为两种,基于增量信息测量的位姿估计和基于全局信息测量的位姿估计,其区别在于有没有利用 GPS 信息和回环检测等全局测量。总的来说,LIO-SAM 发布四个里程计信息,分别为:

  • IMU 里程计(和 IMU 消息同频率)
    • 基于增量信息的 IMU 里程计(能够保证帧与帧之间运动的平滑)
    • 基于全局信息的 IMU 里程计(每一帧位姿的准确性更好)
  • Lidar 里程计 (和 Lidar 消息同频率)
    • 基于增量信息的 Lidar 里程计
    • 基于全局信息的 Lidar 里程计

LIO-SAM 整体可以分为四个部分:

  • ImageProjection:接收原始点云消息、原始 IMU 消息和 IMU 里程计消息。对点云进行预处理:包括去畸变、投影到二维图像等,保存相关消息后续进行位姿初始化
  • FeatureExtraction:接收去畸变后的点云,进行角点和平面点的特征提取
  • IMUPreintegration:
    • 接收 IMU 消息以及 Lidar 里程计的两种位姿估计,结合 IMU 消息进行位姿预测,发布高频里程计消息
    • 其中会维护一个因子图优化器,只保存每两个关键帧之间的位姿,用来利用 IMU 预积分对当前关键帧位姿以及 IMU 零偏进行优化
  • MapOptimization:
    • 保存所有关键帧的位姿和点云,可以随时进行地图构建
    • 接收特征点云消息,进行局部地图匹配对当前位姿进行高斯牛顿估计
    • 维护一个因子图优化器,包含所有关键帧的状态作为变量节点,接收 GPS 消息和回环检测,构建里程计的帧间约束因子、GPS 先验因子以及回环的帧间约束因子,进行全局位姿估计

各个部分的逻辑梳理可以参考:

Built with Hugo
Theme Stack designed by Jimmy