使用ICP算法查找两个点云之间的转换

时间:2019-07-11 12:47:14

标签: c++ computer-vision point-cloud-library robotics point-clouds

我有一个对象的两个点云,一个是目标点云,另一个是来自机器人的实时点云。两个点云都是在距对象相同距离的位置上获取的。我的目标是通过使用ICP算法并获取变换矩阵,使机器人运动到目标。

使用PCL,我尝试实现ICP算法,并且获得了转换矩阵,但是转换不正确。假设机器人与物体的距离为40cm,则平移仅显示10cm。

pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
                icp.setInputSource(cloud);
                icp.setInputTarget(ideal_cloud);
                icp.setEuclideanFitnessEpsilon(-1.797e+5);
                icp.setMaximumIterations(50);
                icp.setRANSACIterations(2000);
                icp.setTransformationEpsilon(1e-3);
                pcl::PointCloud<pcl::PointXYZ> Final;
                icp.align(Final);

                //Print Final Transformation and score
                std::cout << "has converged:" << icp.hasConverged() << " score: " <<
                icp.getFitnessScore() << std::endl;

据我所知,ICP算法用于找到两个点云之间的最佳拟合,并且它给出了一个转换矩阵,该矩阵指示需要多少平移和旋转来对齐两个点云。但是我不确定为什么要得到这么大的错误翻译。

0 个答案:

没有答案