计算三维数据中机器人定位的中心点

时间:2017-02-22 15:14:00

标签: image-processing computer-vision point-cloud-library robotics point-clouds

我正在尝试找到一种可靠的方法来计算容器的角点。从这些角点的想法是计算机器人定位的容器的中心点,这意味着计算的中心点将是机器人的目的地,以便挑选容器。为此,我正在寻找任何计算角点的建议,或者可能是直接计算中心点的可能性。到目前为止,PCL库C / C ++用于处理3D数据。 下图是容器的屏幕截图 提前致谢。

afterApplyingPassthrough

2 个答案:

答案 0 :(得分:2)

我做了以下事情:

  • 我将图像二值化(黑色像素= 0,绿色像素= 1),
  • 反转图像(黑色像素= 1,绿色像素= 0),
  • 用3x3内核N次侵蚀图像并用相同的内核M次扩张。

左:N = 2,M = 1;右:N = 6,M = 6

enter image description here enter image description here

之后:

  • 我计算了所有非零区域的轮廓和
  • 删除了包围整个图像的轮廓。

这是剩下的轮廓:

enter image description here enter image description here

我不知道你的情况下“典型”的输入图像是怎样的。由于我只能访问一个样本图像,我宁愿不推测适合您的“一般解决方案”。但要解决这种特殊情况,您可以通过以下方式分析每个轮廓:

  • 计算最适合轮廓的旋转矩形(需要类似minAreaRect from OpenCV的东西)
  • 计算矩形和轮廓内部区域
  • 如果轮廓区域与旋转的边界矩形区域之间的差异很小,则轮廓具有近似矩形的形状
  • 找到既是矩形又满足其他条件的轮廓(例如:容器的典型区域)。假设这属于容器并计算其中心。

我并不是说这是一个在现实场景中运行良好的解决方案。它也不快。您应该将其视为“草图”,以显示如何提取一些有用的信息。

答案 1 :(得分:1)

我认为车轮保持推车与地板的距离已知,您可以识别地板。过滤掉距离地面太近的所有点(这将除去车轮和除了推车之外的所有点,这将有助于限制数据并简化后续步骤。

如果您隔离购物车,您可以应用简单的平均点(质心),如果不精确,您可以尝试找到隔离车的bounding box(主要方向的最小最小值)和然后取出那个边界框的质心(这应该更精确,但由于顶部手柄仍然需要一个轻微的垂直偏移)。

如果您无法隔离购物车或其他方法效果不佳,您可以尝试使用PCL sample consensus专门使用SACMODEL_LINE。这将是一个涉及的策略,但会给出非常可靠的结果,基本上贯穿并找到每一行并从云中减去其成员,以便找到下一个最佳线。获得4个主要购物车行后,使用其参数查找质心。 *这对于购物车内或购物车上的随机物品以及各种尺寸的推车(假设它们总是具有线性垂直壁)也是强大的