4.5 KiB
4.5 KiB
砂轮盘孔定位 / 砂轮盘架子定位 ModbusTCP 协议
1. 概述
- 协议:Modbus TCP
- 默认端口:
502 - 当前实现使用保持寄存器
2. 寄存器定义
| 地址 | 长度 | 访问 | 说明 |
|---|---|---|---|
0 |
1 | 写 | 触发检测,1=砂轮盘孔检测,2=砂轮盘架子检测 |
1 |
1 | 读 | 工作状态,0=空闲,1=检测中,2=完成,3=异常 |
2 |
2 | 写 | 机械臂当前 X,float32 |
4 |
2 | 写 | 机械臂当前 Y,float32 |
6 |
2 | 写 | 机械臂当前 Z,float32 |
8 |
2 | 写 | 机械臂当前 A,float32 |
10 |
2 | 写 | 机械臂当前 B,float32 |
12 |
2 | 写 | 机械臂当前 C,float32 |
14 |
2 | 读 | 接近点 AX,float32 |
16 |
2 | 读 | 接近点 AY,float32 |
18 |
2 | 读 | 接近点 AZ,float32 |
20 |
2 | 读 | 接近点 A,float32(与目标姿态相同) |
22 |
2 | 读 | 接近点 B,float32(与目标姿态相同) |
24 |
2 | 读 | 接近点 C,float32(与目标姿态相同) |
26 |
2 | 读 | 目标点 X,float32 |
28 |
2 | 读 | 目标点 Y,float32 |
30 |
2 | 读 | 目标点 Z,float32 |
32 |
2 | 读 | 目标点 A,float32 |
34 |
2 | 读 | 目标点 B,float32 |
36 |
2 | 读 | 目标点 C,float32 |
说明:
2~13为机械臂当前位姿输入14~25为 接近点 输出(机械臂先运动到这里)26~37为 目标点 输出(从接近点沿工具 Z 轴直线下压到此)- 接近点与目标点的
A/B/C姿态字段值相同 - 每个
float32占 2 个保持寄存器 - 当前仅输出第一个目标结果
3. 姿态输入/输出顺序
A/B/C 的实际含义由网络配置中的 poseOutputOrder 统一控制。
支持顺序:
RX-RY-RZRX-RZ-RYRY-RX-RZRY-RZ-RXRZ-RX-RYRZ-RY-RX
同一个配置同时作用于:
- Modbus 输入
A/B/C - Modbus 输出
A/B/C
例如,当 poseOutputOrder = RZ-RY-RX 时:
- 地址
8~13表示输入RZ/RY/RX - 地址
20~25表示接近点输出RZ/RY/RX - 地址
32~37表示目标点输出RZ/RY/RX
4. 工作状态说明
| 状态值 | 含义 |
|---|---|
0 |
空闲 |
1 |
检测中 |
2 |
检测完成 |
3 |
异常或请求不支持 |
5. 触发流程
- 确认地址
1当前为0 - 将机械臂当前位姿写入
2~13 - 向地址
0写入1(砂轮盘孔检测)或2(砂轮盘架子检测) - 轮询地址
1 - 当地址
1=2时,读取14~37(接近点 + 目标点) - 机械臂先运动到接近点
14~25,再保持姿态沿工具 Z 轴直线下压到目标点26~37 - 当地址
1=3时,本次检测失败
6. 结果语义
- 砂轮盘孔检测输出:机械臂坐标系下的孔中心
接近点(AX/AY/AZ) + 目标点(X/Y/Z) + A/B/C- 孔姿态由法向量(normDir)计算:Pitch 由 Z 分量与水平面夹角确定,Yaw 由 X/Y 分量确定,Roll 固定为 0
- 砂轮盘架子检测输出:机械臂坐标系下的架子中心
接近点(AX/AY/AZ) + 目标点(X/Y/Z) + A/B/C- 架子姿态由三轴向量(pose_x/pose_y/pose_z)构建旋转矩阵后提取欧拉角
说明:
- 内部姿态求解顺序由
eulerOrder控制 poseOutputOrder只控制寄存器中姿态字段的排列顺序- 接近点与目标点姿态一致;机械臂到达接近点后沿工具 Z 轴直线下压到目标点
- 接近点 = 目标点在 Eye 坐标系下、沿"Z 轴方向"偏移
approachOffset,再经手眼矩阵变换到机器人坐标系得到 approachOffset每台相机独立配置(手眼标定页的"接近点偏移(mm)");为 0 时接近点与目标点重合
7. 算法说明
使用 workpieceHolePositioning 算法库:
-
砂轮盘孔定位:
sx_getDiscHolePose()- 输入:扫描线数据 + 角点检测参数(cornerParam)
- 输出:孔中心位置 + 法向量方向
-
砂轮盘架子定位:
sx_getDiscRackCenterPosition()- 输入:扫描线数据 + 角点检测参数(cornerParam)
- 输出:架子中心位置 + 三轴方向向量(pose_x/pose_y/pose_z)
8. TCP 文本协议
除 ModbusTCP 外,还支持 TCP 文本协议(默认端口 7800):
- 请求:
D1_X_Y_Z_A_B_C\r\n(D=砂轮盘孔检测)或R1_X_Y_Z_A_B_C\r\n(R=砂轮盘架子检测)- 数字表示相机编号(1 或 2)
- 成功响应:
1_AX_AY_AZ_A_B_C_X_Y_Z_A_B_C\r\n(12 个 float:接近点 6 个 + 目标点 6 个) - 失败响应:
0_0_0_0_0_0_0_0_0_0_0_0\r\n