GrabBag/App/WorkpieceProject/BUSINESS_FLOW.md

187 lines
8.4 KiB
Markdown
Raw Permalink Normal View History

2025-12-10 00:01:32 +08:00
# 双目视觉引导工件定位与拼接系统 - 业务流程总览
> 完整详细说明请查看: [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 (超出公差 && 次数<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)