GrabBag/README.md

131 lines
6.1 KiB
Markdown
Raw Permalink 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/ # 发布构建产物
```
## 应用程序说明
| 应用名称 | 功能描述 | 使用设备 | TCP | Modbus TCP | Modbus RTU | 备注 |
|---------|---------|---------|-----|------------|------------|------|
| GrabBagApp | 编织袋视觉定位与拆垛 | VzNL 3D相机 | 6800 | 502→5020 | - | 支持 1-2 个相机 |
| BeltTearingApp | 实时检测传送带撕裂情况 | VzNL 3D相机 | 5800客户协议<br>5900上下位机 | 502→5020 | 温度读取 | 客户端-服务端分离 |
| LapWeldApp | 焊缝质量检测 | VzNL 3D相机 | 5020 | - | - | - |
| WorkpieceApp | 工件角点检测与定位 | VzNL 3D相机 | 7800 | 502→5020 | - | - |
| WorkpiecePositionApp | 双传感器工件抓取定位 | EpicEye + VzNL 3D相机 | 客户端连接5901 | 502→5020 | - | 连接 BinocularMarkApp |
| WorkpieceSpliceApp | 闭环控制工件拼接组装 | VzNL 3D相机 | 客户端连接5901 | 502→5020 | - | 连接 BinocularMarkApp |
| BinocularMarkApp | 3D Mark 点检测服务 | 大恒相机(双目) | 5901 | - | - | 无 Modbus |
| ParticleSizeApp | 颗粒粒度分析 | VzNL 3D相机 | 7900 | 502→5020 | - | - |
| TunnelChannelApp | 隧道通道检测 | 海康相机 + VzNL 3D相机 | - | 502→5020 | - | 2D+3D 融合 |
| WheelMeasureApp | 轮毂尺寸测量 | VzNL 3D相机 | - | 502→5020 | - | - |
> **协议说明:**
> - **TCP**:用于与机器人/上位机通信的自定义协议
> - **Modbus TCP**502 为标准端口,由于系统默认不允许非 root 用户监听 502 端口,通过 iptables 映射到 5020
> - **Modbus RTU**:仅 BeltTearingApp 支持,通过串口读取温度传感器数据
## 构建说明
### 环境要求
- 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 工业协议
- 共享内存进程间通信