Files

7.6 KiB
Raw Permalink Blame History

TomatoPick 番茄采摘系统

TomatoPick 是一个面向番茄自动采摘实验的 Python 运行端项目。项目集成 Tkinter 参数界面、Intel RealSense RGB-D 相机、YOLO pose 检测、AUBO 机械臂控制和 AGV 移动平台控制,用于完成“巡检、发现番茄、停车、定位、抓取、放置、继续巡检”的闭环流程。

当前仓库的主要入口是:

  • main.py:图形界面入口,推荐日常调试和运行使用。
  • control.py:兼容入口和配置桥接层,负责把 UI 或外部脚本设置的参数同步给核心逻辑。
  • control_core.py设备连接、视觉检测、坐标转换、机械臂动作、AGV 控制和采摘状态机。

项目结构

TomatoPick/
├── main.py                 # Tkinter 图形界面入口
├── control.py              # UI 与核心逻辑之间的配置转发/兼容入口
├── control_core.py         # RealSense、YOLO、机械臂、AGV 与采摘状态机
├── start_tomatopick.bat    # Windows 双击启动脚本
├── ui_settings.json        # UI 参数缓存,运行后会保存/更新
├── models/                 # YOLO 模型文件
│   ├── best.pt
│   ├── V1.0_s.pt
│   ├── V2.0_s.pt
│   ├── V2.1_s.pt
│   └── yolo11n-pose.pt
├── tools/
│   ├── pip_install.txt             # 依赖安装命令参考
│   ├── 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 巡检、视觉检测、AGV 停车、深度定位、机械臂抓取、放置、回 Home、AGV 继续前进。
  • 支持“视觉测试”模式,只启动 RealSense 和 YOLO 推理,不连接机械臂和 AGV适合先调试模型与相机画面。
  • 在 UI 中实时显示运行日志、终端输出和相机检测画面。
  • 通过 ui_settings.json 保存上一次 UI 参数,便于下次启动恢复。

核心流程

完整流程由 control_core.main() 启动,内部会依次完成:

连接机械臂
  -> 机械臂尽量回到 Home
  -> 连接 AGV 并获取控制权
  -> 初始化 RealSense
  -> 加载 YOLO pose 模型
  -> 启动视觉线程和 AGV 线程
  -> AGV 前进巡检
  -> 视觉发现候选番茄后通知 AGV 停车
  -> 视觉计算采摘点、深度和抓取角度
  -> 机械臂抓取并放置
  -> 机械臂返回 Home
  -> AGV 继续巡检

线程间主要通过 3 个事件协作:

状态 说明
running 系统总运行开关
has_tomato 视觉线程发现候选番茄后置位,通知 AGV 停车
picking_done 本轮抓取放置完成后置位,允许系统进入下一轮巡检

环境依赖

建议在 Windows 环境下运行,并提前安装 RealSense、AUBO 机械臂和 AGV 所需 SDK。

主要 Python 依赖包括:

Pillow
opencv-python
numpy
pyrealsense2
pyaubo_sdk
pyaubo_agvc_sdk
ultralytics

tkinterthreadingctypessignal 等为 Python 标准库或随 Python 发行版提供。

可以参考 tools/pip_install.txt 安装依赖。CPU 环境示例:

python -m pip install pillow==11.2.1 opencv-python==4.10.0.84 numpy==2.0.0 pyrealsense2==2.55.1.6486 pyaubo_agvc_sdk==0.2.0 pyaubo_sdk==0.24.1 ultralytics==8.3.112 -i https://pypi.tuna.tsinghua.edu.cn/simple

如需 GPU 版本 PyTorch请先按本机 CUDA 版本安装 torchtorchvisiontorchaudio,再安装其余依赖。

启动方式

1. 启动图形界面

推荐使用 UI 启动:

python main.py

Windows 下也可以直接双击项目根目录中的:

start_tomatopick.bat

该脚本会先自动切换到脚本所在目录,再执行 python main.py。因此把整个项目移动到其他目录或其他电脑后,只要 start_tomatopick.bat 仍和 main.py 在同一目录,就不需要手动修改项目路径。

如果需要桌面入口,可以自行在桌面创建快捷方式,并把目标指向 start_tomatopick.bat

界面中主要按钮:

  • 启动程序运行完整采摘流程会连接机械臂、AGV、RealSense 并加载 YOLO。
  • 视觉测试:只测试相机采集和 YOLO 检测,不启动机械臂和 AGV。
  • 停止程序:停止当前任务并释放资源。
  • 保存参数:将当前 UI 参数写入 ui_settings.json,并同步到运行中的配置入口。
  • 保存位置:保存当前放置位姿 [x, y, z, roll, pitch, yaw]

2. 直接启动核心流程

如果不需要 UI也可以直接运行

python control.py

这种方式使用 control.py 顶部定义的默认参数,不读取 UI 输入。

参数说明

control.py 是当前项目的主要可调参数入口。常用参数如下:

参数 说明
ROBOT_IP / ROBOT_PORT AUBO 机械臂连接地址
AGV_IP / AGV_PORT AGV 连接地址
AGV_SPEED_FORWARD AGV 前进速度
AGV_SPEED_STOP 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 番茄放置位姿列表,当前 UI 使用第一个放置位
SCISSORS_ENABLED 是否启用末端剪刀/夹爪动作

UI 参数传递链路:

main.py
  -> 保存到 ui_settings.json
  -> 写入 control.py 模块变量
  -> control.py 调用 _sync_config()
  -> control_core.configure()
  -> control_core.main()

因此:

  • 从 UI 启动时,以界面中的参数为准。
  • 直接运行 control.py 时,以 control.py 中的默认参数为准。
  • ui_settings.json 中的模型路径和背景图路径可能来自其他电脑或旧目录,首次运行前建议在 UI 中重新选择。

模型文件

项目默认模型路径为:

best.pt

仓库中的 models/ 目录已包含多份 .pt 模型。可以将目标模型放在项目根目录并使用 best.pt,也可以在 UI 中选择 models/ 下或其他位置的 .pt 文件。

当前视觉逻辑使用 YOLO pose 的关键点:

  • 第 0 个关键点:采摘点 cutpoint
  • 第 1 个关键点:方向端点 endpoint

模型类别、关键点顺序和训练定义需要与上述逻辑一致。

运行前检查

完整采摘流程会控制真实硬件。启动前请确认:

  • AUBO 机械臂、AGV、RealSense 相机均已连接,并能被对应 SDK 访问。
  • ROBOT_IPAGV_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 机械臂关节位置。
  • pip_install.txt:依赖安装命令参考。