我有一个对象的两个点云,一个是目标点云,另一个是来自机器人的实时点云。两个点云都是在距对象相同距离的位置上获取的。我的目标是通过使用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算法用于找到两个点云之间的最佳拟合,并且它给出了一个转换矩阵,该矩阵指示需要多少平移和旋转来对齐两个点云。但是我不确定为什么要得到这么大的错误翻译。