126 lines
5.5 KiB
Markdown
126 lines
5.5 KiB
Markdown
|
|
# 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.0(ARM aarch64)
|
|||
|
|
│ ├── OpenCV480/ # OpenCV 4.8.0(ARM 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 工业协议
|
|||
|
|
- 共享内存进程间通信
|