# 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 工业协议 - 共享内存进程间通信