计算出纸箱上的四个圆的圆心坐标和半径,对圆心坐标进行排序,沿着X+方向排序并把排序后的圆心坐标保存到本地。
// 此函数用于估计点云的边界,并将边界点保存到文件中
void BoundaryEstimation(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
// 移除输入点云中的NaN值(非法点)
std::vector<int> indices;
pcl::removeNaNFromPointCloud(*cloud, *cloud, indices);
// 估计点云的表面法线
pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
ne.setSearchMethod(tree);
ne.setKSearch(50); // 设置K最近邻搜索的数量
ne.compute(*normals);
// 计算点云的边界
pcl::PointClou