# alltests **Repository Path**: myc_company/alltests ## Basic Information - **Project Name**: alltests - **Description**: 拍照-yolo识别-补丁点击-坐标转换-机械臂控制 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-19 - **Last Updated**: 2025-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 木材补丁检测系统 - 使用说明 ## 📋 项目概述 这是一个完整的木材补丁检测和机械臂抓取系统,集成了: - **相机控制**:基于大恒工业相机SDK (gxipy) - **YOLO目标检测**:自动识别木材表面的补丁 - **用户交互**:点击选择需要抓取的补丁 - **坐标转换**:将图像坐标转换为机械臂世界坐标 - **机械臂控制**:通过Modbus TCP协议控制机械臂抓取并放置补丁 ## 🌐 部署架构 ``` ┌─────────────────────┐ ┌─────────────────────┐ │ Ubuntu (前端) │ │ Windows (后端) │ │ 192.168.1.xxx │ │ 192.168.1.235 │ │ │ │ │ │ ┌───────────────┐ │ HTTP │ ┌───────────────┐ │ │ │ frontend.py │──┼────────→│ │ backend.py │ │ │ │ (PyQt5) │ │ :8001 │ │ (FastAPI) │ │ │ └───────────────┘ │ │ └───────┬───────┘ │ │ │ │ │ │ └─────────────────────┘ │ ↓ │ │ ┌───────────────┐ │ │ │ 相机 + YOLO │ │ │ └───────┬───────┘ │ │ │ │ │ ↓ │ │ ┌───────────────┐ │ │ │ 机械臂PLC │ │ │ │ 192.168.1.100 │ │ │ └───────────────┘ │ └─────────────────────┘ ``` **说明:** - **前端(Ubuntu)**:运行 `frontend.py`,提供用户操作界面 - **后端(Windows 192.168.1.235)**:运行 `backend.py`,处理相机、YOLO检测和机械臂控制 - **通信方式**:前端通过HTTP请求访问后端API(端口8001) ## 🏗️ 系统架构 ``` alltests/ ├── backend.py # FastAPI后端服务 ├── frontend.py # PyQt5前端界面 ├── camera.py # 相机类(坐标转换) ├── camera_manager.py # 相机管理类 ├── requirements.txt # Python依赖包 ├── models/ │ └── best.pt # YOLO训练好的模型 ├── gxipy/ # 大恒相机SDK ├── 补丁暂存台内参.pkl # 相机内参文件 ├── 补丁暂存台外参.pkl # 相机外参文件 └── README.md # 本说明文档 ``` ## 📦 文件来源说明 ### 从其他文件夹复制的文件: 1. **camera.py** - 来源:`algo_cam_arm_link/algo_cam_arm/camera.py` - 功能:相机类,提供图像坐标到世界坐标的转换功能 2. **camera_manager.py** - 来源:`panel_photography_system/camera_manager.py` - 功能:工业相机管理,处理相机连接、视频流、拍照等 3. **补丁暂存台内参.pkl** - 来源:`algo_cam_arm_link/algo_cam_arm/补丁暂存台内参.pkl` - 功能:相机内参标定结果(焦距、畸变系数等) 4. **补丁暂存台外参.pkl** - 来源:`algo_cam_arm_link/algo_cam_arm/补丁暂存台外参.pkl` - 功能:相机外参标定结果(相机在世界坐标系中的位置和姿态) 5. **gxipy/** 文件夹 - 来源:已提前放置在 `alltests/gxipy/` - 功能:大恒工业相机Python SDK 6. **models/best.pt** - 来源:已提前放置在 `alltests/models/best.pt` - 功能:训练好的YOLO补丁检测模型 ### 新创建的文件: 1. **backend.py** - 后端API服务(FastAPI) 2. **frontend.py** - 前端界面(PyQt5) 3. **requirements.txt** - Python依赖包列表 4. **README.md** - 本说明文档 ## 🚀 安装步骤 ### 1. 安装Python依赖 ```bash cd alltests pip install -r requirements.txt ``` **注意**: - 需要Python 3.8或更高版本 - 如果使用GPU加速YOLO推理,需要安装对应的CUDA版本 - PyTorch安装可能需要根据系统配置调整 ### 2. 验证文件完整性 确保以下文件存在: ```bash alltests/ ├── backend.py ✓ ├── frontend.py ✓ ├── camera.py ✓ ├── camera_manager.py ✓ ├── 补丁暂存台内参.pkl ✓ ├── 补丁暂存台外参.pkl ✓ ├── models/best.pt ✓ └── gxipy/ ✓ ``` ## 🎮 使用方法 ### 启动系统 #### 方式1:分别启动(推荐用于调试) 1. **启动后端服务**(新终端窗口): ```bash cd alltests python backend.py ``` 后端服务将在 `http://localhost:8001` 启动 2. **启动前端界面**(新终端窗口): ```bash cd alltests python frontend.py ``` #### 方式2:一键启动(推荐用于生产) 创建启动脚本 `start.sh` (macOS/Linux): ```bash #!/bin/bash cd alltests # 启动后端(后台运行) python backend.py & BACKEND_PID=$! # 等待后端启动 sleep 3 # 启动前端 python frontend.py # 前端关闭后,关闭后端 kill $BACKEND_PID ``` Windows创建 `start.bat`: ```batch @echo off cd alltests start python backend.py timeout /t 3 python frontend.py ``` ### 操作流程 #### 第一步:相机准备 1. 点击"刷新"按钮,获取相机列表 2. 选择相机,点击"打开相机" 3. 根据现场光线条件,设置曝光时间(默认20000μs) 4. 点击"开始视频流",查看实时画面 #### 第二步:拍照 1. 调整相机视野,确保木材表面在画面中 2. 点击"拍照"按钮 3. 拍照成功后,图像会显示在下方的"补丁检测图像"区域 #### 第三步:YOLO检测补丁 1. 点击"开始检测补丁"按钮 2. 系统会使用YOLO模型自动识别补丁 3. 检测结果会显示在图像上: - 绿色边界框:检测到的补丁 - 红色圆点:补丁中心点 - 标签显示:Patch编号和置信度 #### 第四步:选择补丁 1. 在检测结果图像上,**点击**你想要抓取的补丁 2. 被选中的补丁会用**黄色边界框**高亮显示 3. 右侧会显示: - 补丁编号和置信度 - 图像坐标(像素) - 世界坐标(毫米,机械臂坐标系) #### 第五步:连接机械臂 1. 点击"连接机械臂"按钮 2. 系统会连接到PLC(IP: 192.168.1.100, 端口: 502) 3. 连接成功后,状态显示为"已连接",按钮变为绿色 #### 第六步:发送抓取指令 1. 确认选中了正确的补丁 2. 点击"发送抓取指令"按钮 3. 系统会弹出确认对话框,显示: - 抓取坐标(补丁中心点的世界坐标) - 放置坐标(固定为 425, 500, 0) 4. 点击"Yes"确认发送 5. 机械臂会执行以下动作: - 移动到补丁位置 - 抓取补丁 - 移动到修补台中心点 (425, 500, 0) - 放置补丁 ## 🔧 配置说明 ### 机械臂参数 在 `backend.py` 中可以修改: ```python # PLC地址 self.arm_ip = "192.168.1.100" self.arm_port = 502 # 固定的放置位置(修补台中心点) self.PUT_POSITION = (425.0, 500.0, 0.0, 0.0) # X, Y, Z, R (单位: mm) ``` ### YOLO检测参数 在 `backend.py` 的 `detect_patches()` 函数中: ```python # 置信度阈值 results = state.yolo_model(captured_img, conf=0.25) ``` - `conf=0.25` 表示只保留置信度 > 0.25 的检测结果 - 可以根据实际情况调整(0-1之间) ### 相机曝光 前端界面默认曝光时间为 20000μs (20ms),可以根据现场光线调整: - 光线较暗:增加曝光时间(如 30000μs) - 光线较亮:减少曝光时间(如 10000μs) ## 📊 坐标系说明 ### 世界坐标系(机械臂坐标系) ``` Y轴 (500mm) ↑ | | +-----> X轴 (404mm) (0,0,0) 原点 ``` - 原点:机械臂坐标系原点 - X轴:流水线宽度方向 - Y轴:流水线长度方向 - Z轴:垂直向上(流水线平面为 Z=0) - 单位:毫米 (mm) ### 坐标转换流程 1. **图像坐标** (像素) → 相机内参去畸变 2. **归一化坐标** → 相机外参转换 3. **世界坐标** (mm) → 发送给机械臂 ## ⚠️ 注意事项 ### 1. 相机校准文件 - **必须**使用正确的内参和外参文件 - 如果更换相机位置,需要重新标定外参 - 标定文件必须命名为: - `补丁暂存台内参.pkl` - `补丁暂存台外参.pkl` ### 2. 网络连接 - 确保PC和PLC在同一网络 - PLC IP地址:192.168.1.100 - 端口:502 - 如果连接失败,检查防火墙设置 ### 3. YOLO模型 - 模型文件 `models/best.pt` 必须存在 - 如果检测效果不好,可能需要重新训练模型 - 推理速度取决于硬件配置(GPU > CPU) ### 4. 机械臂安全 - 发送坐标前会弹出确认对话框 - 确认抓取和放置坐标正确再点击"Yes" - 放置位置固定为 (425, 500, 0),确保该位置安全 ### 5. 系统要求 - 操作系统:Windows 10/11, macOS, Ubuntu 20.04+ - Python:3.8 或更高版本 - 内存:建议 8GB 以上 - 相机:大恒工业相机(支持gxipy SDK) ## 🐛 故障排查 ### 问题1:后端启动失败 **错误**:`ModuleNotFoundError: No module named 'xxx'` **解决**: ```bash pip install -r requirements.txt ``` ### 问题2:找不到相机 **可能原因**: 1. 相机未连接 2. 相机驱动未安装 3. gxipy SDK未正确安装 **解决**: 1. 检查相机USB连接 2. 安装大恒相机驱动 3. 重新安装gxipy ### 问题3:YOLO检测失败 **错误**:`YOLO模型未加载` **解决**: 1. 确认 `models/best.pt` 文件存在 2. 检查ultralytics库是否正确安装 3. 查看后端控制台的错误信息 ### 问题4:机械臂连接失败 **错误**:`机械臂PLC连接失败` **解决**: 1. 检查PLC IP地址是否正确(192.168.1.100) 2. ping测试网络连通性:`ping 192.168.1.100` 3. 检查PLC Modbus TCP服务是否启用 4. 检查防火墙是否阻止502端口 ### 问题5:坐标转换错误 **错误**:`世界坐标计算失败` **可能原因**: 1. 相机外参未加载 2. 外参文件损坏 3. 点击的位置不在有效范围内 **解决**: 1. 确认外参文件存在且正确 2. 重新拍照并标定外参 3. 确保点击的补丁在相机视野内 ## 📝 API文档 后端服务启动后,可以访问: - API文档:http://localhost:8001/docs - API状态:http://localhost:8001/api/status ## 🔄 工作流程图 ``` ┌──────────────┐ │ 打开相机 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 设置曝光 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 开始视频流 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 拍照 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ YOLO检测补丁 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 点击选择 │ │ 补丁 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 连接机械臂 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 发送抓取指令 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ 机械臂执行: │ │ 1. 抓取补丁 │ │ 2. 放置补丁 │ └──────────────┘ ``` ## 📞 技术支持 如有问题,请检查: 1. 后端控制台输出(查看详细错误信息) 2. 前端弹出的错误对话框 3. 本README的故障排查部分 ## 📄 版本信息 - 版本:v1.0 - 日期:2025-12-18 - 作者:木材检测项目组 ## 🎯 后续改进 - [ ] 支持批量补丁抓取 - [ ] 添加补丁质量评估 - [ ] 优化YOLO检测速度 - [ ] 支持多相机切换 - [ ] 添加操作日志记录 - [ ] 支持远程监控