【问题标题】:Ground plane detection and removal for the localization of robot in 3D data3D数据中机器人定位的地平面检测和去除
【发布时间】:2017-07-27 22:38:21
【问题描述】:

我正在使用SACSegmentation from PCL segmentation module 来过滤掉地平面。

该方法是拟合 3D 对象的前表面,而不是拟合地平面,如下面的 2nd 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

【问题讨论】:

  • 请将图片添加到您的帖子中,有些人(比如我)可能无法通过公司防火墙访问它们;此外,您的链接可能有一天会损坏。

标签: 3d computer-vision point-cloud-library point-clouds ransac


【解决方案1】:

问题是Ransac 找到适合更多点的平面,在您的点云中对应于前表面。

如果您对表示点云的场景和坐标系有一定的了解,您可以轻松地解决以下问题:

  1. 使用 PCL 的 PassThrough filter 仅选择高于您选择的 y 值的点云点。

这里我假设y 表示给定点云坐标系中的垂直轴。

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

根据您的点云,您应该选择带有y &gt; 200 的点。

你的点云:

只选择带有y &gt; 200的点:

  1. 像您一样执行分割,但这次只使用选定的点子集。

这是使用所选点正确拟合平面的可视化:

【讨论】:

  • 太棒了!非常感谢。你的帖子真的很有用。由于我的主要目标是获取 3D 对象/容器的中心点/质心,如果您查看最近发布的 *.pcd 文件(afterApplyingPassthrough),我仅使用 passthroughfilter 来丢弃地板点和轮子,假设与地板的偏移总是众所周知的。如上 *.pcd 所示应用直通后。您推荐哪种方法用于中心点?
  • 我试图计算剩余对象的质心(没有地板点和轮子) 1) pcl::compute3DCentroid(*cloudExtracted, centroid) 返回 xyz(44.0321, -300.226, 1616.87) 另一个想法是找到剩余对象的 2) 边界框。还有一个问题,您使用的是哪种开发环境。看起来不错(eclipse、VStudio 等)
  • @2017_John 我认为您应该将中心点问题作为新的 S.O.问题以便其他人可以阅读并回答;不仅是阅读这篇文章的人。我很乐意在这里回答,但我认为一个新问题更符合 S.​​O.工作。
  • 为了使用点云,我使用:my own python library(我仍在设计 api,因此还没有为您的用户准备好)、PCL 和CloudCompare。 CloudCompare 是以非编程方式处理点云的最佳选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
相关资源
最近更新 更多