ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【SLAM】Faster-LIO论文精读

【SLAM】Faster-LIO论文精读

从具体例子读懂这条方法链

理解 Faster-LIO,先把两件事分开:滤波器负责“怎么改位姿”,地图数据结构负责“去哪里快速找参照点”。本文主要加速后者,仍使用激光惯导的状态估计链。

体素到底是什么

**体素(voxel)**是三维小格子。二维地图按 x、y 分格,三维再加 z。一格只存附近点,空格子可以不分配内存,所以叫“稀疏”。iVox 用哈希表按格子编号找到里面的点。

教学例子:格边长s = 0.5 s=0.5s=0.5m,点p = ( 1.2 , − 0.1 , 0.8 ) p=(1.2,-0.1,0.8)p=(1.2,−0.1,0.8)m,按每个坐标向下取整得到:

k = ⌊ p / s ⌋ = ( 2 , − 1 , 1 ) . k=\lfloor p/s\rfloor=(2,-1,1).k=⌊p/s⌋=(2,−1,1).

注意负数− 0.2 -0.2−0.2向下取整是− 1 -1−1,不是截断成 0。查询点落在哪格,就先查该格及选定邻接格;从候选点中找距离较近的点,用来拟合平面。kNN是“找最近的 k 个点”;限制在局部格子搜索得到的是近似近邻,不承诺全地图上绝对最近的 k 个。

本帧继续迭代

去畸变后的点与当前位姿

转到地图坐标

算体素编号:三维小格子

哈希查本格及邻接格中的地图点

筛近邻、拟平面、算距离残差

IESKF:利用残差修正状态

收敛后把新点加入对应格子

维护局部地图容量

改变格子尺寸和邻域范围,会改变候选点数量、查询开销与找到好平面的机会。格子更大不一定更快:每格可能装更多点;邻域更小也不一定更准:边界附近可能漏掉真正有用的邻居。不能只用“体素越大越省算力”概括。

一帧示例:机器人转过一点角度→IMU 预测运动并帮助去畸变→把墙面点放进地图→iVox 找附近墙点→点到平面误差驱动滤波→更新地图。这里没有额外“学习正确动作”的损失函数,运行时依靠物理运动模型与几何观测。

文中很高的处理 Hz 是特定硬件、扫描切分和点数下的算法吞吐口径,不是说激光雷达硬件因此每秒发出同样数量的完整扫描,也不是整个导航系统频率。

原文与实现依据:Faster-LIO 官方仓库 及本文 DOI 对应的地图结构、近邻查询章节。格子数值是教学示例。


一句话定位
滤波骨架跟 Fast-LIO2 同族,换地图结构为 iVox(稀疏增量体素 + 并行近似 kNN),在相近精度下把前端吞吐再抬一截——后续许多高速 LIO 前端的直接工程祖先。

本页概念卡

  • Faster-LIO · iVox · iVox-PHC
  • FAST-LIO2 · ikd-Tree

1. 背景概念(给新人)

  • 为什么还要更快:机器人上 LIO 只是模块之一,CPU 要分给规划、感知、控制。
  • 近似 kNN:不保证全局精确第 k 近邻,但在体素邻域里找「够好的近邻」拟平面,对 LIO 通常够用。

2. 论文在干什么

  • 问题:ikd-Tree 已经快,但仍想再挖地图查询与并行的潜力。
  • 做法:提出 iVox / iVox-PHC;接到 Fast-LIO2 式紧耦合 LIO 上得到 Faster-LIO。
  • 宣称量级:固态雷达可达约 1k–2k Hz 量级处理(视平台与点数);多线机械雷达也可显著加速。

3. 核心创新点

  1. iVox 数据结构:哈希稀疏体素,增量插入,O ( 1 ) O(1)O(1)级更新思路。
  2. 两种底层:linear iVox(点少时更合适)与 iVox-PHC(体素内点多时用伪希尔伯特曲线加速)。
  3. 并行近似近邻:按邻接体素搜集候选,适合多核。
  4. 系统集成:替换 Fast-LIO2 地图模块,精度同级、耗时下降;也可把 iVox 塞进别的 SLAM(文中示意 LeGO-LOAM 类)。

4. 方法细节

实现图解(开源ivox3d)
完整逐步说明 + 四张示意图写在概念卡 iVox;PHC 变体见 iVox-PHC。图目录:04-学习/技术笔记/assets/ivox/。

4.1 数据结构(对应代码)

  • 外层:unordered_map<Key, list_iterator>+list做LRU(grids_map_/grids_cache_)。
  • 坐标→格子:开源用round(p * inv_resolution)(Pos2Grid),不是教科书常见的纯 floor。
  • 容量满:删链表队尾最老体素(被动删除,不扫全图箱删)。

4.2 近似近邻

  • 查询点 → 本格 +NEARBY6/18/26→ 各格内凑候选 →nth_element取最好的K KK个。
  • 有界近似:宁可漏掉很远分支上的「理论最近点」,也不去全树乱跳——IMU 初值够好时对点到平面通常够用。
  • 整帧可对「每个查询点」并行(par_unseq)。

4.3 Linear vs PHC

  • Linear:格内vector,扫点O ( n ) O(n)O(n);点少默认更合适。
  • PHC:格内 Hilbert 下标 + 质心,点多时更划算。

4.4 与滤波的接口

  • 仍是:IMU 去畸变 → 点到平面 → IEKF/IESKF 迭代。
  • 加速主要来自「找邻居 + 地图维护」,不是另写一套卡尔曼。

5. 整体框架(Mermaid)

Faster-LIO 新地图

与 Fast-LIO2 同族

IMU

去畸变

降采样点云

点到平面残差

IESKF 更新

iVox / iVox-PHC

6. 实验与结论

  • 合成数据与公开数据集:插入/查询相对多种 NN 结构更快;召回率与精确 kNN 有折中。
  • 整系统相对 Fast-LIO2:精度接近,耗时明显下降(机械雷达可省约四成量级,视序列而定)。
  • 局限:要极高召回的精确邻居时,纯近似体素不一定最优。

7. 要点总结

  • 调ivox_grid_resolution/ivox_nearby_type是在调「地图邻居质量 vs 速度」。
  • 类名ESKF+max_iteration= 论文语境的 IEKF/IESKF。

8. 开放问题

  • 开源round格子与论文表述的 floor/哈希素数公式,数值边界差对平面拟合影响多大?
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进