Skip to content

工具手

概述

工具手标定是工业机器人坐标系管理的核心功能,用于建立机器人末端工具的坐标系(Tool Coordinate System, TCS)。

什么是工具坐标系

  • 法兰盘中心:默认工具坐标系的原点,法兰盘中心指向法兰盘定位孔方向为+X 方向,垂直法兰向外为+Z 方向,根据右手法则判定 Y 方向
  • 工具中心点(TCP):工具坐标系的原点,通常是工具的工作点(如焊丝尖端、吸盘中心等)
  • 工具坐标系特点:新的工具坐标系相对于默认的工具坐标系变化得到,位置和方向始终同法兰盘保持绝对的位置和姿态关系

为什么要建立工具坐标系

  1. 确立工具的 TCP 点:方便调整工具状态

    • 例如:焊接时,将 TCP 定义到焊丝尖端,程序记录的位置便是焊丝尖端的位置
  2. 确定工具进给方向:方便工具位置调整

    • 例如:手爪的前进方向可以直接移动过去

适用场景

需要使用工具手的情况

  • 机器人工作时 X、Y、Z 轴需要绕着 A、B、C 姿态轴旋转
  • 典型工艺:焊接、打磨、喷涂、切割等

无需使用工具手的情况

  • 机器人本身仅做 Z 轴姿态旋转
  • 工具末梢位于机器人6轴法兰中心延长线上

标定方式选择指南

场景推荐方式说明
已激光标定 + 使用焊枪6点标定校准工具手尺寸+姿态,C轴精度较好
未激光标定 + 使用焊枪12点标定校准零点+工具手尺寸
标定码垛夹爪直接填写尺寸或6点标定优先选择直接填工具尺寸
零点丢失20点标定校准零点+工具手尺寸
6点标定后A/B轴旋转误差大7点标定校准工具手尺寸+姿态,A/B轴精度较好

工具手参数说明

参数说明单位
X轴工具末端相对于法兰中心,沿直角坐标系X轴方向的偏移长度mm
Y轴工具末端相对于法兰中心,沿直角坐标系Y轴方向的偏移长度mm
Z轴工具末端相对于法兰中心,沿直角坐标系Z轴方向的偏移长度mm
A轴工具末端相对于法兰中心,绕直角坐标系X轴方向旋转角度°/rad
B轴工具末端相对于法兰中心,绕直角坐标系Y轴方向旋转角度°/rad
C轴工具末端相对于法兰中心,绕直角坐标系Z轴方向的旋转角度°/rad

工具手参数

上位机设置工具手参数

命令字: 0x3500

参数列表:

参数名类型说明范围
Adouble绕 A 轴旋转弧度制[-3.1416,3.1416],角度制[-180,180]
Bdouble绕 B 轴旋转弧度制[-3.1416,3.1416],角度制[-180,180]
Cdouble绕 C 轴旋转弧度制[-3.1416,3.1416],角度制[-180,180]
XdoubleX 轴方向偏移,单位 mm[-2000,2000]
YdoubleY 轴方向偏移,单位 mm[-2000,2000]
ZdoubleZ 轴方向偏移,单位 mm[-2000,2000]
notestring工具手注释-
payloadInertiadouble负载惯量,单位0.001kgm²[-999999,999999]
payloadMassdouble负载质量,单位 kg[0,999999]
payloadMassCenterXdouble负载质心 X,单位 m[-999999,999999]
payloadMassCenterYdouble负载质心 Y,单位 m[-999999,999999]
payloadMassCenterZdouble负载质心 Z,单位 m[-999999,999999]
robotint当前机器人号[1,4]
toolint当前工具手号[1,999]

请求示例:

json
{
  "parameter": {
    "A": 0.0,
    "B": 0.0,
    "C": 0.0,
    "X": -68.0,
    "Y": 3.0,
    "Z": 162.0,
    "note": "",
    "payloadInertia": 0.0,
    "payloadMass": 3.0,
    "payloadMassCenterX": 0.0,
    "payloadMassCenterY": 0.0,
    "payloadMassCenterZ": 0.170
  },
  "robot": 1,
  "tool": 1
}

上位机查询工具手参数

命令字: 0x3501

参数列表:

参数名类型说明范围
robotint当前机器人号[1,4]
toolint当前工具手号[1,999]

请求示例:

json
{
  "robot": 1,
  "tool": 1
}

控制器回复上位机工具手参数

命令字: 0x3502

参数列表(弧度制):

参数名类型说明范围
Adouble绕 A 轴旋转[-3.1416,3.1416]
Bdouble绕 B 轴旋转[-3.1416,3.1416]
Cdouble绕 C 轴旋转[-3.1416,3.1416]
XdoubleX 轴方向偏移,单位 mm[-2000,2000]
YdoubleY 轴方向偏移,单位 mm[-2000,2000]
ZdoubleZ 轴方向偏移,单位 mm[-2000,2000]
notestring工具手注释-
payloadInertiadouble负载惯量,单位0.001kgm²[-999999,999999]
payloadMassdouble负载质量,单位 kg[0,999999]
payloadMassCenterXdouble负载质心 X,单位 m[-999999,999999]
payloadMassCenterYdouble负载质心 Y,单位 m[-999999,999999]
payloadMassCenterZdouble负载质心 Z,单位 m[-999999,999999]

参数列表(角度制):

参数名类型说明范围
Adouble绕 A 轴旋转[-180,180]
Bdouble绕 B 轴旋转[-180,180]
Cdouble绕 C 轴旋转[-180,180]
XdoubleX 轴方向偏移,单位 mm[-2000,2000]
YdoubleY 轴方向偏移,单位 mm[-2000,2000]
ZdoubleZ 轴方向偏移,单位 mm[-2000,2000]
notestring工具手注释-
payloadInertiadouble负载惯量,单位0.001kgm²[-999999,999999]
payloadMassdouble负载质量,单位 kg[0,999999]
payloadMassCenterXdouble负载质心 X,单位 m[-999999,999999]
payloadMassCenterYdouble负载质心 Y,单位 m[-999999,999999]
payloadMassCenterZdouble负载质心 Z,单位 m[-999999,999999]
参数名类型说明范围
robotint当前机器人号[1,4]
toolint当前工具手号[1,999]

响应示例:

json
{
  "parameter": {
    "A": 0.0,
    "B": 0.0,
    "C": 0.0,
    "X": -68.0,
    "Y": 3.0,
    "Z": 162.0,
    "note": "",
    "payloadInertia": 0.0,
    "payloadMass": 3.0,
    "payloadMassCenterX": 0.0,
    "payloadMassCenterY": 0.0,
    "payloadMassCenterZ": 0.17
  },
  "parameterDeg": {
    "A": 0.0,
    "B": 0.0,
    "C": 0.0,
    "X": -68.0,
    "Y": 3.0,
    "Z": 162.0,
    "note": "",
    "payloadInertia": 0.0,
    "payloadMass": 3.0,
    "payloadMassCenterX": 0.0,
    "payloadMassCenterY": 0.0,
    "payloadMassCenterZ": 0.17
  },
  "robot": 1,
  "tool": 1
}

工具号

上位机请求切换工具号

命令字: 0x3510

参数名类型说明范围
robotint当前机器人号[1,4]
toolint需要切换的工具手号,0表示无工具手[0,999]

请求示例:

json
{
  "robot": 1,
  "tool": 0
}

上位机查询工具手号

命令字: 0x3511

参数名类型说明范围
robotint当前机器人号[1,4]

请求示例:

json
{
  "robot": 1
}

控制器回复上位机工具手号

命令字: 0x3512

参数名类型说明范围
curToolNumint当前已选中工具手号[0,999]
robotint当前机器人号[1,4]
toolint与已选中工具手号一致,选中工具号为0时值为1[1,999]

响应示例:

json
{
  "curToolNum": 0,
  "robot": 1,
  "tool": 1
}

工具标定

六点法和七点法标定,包含有标定 N 号点、获取标定点位置信息、点位标定状态。
标定计算前需标定好所有点,先用0x3521标定每一个点,所有的点位标定完成后用0x3520计算标定结果。
查询 N 号点位置信息时需 N 号点已标定。

标定方式详解

6点标定

6点标定用于校准工具手尺寸和姿态,标定结果旋转 C 轴精度较好。

标定步骤

  1. TC1标定:机器人5轴垂直向下,工具手末梢对准标定锥尖端
  2. TC2标定:在第一点的基础上 C 轴旋转180度
  3. TC3标定:在第一点的基础上 B 轴角度在35度
  4. TC4标定:机器人回到零点,然后工具手末梢垂直
  5. TC5标定:在第四点的基础上动 X-
  6. TC6标定:在第五点的基础上动 Y+

计算:六个点标定结束后,点击"计算"会算出计算结果,如果计算结果大于1的话就需要重新标定。

7点标定

7点标定用于校准工具手尺寸和姿态,标定结果旋转 A、B 轴精度较好。

标定步骤

  1. TC1:工具手末梢垂直对准参考点
  2. TC2:将机器人切换一个姿势,末端正对参考点
  3. TC3:将机器人切换一个姿势,末端正对参考点
  4. TC4:将机器人切换一个姿势,末端正对参考点
  5. TC5:将工具末端垂直且正对参考点(同 TC1)
  6. TC6:在 TC5的基础上,沿笛卡尔坐标系 X 轴负方向移动任意距离
  7. TC7:在 TC6的基础上,沿笛卡尔坐标系 Y 轴正方向移动任意距离

注意事项:进行数据量取前请将法兰盘平行于水平面!

12点标定

12点标定结果只有工具手的 XYZ 轴方向偏移,无绕 ABC 旋转的数值。

标定步骤

  1. TC1:机器人回归零点,通过直角坐标将机器人尖端对准标定锥尖端
  2. TC2:在第一个点的基础上,通过直角坐标系将 C 旋转180度
  3. TC3:机器人回归零点,通过直角坐标系将机器人尖端对准标定锥尖端
  4. TC4:在第三个点的基础上,通过直角坐标系做 B-、度数位于30-60度
  5. TC5:在第四个点的基础上,通过直角坐标系做 B+、J5大于-90度
  6. TC6:选中第一个点,在第一个点的基础上,通过直角坐标系做 B+、J5大于-90度
  7. TC7:在第一个点的基础上,通过直角坐标系做 B-、J5大于-90度
  8. TC8:在第七个点的基础上,通过直角坐标系做 A+、旋转90度、J5大于-90度
  9. TC9:在第七个点的基础上,通过直角坐标系做 A-、旋转90度、J5大于-90度
  10. TC10:回到第一个点,通过关节坐标系点动五轴,使五轴向上、J5小于-90度
  11. TC11:在第十点的基础上,通过直角坐标系做 A+、旋转90度、J5小于-90度
  12. TC12:在第十点的基础上,通过直角坐标系做 A-、旋转90度、J5小于-90度

计算:标定完成后点击计算,计算出标定结果,如果计算出来的数值较大的话,就需要重新标定。

15点标定

15点标定结果只有工具手的 XYZ 轴方向偏移,无绕 ABC 旋转的数值。

标定步骤

  1. TC1:机器人回归零点,通过直角坐标将机器人尖端对准标定锥尖端
  2. TC2:在第一个点的基础上,通过直角坐标系将 C 旋转180度
  3. TC3:机器人回归零点,通过直角坐标系将机器人尖端对准标定锥尖端
  4. TC4:在第三个点的基础上,通过直角坐标系做 B-、度数位于30-60度
  5. TC5:在第四个点的基础上,通过直角坐标系做 B+、J5大于-90度
  6. TC6:选中第一个点,在第一个点的基础上,通过直角坐标系做 B+,J5大于-90度
  7. TC7:在第一个点的基础上,通过直角坐标系做 B-、J5大于-90度
  8. TC8:在第七个点的基础上,通过直角坐标系做 A+、旋转90度、J5大于-90度
  9. TC9:在第七个点的基础上,通过直角坐标系做 A-、旋转90度、J5大于-90度
  10. TC10:机器人回到第一个点,通过关节坐标系点动五轴使五轴向上,J5小于-90度
  11. TC11:在第十点的基础上,通过直角坐标系做 A+、旋转90度、J5小于-90度
  12. TC12:在第十点的基础上,通过直角坐标系做 A-、旋转90度、J5小于-90度
  13. TC13:机器人回到零点位置,调整机器人姿态,使机器人末端工具尖端竖直朝下,将标定尖端与标定锥对齐
  14. TC14:在第十三点的基础上,通过直角坐标系做 X-,机器人位移一段距离
  15. TC15:在第十四点的基础上,通过直角坐标系做 Y+,机器人位移一段距离

20点标定

标定步骤

  1. TC1:机器人工具手末端垂直参考点
  2. TC2:在第一点的基础上动 A+
  3. TC3:在第一点的基础上动 A+ 40度
  4. TC4:在第一点的基础上动 A+ 60度
  5. TC5:在第一点基础上动 A- 20度
  6. TC6:在第一点基础上动 A- 40度
  7. TC7:在第一点基础上动 A- 60度
  8. TC8:在第一点基础上动 B+ 20度
  9. TC9:在第一点基础上动 B+ 30度
  10. TC10:在第一点基础上动 B+ 40度
  11. TC11:在第一点基础上动 B- 20度
  12. TC12:在第一点基础上动 B- 30度
  13. TC13:在第一点基础上动 B- 40度
  14. TC14:在第一点基础上动 C+ 30度
  15. TC15:在第一点基础上动 C+ 50度
  16. TC16:在第一点基础上动 C+ 70度
  17. TC17:在第一点基础上动 C+ 90度
  18. TC18:在第一点基础上动 C- 30度
  19. TC19:在第一点基础上动 C- 60度
  20. TC20:第二十点在第一点基础上动 C- 90度

注意事项

  • 进行数据量取前请将法兰盘平行于水平面!
  • 标定过程中请保持参考点固定,否则标定误差增大

验证标定精度

示教模式下,工具手标定的末梢对准标定锥,在两个尖端对准的情况下,选中标定的工具手工具手编号,然后在直角坐标系下点动 A、B、C 轴,看尖端是否对准、偏了多少 mm。

API接口

上位机标定计算请求

命令字: 0x3520

参数名类型说明范围
robotint当前机器人号[1,4]
toolint当前工具手编号[1,999]
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]

请求示例:

json
{
  "robot": 1,
  "tool": 1,
  "calibrationType": 7
}

上位机标定 N 号点请求

命令字: 0x3521

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
pointint标定点编号六点法[0,5],七点法[0,6]
robotint当前机器人号[1,4]
toolint当前工具手编号[1,999]

请求示例:

json
{
  "calibrationType": 7,
  "point": 4,
  "robot": 1,
  "tool": 1
}

控制器回复上位机 N 号点标定信息

命令字: 0x3522

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
pointint标定点编号六点法[0,5],七点法[0,6]
positionarray<double>标定点直角坐标信息列表-
robotint当前机器人号[1,4]

响应示例:

json
{
  "calibrationType": 7,
  "point": 1,
  "position": [19998.0, 0.000000000001, 19998.0, 3.14159265359, 0.0, 0.0, 0.0],
  "robot": 1
}

控制器回复上位机标定计算完成结果

命令字: 0x3523

参数名类型说明范围
resultbool标定计算结果-
robotint当前机器人号[1,4]

响应示例:

json
{
  "result": true,
  "robot": 1
}

上位机查询 N 号点位置信息

命令字: 0x3524

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
pointint标定点编号六点法[0,5],七点法[0,6]
robotint当前机器人号[1,4]
toolint当前工具手编号[1,999]

请求示例:

json
{
  "calibrationType": 7,
  "point": 4,
  "robot": 1,
  "tool": 1
}

控制器回复上位机 N 号点位置信息

命令字: 0x3525

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
pointint标定点编号六点法[0,5],七点法[0,6]
positionarray<double>标定点直角坐标信息列表-
robotint当前机器人号[1,4]

响应示例:

json
{
  "calibrationType": 7,
  "point": 1,
  "position": [19998.0, 0.000000000001, 19998.0, 3.14159265359, 0.0, 0.0, 0.0],
  "robot": 1
}

上位机查询全部点标定状态

命令字: 0x3526

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
robotint当前机器人号[1,4]
toolint当前工具手编号[1,999]

请求示例:

json
{
  "calibrationType": 7,
  "robot": 1,
  "tool": 1
}

控制器回复上位机全部点标定状态

命令字: 0x3527

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
robotint当前机器人号[1,4]
statusarray<int>点位标定状态列表,1表示已标定,0表示未标定六点法长度6,七点法长度7

响应示例:

json
{
  "calibrationType": 7,
  "robot": 1,
  "status": [1, 1, 1, 0, 0, 1, 1]
}

上位机请求清除 N 号点标定状态

命令字: 0x3528

参数名类型说明范围
calibrationTypeint标定点方法,6为六点法,7为七点法[6,7]
pointint标定点编号六点法[0,5],七点法[0,6]
robotint当前机器人号[1,4]
toolint当前工具手编号[1,999]

请求示例:

json
{
  "calibrationType": 7,
  "point": 0,
  "robot": 1,
  "tool": 1
}

常见问题

Q: 什么是工具坐标系? A: 工具坐标系是机器人末端工具的坐标系,原点是 TCP(工具中心点),用于确定工具的位姿。

Q: 为什么要建立工具坐标系? A: 1. 确立工具的 TCP 点,方便调整工具状态;2. 确定工具进给方向,方便工具位置调整。

Q: 什么情况下需要使用工具手标定? A: 需要用到绕 X、绕 Y、绕 Z 的姿态旋转时,需要进行工具手标定,例如焊接工艺、打磨工艺、喷涂工艺等。

Q: 什么情况下无需使用工具手? A: 机器人本身仅做 Z 轴姿态旋转,且工具末梢位于机器人6轴法兰中心延长线上;此时可以不设置工具手参数。

Q: 如何选择工具手标定方式? A: 1. 已做过激光标定+使用焊枪:使用6点标定;2. 未做过激光标定+使用焊枪:使用12点标定;3. 标定码垛夹抓:优先选择直接填工具尺寸;4. 零点丢失:使用20点标定;5. 6点标定后 A、B 轴旋转误差大:使用7点标定。

Q: 标定失败,计算结果大于1怎么办? A: 可能原因:标定点位置不准确、标定过程中参考点移动、机器人姿态不正确。解决方案:重新标定,确保参考点固定,检查机器人姿态是否正确,使用更精确的标定工具。

Q: 标定后 A、B 轴旋转误差大怎么办? A: 可能原因:6点标定精度不够、标定点分布不合理。解决方案:更换7点标定,重新标定,确保标定点分布合理。

Q: 标定后 C 轴旋转误差大怎么办? A: 可能原因:标定点位置不准确、参考点移动。解决方案:重新标定,确保参考点固定。


工具手坐标系变换

坐标系变换链

机器人系统中各坐标系之间的变换关系如下:

基座坐标系(Base) -> 关节变换(J1~J6) -> 法兰坐标系(Flange) -> 工具坐标系(TCP)

其中工具坐标系(TCP)由法兰坐标系经过工具手参数变换得到。

工具手变换矩阵

工具手参数 (X, Y, Z, A, B, C) 定义了一个从法兰坐标系到工具坐标系的齐次变换矩阵:

平移部分由 (X, Y, Z) 定义,单位 mm。 旋转部分由 (A, B, C) 定义,遵循 ZYX 欧拉角顺序(先绕 Z 轴转 C,再绕 Y 轴转 B,最后绕 X 轴转 A)。

变换矩阵计算

工具手变换矩阵 T_tool 的计算公式:

T_tool = Trans(X,Y,Z) * RotX(A) * RotY(B) * RotZ(C)

其中:

  • Trans(X,Y,Z) 是平移变换矩阵
  • RotX(A) 是绕 X 轴旋转 A 弧度的旋转矩阵
  • RotY(B) 是绕 Y 轴旋转 B 弧度的旋转矩阵
  • RotZ(C) 是绕 Z 轴旋转 C 弧度的旋转矩阵

坐标变换应用

获取TCP在基座坐标系下的位姿

TCP 在基座坐标系下的位姿 = T_base_to_flange * T_tool

其中 T_base_to_flange 是基座坐标系到法兰坐标系的变换矩阵,由正运动学计算得到。

工具手参数对运动的影响

  1. 平移影响:设置工具手 X/Y/Z 偏移后,机器人将 TCP 点移动到目标位置而不是法兰中心
  2. 旋转影响:设置工具手 A/B/C 后,直角坐标系的旋转轴将围绕 TCP 点旋转
  3. 速度影响:线速度从法兰中心速度转换为 TCP 点速度

切换工具手的坐标变换

当运行时切换工具手号时,系统会自动:

  1. 读取新工具手的 (X, Y, Z, A, B, C) 参数
  2. 重新计算工具手变换矩阵 T_tool
  3. 后续所有运动指令基于新的 TCP 进行计算

工具手负载参数对动力学的影响

负载参数 (payloadMass, payloadMassCenterX/Y/Z, payloadInertia) 用于:

  1. 前馈补偿:根据负载质量和质心位置计算前馈力矩
  2. 碰撞检测:修正碰撞检测阈值,防止误报
  3. 力控模式:在力控制中补偿负载重力和惯性

坐标系变换示例

假设工具手参数为 X=-68, Y=3, Z=162, A=0, B=0, C=0(仅平移):

TCP 相对于法兰的位置偏移为 (-68, 3, 162) mm 当法兰位于基座坐标 (500, 200, 800) 时,TCP 位于基座坐标 (432, 203, 962)

工具手参数校验

校验项方法标准
TCP位置四/六点法标定后检查标定距离 < 1mm
姿态精度绕A/B/C轴旋转检查尖端偏移< 2mm
负载质心实际测量与参数对比偏差 < 50mm
负载质量称重对比偏差 < 1kg