Skip to content

标定

四点标定

说明:机器人末梢移动到并标定四个点,计算后可得杆长度和轴零点偏移,若认可计算结果,可将计算结果填入 DH 参数。

上位机四点标定计算请求

命令字: 0x3700

参数名类型范围/说明
ParamOf4Pointsdouble[]长度为2,L1和 L2长度。两参数分别为机器人末梢从标记点 A 移动到标记点 C 时 X 的移动距离和 Y 的移动距离
json
{
  "ParamOf4Points": [85.0, 70.0]
}

上位机 N 号点标定请求

命令字: 0x3701

参数名类型范围/说明
pointNumint范围[0,3],标定点编号
statusint范围[0,1],标定状态。0表示取消标定,1表示标定
json
{
  "pointNum": 0,
  "status": 1
}

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

命令字: 0x3702

参数名类型范围/说明
pointNumint范围[0,3],标定点编号
posdouble[]长度为4,位置信息列表
json
{
  "pointNum": 0,
  "pos": [0.0, 0.0, 0.0, 0.0]
}

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

命令字: 0x3703

参数名类型范围/说明
dthetadouble[]长度为2,轴零点偏移列表。值全为-1表示计算失败
lengthdouble[]长度为2,杆长度列表。值全为-1表示计算失败
resultbool是否计算成功
json
{
  "dtheta": [-1.0, -1.0],
  "length": [-1.0, -1.0],
  "result": false
}

上位机请求将计算结果填入 DH 参数

命令字: 0x3704

json
{}

控制器回复上位机填入 DH 参数结果

命令字: 0x3705

参数名类型范围/说明
applybool计算结果填入是否成功
json
{
  "apply": true
}

上位机查询标定信息

命令字: 0x3706

参数名类型范围/说明
dthetadouble[]长度为2,轴零点偏移列表。null 表示没有计算结果
lengthdouble[]长度为2,杆长度列表。null 表示没有计算结果
resultbool是否计算成功
statusint[]点位标定状态列表。0表示未标定,1表示已标定
json
{
  "dtheta": [null, null],
  "length": [null, null],
  "result": false,
  "status": [0, 1, 0, 1]
}

20点标定

说明:一种用于校准机器人的方法,通过在特定的20个点上进行标定,以确保机器人的准确性和稳定性。

上位机标定计算请求

命令字: 0x3710

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
noCalZerobool是否为校准零点
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手编号
json
{
  "calibrationType": 20,
  "noCalZero": false,
  "robot": 1,
  "tool": 1
}

上位机标定 N 号点请求

命令字: 0x3711

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
pointint标定点编号。2点法时范围[0,1],12点法时范围[0,11],15点法时范围[0,14],20点法时范围[0,19]
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手编号
json
{
  "calibrationType": 20,
  "point": 1,
  "robot": 1,
  "tool": 1
}

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

命令字: 0x3712

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
pointint标定点编号。2点法时范围[0,1],12点法时范围[0,11],15点法时范围[0,14],20点法时范围[0,19]
positiondouble[]标定点关节坐标信息列表,长度为6
robotint范围[1,4],当前机器人号
json
{
  "calibrationType": 20,
  "point": 1,
  "position": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  "robot": 1
}

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

命令字: 0x3713

参数名类型范围/说明
distancedouble标定计算结果。结果为-1表示计算失败,结果>10则请重新标定
resultbool标定计算是否成功
robotint范围[1,4],当前机器人号
json
{
  "distance": 464.473876425245,
  "result": true,
  "robot": 1
}

上位机发送设置标定结果为零点

命令字: 0x3714

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手编号
json
{
  "calibrationType": 12,
  "robot": 1,
  "tool": 1
}

控制器回复上位机标定结果为零点设置结果

命令字: 0x3715

参数名类型范围/说明
applybool设置为零点是否成功
robotint范围[1,4],当前机器人号
json
{
  "apply": true,
  "robot": 1
}

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

命令字: 0x3716

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手号
json
{
  "calibrationType": 20,
  "robot": 1,
  "tool": 1
}

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

命令字: 0x3717

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
robotint范围[1,4],当前机器人号
statusint[]点位标定状态列表。1表示已标定,0表示未标定。长度为当前使用标点法
json
{
  "calibrationType": 20,
  "robot": 1,
  "status": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}

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

命令字: 0x3718

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
pointint范围[0,20],标定点编号。20表示清除所有点
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手编号
json
{
  "calibrationType": 20,
  "point": 20,
  "robot": 1,
  "tool": 1
}

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

命令字: 0x3719

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
pointint标定点编号。2点法时范围[0,1],12点法时范围[0,11],15点法时范围[0,14],20点法时范围[0,19]
robotint范围[1,4],当前机器人号
toolint范围[1,999],当前工具手编号
json
{
  "calibrationType": 20,
  "point": 1,
  "robot": 1,
  "tool": 1
}

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

命令字: 0x371A

参数名类型范围/说明
calibrationTypeint标定点方法。2表示2点法,12表示12点法,15表示15点法,20表示20点法有校准零点,21表示21点法无校准零点
pointint标定点编号。2点法时范围[0,1],12点法时范围[0,11],15点法时范围[0,14],20点法时范围[0,19]
positiondouble[]标定点关节坐标信息列表,长度为6
robotint范围[1,4],当前机器人号
json
{
  "calibrationType": 20,
  "point": 1,
  "position": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  "robot": 1
}

上位机请求移动到计算结果位置

命令字: 0x371B

参数名类型范围/说明
robotint范围[1,4],当前机器人号
json
{
  "robot": 1
}

上位机查询是否可以打开标定页面

命令字: 0x371C

json
{}

控制器回复上位机是否可以打开标定页面

命令字: 0x371D

参数名类型范围/说明
canCalibrationbool上位机是否可以打开标定页面
json
{
  "canCalibration": true
}

外部轴标定

说明:包含有旋转轴标定和直线轴(地轨)协同参数。

上位机外部旋转轴标定计算请求

命令字: 0x3730

参数名类型范围/说明
calibrateNumint范围[1,3],当前轴组号
robotint范围[1,4],当前机器人号
json
{
  "calibrateNum": 1,
  "robot": 1
}

上位机外部轴标定 N 号点请求

命令字: 0x3731

参数名类型范围/说明
externalGroupNumint范围[1,3],当前轴组号
pointNumint范围[0,4],标记点编号。旋转双周范围[0,4];旋转单轴范围[0,2]
robotint范围[1,4],当前机器人号
json
{
  "externalGroupNum": 1,
  "pointNum": 0,
  "robot": 1
}

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

命令字: 0x3732

参数名类型范围/说明
externalGroupNumint范围[1,3],当前轴组号
pointNumint范围[0,4],标记点编号。旋转双周范围[0,4];旋转单轴范围[0,2]
posdouble[]标定点直角坐标信息列表,长度为6
robotint范围[1,4],当前机器人号
json
{
  "externalGroupNum": 1,
  "pointNum": 0,
  "pos": [470.746, 0.0, 817.334, 3.14159265359, 0.0, 0.0],
  "robot": 1
}

控制器回复上位机外部轴标定计算结果

命令字: 0x3733

参数名类型范围/说明
resultbool外部轴标定计算是否成功
robotint范围[1,4],当前机器人号
json
{
  "result": true,
  "robot": 1
}

上位机查询机器人绑定外部轴标定状态

命令字: 0x3734

参数名类型范围/说明
robotint范围[1,4],当前机器人编号
json
{
  "robot": 1
}

控制器回复上位机机器人绑定外部轴标定状态

命令字: 0x3735

参数名类型范围/说明
calibrateResultbool[]长度为3,机器人绑定外部轴标定状态。true 表示已标定,false 表示未标定
robotint范围[1,4],当前机器人号
json
{
  "calibrateResult": [false, false, false],
  "robot": 1
}

上位机设置当前协作外部轴组号

命令字: 0x3736

参数名类型范围/说明
externalGroupNumint范围[0,2],协作外部轴组号
robotint范围[1,4],当前机器人号
json
{
  "externalGroupNum": 0,
  "robot": 1
}

上位机查询当前协作外部轴组号

命令字: 0x3737

参数名类型范围/说明
robotint范围[1,4],当前机器人编号
json
{
  "robot": 1
}

控制器回复上位机当前协作外部轴组号

命令字: 0x3738

参数名类型范围/说明
externalGroupNumint范围[0,2],协作外部轴组号
robotint范围[1,4],当前机器人号
json
{
  "externalGroupNum": 0,
  "robot": 1
}

上位机设置地轨协同参数

命令字: 0x3739

参数名类型范围/说明
calibrateResultbool地轨是否协同。协同:当启用地址是确定
conversionRatiodouble[]长度为3,轴转换比列表,范围[-9998,9998]。超过当前轴数的部分默认为1.0
trackMapint[]长度为3,地轨各轴方向。0表示未选择方向,1表示 X 方向,2表示 Y 轴方向,3表示 Z 轴方向。超过当前轴数的部分默认为0
json
{
  "calibrateResult": true,
  "conversionRatio": [58.0, 1.0, 1.0],
  "trackMap": [1, 0, 0]
}

上位机查询当前机器人地轨协同参数

命令字: 0x373A

参数名类型范围/说明
robotint范围[1,4],当前机器人编号
json
{
  "robot": 1
}

控制器回复当前机器人地轨协同参数

命令字: 0x373B

参数名类型范围/说明
calibrateResultbool地轨是否协同
conversionRatiodouble[]长度为3,轴转换比列表,范围[-9998,9998]。初始化为9999
robotint当前机器人号
trackMapint[]长度为3,地轨各轴方向。0表示未选择方向,1表示 X 方向,2表示 Y 轴方向,3表示 Z 轴方向。初始化为0
json
{
  "calibrateResult": false,
  "conversionRatio": [9999, 9999, 9999],
  "robot": 1,
  "trackMap": [0, 0, 0]
}

上位机发送设置外部轴标定结果

命令字: 0x373C

参数名类型范围/说明
syncPositionerNumint范围[1,3],当前轴组号
resultArraydouble[][]各轴标定结果列表。一维长度为当前外部轴总轴数,二维长度为6
json
{
  "syncPositionerNum": 1,
  "resultArray": [
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]
  ]
}

上位机查询外部轴标定结果

命令字: 0x373D

参数名类型范围/说明
syncPositionerNumint范围[1,3],当前轴组号
json
{
  "syncPositionerNum": 1
}

控制器回复上位机外部轴标定结果

命令字: 0x373E

参数名类型范围/说明
syncPositionerNumint范围[1,3],当前轴组号
calibrateResultbool外部轴标定计算结果
resultArraydouble[][]各轴标定结果列表。一维长度为当前外部轴总轴数,二维长度为6
json
{
  "syncPositionerNum": 1,
  "calibrateResult": false,
  "resultArray": [
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]
  ]
}

上位机发送设置地轨方向校准系数

命令字: 0x373F

参数名类型范围/说明
axis_numint范围[1,3],地轨轴号
direction_ratiodouble[]方向校准系数,范围[-100,100]。参数分别为 X 方向系数、Y 方向系数、Z 方向系数
json
{
  "axis_num": 1,
  "direction_ratio": [1.0, 0.0, 0.0]
}

上位机查询地轨方向校准系数

命令字: 0x3740

参数名类型范围/说明
axis_numint范围[1,3],地轨轴号
json
{
  "axis_num": 1
}

控制器回复地轨方向校准系数

命令字: 0x3741

参数名类型范围/说明
axis_numint范围[1,3],地轨轴号
direction_ratiodouble[]方向校准系数,范围[-100,100]。参数分别为 X 方向系数、Y 方向系数、Z 方向系数
json
{
  "axis_num": 1,
  "direction_ratio": [1.0, 0.0, 0.0]
}

上位机标定轴 N 号点请求

命令字: 0x3742

参数名类型范围/说明
axis_numint范围[1,3],当前标定的轴号
point_numint范围[1,2],当前标定点编号
json
{
  "axis_num": 1,
  "point_num": 1
}

上位机请求地轨移动到标记点

命令字: 0x3743

参数名类型范围/说明
axis_numint范围[1,3],当前标定的轴号
point_numint范围[1,2],当前标定点编号
json
{
  "axis_num": 1,
  "point_num": 1
}

上位机地轨标定点计算请求

命令字: 0x3744

参数名类型范围/说明
axis_numint范围[1,3],当前标定的轴号
json
{
  "axis_num": 1
}

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

命令字: 0x3745

参数名类型范围/说明
axis_numint范围[1,3],地轨轴号
direction_ratiodouble[]方向校准系数。参数分别为 X 方向系数、Y 方向系数、Z 方向系数
json
{
  "axis_num": 1,
  "direction_ratio": [1.0, 0.0, 0.0]
}

标定算法参数

四点标定算法

四点标定通过四个已知位置的标定点,利用几何关系计算出机器人杆长和轴零点偏移。

算法原理

  1. 机器人末梢移动到四个标定点(标记点 A, B, C, D)
  2. 通过最小二乘法求解杆长 L1, L2 和轴零点偏移 dtheta1, dtheta2
  3. 计算结果可填入 DH 参数,修正运动学模型

算法参数 (ParamOf4Points)

参数说明单位
L1机器人末梢从标记点A移动到C时X方向移动距离mm
L2机器人末梢从标记点A移动到C时Y方向移动距离mm

20点标定算法

20点标定通过在不同姿态下的大量采样点,利用非线性优化算法求解完整的运动学参数。

优化目标

最小化所有标定点的位置误差:min sum(||P_actual_i - P_target||)

其中 P_actual_i 是第 i 个标定点的实际位置,P_target 是标记点位置。

收敛条件

条件阈值说明
标定距离< 10mm标定计算结果 distance < 10 表示标定成功
计算成功result=true优化算法成功收敛

标定点方法选择

calibrationType方法标定点数校准内容适用场景
22点法2简单校准快速校准
1212点法12零点+工具手未激光标定+焊枪
1515点法15零点+工具手(精确)高精度场景
2020点法(校准零点)20零点+工具手零点丢失
2121点法(不校准零点)21仅工具手零点已校准

标定算法参数调节

参数说明推荐值
标定点分布标定点应覆盖尽可能大的工作空间全工作空间的60%以上
姿态多样性各标定点的姿态应有明显差异各轴角度变化 > 20度
参考点稳定性参考点在标定过程中不允许移动固定偏差 < 0.1mm

自动标定流程

四点标定流程

标定步骤

  1. 准备阶段

    • 确认机器人处于手动/示教模式
    • 安装标定工具(如标定锥)
    • 设置固定参考点
  2. 标定阶段

    • 移动机器人末梢到标记点 A,发送标定请求(0x3701, pointNum=0, status=1)
    • 沿 X 方向移动 L1 距离到标记点 C,发送标定请求(0x3701, pointNum=2, status=1)
    • 沿 Y 方向移动 L2 距离到标记点 B,发送标定请求(0x3701, pointNum=1, status=1)
    • 移动机器人末梢到标记点 D,发送标定请求(0x3701, pointNum=3, status=1)
  3. 计算阶段

    • 发送标定计算请求(0x3700),传入 ParamOf4Points=[L1, L2]
    • 控制器返回计算结果(0x3703),包含杆长 length 和零点偏移 dtheta
    • 检查 result 是否为 true,dtheta 和 length 是否不为 -1
  4. 应用阶段

    • 如认可结果,发送填入 DH 参数请求(0x3704)
    • 控制器返回应用结果(0x3705)

标定数据流

标定点1~4 -> 几何计算 -> 杆长 L1+L2 + 零点偏移 dtheta1+dtheta2 -> 填入 DH 参数 -> 验证

20点标定流程

标定步骤

  1. 准备阶段

    • 设置参考点(固定标记点)
    • 选择标定方法类型 (calibrationType=20)
    • 选择工具手编号
  2. 标定阶段(循环20次)

    • 移动机器人到第 i 个标定点
    • 发送标定请求(0x3711, point=i)
    • 控制器返回标定点信息(0x3712)
  3. 计算阶段

    • 全部20点标定完成后,发送计算请求(0x3710)
    • 控制器返回计算结果(0x3713),包含 distance 和 result
    • 检查 result=true 且 distance < 10
  4. 应用阶段

    • 如认可结果,发送设置为零点请求(0x3714)
    • 控制器返回设置结果(0x3715)

标定状态查询

可随时查询各标定点的完成情况:

  • 查询全部点状态(0x3716/0x3717): 返回 status 数组,1=已标定,0=未标定
  • 查询 N 号点位置(0x3719/0x371A): 返回该点的关节坐标

外部轴标定流程

旋转轴标定

  1. 设置协作外部轴组号(0x3736)
  2. 移动机器人到标定点1,发送标定请求(0x3731, pointNum=0)
  3. 旋转外部轴到不同角度,移动机器人到标定点2~5,逐一标定
  4. 发送计算请求(0x3730)获取标定结果(0x3733)

地轨标定

  1. 设置地轨协同参数(0x3739):包含转换比(conversionRatio)和各轴方向(trackMap)
  2. 移动地轨到标记点1,发送标定请求(0x3742, point_num=1)
  3. 移动地轨到标记点2,发送标定请求(0x3742, point_num=2)
  4. 发送计算请求(0x3744)获取方向校准系数(0x3745)

自动标定安全检查

检查项方法标准
参考点固定标定前后检查参考点位置偏差 < 1mm
碰撞风险标定路径上无障碍物手动确认路径安全
伺服状态标定前确认伺服开启各轴伺服正常
急停可用确保急停按钮可用紧急情况可中断