Каталог статей
Результат icp.getFinalTransformation()
В коде ICP по умолчанию исходное облако точек сопоставляется с целевым облаком точек, а полученная матрица преобразования представляет собой матрицу преобразования исходного облака точек -> целевое облако точек,
Официальное исходное облако точек — cloud_icp, целевое облако точек — cloud_in, и ICP ищет преобразование cloud_icp->cloud_in; однако входным облаком точек является только cloud_in; cloud_icp получается посредством известного преобразования, например следующего код, а именно
: cloud_icp=transformation_matrix *cloud_in (умножение матрицы влево);
Преобразование типов pcl::PointCloud и pcl::PointCloud::Ptr
Добавление ptr — это тип указателя, и они могут быть преобразованы друг в друга.Как
правило, это обычно используется, pcl::PointCloud::Ptr
потому что функции kdtree
в octree
классе setInputCloud()
поддерживают только pcl::PointCloud::Ptr
тип
1. PointCloud::Ptr—>PointCloud
pcl::PointCloud<pcl::PointXYZ> cloud;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
cloud=*cloud_ptr;
2.PointCloud—>PointCloud::Ptr
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ> cloud;
cloud_ptr=cloud.makeShared();
пример:
1.
pcl::PointCloud<pcl::PointXYZ> cloudA;
pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);
octree.setInputCloud(cloudA.makeShared());
2.
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudA(new pcl::PointCloud<pcl::PointXYZ>);
pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);
octree.setInputCloud(cloudA);
pcl::transformPointCloud
В PCL pcl::transformPointCloud
выполняется преобразование левого умножения. Это означает, что к каждой точке облака точек применяется матрица преобразования, которую можно выразить как:
transformed_point = transformation_matrix * original_point
Следует отметить, что матрица преобразования в PCL представлена однородными координатами, поэтому последняя строка матрицы должна быть [0 0 0 1]