У меня есть два облака точек объекта, одно из которых является целевым облаком точек, а другое - облаком точек реального времени от робота. Оба облака точек находятся на одинаковом расстоянии от точки объекта.Моя цель - заставить робота двигаться до объекта, используя алгоритм ICP и получая матрицу преобразования.
Используя PCL, я попытался реализовать алгоритм ICP и получаю Матрицу преобразования, но переводне является правильным.Предположим, что если робот находится на расстоянии 40 см от объекта, то перевод показывает только 10 см.
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 используется для нахождения наилучшего соответствия между двумя облаками точек, и это дает матрицу преобразования, которая сообщает, сколько требуется сдвига и поворота для выравнивания обоих облаков точек.Но я не уверен, почему я получаю перевод с такой большой ошибкой.