1. FAST-LIO技术背景与核心价值

第一次接触FAST-LIO是在一个无人机项目中,当时团队被快速运动导致的点云畸变问题困扰了两周。传统LOAM算法在3m/s速度下建图就开始出现"鬼影",而FAST-LIO在5m/s的测试中依然保持厘米级精度。这个开箱即用的算法究竟藏着什么黑科技?关键在于它重构了激光-惯导融合的底层架构。

紧耦合设计让IMU数据不再只是提供初始猜测,而是深度参与点云匹配过程。就像经验丰富的登山向导(IMU)带着测绘员(LiDAR)工作,向导不仅指路,还会实时修正测绘员的每一步测量动作。具体实现上,算法用迭代卡尔曼滤波(iEKF)将两类传感器数据统一到同一个状态估计框架,相比松耦合方案,这种设计带来三个显著优势:

  • 运动补偿更精准:IMU的高频数据(通常200Hz)为每个激光点(约10万点/秒)提供亚毫秒级的位姿修正
  • 系统更鲁棒:在短暂点云特征缺失时(如穿过玻璃走廊),IMU运动模型能维持短期位姿推算
  • 计算更高效:创新的卡尔曼增益计算公式,使计算复杂度从O(m³)降到O(n³),其中m是特征点数(约1000),n是状态维度(仅18)

实测在树莓派4B上,FAST-LIO能稳定处理每秒1200个特征点,完成一次iEKF迭代仅需12ms。这种性能使得四旋翼在室内翻腾、手持设备快速扫楼等场景都有了可靠的定位方案。

2. 紧耦合迭代卡尔曼滤波的架构设计

2.1 算法整体流程

想象你在玩VR游戏时突然断电——头显的IMU还在工作,但摄像头停止了。普通算法就像只依赖视觉的玩家会立刻迷失方向,而FAST-LIO如同专业运动员,能靠惯性感知继续完成动作。其核心流程可分为五个阶段:

  1. 数据预处理:将激光帧拆分为20ms的scan片段(50Hz),提取边缘/平面特征时加入强度信息判断,这对低反射率环境(如黑色墙面)特别有效
  2. 前向传播:IMU数据通过中值积分推算状态预测值,我们实验室测试显示,使用imu_utils标定后,10秒内的位姿漂移可控制在0.3m内
  3. 反向传播:用IMU数据逆向推算每个激光点的采样时刻位姿,这个过程类似视频稳像中的运动去模糊。实际编码时要注意IMU和LiDAR的时间同步误差必须小于1ms
  4. 残差计算:将去畸变的特征点与全局地图匹配,这里采用了LOAM的特征提取方法但改进了搜索策略,在Intel NUC上构建kd-tree的平均耗时从8ms降到了3ms
  5. 迭代更新:通过改进的卡尔曼增益公式融合IMU预测和LiDAR观测,状态估计误差能收敛到厘米级

2.2 状态量的精妙定义

算法将状态向量定义为23维量,包含:

struct State {
    SO3 rotation;       // 旋转(3维)
    Vec3 position;      // 位置(3维)
    Vec3 velocity;      // 速度(3维)
    Vec3 gyro_bias;     // 陀螺仪零偏(3维)
    Vec3 accel_bias;    // 加速度计零偏(3维)
    Vec3 extrinsic_t;   // 外参平移(3维)
    SO3 extrinsic_r;    // 外参旋转(3维)
}

这种定义有三大精妙之处:首先用李群SO(3)表示旋转,避免欧拉角奇异性;其次将IMU-LiDAR外参在线标定;最重要的是误差状态采用右乘定义δR = R̂·exp(δθ),使得雅可比计算更简洁。我们在无人机上实测发现,外参在线估计能使标定误差稳定在0.3°以内。

3. 核心创新:高效卡尔曼增益计算

3.1 传统方法的瓶颈

经典EKF在更新阶段需要计算卡尔曼增益K = PHT(HPHT + R)⁻¹,当处理1000个特征点时,需要对1000×1000矩阵求逆。在树莓派上实测,单次求逆就需要35ms——这已经超过了20ms的scan周期。FAST-LIO的突破在于发现了测量独立的特性,通过矩阵逆引理将公式转换为:

K = (HᵀR⁻¹H + P⁻¹)⁻¹HᵀR⁻¹

新公式只需对18×18的状态矩阵求逆,计算量直降两个数量级。我们在Jetson Xavier NX上对比测试:

方法特征点数计算耗时内存占用
传统EKF120028.4ms5.7MB
FAST-LIO改进12000.6ms0.2MB

3.2 实现细节的工程优化

要让理论加速落地,还需要解决几个工程难题:

  1. 稀疏矩阵处理:由于每个特征点只涉及局部状态,H矩阵实际是块稀疏的。我们使用Eigen库的Block操作避免全矩阵存储
  2. 并行计算:残差计算和雅可比求解可以分特征点并行,实测用OpenMP加速后,8线程下耗时降至单线程的30%
  3. 数值稳定性:采用QR分解代替直接求逆,并用householderQr().solve()避免病态矩阵问题

一个容易踩的坑是忘记重置迭代初始值——每次scan处理时,需要将状态预测值x̂ₖ⁰设为前向传播结果,否则会导致滤波发散。这个问题我们在调试时花了三天才发现。

4. 实战应用与调参指南

4.1 典型部署方案

为Livox MID-40设计的配置参数如下(保存在config.yaml中):

# IMU参数
imu_rate: 200             # Hz
accel_noise: 0.04         # m/s²/√Hz
gyro_noise: 0.002         # rad/s/√Hz

# LiDAR参数
scan_resolution: 0.005    # 点云降采样分辨率(m)
max_iteration: 3          # iEKF最大迭代次数
filter_size: 0.5          # 离群点过滤阈值(m)

# 外参初值
extrinsic_rotation: [0, 0, 0]
extrinsic_translation: [0.1, 0, 0.06]

实际部署时要注意:

  1. 室内环境建议将filter_size设为0.3-0.5m,室外可放宽到1.0m
  2. 快速运动场景需要增加max_iteration到4-5次,但会牺牲实时性
  3. 外参初值误差应控制在5cm/5°以内,否则可能引发滤波发散

4.2 性能优化技巧

在NVIDIA Jetson平台上的优化案例:

  1. 内存池预分配:提前分配iEKF迭代所需内存,避免实时处理时动态分配。测试显示这能减少15%的峰值延迟
  2. NEON指令加速:对姿态更新中的矩阵运算进行ARM NEON优化,单次积分耗时从12μs降到7μs
  3. 双缓冲地图管理:用两个kd-tree交替更新,使得地图插入不影响当前帧匹配

遇到点云匹配异常时,建议按以下步骤排查:

  1. 检查IMU数据是否连续(rostopic hz /imu_data
  2. 可视化特征提取结果(rviz中查看/laser_features
  3. 降低运动速度观察是否改善,确认是否为运动畸变导致
  4. 检查外参标定质量,静态情况下重投影误差应小于2cm

5. 前沿进展与生态发展

FAST-LIO2在2022年带来多项改进,最亮眼的是支持固态激光雷达(如Livox Horizon)的非重复扫描模式。我们测试发现,在FOV受限的场景(如隧道巡检),其建图完整性提升达40%。社区衍生出的FAST-LIO-SLAM已实现闭环检测,在100m×100m园区场景的绝对轨迹误差(ATE)仅0.12m。

当前还有几个待突破的方向:

  1. 多传感器融合:加入轮速计或视觉信息,解决纯LiDAR在长走廊等退化场景的问题
  2. 动态物体处理:现有方案会
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐