零点
概述
零点是机器人各关节轴的基准参考位置。准确的零点标定是保证机器人运动精度的基础。本章说明零点相关的所有协议命令,包括零点标定流程、零点偏移设置、编码器状态查询和多圈值/单圈值管理。
零点标定流程
标准零点标定步骤
零点标定的完整流程如下:
- 编码器状态检查:通过
0x3603查询编码器状态,确认无欠压报警 - 标记无间隙方向:通过
0x3600请求标记无间隙方向(消除传动间隙对零点的影响) - 清除多圈值:通过
0x3601清除轴多圈值,将当前编码器位置重置 - 移动机器人到零点:手动将机器人各轴移动到机械零点位置
- 设置零点偏移:通过
0x3605设置零点偏移值(度数值或偏移量) - 设置单圈值:通过
0x3606微调各轴单圈值 - 验证零点:查询单圈值确认零点设置正确
零点标定类型
| 标定方式 | mode 值 | 说明 | 适用场景 |
|---|---|---|---|
| 度数方式 | 0 | 直接设置各轴的目标角度值 | 已知精确零点角度时的快速标定 |
| 偏移量方式 | 1 | 设置各轴相对于当前编码器位置的偏移量 | 机械零点定位后的微调标定 |
零点精度要求
- 零点精度直接影响机器人的绝对定位精度
- 各轴零点偏差应在 ±0.01° 以内
- 零点标定后应通过运行验证程序确认精度
- 更换电机、编码器或减速机后需要重新标定零点
零点标定注意事项
- 标定前确认机器人各轴无负载
- 标定前确认编码器无欠压报警
- 标定时各轴应处于无间隙方向
- 标定完成后建议保存配置并重启验证
请求标记无间隙方向
命令字: 0x3600
- 无需发送数据
清除轴多圈值
请求清除轴多圈值
命令字: 0x3601
| 字段 | 类型 | 说明 |
|---|---|---|
| axis | int | 需要清除多圈值的轴,范围 [0, 7],0 表示清除所有轴多圈值 |
| clear | bool | 是否清除多圈值 |
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"axis": 0,
"clear": true,
"robot": 1
}控制器回复
命令字: 0x3602
| 字段 | 类型 | 说明 |
|---|---|---|
| axis | int | 清除多圈值的轴,范围 [0, 7] |
| result | int | 清除多圈值结果,范围 [0, 1] |
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"axis": 0,
"result": 1,
"robot": 1
}编码器状态
查询编码器状态
命令字: 0x3603
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"robot": 1
}控制器回复
命令字: 0x3604
| 字段 | 类型 | 说明 |
|---|---|---|
| encoderUndervoltage | bool[] | 欠压报警列表,false 表示不欠压,true 表示欠压,长度为当前机器人轴数 |
| encoderUnderVoltageExternal | bool[] | 外部轴欠压报警列表,false 表示不欠压,true 表示欠压,长度为当前机器人外部轴轴数 |
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"encoderUndervoltage": [false, false, false, false, false, false],
"encoderUnderVoltageExternal": [false, false, false, false, false],
"robot": 1
}零点偏移
设置零点偏移
命令字: 0x3605
| 字段 | 类型 | 说明 |
|---|---|---|
| axis | int | 设置零点偏移的轴,范围 [0, 7],0 表示设置全部轴 |
| mode | int | 零点偏移方式:0 表示度数,1 表示偏移量 |
| robot | int | 当前机器人号,范围 [1, 4] |
| value | double[] | 零点偏移值列表,长度为 7;当 mode 为度数时范围 [-360, 360] |
json
{
"axis": 0,
"mode": 0,
"robot": 1,
"value": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}单圈值
设置单圈值
命令字: 0x3606
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
| value | int[] | 设置的各轴单圈值列表,范围 [-2^31, 2^31-1] |
json
{
"robot": 1,
"value": [0, 0, 0, 0, 0, 0]
}查询单圈值
命令字: 0x3607
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"robot": 1
}控制器回复
命令字: 0x3608
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
| value | int[] | 各轴单圈值列表,范围 [-2^31, 2^31-1] |
json
{
"robot": 1,
"value": [0, 0, 0, 0, 0, 0]
}多圈值
零点偏移为编码器时
查询多圈值
命令字: 0x330B
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"robot": 1
}控制器回复
命令字: 0x330C
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
| value | int[] | 电机编码器值列表 |
json
{
"robot": 1,
"value": [0, 0, 0, 0, 0, 0, 0]
}