GrabBag/App/WorkpieceProject/BUSINESS_FLOW.md
2025-12-10 00:01:32 +08:00

187 lines
8.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 双目视觉引导工件定位与拼接系统 - 业务流程总览
> 完整详细说明请查看: [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,
标定参数(相机内参、畸变、RPQ等),
Mark配置(patterncheckermarker),
输出: 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 (超出公差 && 次数<max) {
发送调整指令 机械臂
等待执行
重新检测Mark (实时反馈)
重新计算偏差
}
执行拼接操作
```
## 📊 关键模块对比
| 模块 | BinocularMarkApp | WorkpiecePosition | WorkpieceSplice |
|------|------------------|-------------------|-----------------|
| **硬件** | GalaxyDevice双目相机 | GalaxyDevice(远程) + EpicEyeDevice(本地) | GalaxyDevice(远程) + 机械臂 |
| **定位精度** | ±0.1mm | ±0.2mm | ±0.1mm, ±0.5° |
| **处理速度** | 10-30 FPS | <500ms | <1s/次调整 |
| **核心算法** | Charuco 3D检测 | Mark+点云融合 | SVD位姿拟合 |
| **控制方式** | 开环检测 | 单次计算 | 闭环反馈 |
## 🔗 数据结构
```cpp
// Mark 3D数据 (BinocularMarkApp → BinocularMarkReceiver)
typedef struct {
int markID; // Mark标识
SVzNL3DPoint mark3D; // 3D坐标 (x, y, z)
} SWD_charuco3DMark;
// 工件抓取位姿 (WorkpiecePosition输出)
typedef struct {
double x, y, z; // 位置 (mm)
double x_roll; // 绕X轴旋转 (°)
double y_pitch; // 绕Y轴旋转 (°)
double z_yaw; // 绕Z轴旋转 (°)
} SSG_6DOF;
```
## 💡 典型应用场景
1. **无序工件抓取**
- BinocularMarkApp检测料箱中Mark
- WorkpiecePositionApp计算抓取位姿
- 机器人逐个抓取
2. **精密装配拼接**
- BinocularMarkApp检测待拼接工件Mark
- WorkpieceSpliceApp闭环调整位姿
- 满足公差后执行拼接
3. **质量检测**
- BinocularMarkApp检测产品Mark
- 对比设计位置判定合格性
## 📁 关键文件位置
```
GrabBag/
├─ App/BinocularMark/BinocularMarkApp/
│ ├─ BinocularMarkPresenter.cpp # Mark检测核心逻辑
│ ├─ BinocularMarkTcpProtocol.cpp # TCP通信
│ ├─ config_example.json # 配置示例
│ └─ CONFIG_README.md # 配置说明
├─ Module/BinocularMarkReceiver/
│ ├─ Inc/IBinocularMarkReceiver.h # 公共接口
│ └─ Src/BinocularMarkReceiver.cpp # 实现
├─ App/WorkpieceProject/
│ ├─ WorkpiecePositionApp/
│ │ └─ WorkpiecePositionPresenter.cpp # 抓取逻辑
│ ├─ WorkpieceSpliceApp/
│ │ └─ WorkpieceSplicePresenter.cpp # 拼接逻辑
│ ├─ BUSINESS_FLOW.md # 本文档
│ └─ BUSINESS_FLOW_DETAILS.md # 详细说明
├─ Device/
│ ├─ GalaxyDevice/ # 大恒相机驱动
│ └─ EpicEyeDevice/ # VisionPro相机驱动
└─ SDK/binocularMark/Inc/
├─ binocularMarkCam_Export.h # 算法接口
└─ SG_baseDataType.h # 数据类型
```
## 🚀 系统优势
**模块化**: BinocularMarkReceiver公共模块复用
**高精度**: ±0.1mm级定位精度
**实时性**: <10ms通信延迟
**鲁棒性**: 多传感器融合
**灵活性**: 闭环控制自适应调整
---
**详细技术文档**: [BUSINESS_FLOW_DETAILS.md](./BUSINESS_FLOW_DETAILS.md)