从具体例子读懂这条方法链
理解 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 个。
改变格子尺寸和邻域范围,会改变候选点数量、查询开销与找到好平面的机会。格子更大不一定更快:每格可能装更多点;邻域更小也不一定更准:边界附近可能漏掉真正有用的邻居。不能只用“体素越大越省算力”概括。
一帧示例:机器人转过一点角度→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. 核心创新点
- iVox 数据结构:哈希稀疏体素,增量插入,O ( 1 ) O(1)O(1)级更新思路。
- 两种底层:linear iVox(点少时更合适)与 iVox-PHC(体素内点多时用伪希尔伯特曲线加速)。
- 并行近似近邻:按邻接体素搜集候选,适合多核。
- 系统集成:替换 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)
6. 实验与结论
- 合成数据与公开数据集:插入/查询相对多种 NN 结构更快;召回率与精确 kNN 有折中。
- 整系统相对 Fast-LIO2:精度接近,耗时明显下降(机械雷达可省约四成量级,视序列而定)。
- 局限:要极高召回的精确邻居时,纯近似体素不一定最优。
7. 要点总结
- 调
ivox_grid_resolution/ivox_nearby_type是在调「地图邻居质量 vs 速度」。 - 类名
ESKF+max_iteration= 论文语境的 IEKF/IESKF。
8. 开放问题
- 开源
round格子与论文表述的 floor/哈希素数公式,数值边界差对平面拟合影响多大?