Skip to content

踩坑GitHub hku-mars/FAST_LIO3 个月前

FAST-LIO2多次运行结果不一致,ikd-Tree双线程重建导致非确定性 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Same parameters Different result(GitHub hku-mars/FAST_LIO #427)

状态:有绕过办法

问题 ​

在PC与Jetson Orin NX平台上使用Livox Avia运行FAST-LIO2时,相同参数与数据集下多次运行结果存在显著非确定性,长航时任务尤为明显。用户修复preprocess.cpp中disB未初始化bug并禁用OpenMP后问题依旧。维护者确认根源为ikd-Tree内部rebuild_thread异步修改树结构引发的竞态条件,唯一确定性解法是关闭双线程重建,但这会导致大尺度k-d tree重构极慢。

环境 ​

传感器:Livox Avia;算法:FAST-LIO2;平台:x86 PC、NVIDIA Jetson Orin NX (ARM);关键组件:ikd-Tree、preprocess.cpp、CMakeLists.txt

解决办法 ​

  1. 确认问题根因为 ikd-Tree 内部 rebuild_thread 后台线程与主映射循环的异步竞态,而非 OpenMP 或预处理代码错误
  2. 关闭 ikd-Tree 的双线程重建功能以强制单线程执行,消除非确定性行为
  3. 接受关闭双线程重建后大尺度 k-d tree 重构速度显著下降的性能代价
  4. 注意仅修复 preprocess.cpp 中 disB 赋值错误或移除 CMakeLists.txt 中的 -DMP_EN 无法解决此特定非确定性问题

讨论原作者:@celikemir 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub hku-mars/FAST_LIO #427:Same parameters Different result访问 2026-10-26