【问题标题】:Finding the translation between 2d and 3d coordinate查找 2d 和 3d 坐标之间的转换
【发布时间】:2018-07-06 08:14:44
【问题描述】:

我的任务是在图像中找到对象。

并将相机中的 2d 坐标 (x,y) 转换为机械臂的 3d 坐标。现在我可以用我的opencv python代码找到2d坐标,用我的机器人程序的教学方法找到3d坐标,但在不同的原点。但是,我用来将 2d 坐标转换为 3d 坐标的方法仍然是错误的。由于机械臂和摄像头的原点不是同一点。所以我想问如果原点不一样,我应该使用什么公式/代码将2d坐标(x,y)转换为3d坐标(x,y,z)。

【问题讨论】:

  • 据我了解,您可以找到以相机为中心的 3D 坐标,但是您需要获取以手臂为中心的坐标吗?我说的对吗?
  • 是的,没错。

标签: python opencv math robotics coordinate-systems


【解决方案1】:

假设:

  • 您可以找到以相机为中心的 3D 坐标
  • 您知道相机“原点”相对于手臂的坐标
  • 您知道相机的坐标系相对于手臂坐标系中的给定轴旋转了多少度。
  • 您需要获取手臂中心坐标。

您只需要应用称为 roto-translation刚性转换。 为了简化下面的示例代码,我们还假设两个坐标系的 Z 轴相互平行,垂直于“桌子”,并且方向相同。因此,唯一可能的旋转是围绕 Z 轴。

x, y, z = get_3d(x, y)

x -= camera_origin_x_in_arm_coord_system
y -= camera_origin_y_in_arm_coord_system
z -= camera_origin_z_in_arm_coord_system

arm_x = x*cos(theta) - y*sin(theta)
arm_y = x*sin(theta) + y*cos(theta)
arm_z = z

更复杂的旋转请参考this question的答案。

【讨论】:

  • 感谢您的回答。但是,我了解所有方法,但我不知道如何在等式中找到要替换的 theta。我需要手工测量还是有办法计算?
  • 您可以手动测量它,或者,如果您能够用您的凸轮识别手臂,您应该能够通过将您的凸轮测量的坐标与您“输入”的坐标对峙来推断 theta在你的怀里。
【解决方案2】:

您需要将您的点转换为另一个坐标系。

如果你以某种方式计算变换矩阵,你可以使用 cv.transform() 方法。

你也可以自己计算:

point3d` = RotationMatrix * (point3d - TranslationVector)

TranslationVector 和 RotationMatrix 是你手臂的外在参数

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2018-05-25
    • 2011-09-02
    • 2015-01-01
    • 2015-06-29
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多