HALCON——手眼标定

本章介绍如何在 Windows 系统下通过梅卡曼德提供的例程进行手眼标定。梅卡曼德提供如下两个例程:

  • determine_calibration_poses.hdev:用于获取进行手眼标定时的 标定位姿

  • perform_hand_eye_calibration.hdev:用于进行手眼标定。

注解

  • 目前仅适配六轴机器人。

  • 使用 UHP 系列相机进行手眼标定时, 拍摄模式 必须为 Camera1

使用前提

使用 HALCON 进行手眼标定前,准备工作如下:

  1. 确认机器人精度无误,且机器人可正常使用。

  2. 准备相机随附的标定板, 安装相机与标定板

  3. 下载并安装 Mech-Eye SDK

  4. 确认 2D 图 与深度图的质量 符合要求。

  5. 确认 相机内参 符合要求。

  6. 下载 HALCON 例程 ,依次单击 Code ‣ Download ZIP 即可下载。

修改例程

使用 determine_calibration_poses.hdev 获取标定位姿后,需使用 perform_hand_eye_calibration.hdev 进行手眼标定。

两个例程中的以下信息需保持一致:

  • 连接的相机

  • 标定板型号

另外,获取位姿前,需设置 robot_pose.json 文件中的欧拉角类型。

选择同一台相机

运行例程前,需修改例程中设置的相机,保证两个例程运行时连接同一台相机。设置步骤如下:

  1. 在 HALCON 中打开例程:运行 HALCON,将例程拖拽至 HALCON 的 程序窗口 中。

  2. 选中 程序窗口info_framegrabber 算子所在的行,单击工具栏中的 step_over 按钮或单击键盘上的 F6 ,运行该算子。

  3. 双击 控制变量 区域的 DeviceInfos ,可查看所有可连接的相机。

    ../../_images/camera_information_1.png
  4. 选中相机并双击,复制 unique_name:user_name: 的相机名。

    ../../_images/camera_information_3.png
  5. 定位至如下命令行,将 MechEye 替换为 unique_nameuser_name

    DeviceInfo := 'MechEye'
    
  6. 单击工具栏中的 run 按钮或单击键盘上的 F5 ,运行例程。

设置标定板型号

设置标定板型号的步骤如下:

  1. 在 HALCON 中打开例程:运行 HALCON,将例程拖拽至 HALCON 的 程序窗口 中。

  2. 设置标定板型号。默认标定板型号为 BDB-5;如使用其他标定板,定位至如下算子,将 BDB-5 替换为对应的 标定板型号

    set_framegrabber_param (AcqHandle, 'BoardType', 'BDB-5')
    

设置欧拉角类型和单位

使用 determine_calibration_poses.hdev 获取的标定位姿需输入至 robot_pose.json 文件中, robot_pose.json 文件中默认的欧拉角类型为 sxyz ,默认的欧拉角单位为角度。请执行以下步骤设置欧拉角类型与格式:

  1. 打开 robot_pose.json 文件。

  2. 设置欧拉角类型。定位至如下命令行,将 sxyz 替换为所用机器人的欧拉角类型。例程已支持的欧拉角类型请参考 机器人欧拉角类型

    "EulerType":"sxyz"
    
  3. 设置欧拉角单位。如需输入以弧度为单位的欧拉角,定位至如下命令行,将 true 替换为 false

    "FromDegree":true
    
  4. 保存 robot_pose.json 文件。

获取标定位姿

流程图

../../_images/extri_teach_flow.png

步骤

进行手眼标定前,需获取至少 15 组的标定位姿。获取标定位姿的步骤如下:

  1. 单击工具栏中的 run 按钮或单击键盘上的 F5 ,运行例程。例程运行到 read_char (WindowHandle, Char, ReCode) 时将暂停运行,需手动输入指令继续运行例程。

    提示

    如相机连接不成功,需检查相机是否已被 Mech-Eye Viewer 或其他 GenICam 客户端连接。

  2. 使用示教器移动机器人至合适位置。

  3. 输入 P ,相机采集图像。

    • 如标定板只有部分在视野之内或不在视野之内,请移动机器人,并重新采集图像。

    • 如标定板全部在视野之内,请执行下一步。

  4. 输入 T ,相机采集包含特征识别结果的图像。

    • 如相机无法识别标定板上的圆,HALCON 将不返回图像。此时请移动机器人,重新采集原始图像与包含特征识别结果的图像。

    • 如相机可以识别标定板上的圆,HALCON 将显示包含特征识别结果的图像(如下图所示),请执行下一步。

      ../../_images/calib_sample.png
  5. 查看机器人示教器,将机器人此时的位姿输入 robot_pose.json 文件中。

    提示

    • 请将该位姿存入示教器中。进行手眼标定时,可直接使用示教器中已保存的位姿移动机器人。

  6. 重复步骤 2~5,继续获取位姿。

  7. 确认获取至少 15 组位姿后,采集数据结束,输入 Q ,退出程序。

  8. 设置 robot_pose.json 文件中标定位姿个数。打开 robot_pose.json 文件,定位至如下命令行,将 15 替换为实际获取的标定位姿个数。

    "pose_count":15
    

进行手眼标定

获取机器人标定位姿后,运行 perform_hand_eye_calibration.hdev 例程,开始手眼标定。

检查相机安装方式

进行手眼标定前需设置相机安装方式。

默认相机安装方式为 Eye in Hand;如相机安装方式为 Eye to Hand,定位至如下算子,将 EyeInHand 替换为 EyeToHand

set_framegrabber_param (AcqHandle, 'CalibrationType', 'EyeInHand')

切换坐标系

例程中包含切换相机输出点云的坐标系的算子,通过该算子可直接输出机器人坐标系下的点云。

默认设置为不切换坐标系;如需切换至机器人坐标系,请在 captureTranformedPointCloud 函数中,定位至如下算子,并将 false 替换为 true

set_framegrabber_param (AcqHandle, 'Scan3dCoordinateTransformEnable',false)

步骤

手眼标定需执行如下步骤:

  1. 单击工具栏中的 run 按钮或单击键盘上的 F5 ,运行例程。例程运行至 stop 行后,将暂停运行。

  2. 将机器人移动至 robot_pose.json 文件中的标定位姿。

    提示

    请按 robot_pose.json 文件中的位姿顺序移动机器人,否则将导致后续外参计算失败。

  3. 单击工具栏中的 run 按钮或单击键盘上的 F5 ,运行例程,相机采集图像。

  4. 采集图像结束后,查看 控制变量 中的 CollectResult 值。

    • 如显示 SUCCESS,请进行下一步;

    • 如发生报错,请根据 错误码 排查问题,再重新获取标定位姿。

  5. 界面提示“Move the robot to the next calibration pose”,此时请重复执行步骤 2~3。

    提示

    机器人到达 robot_pose.json 文件中的所有位置后,再运行例程时,将自动计算外参。

  6. 查看 控制变量 中的 CalibResult 值。

    • 如显示 SUCCESS,则手眼标定成功。请在例程所在文件夹内查看外参文件 Extrinsics.txt 与转换坐标系后的点云;

    • 如发生报错,请根据 错误码 排查问题,再重新获取标定位姿。

机器人欧拉角类型

标定例程中已支持以下欧拉角类型与四元数的转换。

输入顺序

欧拉角类型

机器人品牌

Z-Y’-Z’’

rzyz

Kawasaki(川崎)

Z-Y’-X’’

rzyx

ABB

KUKA(库卡)

X-Y-Z

sxyz

FANUC(发那科)

YASKAWA(安川)

Rokae(珞石)

UR(优傲)

X-Y’-Z’’

rxyz

/

Z-X’-Z’’

rzxz

/

注解

  • 欧拉角类型相同时,机器人欧拉角显示的顺序可能不同。请按照上表的输入顺序输入欧拉角。

  • 如所用机器人的欧拉角类型不在上表内,需要您自行添加该欧拉角类型与四元数的转换。请在 perform_hand_eye_calibration.hdev 例程的 euler_to_quad 函数中,参照已有代码添加转换。

标定参数说明

本节介绍进行手眼标定时使用的参数。

BoardType

该参数用于设置使用的标定板型号。

值列表及说明:

说明

BDB-5

标定板到相机的推荐距离为 < 0.6m

BDB-6

标定板到相机的推荐距离为 0.6~1.5m

BDB-7

标定板到相机的推荐距离为 > 1.5m

OCB-005

仅用于对精度要求高,且为 Eye to Hand 安装方式的项目

OCB-010

OCB-015

OCB-020

CGB-020

标定板到相机的推荐距离为 < 0.6m

CGB-035

标定板到相机的推荐距离为 0.6~1.5m

CGB-050

标定板到相机的推荐距离为 > 1.5m

ExtrinErrCode

该只读参数用于确认手眼标定过程中的状态码和错误码。

状态码

说明

SUCCESS

执行成功。

POSE_INVALID

位姿格式不正确,请输入四元数。

IMAGE2D_EMPTY

2D 图无效。

FIND_CORNERS_FAIL

2D 图特征识别失败,请调节 2D 图参数调节 以获取符合要求的 2D 图。

DEPTH_EMPTY

深度图无效。

CORNERS_3D_INVALID

深度图特征识别失败,请调节 3D参数 以获取符合要求的深度图。

POSES_INSUFFICIENT

位姿数量不足,请输入至少 15 组位姿。