当您获得本文档时,可至 RVS 开发者社区下载 FourAxisCalibration.zip 四轴机器人标定教程配套数据。解压后其内容应包括:
-
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,相机(吊顶)固定安装,与机器人基座坐标系相对固定。
-
抓取物:可用纸箱或者木块等容易识别和定位物体几何特征点(比如木块上表面的中心点)的物体。
建议
将抓取物的特征点标记出来,便于机器人工具末端校准,以及判断相机点云识别。
如下图所示:
手眼标定的流程分为以下步骤:
通讯测试
通讯测试的目的时确保 RVS 软件能正常启动,并和机器人正常建立通讯,为接下来的数据录制做准备。在本手册中使用的 HandEyeTCPServer 手眼标定TCP服务器 ,在 RVS 的分线程中启动一个 TCP server 服务端,等待机器人建立连接并进行 tcp 通讯。
操作流程:
说明
可直接使用 FourAxisRobotCalibration/路径下的 TCP_test_manual.xml进行通讯测试,也可按照以下步骤自行创建 TCP_test.xml 。
步骤1:创建 TCP_test.xml
-
新建一个工程,重新命名为 TCP_test.xml。在算子图中Trigger、HandEyeTCPServer 算子。
-
添加算子并组成 Group。在算子图中拖入 Trigger、HandEyeTCPServer 算子,将两个算子合成一个 Group。
-
设置算子参数。
-
Trigger 算子参数:type → InitTrigger
-
HandEyeTCPServer:本地测试无需修改任何参数。
实际操作过程中请根据实际场景进行设置。具体参数请参考HandEyeTCPServer 手眼标定TCP服务器。
-
-
工程连接。
HandEyeTCPServer 算子右侧ROBOT_TCP 连接到MirrorOutput上,再从 MirrorInput 中和HandEyeTCPServer 算子左侧的相应词条连接。
这样形成一个循环是为了接收到指令时有信息可以返回给客户端。算子图连接如下。
步骤2:进行本地 HandEyeTCPServer 通讯测试
在项目启动后,可以在本地进行测试,打开终端输入:
echo"ROBOT_TCP 0 0 0 0 0 0" | nc localhost 2013
如果成功运行,则会在终端中分别返回 ROBOT_TCP,如图所示:
在 RVS 日志视图中显示如下图所示:
步骤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中,整体上分为连接相机资源、存储数据、计算标定结果、验证标定结果。
交互面板包含以下控件,在标定过程中会一一介绍如何使用:
连接相机
-
打开 RVS 软件,加载 FourAxisRobotCalibration/FourAxisRobotCalibration.xml 工程文件。
-
运行工程后,点击交互面板中
startCamera
连接相机。注意
若相机连接失败,请参考RVS连接不上相机怎么办?
-
相机连接成功后,相机连接成功的 log 提示如下所示,TyCameraResource 算子显示为蓝色。
存储数据
四轴机器人手眼标定时根据抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,求解出相机坐标系到机器人坐标系下的转换矩阵。理论上需要至少 4 组非线性相关的坐标点才能计算出 4*4 的坐标系转换矩阵。通常保存 6~8 组抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,分别命名为 PointInCam.txt 和PointInRob.txt,保存在 hand_eye_data 文件夹中,每组以时间戳的形式保存。
注意
需要先获取抓取点在机器人坐标系下的坐标,再获取抓取点在相机坐标系下的坐标,避免用机器人工具末端校准抓取点时抓取物发生偏移,从而导致抓取点在相机坐标系下的坐标出现误差。
抓取点在机器人坐标系下的坐标
-
手动移动机器人末端到物体的抓取点,机器人通过通讯脚本给 RVS 发送当前的 TCP 坐标。
发送格式:ROBOT_TCP X Y Z 0 0 0#
注意
若机器人未建立工具 tcp,这里的 tcp 是机器人默认的法兰盘 tcp,此时需要根据实际工具来设置 ToolOffset 的值,使得保存的数据是已与抓取点校准的工具末端坐标,而不是法兰盘末端坐标。
若机器人已建立工具 tcp,跳过下述第2步操作。
-
在交互面板中
ToolOffset
根据实际工具设置 ToolOffset。 -
机器人末端到物体的抓取点如下图所示:
-
RVS 中使用的坐标单位统一为米和弧度,如果机器人端发送的 TCP 坐标为毫米和角度或者其他单位制,需要在TCP通讯算子输出的坐标后通过 ScalePose 算子转换坐标点的单位,同样的,由 RVS 识别到的抓取点坐标,也可以通过 ScalePose 算子转换成机器人端需要单位制,再通过通讯发送给机器人。
如果不需要转换则将 ScalePose 算子的参数设置为 1 ,则输出值不会有数值变化。
注意
给 RVS 发送当前的 TCP 坐标后,保持抓取物不要移动,将机器人移出相机视野。
抓取点在相机坐标系的坐标
-
点击交互面板中
PointInCam
,勾选显示Cube和点云
,双击视图中的 cube,设置工作范围。工作范围要求:XY方向与相机视野范围保持一致,Z方向保证每次能切割到需要提取的抓取物表面。如下图所示:
-
再次点击交互面板中
PointInCam
,确定定位物体的抓取点。
保存抓取点坐标
-
当获取抓取点在机器人坐标系下的坐标和相机坐标系下的坐标,在 RVS 中分别如下图所示。
-
点击交互面板中
SavePoint
,保存机器人坐标系下的抓取点位置与相机坐标系下的抓取点位置,保存在 FourAxisCalibration 目录下的 hand_eye_data 文件夹中,以时间戳形式保存。
单组保存成功后如下图所示:
注意事项
-
选定物体每个放置位置后,在每一组的操作中不再移动物体。
-
重复上述操作6~8组,确保能够正确计算出标定结果。
-
所有抓取点在任意坐标系下的坐标要保证线性无关。如:3个点不在一条直线,4个点不在同一个平面。
计算标定
当我们已经完成数据录制之后,请再次检查文件夹下的数据是否完整,随后开始计算标定结果。
操作流程:
-
仍然在 FourAxisRobotCalibration/FourAxisRobotCalibration.xml 工程下。
-
在交互面板中
标定数据文件夹名
中确认读取路径是否与保存路径是否一致。 -
点击交互面板上的
GetResult
按键,即读取前面标定录制的数据进行计算。 -
在程序的日志视图窗口显示出误差是多少,如下图。
如何判断误差是否正常?
不同机器人配合不同的相机类型会有不同的精度表现,一般来说 positional error 在 0.003(3毫米)以内,则比较理想。如果误差很大,请检查前述步骤是否正确执行。
-
标定结果以 pose 形式显示在交互面板的
Calib_Result
表格中,当精度满足误差范围内的波动允许,可点击复制
按钮复制标定结果,同时标定结果已保存至FourAxisCalibration/handeyecalib.txt 文件中。
验证标定
-
点击交互面板中
GetPose
,勾选显示Cube和点云
,双击视图中的 cube,设置实际工件工作范围。此处的 cube 在机器人坐标系下,用于将机器人坐标系下的点云进行分割。 -
可通过以下两种方式获取机器人坐标系下的抓取点。
-
方法1:机器人发送 GET_POSE,RVS 会回复抓取点位置给机器人。
发送格式:GET_POSE #
-
方法2:点击交互面板中
GetPose
。抓取点位姿会显示在交互面板抓取点位置
中,可手动移动机器人值至抓取点,此时将 RVS 交互面板中抓取点位姿与机器人远程控制界面中的TCP 对比验证标定是否正确。
-
验证3~5组,若无问题即标定完成。