首页 > 解决方案 > icp注册pcl库

问题描述

我正在尝试将两个点云对齐在一起,如下图所示..白色云是我的源云,黑色是我的目标...由于某种原因,对齐方式移动了某个值你可以看到(红色点云)。关于如何使它完美契合的任何建议?我尝试更改一些参数(检查下面的代码),但完全没有区别。 在此处输入图像描述

pcl::PointCloud<pcl::PointXYZ>::Ptr sourceCloud(new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZ>::Ptr targetCloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr finalCloud(new pcl::PointCloud<pcl::PointXYZ>);
  Eigen::Matrix4f icp_Transformation;

  //Assign both point clouds as source and target
  pcl::io::loadPCDFile<pcl::PointXYZ>("plate_pcd.pcd", *sourceCloud);
  pcl::copyPointCloud(*holes_pos_intertial, *targetCloud);
  
  // ICP object.
    pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> registration;
    registration.setInputSource(sourceCloud);
    registration.setInputTarget(targetCloud);
  registration.setTransformationEpsilon(0.0000000000000000000001);
  registration.setEuclideanFitnessEpsilon(0.0000000000000000000001);
  // double RMS = EMVS::PCGeometry::computeCloudRMS(targetCloud, sourceCloud, 1.0);
  // std::cout << "RMS is :" << RMS <<  std::endl;
    registration.align(*finalCloud);
    if (registration.hasConverged())
    {
        std::cout << "ICP converged." << std::endl
                  << "The score is " << registration.getFitnessScore() << std::endl;
        std::cout << "Transformation matrix:" << std::endl;
        std::cout << registration.getFinalTransformation() << std::endl;
    icp_Transformation = registration.getFinalTransformation();

    }
    else std::cout << "ICP did not converge." << std::endl;

}

标签: registrationpoint-cloud-librarypoint-clouds

解决方案


推荐阅读