ICP封装函数如下:
pcl::PointCloud<pcl::PointXYZ>::Ptr ICP_test(pcl::PointCloud<pcl::PointXYZ>::Ptr target, pcl::PointCloud<pcl::PointXYZ>::Ptr source,int i)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr source_to_target(new pcl::PointCloud<pcl::PointXYZ>);
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
pcl::PointCloud<pcl::PointXYZ> Final; //存储经过配准变换源点云后的点云
icp.setInputSource(source);
icp.setInputTarget(target);
icp.setMaxCorrespondenceDistance(100);
icp.setEuclideanFitnessEpsilon(1e-3);
icp.setMaximumIterations(i);
icp.align(Final); //执行配准存储变换后的源点云到Final
Eigen::Matrix4f transformation = icp.getFinalTransformation();
std::cout << icp.getFinalTransformation() << std::endl; //打印输出最终估计的变换矩阵
pcl::transformPointCloud(*source, *source_to_target, transformation);
return source_to_target;
}