3.1 KiB
3.1 KiB
轮胎孔定位 ModbusTCP 协议
1. 概述
- 协议:Modbus TCP
- 默认端口:
502 - 当前实现使用保持寄存器
- 内部实现端口:
5020
2. 寄存器定义
| 地址 | 长度 | 访问 | 说明 |
|---|---|---|---|
0 |
1 | 写 | 触发检测,1=轮胎孔检测 |
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 | 读 | 目标点 X,float32 |
16 |
2 | 读 | 目标点 Y,float32 |
18 |
2 | 读 | 目标点 Z,float32 |
20 |
2 | 读 | 目标点 A,float32 |
22 |
2 | 读 | 目标点 B,float32 |
24 |
2 | 读 | 目标点 C,float32 |
说明:
2~13为机械臂当前位姿输入14~25为目标点输出(6 个 float32)- 每个
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
4. 工作状态说明
| 状态值 | 含义 |
|---|---|
0 |
空闲 |
1 |
检测中 |
2 |
检测完成 |
3 |
异常或请求不支持 |
5. 触发流程
- 确认地址
1当前为0(空闲) - 将机械臂当前位姿写入
2~13 - 向地址
0写入1(轮胎孔检测) - 轮询地址
1 - 当地址
1=2时,读取14~25(目标点) - 机械臂运动到目标点
14~25 - 当地址
1=3时,本次检测失败
6. 结果语义
- 轮胎孔检测输出:机械臂坐标系下的孔中心
目标点(X/Y/Z) + A/B/C- 孔姿态由法向量(normDir)经手眼变换后提取欧拉角
- 检测结果可能包含多个孔,Modbus 仅输出第一个
说明:
- 内部姿态求解顺序由
eulerOrder控制 poseOutputOrder只控制寄存器中姿态字段的排列顺序- 位置字段(
X/Y/Z)保留 3 位小数,单位 mm - 姿态字段
A/B/C保留 3 位小数,单位 deg
7. 算法说明
使用 workpieceHolePositioning 算法库:
- 轮胎孔定位:
sx_getTireHolePose()- 输入:扫描线数据 + 角点检测参数(cornerParam)+ 地面标定参数(groundCalibPara)+ 轮胎参数(tireParam: diameter, thickness)
- 输出:孔中心位置列表 + 法向量方向列表(vector<WD_HolePositionInfo>)
8. TCP 文本协议
除 ModbusTCP 外,还支持 TCP 文本协议(默认端口 7800):
- 请求:
D1_X_Y_Z_A_B_C\r\n(D=轮胎孔检测)- 数字表示相机编号(1 或 2)
- 成功响应:
count_X_Y_Z_A_B_C\r\n(6 个 float:目标点) - 失败响应:
0\r\n