Нахождение преобразования между двумя точечными облаками с использованием алгоритма ICP - PullRequest
0 голосов
/ 11 июля 2019

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

...