2017-03-07 69 views
2

我正在使用SACSegmentation from PCL segmentation module来滤除地平面。用于3D数据中机器人定位的地平面检测和删除

该方法适合3D物体的正面,而不是像下面的第二个pcd文件中所示的那样安装接地面。

任何建议我应该怎么做,以适应和过滤地平面点。

在此先感谢。

pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); 

pcl::SACSegmentation<pcl::PointXYZ> segmentation; 

segmentation.setInputCloud(cloudAll); 

segmentation.setOptimizeCoefficients(true); 

segmentation.setModelType(pcl::SACMODEL_PLANE); 

segmentation.setMethodType(pcl::SAC_RANSAC); 

segmentation.setDistanceThreshold(20.20); 

Scene*.PCD

After the ground plane segmentation

afterApplyingPassthrough

回答

1

的问题是Ransac发现飞机至极适合人数较多的点,在至极的点云对应于正面。

如果您对场景和至极点云表示,你可以轻松地解决这个问题如下坐标系的一些知识:

  1. 使用PCL的PassThrough filter只选择点的点云以上的一些y价值您的选择。

在这里,我要求y表示给定点云坐标系中的垂直轴。

该阈值应基于您对场景尺寸的了解。

基于你的点云,你应该选择带有y > 200的点。

您的点云:

enter image description here

只选择百分点y > 200:像你一样,但这次

enter image description here

  • 进行分割只使用选定的点子集。
  • 下面是使用选定点的正确安装平面的可视化:

    enter image description here

    +0

    太好了!非常感谢。你的帖子真的很有用。 因为我的主要目标是获取3D对象/容器的中心点/质心,所以如果您查看最近发布的* .pcd文件(afterApplyingPassthrough),其中我只使用passthroughfilter来丢弃地板点和车轮,并假设偏移从地板总是知道。 按上面* .pcd所示应用直通后。 您推荐使用哪种方法作为centerpoint? –

    +0

    我试图计算剩余物体的质心(没有落地点和车轮) 1)pcl :: compute3DCentroid(* cloudExtracted,centroid) 返回xyz(44.0321,-300.226,1616.87)另一个想法是找到2)边界框为剩余的对象。 还有一个问题,您正在使用哪种开发环境。它似乎相当不错(日食,VStudio等) –

    +1

    他似乎正在使用CloudCompare http://www.danielgm.net/cc/ –