GrabBag/App/HoleDetection/Doc/孔洞检测TCP通信协议.md
2026-03-11 23:40:06 +08:00

5.1 KiB
Raw Blame History

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 = 相机12 = 相机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. 注意事项

  1. 连接管理

    • 客户端应实现断线重连机制
    • 服务端支持多客户端连接,结果广播给所有已连接客户端
  2. 粘包处理

    • 协议以 \n 作为消息分隔符
    • 接收方应按 \n 分割完整行后再解析
  3. 数据精度

    • 坐标精度小数点后2位毫米
    • 角度精度小数点后2位
  4. 性能考虑

    • 单次检测时间约 500ms - 2s
    • 建议客户端设置合理的超时时间建议10秒
  5. 手眼标定

    • 使用前需完成手眼标定,标定矩阵存储在 config.xml 的 <HandEyeCalibMatrixList>
    • 支持多相机独立标定