GrabBag/App/ScrewPosition/Doc/螺杆定位TCP协议文档.md

127 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 螺杆定位 / 工具盘定位 TCP 协议
## 1. 概述
- 传输协议TCP/IP
- 数据编码UTF-8 文本
- 服务模式:视觉侧作为 TCP 服务端
- 默认端口:`7800`
- 报文结束符:`\r\n`
- 当前模式:眼在手上
## 2. 请求报文
格式:
```text
类型+相机索引_X_Y_Z_A_B_C\r\n
```
示例:
```text
S1_-23.45_200.30_50.10_15.50_-2.30_45.00\r\n
T1_-23.45_200.30_50.10_15.50_-2.30_45.00\r\n
```
字段说明:
| 字段 | 说明 |
|---|---|
| `S1` / `T1` | `S`=螺杆检测,`T`=工具盘检测,后跟相机索引 |
| `X` | 机械臂当前 X单位 mm |
| `Y` | 机械臂当前 Y单位 mm |
| `Z` | 机械臂当前 Z单位 mm |
| `A` | 机械臂当前姿态第 1 个角,单位 deg |
| `B` | 机械臂当前姿态第 2 个角,单位 deg |
| `C` | 机械臂当前姿态第 3 个角,单位 deg |
## 3. 姿态输入顺序
`A/B/C` 的实际含义由网络配置中的 `poseOutputOrder` 统一控制。
支持顺序:
- `RX-RY-RZ`
- `RX-RZ-RY`
- `RY-RX-RZ`
- `RY-RZ-RX`
- `RZ-RX-RY`
- `RZ-RY-RX`
例如,当 `poseOutputOrder = RZ-RY-RX` 时:
```text
T1_-500.92_1553.084_267.836_176.850_74.55_89.211\r\n
```
表示:
```text
X = -500.92
Y = 1553.084
Z = 267.836
RZ = 176.850
RY = 74.55
RX = 89.211
```
## 4. 返回报文
格式:
```text
PointNum_AX1_AY1_AZ1_A1_B1_C1_X1_Y1_Z1_A1_B1_C1/AX2_AY2_AZ2_A2_B2_C2_X2_Y2_Z2_A2_B2_C2/\r\n
```
每个目标由 12 个浮点组成:先 **接近点** (`AX/AY/AZ + A/B/C`),再 **目标点** (`X/Y/Z + A/B/C`),两者姿态完全相同。
示例:
```text
2_90.500_200.300_50.100_15.500_-2.300_45.000_100.500_200.300_50.100_15.500_-2.300_45.000/110.000_210.500_48.000_-5.000_1.200_30.000_120.000_210.500_48.000_-5.000_1.200_30.000/\r\n
0\r\n
```
字段说明:
| 字段 | 说明 |
|---|---|
| `PointNum` | 检测到的目标数量 |
| `AX/AY/AZ` | 接近点坐标,单位 mm保留 3 位小数 |
| `A/B/C` (接近点) | 接近点姿态,与目标姿态相同 |
| `X/Y/Z` | 目标中心坐标,单位 mm保留 3 位小数 |
| `A/B/C` (目标点) | 目标姿态,单位 deg |
### 接近点语义
- 接近点 = 目标点在 Eye 坐标系下、姿态调整前沿"X 轴方向"偏移 `approachOffset` 后,再经手眼矩阵变换到机器人坐标系得到。
- 螺杆X 轴取 `axialDir`
- 工具盘X 轴取 `xDir`
- 机械臂应 **先运动到接近点**(姿态为目标姿态),再 **保持姿态沿工具 Z 轴直线下压到目标点**,避免姿态变化过程中碰撞工件。
- `approachOffset` 每台相机独立配置(手眼标定页的"接近点偏移(mm)");为 0 时接近点与目标点重合。
## 5. 姿态输出顺序
返回报文中的 `A/B/C` 与请求报文一样,也由同一个 `poseOutputOrder` 控制。
这意味着:
- TCP 输入顺序
- TCP 输出顺序
使用同一个配置项统一控制,便于和机械臂侧对接。
## 6. 结果语义
- 螺杆检测输出:机械臂坐标系下的 `接近点(AX/AY/AZ) + 目标点(X/Y/Z) + A/B/C`
- 工具盘检测输出:机械臂坐标系下的定位盘中心 `接近点(AX/AY/AZ) + 目标点(X/Y/Z) + A/B/C`
说明:
- 内部姿态计算顺序由 `eulerOrder` 控制
- `poseOutputOrder` 只控制姿态字段在协议中的排列顺序
- 位置字段(`AX/AY/AZ/X/Y/Z`)保留 3 位小数,单位 mm
- 姿态字段 `A/B/C` 保留 3 位小数,单位 deg
- 接近点与目标点姿态一致;机械臂到达接近点后沿工具 Z 轴直线下压到目标点