187 lines
8.4 KiB
Markdown
187 lines
8.4 KiB
Markdown
# 双目视觉引导工件定位与拼接系统 - 业务流程总览
|
||
|
||
> 完整详细说明请查看: [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)
|