点云处理库pcl中有个配准算法ndt (NormalDistributionsTransform),在某些版本的pcl中运行很慢,除了通过pclomp并行计算提速,还可能是调试模式的坑。
版本pcl-1.12 (2019)
一、编译模式
如果按照官网操作编译,这个版本编译完后,处理约5万点云的点云配准需要1分钟。
(这里不提硬件平台,也不提为什么不降采样,就当我们需要处理这个规模。初值距离真值大概0.8米远,旋转3度,大概9~10次迭代,大家可参照此对比时间)
于是寻找了下文 (二)中的ndt_omp 通过并行计算加速,同样规模的处理耗时3~4秒,貌似可用哈。而并行计算占用很多cpu资源使得对实用性产生怀疑,但ndt论文中的几个例子(相似数量级别的规模)速度快于icp等配准算法。使用matlab自带的ndt算法,大概耗时0.4秒,pcl-1.12这是怎么了?
其实是此版本pcl的一个坑,原代码留了不少调试功能,在 CMakeLists.txt 中加入:
SET(CMAKE_BUILD_TYPE "Release")
删除build文件夹后重新编译,此时原版pcl的ndt算法耗时0.5秒,使用omp_ndt并行计算耗时0.06s,达到可实时运行的水平。