Files
acAubo/README.md
2026-05-06 10:47:14 +08:00

206 lines
7.0 KiB
Markdown
Raw 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.

# TomatoPick 番茄采摘系统
TomatoPick 是一个面向番茄自动采摘实验的 Python 项目,集成了 Tkinter 参数界面、Intel RealSense RGB-D 相机、YOLO pose 目标检测、AUBO 机械臂控制和 AGV 移动平台控制。
当前仓库是运行端工程,核心代码集中在 `main.py``control.py``control_core.py`,辅助脚本位于 `tools/`
## 项目结构
```text
TomatoPick/
├── main.py # Tkinter 图形界面入口
├── control.py # UI 与核心逻辑之间的配置转发/兼容入口
├── control_core.py # 相机、YOLO、机械臂、AGV 与采摘状态机
├── ui_settings.json # UI 参数缓存,运行后自动保存/更新
├── tools/
│ ├── realsense_record_video.py # RealSense 录制辅助脚本
│ ├── video_to_rgb_frames.py # 视频抽帧辅助脚本
│ ├── aubo_joint_position.py # AUBO 关节位置辅助脚本
│ └── 1.png # UI 相机区域背景图
└── README.md
```
## 功能概览
- 通过图形界面配置机械臂 IP、AGV IP、运行时长、YOLO 模型路径、放置位置等参数。
- 支持完整采摘流程AGV 巡检、视觉检测、停车、精确定位、机械臂抓取、放置、回 Home、AGV 继续前进。
- 支持“视觉测试”模式,只启动 RealSense 和 YOLO 推理,不启动机械臂和 AGV适合先调试模型与相机画面。
- 将运行日志、终端输出和相机检测画面实时显示在 UI 中。
- 通过 `ui_settings.json` 保存上一次 UI 参数,方便下次启动恢复。
## 核心文件说明
### `main.py`
图形界面入口,直接运行即可打开参数配置界面。
主要职责:
- 构建 Tkinter 主界面,包括参数区、运行日志、相机画面和终端输出。
- 读取和保存 `ui_settings.json`
- 选择 YOLO `.pt` 模型文件和相机背景图。
- 启动完整采摘流程,内部调用 `control.main()`
- 启动视觉测试流程,只初始化 RealSense 与 YOLO。
- 接收 `control_core.py` 推送的相机帧并叠加检测信息。
### `control.py`
兼容入口和配置桥接层。UI 或外部脚本会先修改这里的模块级参数,然后由 `_sync_config()` 同步到 `control_core.configure()`
常用参数包括:
| 参数 | 说明 |
| --- | --- |
| `ROBOT_IP` / `ROBOT_PORT` | AUBO 机械臂连接地址 |
| `AGV_IP` / `AGV_PORT` | AGV 连接地址 |
| `AGV_SPEED_FORWARD` | AGV 前进速度 |
| `TOTAL_DURATION` | 系统总运行时长,单位秒 |
| `AGV_STOP_TIMEOUT` | AGV 停车后等待采摘的超时时间 |
| `YOLO_MODEL_PATH` | YOLO pose 模型路径,默认 `best.pt` |
| `YOLO_DETECT_CONF` | YOLO 推理置信度阈值 |
| `PICK_CONFIDENCE_THRESHOLD` | 进入采摘逻辑的目标置信度阈值 |
| `HOME_JOINTS` | 机械臂 Home 关节位 |
| `place_positions` | 番茄放置位 |
| `SCISSORS_ENABLED` | 是否启用末端剪刀/夹爪动作 |
### `control_core.py`
核心业务逻辑负责设备连接、视觉检测、坐标转换、机械臂动作、AGV 控制和资源释放。
主要模块:
- `PlacementManager`:管理放置位。
- `DetectedTomato` / `TomatoCandidate`:保存检测目标、关键点、深度和坐标信息。
- `RobotArmController`:封装机械臂回 Home、移动到预抓取点、抓取点和放置点等动作。
- `VisionController`:封装 RealSense 采集、YOLO pose 检测、关键点筛选、深度读取、坐标转换和抓取触发。
- `AgvController`:封装 AGV 获取控制权、前进、停止和清理。
核心状态由 3 个 `threading.Event` 协调:
| 状态 | 说明 |
| --- | --- |
| `running` | 系统总运行开关 |
| `has_tomato` | 视觉线程发现候选番茄后置位,通知 AGV 停车 |
| `picking_done` | 本轮抓取放置完成后置位,允许 AGV 继续前进 |
简化流程:
```text
连接机械臂
-> 连接 AGV 并获取控制权
-> 初始化 RealSense
-> 加载 YOLO 模型
-> 启动视觉线程和 AGV 线程
-> AGV 前进巡检
-> 视觉发现成熟番茄
-> AGV 停止
-> 视觉计算采摘点和抓取角度
-> 机械臂抓取并放置
-> 机械臂返回 Home
-> AGV 继续前进
```
## 环境依赖
建议在 Windows 环境下运行,并提前安装设备 SDK。
主要 Python 依赖:
```text
opencv-python
numpy
Pillow
ultralytics
pyrealsense2
pyaubo_sdk
pyaubo_agvc_sdk
```
`tkinter``threading``ctypes``signal` 等为 Python 标准库或随 Python 发行版提供。
可参考安装方式:
```bash
pip install opencv-python numpy Pillow ultralytics pyrealsense2
```
`pyaubo_sdk``pyaubo_agvc_sdk` 通常需要按设备厂商提供的 SDK 包安装。
## 启动方式
### 1. 启动图形界面
推荐使用 UI 启动:
```bash
python main.py
```
界面中可执行:
- `启动程序`运行完整采摘流程会连接机械臂、AGV、RealSense 并加载 YOLO。
- `视觉测试`:只测试相机采集和 YOLO 检测,不启动机械臂与 AGV。
- `停止程序`:停止当前任务并释放资源。
- `保存参数`:将当前 UI 参数写入 `ui_settings.json`
### 2. 直接启动核心流程
如果不需要 UI也可以直接运行
```bash
python control.py
```
这种方式会使用 `control.py` 顶部定义的默认参数,不读取 UI 输入。
## 模型文件
默认模型路径为:
```text
best.pt
```
可以将模型文件放在项目根目录,也可以在 UI 中选择任意 `.pt` 文件。使用绝对路径时,请确认路径在当前机器上存在。
当前 `ui_settings.json` 中保存的模型路径和背景图路径可能来自其他电脑或旧目录,首次运行前建议在 UI 中重新选择。
## 参数保存与传递
UI 参数传递流程:
```text
main.py
-> 保存到 ui_settings.json
-> 写入 control.py 模块变量
-> control.py 调用 _sync_config()
-> control_core.configure()
-> control_core.main()
```
因此:
- 从 UI 启动时,以界面中的参数为准。
- 直接运行 `control.py` 时,以 `control.py` 中写死的默认参数为准。
- 如果修改了 `control.py` 的默认值,需要重新启动程序才会生效。
## 运行前检查
完整流程会控制真实硬件,启动前请确认:
- AUBO 机械臂、AGV、RealSense 相机均已连接,并能被对应 SDK 访问。
- `ROBOT_IP``AGV_IP`、端口号与现场设备一致。
- `HOME_JOINTS`、手眼标定矩阵 `R_tc` / `T_tc`、放置位 `place_positions` 已按现场设备校准。
- YOLO 模型路径正确,且模型类别与关键点定义符合当前采摘逻辑。
- 调试视觉效果时优先使用 `视觉测试`,确认画面和检测结果稳定后再运行完整采摘流程。
## 辅助脚本
`tools/` 目录提供了一些调试脚本:
- `realsense_record_video.py`:录制 RealSense 视频。
- `video_to_rgb_frames.py`:从视频中导出 RGB 图片帧。
- `aubo_joint_position.py`:辅助读取/查看 AUBO 机械臂关节位置。
这些脚本主要用于采集数据、调试相机和校准机械臂位姿。