六轴机器人手眼标定

当您获得本文档时,可点击下载 HandEyeCalibration.zip 压缩包。解压后其内容应包括:

image-20240411103902463

  • Elite_RobotData:Elite 机器人 EC66 机器人模型文件。

  • EyeInHand_Data:眼在手上标准数据录制的案例。

  • EyeToHand_Data:眼在手外标准数据录制的案例。

  • HandEyeCalibration.xml :被动控制手眼标定 xml。

    HandEyeCalibration.dashboard.xml 为相应的交互面板配置。

  • Elite_HandEyeCalibration.xml:主动控制手眼标定 xml(案例代码中为 Elite 品牌机器人)。

    Elite_HandEyeCalibration.dashboard.xml 为相应的交互面板配置。

  • HandEyeCalibration_offline.xml:离线数据标定 xml。

    HandEyeCalibration_offline.dashboard.xml 为相应的交互面板配置。

手眼标定介绍

手眼标定是指在相机安装完成后,计算出相机同机器人的坐标转换矩阵,目的是根据这个坐标转换矩阵将相机坐标系下拍摄的点云转换到机器人坐标系下。根据相机安装方式,手眼标定分为两种情形:

  • 眼在手上(EyeInHand):相机安装在机械臂末端,标定板固定位置不动,标定相机和机械臂末端的转换矩阵。手眼组合体变换姿态拍摄标定板。

    image-20240403110428290

  • 眼在手外(EyeToHand):相机(吊顶)固定安装,标定板固定在机械臂上,标定相机和基底坐标系的关系矩阵。机械臂变换姿态,相机拍摄不同姿态的标定板。

    image-20240403110446351

手眼标定准备

在开始标定前,需要做以下5项准备工作:

  1. 准备棋盘格标定板

  2. 相机安装方式

  3. 确定机器人的控制方式

  4. 确定机器人的欧拉角旋转方式

  5. 确认相机设置

棋盘格标定板

准备棋盘格标定板时,需要确认以下内容:

  • 棋盘格的行列数应为一奇一偶

  • 确认棋盘格的尺寸

  • 确保棋盘格的面积符合相机的视野范围

以下是 RVS 手眼标定支持的标定板的示例图片。

image-20240319150024297

相机安装方式

相机的安装方式分为两种,不同安装方式需要准备不同的支架。

  • 眼在手上(Eye-in-Hand):相机安装在机器人的六轴法兰上,准备好可固定相机在六轴法兰上的支架。

    image-20240403110927476

  • 眼在手外(Eye-to-Hand):相机(通常是吊顶安装)固定在特定位置,标定板固定在机器人的六轴法兰上,准备好可固定棋盘格标定在六轴法兰上的支架。

    image-20240403110950446

机器人的控制方式

  • 主动控制:RVS 支持 AUBOEliteJakaUR 机器人主动控制,添加相应资源算子,配合 RobotOperator 即可获取机器人 TCP 和关节值。

  • 被动控制

    • 确定 TCP/IP 通讯协议。机器人作为客户端可以发送字符串:

      ROBOT_TCP X Y Z RX RY RZ \n
      ROBOT_JOINTS J1 J2 J3 J4 J5 J6 \n
      CAPTURE \n
      

      说明

      命令分隔符和结束符可以在通讯算子中选择。手眼标定案例中使用 HandEyeTCPServer 算子,请参考算子文档进行调整。

      RVS 默认单位为米和弧度,可在机器人端转换或者 RVS 中添加 ScalePoseScaleJoint算子进行单位转换。

机器人旋转方式

RVS 默认机器人旋转方式为不定轴 Z-Y-X 。若机器人与 RVS 默认旋转顺序不一致,可在机器人端进行顺序转换或在 RVS 中添加 ConvertPose 算子中 EulerToPose 类型进行转换。

相机设置

  1. 相机是否正常连接,若连接失败,请参考 RVS 连接不上相机怎么办?

  2. 相机采图是否正常,可通过调整参数进行调整,如曝光。

  3. 相机深度、彩色图标定文件是否正常。

眼在手上(被动控制)操作

打开 HandEyeCalibration.xml

image-20240408172630575

参数设置

在交互面板中输入棋盘格行数、棋盘格列数、棋盘格边长(毫米)、标定的模式选择眼在手上

注意:参数修改完成后需要进行回车确认。

image-20240410145812085

连接相机

点击 RVS 运行按钮启动工程, 点击交互面板中打开相机连接相机资源。相机资源变为蓝色,则表示连接成功,同时在日志视图中显示连接的相机信息。

若连接失败,请参考 RVS 连接不上相机怎么办?

若遇到红色报错:

  • 通道为 rvs_tycamera ,消息为 no TyCamera avaliable ,这意味着您上次关闭没有将循环显示功能关闭就保存退出,请点击循环采集 先关闭循环显示,再打开打开相机 后重新点击循环采集 循环显示。

  • 通道为 rvs_tycamera,消息为 tycam 还未准备好,请点击 TyCameraResource 算子将相机型号相机ID清空。

image-20240320105341264

采集标定板图像

点击循环采集实时刷新图像。

眼在手上拍摄标定板时需确保:

  • 确认标定板的角点清晰,不能有重叠或者间隙,行列一奇一偶。

  • 标定板在标定过程中位置始终固定,不能有任何的旋转移动,并且保证它可以完整的出现在画面内。

  • 注意灯光对于标定板的影响,角点处不能有过曝的情况,也不需要特别暗。

  • 位置姿态多进行变动,姿态一定要丰富,高度有多层次的变化,可以使标定板出现在图幅的 4 个边角处,有多种姿态的旋转。

  • 尽可能多地核对每一组文件夹下的 tcp、joints 数据,是否与发送数据时机器人控制面板上的数字一致。

  • 组数一般在 18 组以上,20-25 组为宜。

image-20240320110150586

采集机器人 TCP

在保证标定板完整的出现在 2D 视图的视野中后,控制机器人连续发送 ROBOT_TCP、ROBOT_JOINTS、CAPTURE 字符触发保存数据功能(此处需机器人工程师协助完成)。请参考 HandEyeTCPSever 通讯算子文档。

image-20240320110418809

保存数据

右击 HandEyeCalibration 算子,打开手眼标定面板。点击保存,成功保存后,将在日志中看到保存成功的提示,并且手眼标定面板会新增一条数据。包含机器人TCP、标定板坐标和图像,若保存有误可点击删除按钮进行删除。重复上述步骤,采集 18-25 组。

image-20240320111039000

计算结果

数据采集完成后,在手眼标定面板中点击计算,此时,在日志视图中可以查看结果坐标和误差。

image-20240320112805930

在手眼标定面板中,可双击查看手眼标定结果重投影到每张图像上的像素误差。

image-20240320112851630

导出结果

点击手眼标定面板中导出,将数据与结果导出。image-20240320113211484

导出文件包含采集的数据,结果坐标和彩色相机信息。文件夹显示如下:

image-20240320113406024

眼在手外(被动控制)操作

打开 HandEyeCalibration.xml

image-20240408172643582

参数设置

在交互面板中输入棋盘格行数、棋盘格列数、棋盘格边长(毫米)、标定的模式选择眼在手外

注意:参数修改完成后需要进行回车确认。

image-20240408170949352

连接相机

点击 RVS 运行按钮启动工程, 点击交互面板中打开相机连接相机资源。相机资源变为蓝色,则表示连接成功,同时在日志视图中显示连接的相机信息。

若连接失败,请参考 RVS 连接不上相机怎么办?

若遇到红色报错:

  • 若遇到红色报错:

    • 通道为 rvs_tycamera ,消息为 no TyCamera avaliable ,这意味着您上次关闭没有将循环显示功能关闭就保存退出,请点击循环采集 先关闭循环显示,再打开打开相机 后重新点击循环采集 循环显示。

    • 通道为 rvs_tycamera,消息为 tycam 还未准备好,请点击 TyCameraResource 算子将相机型号相机ID清空。

image-20240408170908849

采集标定板图像

点击循环采集实时刷新图像。

眼在手外拍摄标定板时需确保:

  • 确认标定板的角点清晰,不能有重叠或者间隙,行列一奇一偶。

  • 相机在标定过程中位置始终固定,不能有任何的旋转移动,并确保能完整拍摄到标定板。

  • 注意灯光对于标定板的影响,角点处不能有过曝的情况,也不需要特别暗。

  • 位置姿态多进行变动,姿态一定要丰富,高度有多层次的变化,可以使标定板出现在图幅的 4 个边角处,有多种姿态的旋转。

  • 尽可能多地核对每一组文件夹下的 tcp、joints 数据,是否与发送数据时机器人控制面板上的数字一致。

  • 组数一般在 18 组以上,20-25 组为宜。

image-20240408142508242

采集机器人 TCP

在保证标定板完整的出现在 2D 视图的视野中后,控制机器人连续发送 ROBOT_TCP、ROBOT_JOINTS、CAPTURE 字符触发保存数据功能(此处需机器人工程师协助完成)。请参考 HandEyeTCPSever 通讯算子文档。

image-20240408142707860

成功触发手眼标定算子后,打开手眼标定算子的图像参数,可以在 2D 视图中查看标定板角点。

image-20240408143803623

保存数据

右击 HandEyeCalibration 算子,打开手眼标定面板。点击保存,成功保存后,将在日志中看到保存成功的提示,并且手眼标定面板会新增一条数据。包含机器人TCP、标定板坐标和图像,若保存有误可点击删除按钮进行删除。重复上述步骤,采集 18-25 组。

image-20240408142933804

计算结果

数据采集完成后,在手眼标定面板中点击计算,此时,在日志视图中可以查看结果坐标和误差。

image-20240408145148488

在手眼标定面板中,可双击查看手眼标定结果重投影到每张图像上的像素误差。

image-20240408145236817

导出结果

点击手眼标定面板中导出,将数据与结果导出。image-20240408145504278

导出文件包含采集的数据,结果坐标和彩色相机信息。文件夹显示如下:

image-20240408145629877

眼在手上(主动控制)操作

打开 Elite_HandEyeCalibration.xml

image-20240408161720273

参数设置

在交互面板中输入棋盘格行数、棋盘格列数、棋盘格边长(毫米)、标定的模式选择眼在手上

注意:参数修改完成后需要进行回车确认。

image-20240408165739910

连接相机

点击 RVS 运行按钮启动工程, 点击交互面板中启动相机连接相机资源。相机资源变为蓝色,则表示连接成功,同时在日志视图中显示连接的相机信息。

若连接失败,请参考 RVS 连接不上相机怎么办?

若遇到红色报错:

  • 通道为 rvs_tycamera ,消息为 no TyCamera avaliable ,这意味着您上次关闭没有将循环显示功能关闭就保存退出,请点击实时采集 先关闭循环显示,再打开启动相机 后重新点击实时采集 循环显示。

  • 通道为 rvs_tycamera,消息为 tycam 还未准备好,请点击 TyCameraResource 算子将相机型号相机ID清空。

image-20240410152827752

连接机器人

点击 EliteRobotResource算子,填写机器人名称、机器人模型文件、机器人IP、机器人端口。

image-20240408162558509

点击交互面板中启动机器人,机器人资源变为蓝色后,表示机器人启动成功,同时在 3D 视图中显示当前机器人姿态。

image-20240408162722712

采集标定板和机器人TCP

点击实时采集,在 2D 视图中实时刷新图像。

眼在手上拍摄标定板时需确保:

  • 确认标定板的角点清晰,不能有重叠或者间隙,行列一奇一偶。

  • 标定板在标定过程中位置始终固定,不能有任何的旋转移动,并确保标定板能完整的出现在画面内。

  • 注意灯光对于标定板的影响,角点处不能有过曝的情况,也不需要特别暗。

  • 位置姿态多进行变动,姿态一定要丰富,高度有多层次的变化,可以使标定板出现在图幅的 4 个边角处,有多种姿态的旋转。

  • 尽可能多地核对每一组文件夹下的 tcp、joints 数据,是否与发送数据时机器人控制面板上的数字一致。

  • 组数一般在 18 组以上,20-25 组为宜。

2

点击标定采集完成一组数据采集。

3

保存/计算/导出结果

保存/计算/导出结果与眼在手上(被动控制)操作一致,请参考该章节继续操作。

眼在手外(主动控制)操作

打开Elite_HandEyeCalibration.xml

image-20240408161720273

参数设置

在交互面板中输入棋盘格行数、棋盘格列数、棋盘格边长(毫米)、标定的模式选择眼在手外

注意:参数修改完成后需要进行回车确认。

image-20240408161816381

连接相机

点击 RVS 运行按钮启动工程, 点击交互面板中启动相机连接相机资源。相机资源变为蓝色,则表示连接成功,同时在日志视图中显示连接的相机信息。

若连接失败,请参考 RVS 连接不上相机怎么办?

若遇到红色报错:

  • 通道为 rvs_tycamera ,消息为 no TyCamera avaliable ,这意味着您上次关闭没有将循环显示功能关闭就保存退出,请点击实时采集 先关闭循环显示,再打开启动相机 后重新点击实时采集 循环显示。

  • 通道为 rvs_tycamera,消息为 tycam 还未准备好,请点击 TyCameraResource 算子将相机型号相机ID清空。

image-20240408162350046

连接机器人

点击 EliteRobotResource算子,填写机器人名称、机器人模型文件、机器人IP、机器人端口。

image-20240408162558509

点击交互面板中启动机器人,机器人资源变为蓝色后,表示机器人启动成功,同时在 3D 视图中显示当前机器人姿态。

image-20240408162722712

采集标定板和机器人TCP

点击实时采集,在 2D 视图中实时刷新图像。

眼在手外拍摄标定板时需确保:

  • 确认标定板的角点清晰,不能有重叠或者间隙,行列一奇一偶。

  • 相机在标定过程中位置始终固定,不能有任何的旋转移动,并确保能完整拍摄到标定板。

  • 注意灯光对于标定板的影响,角点处不能有过曝的情况,也不需要特别暗。

  • 位置姿态多进行变动,姿态一定要丰富,高度有多层次的变化,可以使标定板出现在图幅的 4 个边角处,有多种姿态的旋转。

  • 尽可能多地核对每一组文件夹下的 tcp、joints 数据,是否与发送数据时机器人控制面板上的数字一致。

  • 组数一般在 18 组以上,20-25 组为宜。

image-20240408162905824

点击标定采集完成一组数据采集。

image-20240408163341158

成功触发手眼标定算子后,打开手眼标定算子的图像参数,可以在 2D 视图中查看标定板角点。

image-20240408164130199

保存数据/计算/导出结果

保存/计算/导出结果与眼在手外(被动控制)操作一致,请参考该章节继续操作。

手眼标定误差分析

不同机器人配合不同的相机类型会有不同的精度表现,如果标定结果不太理想,可参考下述几个部分进行检查。

image-20240411102729201

硬件问题

  1. 棋盘格标定板尺寸不准确,可使用游标卡尺进行测量。

  2. 棋盘格标定板有污损。

  3. 棋盘格拍摄角点不清晰,不可以过曝或过暗。

  4. 机器人本身的精度误差较大。

数据问题

  1. 保存数据错乱,即拍照位和保存的 TCP 不对应。

  2. 数据单位未与 RVS 同步。

  3. 机器人欧拉角旋转顺序未与 RVS 同步。

操作问题

  1. 机器人位姿改变过小。

  2. 改变机器人位姿后,机械臂未稳定就进行数据采集。

离线数据标定

打开 HandEyeCalibration_offline.xml

image-20240411095621140

参数设置

在交互面板中选择手眼标定时导出标定数据的目录和彩色图标定文件。填写棋盘格行数、棋盘格列数、棋盘格边长(毫米)、选择标定的模式。

注意:参数修改完成后需要进行回车确认。

image-20240411102859664

操作流程

参数填写完成后,点击 RVS 运行按钮,点击交互面板中遍历。在 2D 视图中输出一组数据中彩色图和标定板角点。

image-20240411100459171

右击手眼标定算子,在菜单栏中选择手眼标定面板,点击保存,即保存一组离线数据。

image-20240411100746512

再次点击遍历,点击手眼标定面板中保存,保存第二组数据,重复操作。当保存多组数据后,点击计算,在日志视图中显示标定结果和标定误差。

image-20240411101013637