激光雷达运动畸变是怎么来的,FAST-LIO又如何用IMU反向传播消除它?

一、一个容易被忽视的问题

想象这样一个场景:一台搭载激光雷达的无人机正在快速飞行。雷达以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

  1. 系统收到前一帧的最终状态估计结果(上一轮滤波给出的后验)。

  2. 收到每一个新IMU数据(角速度和加速度)后,就基于它做一次状态预测:用角速度更新旋转,用加速度更新速度、位置,同时带上偏置和噪声。

  3. 把预测得到的状态(位置、速度、姿态)保存下来,与对应的时间戳绑定。

前向传播本身就是滤波器的预测步,它基于上一帧的后验和当前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)对比非常明显:原始点云在无人机快速飞行时呈现明显的拖尾状畸变;经过反向传播补偿后,墙角和边缘恢复成了本该有的清晰锐利直线。

三、学习路线指引

要更深入地理解这套机制,可以参考以下学习路径:

  1. 优先打牢数学基础:先熟悉《视觉SLAM十四讲》第3--4章(四元数与SO(3)/SE(3)李群李代数基本概念)、第9章(状态估计与卡尔曼滤波),尤其要理解EKF和流形上的广义加减法⊞/⊟------在后续阅读源码时会反复接触。

  2. 梳理前向与后向传播代码逻辑 :官方的hku-mars/FAST_LIO代码库算法稳健,但一些结构略显复杂。更推荐同时阅读开源社区的S-FAST_LIO(zlwang7/S-FAST_LIO):这里面简化版代码配合中文注释,可以从IMU_Processing.cpp入手,找到前向传播的迭代逻辑与后向传播的位置推算公式,搭配论文附录看效果最好。

  3. 用模拟数据集做对比实验:录制或者找公开数据包,对比"关闭运动补偿"和"开启反向传播"两种情况下的点云形态差异。可以重点关注高速转动或振动较大的数据段------补偿效果差异会更明显。

  4. 参考高质量推导博文:CSDN博客的《Fastlio系列算法中向后传播backward propagation的理解》12†L2-L6、知乎专栏《动手写Fast-Lio!从零开始写基于IESKF的激光里程计》等,都提供了带举例的公式推导,可以弥补官方文档省略的部分中间计算11†L7-L10

运动畸变补偿是紧耦合LIO系统的"隐形支撑点"。它不直接决定算法的最终精度,但没有它,后面所有的匹配和优化都建立在错误的数据底座上。理解了前向传播和反向传播的配合逻辑,也就把握住了激光惯性里程计工程实现的一条重要主线。

相关推荐
咕噜咕噜啦啦12 天前
ROS2自主导航
机器人·ros·gazebo
酸梅果茶12 天前
【7】lightning_lm项目-LIO 前端 -IVox 局部地图
前端·slam
a11177613 天前
机器人导航入门指南(从 0 到 1)
笔记·学习·slam
酸梅果茶14 天前
【6】lightning_lm项目-LIO 前端 -点云预处理模块
前端·slam
酸梅果茶14 天前
【2】lightning_lm项目-阶段1-基础理解
slam
daad77715 天前
记录ros2的slam环境搭建搭配思岚C1激光雷达
slam
bing_feilong20 天前
FAST_LIO2(2): 运行记录
机器学习·slam
大江东去浪淘尽千古风流人物21 天前
【SLAM】slam高动态位姿估计全链路拆解
算法·面试·职场和发展·视觉里程计·slam·vio·大疆
Agilex松灵机器人22 天前
UMR × NAVIS:移动机器人行业级通用一体化底盘与3D导航解决方案
人工智能·3d·机器人·ros·slam·vla·松灵机器人