我试图将从机器人中获取的两个点云与PCL对齐。我计算对应关系,然后将它们与estimateRigidTransformation
:
pcl::registration::TransformationEstimationSVD<PointT, PointT> transformation;
transformation.estimateRigidTransformation(*source_keypoints, *target_keypoints, *correspondences, correspondence_transformation);
然后我做了一个ICP改进:
Eigen::Matrix4f transform;
pcl::IterativeClosestPoint<PointT, PointT> icp;
icp.setMaximumIterations(max_iterations);
TransformationEstimationLM::Ptr transformEst(new TransformationEstimationLM);
icp.setTransformationEstimation(transformEst);
icp.setInputSource(source);
icp.setInputTarget(target);
icp.align(*result);
如果场景不太杂乱但经常失败然后给出完全错误的转换(随机旋转),这很有效。由于点云已经与地平面对齐并且机器人仅在地平面上移动,因此云实际上仅在平移和y(向上)旋转方面不同。可以在PCL中设置吗?