外观
踩坑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
解决办法
- 确认问题根因为
ikd-Tree内部rebuild_thread后台线程与主映射循环的异步竞态,而非 OpenMP 或预处理代码错误 - 关闭
ikd-Tree的双线程重建功能以强制单线程执行,消除非确定性行为 - 接受关闭双线程重建后大尺度 k-d tree 重构速度显著下降的性能代价
- 注意仅修复
preprocess.cpp中disB赋值错误或移除 CMakeLists.txt 中的-DMP_EN无法解决此特定非确定性问题
讨论原作者:@celikemir 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。