GrabBag/README.md

6.1 KiB
Raw Permalink Blame History

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客户协议
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 TCP502 为标准端口,由于系统默认不允许非 root 用户监听 502 端口,通过 iptables 映射到 5020
  • Modbus RTU:仅 BeltTearingApp 支持,通过串口读取温度传感器数据

构建说明

环境要求

  • Qt 5.x
  • C++17 编译器
  • qmake 构建系统

构建整个项目Windows

cd GrabBagPrj
qmake GrabBagPrj.pro
make

ARM/Linux 交叉编译

cd GrabBagPrj/buildarm
qmake ../GrabBagPrj.pro
make

技术架构

设计模式

  • Presenter 模式: 业务逻辑与 UI 分离
  • 接口抽象: IVrConfigIVrEyeDevice 等统一接口
  • 配置管理: ConfigManager 集中管理配置

线程安全

  • 检测数据使用 mutex + 条件变量保护
  • 配置使用读写锁模式
  • 相机断连自动重连QTimer

通信协议

  • TCP/IP 与机器人通信
  • Modbus TCP 工业协议
  • 共享内存进程间通信