GrabBag/README.md

126 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GrabBag - 工业视觉检测系统
基于 Qt/C++17 的工业视觉检测平台,包含多个独立的检测应用程序,用于编织袋拆垛、皮带撕裂检测、焊缝检测、工件定位等工业场景。
## 目录结构
```
GrabBag/
├── App/ # 应用程序目录
│ ├── GrabBag/ # 编织袋拆垛应用
│ ├── BeltTearing/ # 皮带撕裂检测应用
│ ├── LapWeld/ # 搭接焊缝检测应用
│ ├── Workpiece/ # 工件定位应用
│ ├── WorkpieceProject/ # 工件项目(定位+拼接)
│ ├── BinocularMark/ # 双目 Mark 检测应用
│ ├── ParticleSize/ # 粒度检测应用
│ ├── TunnelChannel/ # 隧道通道应用
│ └── WheelMeasure/ # 轮毂测量应用
├── AppAlgo/ # 算法库
│ ├── bagPosition/ # 编织袋定位算法
│ ├── beltTearing/ # 皮带撕裂检测算法
│ ├── binocularMark/ # 双目 Mark 检测算法
│ ├── lapWeldDetection/ # 焊缝检测算法
│ ├── particleSizeMeasure/ # 粒度测量算法
│ ├── wheelArchHeigthMeasure/ # 轮拱高度测量算法
│ └── workpieceCornerExtraction/ # 工件角点提取算法
├── AppUtils/ # 应用公共工具库
│ ├── AppCommon/ # 应用通用组件BasePresenter、单例管理等
│ ├── CloudUtils/ # 点云工具(加载、保存、绘制)
│ └── UICommon/ # UI 公共资源和组件
├── VrCommon/ # 核心接口和数据结构
├── VrUtils/ # 通用工具CRC、INI、JSON、日志、MD5
├── VrNets/ # 网络通信库
│ ├── VrModbus/ # Modbus TCP 协议
│ ├── VrTcpClient/ # TCP 客户端
│ └── VrTcpServer/ # TCP 服务端
├── Device/ # 设备驱动层
│ ├── VrEyeDevice/ # VzNL 相机设备封装
│ ├── EpicEyeDevice/ # EpicEye 相机设备
│ ├── GalaxyDevice/ # 大恒相机设备
│ ├── IKapDevice/ # IKap 采集卡设备
│ └── HikDevice/ # 海康相机设备
├── Module/ # 功能模块
│ ├── ShareMem/ # 共享内存模块
│ ├── ModbusTCPServer/ # Modbus TCP 服务端
│ ├── ModbusTCPClient/ # Modbus TCP 客户端
│ ├── ThreadPool/ # 线程池
│ └── BinocularMarkReceiver/ # 双目 Mark 接收模块
├── SDK/ # 第三方 SDK
│ ├── Device/ # 相机/设备 SDK
│ │ ├── VzNLSDK/ # VzNL 激光线扫相机 SDK
│ │ ├── Galaxy/ # 大恒相机 SDK
│ │ ├── EpicEye/ # EpicEye 相机 SDK
│ │ ├── GenICam/ # GenICam 相机标准库
│ │ ├── IKapLibrary/ # IKap 采集卡 SDK
│ │ └── HCNetSDK/ # 海康 SDK
│ ├── OpenCV320/ # OpenCV 3.2.0ARM aarch64
│ ├── OpenCV480/ # OpenCV 4.8.0ARM aarch64
│ └── eigen-3.3.9/ # Eigen 线性代数库
├── GrabBagPrj/ # 项目构建配置
├── Test/ # 测试代码
├── TestData/ # 测试数据
├── Tools/ # 调试工具
└── Publish/ # 发布构建产物
```
## 应用程序说明
| 应用名称 | 功能描述 | 位置 | 备注 |
|---------|---------|------|------|
| GrabBagApp | 编织袋视觉定位与拆垛 | `App/GrabBag/` | 支持 1-2 个相机TCP 服务端与机器人通信 |
| BeltTearingApp | 实时检测传送带撕裂情况 | `App/BeltTearing/` | 客户端-服务端分离App + Server |
| LapWeldApp | 焊缝质量检测 | `App/LapWeld/` | - |
| WorkpieceApp | 工件角点检测与定位 | `App/Workpiece/` | - |
| WorkpiecePositionApp | 双传感器工件抓取定位 | `App/WorkpieceProject/` | WorkpieceProject 子应用 |
| WorkpieceSpliceApp | 闭环控制工件拼接组装 | `App/WorkpieceProject/` | WorkpieceProject 子应用 |
| BinocularMarkApp | 3D Mark 点检测服务 | `App/BinocularMark/` | - |
| ParticleSizeApp | 颗粒粒度分析 | `App/ParticleSize/` | - |
| TunnelChannelApp | 隧道通道检测 | `App/TunnelChannel/` | - |
| WheelMeasureApp | 轮毂尺寸测量 | `App/WheelMeasure/` | - |
## 构建说明
### 环境要求
- Qt 5.x
- C++17 编译器
- qmake 构建系统
### 构建整个项目Windows
```bash
cd GrabBagPrj
qmake GrabBagPrj.pro
make
```
### ARM/Linux 交叉编译
```bash
cd GrabBagPrj/buildarm
qmake ../GrabBagPrj.pro
make
```
## 技术架构
### 设计模式
- **Presenter 模式**: 业务逻辑与 UI 分离
- **接口抽象**: `IVrConfig``IVrEyeDevice` 等统一接口
- **配置管理**: `ConfigManager` 集中管理配置
### 线程安全
- 检测数据使用 mutex + 条件变量保护
- 配置使用读写锁模式
- 相机断连自动重连QTimer
### 通信协议
- TCP/IP 与机器人通信
- Modbus TCP 工业协议
- 共享内存进程间通信