13 KiB
13 KiB
焊缝视觉 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 标定
- 在机械臂上安装手眼标定过程中实际使用的工具。
- 按机械臂厂商提供的方法完成工具 TCP 标定。
- 在机械臂控制器中保存并启用该工具 TCP。
- 确认机械臂对外返回的
X/Y/Z/RX/RY/RZ是已启用工具 TCP 的位姿,而不是机械臂法兰盘位姿。 - 工具 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 手眼标定流程
- 确认机械臂已经启用完成标定的工具 TCP。
- 将相机移动到扫描起点。
- 移动相机,通过编码器触发方式一次性扫描全部圆柱。
- 完成本次扫描并保存所有圆柱的相机数据;后续逐点取坐标过程中不再移动相机或重复扫描。
- 手动拖动机械臂,使工具 TCP 到达第 1 个圆柱的中心点。
- 标定软件向机械臂请求当前工具 TCP 的坐标。
- 机械臂返回当前工具 TCP 位姿,标定软件将该坐标与第 1 个圆柱的相机数据对应保存。
- 手动拖动机械臂到下一个圆柱中心,再读取并保存一次工具 TCP 坐标。
- 重复步骤 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 工作流程
- 相机到达扫描起点后,主控软件发送
START_SCAN_1或START_SCAN_3报文。 - 视觉控制器进入扫描采集状态,并返回
START_ACK报文。 - 主控软件收到
START_ACK后,方可控制相机从起点开始移动。 - 相机移动指定距离并停止后,主控软件发送
STOP_SCAN报文。 - 视觉控制器结束扫描,返回
STOP_ACK报文,并自动进入计算状态。 - 视觉控制器检测完成后主动发送
RESULT_READY报文。 - 主控软件收到
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 服务端继续监听并等待连接。
- 扫描过程中连接断开时,本次扫描数据无效。连接恢复后,相机应重新回到扫描起点,再开始新的扫描任务。
- 连接断开或结果超时后,不应自动重复发送运动相关指令;主控软件应先确认现场设备状态,再决定是否重新扫描。