云库

PCL点云库:ICP算法(讲解很好带有图,作者研究很深入)

匿名 (未验证) 提交于 2019-12-03 00:26:01
Implementations .   ICP算法采用最小二乘估计计算变换矩阵,原理简单且具有较好的精度,但是由于采用了迭代计算,导致算法计算速度较慢,而且采用ICP进行配准计算时,其对待配准点云的初始位置有一定要求,若所选初始位置不合理,则会导致算法陷入局部最优。PCL点云库已经实现了多种点云配准算法: pcl::GeneralizedIterativeClosestPoint< PointSource, PointTarget > Class Template Reference pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar > Class Template Reference pcl::IterativeClosestPointWithNormals< PointSource, PointTarget, Scalar > Class Template Reference pcl::IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar > Class Template Reference pcl::JointIterativeClosestPoint< PointSource, PointTarget, Scalar >

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

让人想犯罪 __ 提交于 2019-11-26 17:25:21
前言    在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