3D数据中机器人定位的中心点计算

Calculation of center point for the localization of robot in 3D data

我正在尝试寻找一种可靠的方法来计算容器的角点。从这些角点的思路就是计算出集装箱的中心点来进行机器人的定位,也就是说计算出的中心点将是机器人的目的地,以便于拾取集装箱。为此,我正在寻找任何计算角点的建议,或者可能会直接计算中心点。到目前为止,PCL 库 C/C++ 用于处理 3D 数据。 下图是容器的截图。
提前致谢。

afterApplyingPassthrough

我做了以下事情:

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

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

之后:

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

这是剩下的轮廓:

我不知道 "typical" 输入图像在您的情况下是什么样子。由于我只能访问一张示例图片,因此我不想推测 "general solution" 是否适合您。但是要解决这种特殊情况,您可以按以下方式分析每个轮廓:

  • 计算最适合您轮廓的旋转矩形(您需要类似于 minAreaRect from OpenCV 的东西)
  • 计算矩形和轮廓内部的面积
  • 如果轮廓面积与旋转后的外接矩形面积之差很小,则轮廓近似为矩形
  • 找到既是矩形又满足其他条件(例如:容器的典型面积)的轮廓。假设这属于容器并计算它的中心。

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

我假设轮子使手推车与地板保持已知的偏移量,并且您可以识别地板。过滤掉所有离地面太近的点(这将移除轮子和除手推车以外的所有东西,这将有助于限制数据并简化后续步骤。

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

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