5.1 KiB
5.1 KiB
HoleDetection 孔洞检测系统 - TCP通信协议
版本历史
| 版本 | 日期 | 修改内容 |
|---|---|---|
| 1.0 | 2026-03-10 | 改为文本格式协议,增加机器人位姿(眼在手上) |
1. 协议概述
本文档定义了上位机与HoleDetection孔洞检测系统之间的TCP/IP通信协议。协议采用纯文本格式进行数据交换,支持眼在手上(Eye-in-Hand)坐标变换。
1.1 通信方式
- 传输协议: TCP/IP
- 数据格式: 纯文本
- 端口: 7800(默认,可通过配置文件修改)
- 行分隔符:
\n(换行符)
1.2 通信模式
- 服务端:HoleDetection孔洞检测系统
- 客户端:上位机控制系统(机器人控制器/PLC)
1.3 坐标变换方式
采用 眼在手上(Eye-in-Hand) 方式:
P_base = T_base_to_end × T_end_to_cam × P_cam
T_base_to_end= 机器人位姿(触发信号中的 RbtX/Y/Z/Roll/Pitch/Yaw)T_end_to_cam= 手眼标定矩阵(配置文件中的 4×4 矩阵)P_cam= 相机坐标系下的检测结果
2. 触发信号(客户端 → 服务端)
上位机发送触发信号,携带相机索引和当前机器人法兰位姿。
2.1 格式
X<相机索引> RbtX<值> RbtY<值> RbtZ<值> RbtRoll<值> RbtPitch<值> RbtYaw<值>\n
2.2 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| X | Integer | 相机索引。1 = 相机1,2 = 相机2 |
| RbtX | Float | 机器人法兰 X 坐标(mm) |
| RbtY | Float | 机器人法兰 Y 坐标(mm) |
| RbtZ | Float | 机器人法兰 Z 坐标(mm) |
| RbtRoll | Float | 机器人法兰 Roll 角度(°) |
| RbtPitch | Float | 机器人法兰 Pitch 角度(°) |
| RbtYaw | Float | 机器人法兰 Yaw 角度(°) |
注意:
- 各字段之间用空格分隔
- 数值可以为负数,负号是值的一部分(如
RbtX-23.45)- 数值与前缀之间无空格(如
RbtX100.0,不是RbtX 100.0)- 每条消息以
\n结尾
2.3 示例
X1 RbtX100.0 RbtY200.0 RbtZ300.0 RbtRoll0.0 RbtPitch0.0 RbtYaw0.0
X2 RbtX-23.45 RbtY150.30 RbtZ-80.00 RbtRoll-12.50 RbtPitch45.00 RbtYaw-90.00
3. 返回信号(服务端 → 客户端)
检测完成后,服务端返回检测到的孔洞数量和各孔洞在机器人基坐标系下的位姿。
3.1 格式
<孔洞数量>_<X1>_<Y1>_<Z1>_<Roll1>_<Pitch1>_<Yaw1>/<X2>_<Y2>_<Z2>_<Roll2>_<Pitch2>_<Yaw2>/...\n
3.2 格式规则
| 符号 | 说明 |
|---|---|
| 第一个数值 | 检测到的孔洞数量 |
_ |
同一孔洞各分量之间的分隔符 |
/ |
不同孔洞之间的分隔符 |
\n |
消息结尾 |
3.3 单个孔洞位姿字段
| 顺序 | 类型 | 说明 |
|---|---|---|
| 1 | Float | 机器人基坐标系下 X 坐标(mm) |
| 2 | Float | 机器人基坐标系下 Y 坐标(mm) |
| 3 | Float | 机器人基坐标系下 Z 坐标(mm) |
| 4 | Float | Roll 角度(°) |
| 5 | Float | Pitch 角度(°) |
| 6 | Float | Yaw 角度(°) |
注意:姿态角(Roll/Pitch/Yaw)的输出顺序可通过配置文件中的
poseOutputOrder参数调整。
3.4 示例
检测到 2 个孔洞:
2_100.50_200.30_50.20_1.23_4.56_7.89/110.00_210.00_60.00_1.00_5.00_8.00/
检测到 0 个孔洞:
0
检测到 1 个孔洞:
1_120.50_180.30_45.20_0.00_0.00_0.00/
4. 通信流程
4.1 正常检测流程
上位机(机器人控制器) 孔洞检测系统
| |
| X1 RbtX... RbtYaw... |
|------------------------------------>|
| |
| | (拍照+检测+坐标变换)
| |
| 2_X1_Y1_Z1_R1_P1_Y1/X2_... |
|<------------------------------------|
| |
4.2 无检测结果
上位机(机器人控制器) 孔洞检测系统
| |
| X1 RbtX... RbtYaw... |
|------------------------------------>|
| |
| | (拍照+检测,未找到孔洞)
| |
| 0 |
|<------------------------------------|
| |
5. 注意事项
-
连接管理
- 客户端应实现断线重连机制
- 服务端支持多客户端连接,结果广播给所有已连接客户端
-
粘包处理
- 协议以
\n作为消息分隔符 - 接收方应按
\n分割完整行后再解析
- 协议以
-
数据精度
- 坐标精度:小数点后2位(毫米)
- 角度精度:小数点后2位(度)
-
性能考虑
- 单次检测时间约 500ms - 2s
- 建议客户端设置合理的超时时间(建议10秒)
-
手眼标定
- 使用前需完成手眼标定,标定矩阵存储在 config.xml 的
<HandEyeCalibMatrixList>中 - 支持多相机独立标定
- 使用前需完成手眼标定,标定矩阵存储在 config.xml 的