当您获得本文档时,可至 RVS 开发者社区下载 FourAxisCalibration.zip 四轴机器人标定教程配套数据。解压后其内容应包括:

Four1

  • TCP_test_manual.xml :用于通讯测试。

  • FourAxisRobotCalibration.xml:用于手眼标定的数据录制、矩阵计算、标定结果验证。

  • hand_eye_data_manual :手眼标定中标准数据录制的案例。

  • hand_eye_date:空目录,手眼标定过程中数据保存和读取的目录。

案例所有使用到的文件均保存在 FourAxisCalibration.zip 下,请放在 RVS 安装目录下的 projects/runtime 内运行。

说明

本文档所使用 RVS 软件版本为 1.5.468 ,若在使用中出现问题或版本不兼容问题,请及时与我们反馈,发送邮件 rvs-support@percipio.xyz !

图漾科技官方视频号:RVS 四轴机器人手眼标定视频教程

四轴机器人手眼标定

手眼标定介绍

手眼标定是指在相机安装完成后,根据点在机器人坐标系下的坐标和相机坐标系下的坐标,求解出相机坐标系到机器人坐标系下的转换矩阵。目的是根据这个坐标转换矩阵将相机坐标系下拍摄的点云转换到机器人坐标系下。

四轴机器人手眼标定:

  • 模式:HandToEye,相机(吊顶)固定安装,与机器人基座坐标系相对固定。

  • 抓取物:可用纸箱或者木块等容易识别和定位物体几何特征点(比如木块上表面的中心点)的物体。

    建议

    将抓取物的特征点标记出来,便于机器人工具末端校准,以及判断相机点云识别。

    如下图所示:

    Four2

手眼标定的流程分为以下步骤:

  • 通讯测试:确保 RVS 软件能正常启动,并和机器人正常建立通讯,为接下来的数据录制做准备。

  • 连接相机:确保相机能在RVS软件中正常连接。

  • 存储数据:保存多组抓取点在机器人坐标系下的坐标和相机坐标系下的坐标。

  • 计算标定:计算标定结果。

  • 验证标定结果:使用标定结果移动机器人验证标定是否准确。

通讯测试

通讯测试的目的时确保 RVS 软件能正常启动,并和机器人正常建立通讯,为接下来的数据录制做准备。在本手册中使用的 HandEyeTCPServer 手眼标定TCP服务器 ,在 RVS 的分线程中启动一个 TCP server 服务端,等待机器人建立连接并进行 tcp 通讯。

操作流程:

说明

可直接使用 FourAxisRobotCalibration/路径下的 TCP_test_manual.xml进行通讯测试,也可按照以下步骤自行创建 TCP_test.xml 。

步骤1:创建 TCP_test.xml

  1. 新建一个工程,重新命名为 TCP_test.xml。在算子图中Trigger、HandEyeTCPServer 算子。

  2. 添加算子并组成 Group。在算子图中拖入 Trigger、HandEyeTCPServer 算子,将两个算子合成一个 Group。

  3. 设置算子参数。

    • Trigger 算子参数:type → InitTrigger

    • HandEyeTCPServer:本地测试无需修改任何参数。

      实际操作过程中请根据实际场景进行设置。具体参数请参考HandEyeTCPServer 手眼标定TCP服务器

  4. 工程连接。

    HandEyeTCPServer 算子右侧ROBOT_TCP 连接到MirrorOutput上,再从 MirrorInput 中和HandEyeTCPServer 算子左侧的相应词条连接。

    这样形成一个循环是为了接收到指令时有信息可以返回给客户端。算子图连接如下。

    Four3

步骤2:进行本地 HandEyeTCPServer 通讯测试

在项目启动后,可以在本地进行测试,打开终端输入:

echo"ROBOT_TCP 0 0 0 0 0 0" | nc localhost 2013

如果成功运行,则会在终端中分别返回 ROBOT_TCP,如图所示:

Four4

在 RVS 日志视图中显示如下图所示:

Four5

步骤3:进行RVS与机器人端的通讯测试

请机器人工程师协助:

机器人获得当前 TCP 值,通过连接向 RVS 服务端发送下方字符串,x y z 以米为单位,rx ry rz 以弧度为单位。四轴机器人的 rx ry 应为固定值。

ROBOT_TCP x y z rx ry rz \n

成功后,机器人应和 RVS 正常建立通讯。

当RVS与机器人建立通讯后,将正式开始数据录制环节。在RVS中提供了标准化的四轴机器人手眼标定模块。请打开 FourAxisRobotCalibration/FourAxisRobotCalibration.xml

在这个xml中,整体上分为连接相机资源、存储数据、计算标定结果、验证标定结果。

Four6

交互面板包含以下控件,在标定过程中会一一介绍如何使用:

Four7

连接相机

  1. 打开 RVS 软件,加载 FourAxisRobotCalibration/FourAxisRobotCalibration.xml 工程文件。

  2. 运行工程后,点击交互面板中startCamera连接相机。

    Four8

    注意

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

  3. 相机连接成功后,相机连接成功的 log 提示如下所示,TyCameraResource 算子显示为蓝色。

    Four9

存储数据

四轴机器人手眼标定时根据抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,求解出相机坐标系到机器人坐标系下的转换矩阵。理论上需要至少 4 组非线性相关的坐标点才能计算出 4*4 的坐标系转换矩阵。通常保存 6~8 组抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,分别命名为 PointInCam.txt 和PointInRob.txt,保存在 hand_eye_data 文件夹中,每组以时间戳的形式保存。

注意

需要先获取抓取点在机器人坐标系下的坐标,再获取抓取点在相机坐标系下的坐标,避免用机器人工具末端校准抓取点时抓取物发生偏移,从而导致抓取点在相机坐标系下的坐标出现误差。

抓取点在机器人坐标系下的坐标

  1. 手动移动机器人末端到物体的抓取点,机器人通过通讯脚本给 RVS 发送当前的 TCP 坐标。

    发送格式:ROBOT_TCP X Y Z 0 0 0#
    

    注意

    若机器人未建立工具 tcp,这里的 tcp 是机器人默认的法兰盘 tcp,此时需要根据实际工具来设置 ToolOffset 的值,使得保存的数据是已与抓取点校准的工具末端坐标,而不是法兰盘末端坐标。

    若机器人已建立工具 tcp,跳过下述第2步操作。

  2. 在交互面板中ToolOffset根据实际工具设置 ToolOffset。

    four1

  3. 机器人末端到物体的抓取点如下图所示:

    Four11

  4. RVS 中使用的坐标单位统一为米和弧度,如果机器人端发送的 TCP 坐标为毫米和角度或者其他单位制,需要在TCP通讯算子输出的坐标后通过 ScalePose 算子转换坐标点的单位,同样的,由 RVS 识别到的抓取点坐标,也可以通过 ScalePose 算子转换成机器人端需要单位制,再通过通讯发送给机器人。

    如果不需要转换则将 ScalePose 算子的参数设置为 1 ,则输出值不会有数值变化。

    Four12

    注意

    给 RVS 发送当前的 TCP 坐标后,保持抓取物不要移动,将机器人移出相机视野。

抓取点在相机坐标系的坐标

  1. 点击交互面板中 PointInCam,勾选显示Cube和点云,双击视图中的 cube,设置工作范围。

    four2

    工作范围要求:XY方向与相机视野范围保持一致,Z方向保证每次能切割到需要提取的抓取物表面。如下图所示:

    Four13

  2. 再次点击交互面板中PointInCam,确定定位物体的抓取点。

    four3

保存抓取点坐标

  1. 当获取抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,在 RVS 中分别如下图所示。

    Four15

  2. 点击交互面板中SavePoint,保存机器人坐标系下的抓取点位置与相机坐标系下的抓取点位置,保存在 FourAxisCalibration 目录下的 hand_eye_data 文件夹中,以时间戳形式保存。

    four4

单组保存成功后如下图所示:

Four18

注意事项

  1. 选定物体每个放置位置后,在每一组的操作中不再移动物体。

  2. 重复上述操作6~8组,确保能够正确计算出标定结果。

  3. 所有抓取点在任意坐标系下的坐标要保证线性无关。如:3个点不在一条直线,4个点不在同一个平面。

计算标定

当我们已经完成数据录制之后,请再次检查文件夹下的数据是否完整,随后开始计算标定结果。

操作流程:

  1. 仍然在 FourAxisRobotCalibration/FourAxisRobotCalibration.xml 工程下。

  2. 在交互面板中标定数据文件夹名中确认读取路径是否与保存路径是否一致。

  3. 点击交互面板上的 GetResult按键,即读取前面标定录制的数据进行计算。

    four5

  4. 在程序的日志视图窗口显示出误差是多少,如下图。

    Four20

    如何判断误差是否正常?

    不同机器人配合不同的相机类型会有不同的精度表现,一般来说 positional error 在 0.003(3毫米)以内,则比较理想。如果误差很大,请检查前述步骤是否正确执行。

  5. 标定结果以 pose 形式显示在交互面板的 Calib_Result 表格中,当精度满足误差范围内的波动允许,可点击复制按钮复制标定结果,同时标定结果已保存至FourAxisCalibration/handeyecalib.txt 文件中。

    four7

验证标定

  1. 点击交互面板中 GetPose ,勾选显示Cube和点云,双击视图中的 cube,设置实际工件工作范围。此处的 cube 在机器人坐标系下,用于将机器人坐标系下的点云进行分割。

    four8

  2. 可通过以下两种方式获取机器人坐标系下的抓取点。

    • 方法1:机器人发送 GET_POSE,RVS 会回复抓取点位置给机器人。

      发送格式:GET_POSE #
      
    • 方法2:点击交互面板中 GetPose。抓取点位姿会显示在交互面板抓取点位置中,可手动移动机器人值至抓取点,此时将 RVS 交互面板中抓取点位姿与机器人远程控制界面中的TCP 对比验证标定是否正确。

four9

验证3~5组,若无问题即标定完成。