一、一个容易被忽视的问题
想象这样一个场景:一台搭载激光雷达的无人机正在快速飞行。雷达以100毫秒的扫描周期采集一帧点云,每个点的采集时刻不同------第一个点采集于t₀时刻,最后一个点采集于t₁时刻,t₁ - t₀ = 100毫秒。在这100毫秒里,无人机带着雷达向前移动了0.5米,同时机身还伴有小幅旋转。
问题来了:这帧点云里,不同时间采集的点,对应的雷达坐标系是不一样的。但当我们把这帧数据送去与地图做匹配时,却默认所有点是在同一个坐标系下采集的。这种坐标系上的错位,就是所谓的运动畸变5†L12-L16。
如果飞行速度慢,畸变不太明显,系统还能勉强工作。一旦运动速度快起来,点云会严重变形,导致后续的状态估计产生系统性漂移,甚至完全失效。这在快速飞行或者剧烈旋转的场景下尤为致命。
二、FAST-LIO的两阶段补偿策略
解决运动畸变,朴素的想法很简单:既然畸变是因为扫描期间载具在运动,那把每一帧内的每个点都"补偿"到一个统一的基准坐标系下,再用补偿后的点云去做匹配,问题理论上就能解决。
剩下的问题就是:补偿值从哪来?FAST-LIO的方案可以拆解为两个阶段:前向传播 (Forward Propagation)和反向传播(Backward Propagation)5†L16-L18。
2.1 第一阶段:前向传播------建一条"记录"
前向传播解决的核心问题很简单:想要把扫描期间每个时刻的点坐标都补偿到一个统一时刻,首先得知道每个时刻载体都处在什么状态。
FAST‑LIO的前向传播工作流程如下5†L24-L28:
-
系统收到前一帧的最终状态估计结果(上一轮滤波给出的后验)。
-
收到每一个新IMU数据(角速度和加速度)后,就基于它做一次状态预测:用角速度更新旋转,用加速度更新速度、位置,同时带上偏置和噪声。
-
把预测得到的状态(位置、速度、姿态)保存下来,与对应的时间戳绑定。
前向传播本身就是滤波器的预测步,它基于上一帧的后验和当前IMU数据,向前递推预测当前帧每一步的IMU状态。在这个过程中,每个IMU时间戳对应的姿态、位置、速度都会被完整记录到IMUpose结构中5†L28。到一帧激光雷达扫描结束时,系统已经得到了一整条连续的时间线,记录了载具在扫描期间每一个时刻的运动状态。这一步可以理解为"画出一条时间与状态对应的完整轨迹线":

2.2 第二阶段:反向传播------从终点回溯
有了前向传播记录的整条时间线,反向传播的逻辑就水到渠成了。
让两个核心概念先明确一下:
-
目标参考系 :统一基准坐标系,通常选择当前激光雷达扫描的结束时刻(或者相应的LiDAR坐标系)作为统一基准,也就是tₖ时刻8†L16-L1712†L4-L6。
-
每一帧雷达点的时间戳:每个激光点都携带相对扫描起始的时间偏移,据此可以知道每个点实际发生在轨迹线上的哪一段(落在哪两个IMU状态之间)。
反向传播最直观的理解就是"从终点往前推":
不需要用t₀时刻的状态去正向预测到每个点发生的时刻,而是从最终估计状态(tₖ时刻的位姿)开始,按照时间顺序逆向计算特征点时刻(比如tⱼ)的位姿11†L4-L6。
在一张示意图中可以更清楚地看清整个思维脉络

2.3 关键补偿公式解析
前向传播记录了每个时刻的状态,反向传播就把这些状态反向"串"起来,把点云中的每个点逐个补偿到统一基准。具体的补偿变换公式如下5†L44-L48:
补偿点的坐标 = R_offset⁻¹ × R_end⁻¹ × ( R_i × ( R_offset × P_i + T_offset ) + T_ei ) - T_offset
-
P_i:原始点的坐标
-
R_i:点对应时刻的旋转矩阵
-
T_ei:点对应时刻到扫描结束时刻的平移量(由速度和加速度推算得出)
-
R_end:基准时刻(扫描结束时刻)的旋转矩阵
-
R_offset, T_offset:IMU与雷达之间的外参旋转和平移
对于平移,系统使用匀加速运动模型推算位置变化:
*T_ei = pos_imu + vel_imu × dt + 0.5 × acc_imu × dt² --- imu_state.pos* 5†L42-L43
dt代表从IMU测量时刻到补偿时刻的时间差。通过这个公式,系统把每个点从它的采集时刻坐标系,经过旋转和平移变换,一步映射到统一基准下的坐标。
2.4 "反向"的妙处与效果
为什么要"反向"而不"正向"?
-
雷达扫描结束时,滤波器的状态估计精度是最高的,因为它刚刚融合了前一帧激光点云的观测信息。从精度最高的终点状态开始往回推算,比从起点往前推算误差累积更小。
-
直观来看,反向传播直接对应于论文和工程实现中的"backward propagation"逻辑------利用终点状态去反推中间时刻,公式和代码都能保持一致的整齐结构12†L4-L5。
关于补偿前后的视觉效果,原论文图6(a)和图6(b)对比非常明显:原始点云在无人机快速飞行时呈现明显的拖尾状畸变;经过反向传播补偿后,墙角和边缘恢复成了本该有的清晰锐利直线。
三、学习路线指引
要更深入地理解这套机制,可以参考以下学习路径:
-
优先打牢数学基础:先熟悉《视觉SLAM十四讲》第3--4章(四元数与SO(3)/SE(3)李群李代数基本概念)、第9章(状态估计与卡尔曼滤波),尤其要理解EKF和流形上的广义加减法⊞/⊟------在后续阅读源码时会反复接触。
-
梳理前向与后向传播代码逻辑 :官方的
hku-mars/FAST_LIO代码库算法稳健,但一些结构略显复杂。更推荐同时阅读开源社区的S-FAST_LIO(zlwang7/S-FAST_LIO):这里面简化版代码配合中文注释,可以从IMU_Processing.cpp入手,找到前向传播的迭代逻辑与后向传播的位置推算公式,搭配论文附录看效果最好。 -
用模拟数据集做对比实验:录制或者找公开数据包,对比"关闭运动补偿"和"开启反向传播"两种情况下的点云形态差异。可以重点关注高速转动或振动较大的数据段------补偿效果差异会更明显。
-
参考高质量推导博文:CSDN博客的《Fastlio系列算法中向后传播backward propagation的理解》12†L2-L6、知乎专栏《动手写Fast-Lio!从零开始写基于IESKF的激光里程计》等,都提供了带举例的公式推导,可以弥补官方文档省略的部分中间计算11†L7-L10。
运动畸变补偿是紧耦合LIO系统的"隐形支撑点"。它不直接决定算法的最终精度,但没有它,后面所有的匹配和优化都建立在错误的数据底座上。理解了前向传播和反向传播的配合逻辑,也就把握住了激光惯性里程计工程实现的一条重要主线。