GrabBag/App/WeldSeam/Doc/焊缝视觉TCP协议文档.md

13 KiB
Raw Permalink Blame History

焊缝视觉 TCP 协议

版本

版本: 1.1 日期: 2026-09-01


版本历史

版本 日期 修改内容
1.1 2026-09-01 修改支持多机械臂的情况
1.0 2026-08-04 初始版本

1. 概述

  • 传输协议:TCP/IP
  • 数据编码:UTF-8 文本
  • 机械臂服务端端口:由机械臂侧确定并提供
  • 视觉控制器服务端监听端口:7800
  • 报文字段分隔符:_
  • 报文结束符:\r\n
  • 一条 TCP 连接同一时刻只处理一个请求

本协议包含两组独立的对接关系:

使用场景 客户端 服务端 服务端端口 用途
手眼标定 标定软件
Windows
机械臂 机械臂侧确定 标定软件主动连接机械臂读取机械臂当前坐标
正常工作 主控软件 视觉控制器 7800 主控软件主动连接视觉控制器计算,视觉控制器返回计算结果

服务端与客户端职责:

  • 服务端绑定本机 IP 地址并监听约定端口,等待客户端连接。
  • 客户端配置服务端 IP 地址和端口,主动发起 TCP 连接。
  • 连接建立后,客户端发送请求,服务端返回应答或计算结果。
  • 连接断开后,由客户端负责重新建立连接。

两组对接关系使用两条相互独立的 TCP 连接。机械臂服务端端口不受本协议限制,由机械臂侧确定;视觉控制器服务端固定监听端口 7800。 特别说明:视觉只负责检测,不负责运动控制,可获取运动部分的坐标信息。

2. 通用报文约定

报文格式:

命令_字段1_字段2_...\r\n

约定:

  • 命令名称使用大写英文字母。
  • 每条报文必须以 \r\n 结束。
  • 字段之间使用半角下划线 _ 分隔。
  • 字段内容不得包含 _、回车或换行。
  • 接收方应按结束符拆分报文,不能假定一次 TCP 接收操作恰好得到一条完整报文。
  • 未识别命令、字段数量错误或字段格式错误时,接收方返回错误报文。

通用错误报文:

ERROR_错误码\r\n
错误码 说明
UNKNOWN_COMMAND 命令无法识别
INVALID_FORMAT 报文格式或字段数量错误
INVALID_VALUE 字段值无法解析或超出允许范围
BUSY 接收方正在处理其他任务
NOT_READY 设备或算法尚未就绪
CALC_FAILED 视觉计算失败
INTERNAL_ERROR 接收方内部错误

3. 手眼标定协议

3.1 场景说明

  • 标定工具运行在 Windows 标定软件中,并通过 TCP/IP 对接机械臂。
  • 机械臂作为 TCP 服务端,监听端口由机械臂侧确定并提供。
  • Windows 标定软件作为 TCP 客户端,按照机械臂侧提供的 IP 地址和端口主动连接机械臂。
  • 标定物为多个圆柱。
  • 相机一次性扫描全部圆柱;扫描完成后,机械臂依次移动到每个圆柱中心并逐点获取坐标,不对每个圆柱重复扫描。
  • 机械臂由现场人员手动移动;视觉系统不发送机械臂运动指令,也不参与机械臂运动控制。
  • 进行手眼标定前,必须先完成机械臂工具中心点(Tool Center Point,以下简称“工具 TCP”)标定。
  • 标定软件只在采集标定点时读取当前工具 TCP 的机械臂坐标。

本节中的“工具 TCP”指机械臂工具中心点;第 1 节中的“TCP/IP”指网络传输协议,两者含义不同。

3.2 前置步骤:工具 TCP 标定

  1. 在机械臂上安装手眼标定过程中实际使用的工具。
  2. 按机械臂厂商提供的方法完成工具 TCP 标定。
  3. 在机械臂控制器中保存并启用该工具 TCP。
  4. 确认机械臂对外返回的 X/Y/Z/RX/RY/RZ 是已启用工具 TCP 的位姿,而不是机械臂法兰盘位姿。
  5. 工具 TCP 确认无误后,方可开始相机扫描及手眼标定数据采集。

注意:

  • 整个手眼标定过程中必须使用同一个工具和同一组工具 TCP 参数。
  • 更换工具、重新安装工具或修改工具 TCP 参数后,之前采集的手眼标定数据全部失效,必须重新采集并重新计算手眼标定结果。

3.3 通信时序

标定软件                              机械臂
   |                                    |
   |  相机一次性扫描全部圆柱              |
   |  扫描完成                           |
   |                                    |
   |  手动移动工具 TCP 到圆柱 1 中心      |
   |------------ GET_POSE ------------->|
   |<------ POSE_X_Y_Z_RX_RY_RZ --------|
   |  保存圆柱 1 对应坐标                |
   |                                    |
   |  手动移动工具 TCP 到圆柱 2 中心      |
   |------------ GET_POSE ------------->|
   |<------ POSE_X_Y_Z_RX_RY_RZ --------|
   |  保存圆柱 2 对应坐标                |
   |                                    |
   |      ...依次完成其余圆柱...         |
   |                                    |

3.4 手眼标定流程

  1. 确认机械臂已经启用完成标定的工具 TCP。
  2. 将相机移动到扫描起点。
  3. 移动相机,通过编码器触发方式一次性扫描全部圆柱。
  4. 完成本次扫描并保存所有圆柱的相机数据;后续逐点取坐标过程中不再移动相机或重复扫描。
  5. 手动拖动机械臂,使工具 TCP 到达第 1 个圆柱的中心点。
  6. 标定软件向机械臂请求当前工具 TCP 的坐标。
  7. 机械臂返回当前工具 TCP 位姿,标定软件将该坐标与第 1 个圆柱的相机数据对应保存。
  8. 手动拖动机械臂到下一个圆柱中心,再读取并保存一次工具 TCP 坐标。
  9. 重复步骤 8,直至所有圆柱均完成坐标获取。

整个手眼标定过程只进行一次相机扫描;机械臂移动和 GET_POSE 坐标读取按圆柱数量重复执行。

3.5 读取机械臂坐标

标定软件请求:

GET_POSE\r\n

机械臂返回:

POSE_X_Y_Z_RX_RY_RZ\r\n

示例:

GET_POSE\r\n
POSE_-500.920_1553.084_267.836_89.211_74.550_176.850\r\n

字段说明:

字段 说明
X 当前工具 TCP 的 X 坐标,单位 mm
Y 当前工具 TCP 的 Y 坐标,单位 mm
Z 当前工具 TCP 的 Z 坐标,单位 mm
RX 当前工具 TCP 绕 X 轴的姿态角,单位 deg
RY 当前工具 TCP 绕 Y 轴的姿态角,单位 deg
RZ 当前工具 TCP 绕 Z 轴的姿态角,单位 deg

说明:

  • 位姿数值建议至少保留 3 位小数。
  • 基坐标系、已启用的工具 TCP、欧拉角旋转顺序和角度正方向必须在联调前由机械臂方确认。
  • 机械臂无法读取当前位姿时,返回对应的 ERROR 报文。

4. 视觉计算协议

系统最多支持 2 个物理相机和 4 个机械臂。START_SCAN_1 启动物理相机 1,START_SCAN_3 启动物理相机 2;两个物理相机不同时扫描。

命令 用途
START_SCAN_1 启动物理相机 1 扫描
START_SCAN_3 启动物理相机 2 扫描
GET_RET_1 获取物理相机 1 检测得到的机械臂 1 坐标
GET_RET_2 获取物理相机 1 检测得到的机械臂 2 坐标
GET_RET_3 获取物理相机 2 检测得到的机械臂 3 坐标
GET_RET_4 获取物理相机 2 检测得到的机械臂 4 坐标

4.1 场景说明

  • 视觉控制器与主控软件通过 TCP/IP 对接。
  • 视觉控制器作为 TCP 服务端,监听端口 7800。
  • 主控软件作为 TCP 客户端,主动连接视觉控制器的 IP 地址和监听端口。
  • 主控软件发送开始扫描命令,并在收到视觉控制器确认后控制相机从起点开始移动。
  • 相机移动距离由现场确定;相机移动结束后,主控软件发送结束扫描命令。
  • 视觉控制器收到结束扫描命令后自动进入计算,无需主控软件另行发送计算命令。
  • 视觉控制器完成检测后主动通知主控软件,主控软件通过 GET_RET_n 获取对应机械臂的坐标结果。
  • 主控软件负责现场运动控制,视觉控制器不通过本协议控制相机或机械臂运动。

4.2 通信时序

主控软件                            视觉控制器
   |                                    |
   |  相机到达扫描起点                   |
   |----------- START_SCAN_1 ---------->|
   |<------------ START_ACK ------------|
   |                                    |
   |  收到确认后开始移动相机              | 扫描采集
   |  相机移动结束并停止                  |
   |------------- STOP_SCAN ----------->|
   |<------------- STOP_ACK ------------|
   |                                    | 自动检测
   |<----------- RESULT_READY ----------|
   |------------- GET_RET_1 ----------->|
   |<---- RESULT_OK_PointNum_点集 ------| 机械臂1坐标
   |------------- GET_RET_2 ----------->|
   |<---- RESULT_OK_PointNum_点集 ------| 机械臂2坐标
   |                                    |

4.3 工作流程

  1. 相机到达扫描起点后,主控软件发送 START_SCAN_1 或 START_SCAN_3 报文。
  2. 视觉控制器进入扫描采集状态,并返回 START_ACK 报文。
  3. 主控软件收到 START_ACK 后,方可控制相机从起点开始移动。
  4. 相机移动指定距离并停止后,主控软件发送 STOP_SCAN 报文。
  5. 视觉控制器结束扫描,返回 STOP_ACK 报文,并自动进入计算状态。
  6. 视觉控制器检测完成后主动发送 RESULT_READY 报文。
  7. 主控软件收到 RESULT_READY 后发送 GET_RET_n,获取对应机械臂的坐标结果。

4.4 开始扫描

主控软件请求:

START_SCAN_1\r\n
START_SCAN_3\r\n

视觉控制器应答:

START_ACK\r\n

说明:

  • START_ACK 表示视觉控制器已经进入扫描采集状态。
  • 只允许 START_SCAN_1 和 START_SCAN_3;前者启动物理相机 1,后者启动物理相机 2。
  • 未配置物理相机 2 时,START_SCAN_3 返回 ERROR_INVALID_CAMERA\r\n。
  • 主控软件必须收到 START_ACK 后才能开始移动相机,不得在发送开始命令后立即移动。
  • 视觉控制器尚未就绪时返回 ERROR_NOT_READY\r\n。
  • 视觉控制器正在扫描或计算上一次任务时返回 ERROR_BUSY\r\n。

4.5 结束扫描并自动计算

相机移动结束并停止后,主控软件请求:

STOP_SCAN\r\n

视觉控制器应答:

STOP_ACK\r\n

说明:

  • STOP_ACK 表示视觉控制器已结束扫描采集并开始计算,不表示计算已经完成。
  • 检测完成后,视觉控制器主动发送 RESULT_READY\r\n。该报文只表示检测已经结束,检测是否成功以 GET_RET_n 的应答为准。
  • 主控软件不需要再发送计算命令,收到 RESULT_READY 后通过 GET_RET_n 获取结果。
  • 未处于扫描状态时收到 STOP_SCAN,视觉控制器返回 ERROR_NOT_READY\r\n。

4.6 查询并返回计算结果

主控软件请求,其中 n 为已配置的机械臂编号:

GET_RET_n\r\n

视觉控制器根据检测状态返回:

RESULT_PENDING\r\n
RESULT_EMPTY\r\n
RESULT_NG\r\n

计算完成且手眼转换成功时返回:

RESULT_OK_PointNum_X1_Y1_Z1_X2_Y2_Z2_..._Xn_Yn_Zn\r\n

字段说明:

字段 说明
OK 计算成功
PointNum 返回的路径点总数,必须与后续坐标点数量一致
Xn/Yn/Zn 第 n 个路径点的坐标,单位 mm

路径点按焊接行进方向依次排列:

首点 -> 中间修正点1 -> 中间修正点2 -> ... -> 末点

每相邻两个路径点构成一段直线。分段间距由现场配置,例如分段间距为 1 m、焊缝总长为 10 m 时,共有 10 段直线,返回首尾在内的 11 个路径点:

RESULT_OK_11_X1_Y1_Z1_X2_Y2_Z2_X3_Y3_Z3_..._X11_Y11_Z11\r\n

说明:

  • 第 1 个点为焊缝首点,第 PointNum 个点为焊缝末点,其余点为中间修正点。
  • 当焊缝长度不能被分段间距整除时,末点必须单独返回,最后一段长度可以小于配置的分段间距。
  • 坐标值建议保留 3 位小数。
  • 路径点所使用的坐标系需要在联调前确认。
  • GET_RET_1/2 返回物理相机 1 检测得到的机械臂 1/2 坐标,GET_RET_3/4 返回物理相机 2 检测得到的机械臂 3/4 坐标。
  • 可以重复查询最近一次检测结果。

未得到有效结果时返回:

RESULT_NG\r\n

5. 超时与重连

  • 建议建立 TCP 连接的超时时间为 5 s。
  • GET_POSE 应答超时时间建议为 3 s。
  • START_SCAN_1/3 和 STOP_SCAN 的应答超时时间建议为 3 s。
  • 主控软件未收到 START_ACK 时不得移动相机,应检查连接及视觉控制器状态。
  • 视觉计算耗时与现场数据量有关,RESULT_READY 等待超时时间由双方根据现场节拍配置。
  • TCP 连接断开后,由 TCP 客户端重新建立连接;TCP 服务端继续监听并等待连接。
  • 扫描过程中连接断开时,本次扫描数据无效。连接恢复后,相机应重新回到扫描起点,再开始新的扫描任务。
  • 连接断开或结果超时后,不应自动重复发送运动相关指令;主控软件应先确认现场设备状态,再决定是否重新扫描。