pcl中ndt运行速度慢的坑

点云处理库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,达到可实时运行的水平。

二、并行计算参考

SLAM前端之ndt_omp使用_年少的梦007的博客-CSDN博客

后记,ndt 是无序点云相对速度和性能排前的算法(至少在2020年前出现的算法对比),不过想要实现论文中所有优点,很多并行计算或近似法对新人并不友好。如果你使用有序点云(按照扫描线排列的点云),有很多优秀算法,不需要ndt。而普通xyz的3维 ndt 扩展成 包括intensity和RGB颜色的点云进行ndt配准,算法改动很小,这些地方是ndt的优势。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pcl_ndt和icp都是点云配准算法,用于将两个或多个点云数据集对齐。然而,它们在配准的精度和速度上有一些差异。 首先,pcl_ndt是一种粗配准算法,其"ndt"代表正态分布变换。它通过对点云数据进行统计建模来估计刚体变换(旋转和平移)以对齐点云。该算法使用高斯分布来近似点云数据的概率密度函数,并使用迭代的方法来最小化点云之间的差异。它能够处理较大的初始误差,并在模糊或噪声较多的场景表现良好。然而,由于粗匹配,它可能无法处理高精度的点云配准任务。 相比之下,icp是一种精细的配准算法,即迭代最近点算法。它通过寻找两个点云最接近的点对来计算刚体变换,以最小化它们之间的误差。该算法重复执行以下步骤:计算最近点对、计算最优刚体变换、更新刚体变换,直到收敛为止。icp算法的优点是它能够在相对低的误差水平下获得高精度的配准结果,但对于大的误差起始配准,可能会陷入局部最优。 综上所述,pcl_ndt适用于粗配准任务,能够处理较大的初始误差和噪声,但对于高精度的点云配准可能不够准确。而icp适用于精细配准任务,能够获得高精度的配准结果,但对于大的误差起始配准可能会受局部最优问题的影响。对于具体的应用场景,我们可以根据需求选择合适的算法来进行点云配准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值