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

8.4 KiB
Raw Permalink Blame History

双目视觉引导工件定位与拼接系统 - 业务流程总览

完整详细说明请查看: 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检测

初始化GalaxyDevice双目相机
    
连续采集左右图像
    
调用算法: wd_BQ_getCharuco3DMark(
    leftImage, rightImage,
    标定参数(相机内参、畸变、RPQ等),
    Mark配置(patterncheckermarker),
    输出: marks[]
)
    
TCP发送Mark数据  客户端

2 WorkpiecePositionApp - 工件抓取

BinocularMarkReceiver接收Mark
    
触发EpicEyeDevice采集点云
    
融合算法:
   基于Mark建立工件坐标系
   点云配准与分割
   PCA计算工件中心位姿
   输出: SSG_6DOF (x,y,z,rx,ry,rz)
    
发送抓取位姿  机器人控制器

3 WorkpieceSpliceApp - 工件拼接

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位姿拟合
控制方式 开环检测 单次计算 闭环反馈

🔗 数据结构

// 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