LIO-SAM
LIO-SAM 是一款优秀的紧耦合SLAM方案,其性能比loam系列更优异。在这套方案中,topic 十分的繁多, ∴ \therefore ∴ 梳理该方案 topic 之间的逻辑,有助于理解整套方案.
(本文使用 sequence diagram 展示 LIO-SAM 框架,主要目的是把框架梳理清晰,很多表示方法不是很有道理,会结合文字作进一步说明)
> overall
先上整体框架
/odometry/imu_incremental
: 在 imuPreintegration 节点下 IMUPreintegration
类, 基于gtsam 积分器(Integrator) 预测出的 imu 状态
/odometry/imu
: /mapping/odometry
+ incremental IMU : 在 imuPreintegration 节点下 TransformFusion
类,基于当前状态最佳估计,给出的全局一致下的 imu 状态
/mapping/odometry_incremental
: 基于当前状态的最佳帧间估计,每优化出一帧,即进行累加
/mapping/odometry
: 当前状态最佳估计
/odometry/imu
(odomTopic): 在 imuPreintegration 节点下 TransformFusion
类, 使用经优化后的帧间增量里程计信息,预测当前的imu状态
> /odometry/imu_incremental
分析:
每来一帧imu数据,使用gtsam提供的积分器,预测当前imu时刻下的状态
⇒
\Rightarrow
⇒ /odometry/imu_incremental
是整个系统 最早发出的 msg,
∴
\therefore
∴ 能为其他节点提供预测信息
应用:
- 1 预测全局一致下的 imu 位姿((publish
/odometry/imu
inTransformFusion()
) - 2 在
imageProjection
节点中,为使用odometry 获取畸变矫正量提供预测 (odomDeskewInfo()
)
note: 在 imuPreintegration Node中,使用了两个积分器,其一为预测更前当前状态时使用,其二为根据最新的imu 状态进行传播时使用
gtsam::PreintegratedImuMeasurements *imuIntegratorOpt_;
gtsam::PreintegratedImuMeasurements *imuIntegratorImu_;
,
> /odometry/imu
TranformFusion()
in imuPreintegration Node)
分析:
mapOptimization 节点优化后的帧间里程计信息 (/mapping/odometry_incremental
) 结合高频的 imu msg, 实现全局一致下的 imu 状态预测
> /mapping/odometry_incremental
main function: 计算出当前帧最优估计后,输出增量里程计信息
application: 为预积分节点中预测更新系统状态,提供先验位姿信息(IMUPreintegration()::odometryHandler()
)