# 双目视觉引导工件定位与拼接系统 - 业务流程总览 > 完整详细说明请查看: [BUSINESS_FLOW_DETAILS.md](./BUSINESS_FLOW_DETAILS.md) ## 🎯 系统架构图 ``` ┌────────────────────────────────────┐ │ 整体业务架构与数据流向 │ └────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────┐ │ 1️⃣ BinocularMarkApp (Mark 3D检测服务端) │ │ ───────────────────────────────────────────────────────────── │ │ • 位置: App/BinocularMark/BinocularMarkApp/ │ │ • 硬件: GalaxyDevice (大恒双目工业相机) │ │ • 功能: 双目图像采集 → Charuco Mark 3D坐标检测 │ │ • 算法: wd_BQ_getCharuco3DMark() │ │ • 通信: TCP Server (端口5901) │ └─────────────────────────────────────────────────────────────────────┘ ↓ TCP ┌───────────────────────┐ │ Mark 3D数据 (实时) │ │ markID + (x, y, z) │ └───────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ 📡 BinocularMarkReceiver (公共TCP客户端模块) │ │ ───────────────────────────────────────────────────────────── │ │ • 位置: Module/BinocularMarkReceiver/ │ │ • 类型: 静态库 - 多应用复用 │ │ • 功能: 接收Mark数据、心跳保活、回调通知 │ │ • 接口: IBinocularMarkReceiver │ └─────────────────────────────────────────────────────────────────────┘ ↓ ↓ ┌──────────────────────────┐ ┌──────────────────────────┐ │ 2️⃣ WorkpiecePositionApp │ │ 3️⃣ WorkpieceSpliceApp │ │ (工件定位抓取) │ │ (工件拼接装配) │ │ ────────────────────── │ │ ────────────────────── │ │ • Mark数据 (远程) │ │ • Mark数据 (远程) │ │ • EpicEyeDevice点云(本地)│ │ • 机械臂控制 │ │ • 融合计算抓取位姿 │ │ • 闭环位姿调整 │ └──────────────────────────┘ └──────────────────────────┘ ↓ ↓ 机器人抓取工件 机械臂拼接工件 ``` ## 🔄 核心业务流程 ### 1️⃣ BinocularMarkApp - Mark检测 ```cpp 初始化GalaxyDevice双目相机 ↓ 连续采集左右图像 ↓ 调用算法: wd_BQ_getCharuco3DMark( leftImage, rightImage, 标定参数(相机内参、畸变、R、P、Q等), Mark配置(pattern、checker、marker), 输出: marks[] ) ↓ TCP发送Mark数据 → 客户端 ``` ### 2️⃣ WorkpiecePositionApp - 工件抓取 ```cpp BinocularMarkReceiver接收Mark ↓ 触发EpicEyeDevice采集点云 ↓ 融合算法: • 基于Mark建立工件坐标系 • 点云配准与分割 • PCA计算工件中心位姿 • 输出: SSG_6DOF (x,y,z,rx,ry,rz) ↓ 发送抓取位姿 → 机器人控制器 ``` ### 3️⃣ WorkpieceSpliceApp - 工件拼接 ```cpp BinocularMarkReceiver接收Mark ↓ 计算位姿偏差: • 当前Mark位置 vs 目标位置 • SVD拟合位姿差异 • 检查公差 (±0.1mm, ±0.5°) ↓ 闭环控制: while (超出公差 && 次数