查找2d和3d坐标之间的平移

时间:2018-07-06 08:14:45

标签: python opencv math robotics coordinate-systems

我有一个任务可以在图像中找到对象。

object1

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

2 个答案:

答案 0 :(得分:0)

假设:

  • 您可以找到以相机为中心的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的答案。

答案 1 :(得分:0)

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

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

您也可以自己计算:

point3d` = RotationMatrix *(point3d-TranslationVector)

TranslationVector和RotationMatrix是您手臂的外部参数