手眼标定的问题

本教程旨在描述手眼标定所解决的问题,并介绍手眼标定所需的机器人位姿和坐标系。如果您不熟悉(机器人)位姿和坐标系,请参阅 位置、方向和坐标变换

机器人如何拾取物体?

让我们从一个不涉及到相机的机器人开始。它的两个主要坐标系是:

  1. 机器人基坐标系

  2. 末端执行器坐标系

../../../../_images/hand-eye-robot-ee-robot-base-coordinate-systems.png

为了能够抓取物体,机器人控制器需要知道物体相对于机器人基坐标系的位姿(位置和方向)。它还需要了解机器人的几何形状。


综合这些信息足以计算出将末端执行器/夹爪移向目标物体所需的关节角度。

../../../../_images/hand-eye-robot-robot-to-object.png

假如物体相对于机器人的位姿是未知的,那么这就是Zivid 3D视觉发挥作用的地方了。

../../../../_images/hand-eye-robot-robot-to-object-with-camera.png

假如物体相对于机器人的位姿是未知的,那么这就是Zivid 3D视觉发挥作用的地方了。

../../../../_images/hand-eye-robot-robot-to-object-with-camera-on-arm.png

Zivid相机输出的点云是基于相机坐标系的。该坐标系的原点在Zivid成像器镜头(内部2D相机)的中间。机器视觉软件可以在此数据点集合上运行检测和定位算法,确定物体在Zivid相机坐标系中的位姿 (\(H^{CAM}_{OBJ}\))。

../../../../_images/hand-eye-full-circle-system.png

Zivid 相机现在可以在其视野范围内看到物体,但这是相对于其自身坐标系而言的。


为了使机器人能够拾取物体,需要将物体的坐标从相机坐标系转换到机器人基座坐标系。

../../../../_images/hand-eye-robot-robot-to-object-and-camera-to-object.png

实现这一功能的坐标变换为:

  • \(H^{ROB}_{CAM}\) - 相机相对于机器人基座的位姿

这种变化是恒定的,是手眼标定的结果。


位姿关联完成后,就可以通过关联圈中的任意一种位姿数据计算出另一位姿。在这里,物体相对于机器人的位姿,是通过将相机相对于机器人的位姿与物体相对于相机的位姿通过后乘法得到的:

\[H^{ROB}_{OBJ}=H^{ROB}_{CAM} \cdot H^{CAM}_{OBJ}\]
../../../../_images/hand-eye-eye-to-hand-all-poses.png

Zivid 相机现在可以在其视野范围内看到物体,但这是相对于其自身坐标系而言的。


为了使机器人能够拾取物体,需要将物体的坐标从相机坐标系转换到机器人基座坐标系。

../../../../_images/hand-eye-robot-robot-to-object-and-camera-to-object-on-arm.png

实现这一功能的坐标变换为:

  • \(H^{EE}_{CAM}\) - 相机相对于末端执行器的位姿

  • \(H^{ROB}_{EE}\) - 末端执行器相对于机器人基座的位姿

前者是恒定的,是手眼标定的结果;而后者是已知的,由机器人控制器提供。


一旦位姿闭环形成,就可以通过闭环中的其他位姿计算出其中某一位姿。在本例中,即为物体相对于机器人的位姿:

\[H^{ROB}_{OBJ}=H^{ROB}_{EE} \cdot H^{EE}_{CAM} \cdot H^{CAM}_{OBJ}\]
../../../../_images/hand-eye-eye-in-hand-all-poses.png

现在我们已经定义了手眼标定的问题,让我们看看 手眼标定解决方案.