码迷,mamicode.com
首页 > 其他好文 > 详细

点云库PCL:NDT配准时出现容器出限的问题及解决

时间:2019-08-09 19:59:47      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:它的   ali   text   比较   变形   font   容器   ima   str   

 

前言 

  在PCL库中,精配准除了我们最常用的ICP算法以及相关的变形算法,如GICP算法外,另外还包含了NDT算法(正态分布变换),它不需要提供较好的初值,且速度比ICP算法更为快速。

  当然,也会有着一定的缺陷:收敛域差、代价函数不连续等,NDT原理以及步骤等具体可查看 https://www.cnblogs.com/li-yao7758258/p/10705228.html,个人觉得,这篇文章写得比较详细具体。

 

版本

   PCL1.8.0

 

问题

  PCL在使用NDT(Normal Distribution Transform)对两个点云进行配准时会出现容器出限的错误。

                技术图片

 

解决方法

  在设置参数时,将体素分辨率调大,从而能使每个体素中能有六个以上的点。

 

原因解析

  从原理角度分析:体素分辨率太小,使得对目标点云分割时每个体素中达不到计算协方差矩阵的点数。

  从代码角度分析:在ndt.h中有着一个变量为target_cells_,它的类型为VoxelGridCovariance,此类的作用为体素划分,且计算每个体素内点的协方差以及形心。

  当我们分辨率设置过小时,每个体素内的点云数均无法达到设置的min_points_per_voxel_,从而使target_cells_为空,无法对其初始化,导致target_cells_中的维度变量Dim_为0。以至于在kdtree_flann.hpp中,vector容量初始化为0,在后来的将点云转换到vector时,vector出限。    

  技术图片

 

点云库PCL:NDT配准时出现容器出限的问题及解决

标签:它的   ali   text   比较   变形   font   容器   ima   str   

原文地址:https://www.cnblogs.com/pw123/p/11329041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!