文章

humulus introduction

humulus introduction

Humulus 啤酒花智能巡检系统

基于 YOLOv8 的啤酒花图像分析系统,集成 ROS2 机械臂控制、FastAPI 后端和 Vue 前端。

系统架构

1
2
3
4
5
6
7
8
9
10
11
12
ROS2 (humulus_bridge)
   │
   │  HTTP POST /api/v1/ingest/detection
   ▼
FastAPI 后端
   ├─ 文件存储: data/images/, data/visualizations/
   ├─ 数据库: SQLite (data/humulus.db) via SQLAlchemy 2.0
   ├─ ETL 服务: 接收检测数据,运行分析管道,持久化结果
   └─ API: /api/v1/tasks, /api/v1/growth, /api/v1/trajectories
         |
         ▼
   Vue 前端(巡检管理、轨迹设置、生长检测)

快速开始

后端

1
2
3
4
5
# 安装依赖
uv sync

# 启动后端(端口 8001)
uv run uvicorn src.main:app --reload --port 8001

前端

1
2
3
cd frontend
npm install
npm run dev

ROS2(Docker)

1
docker compose -f docker-compose.ros2.yml up

功能模块

模块路径描述
图像分析/analysis上传图像,运行 YOLO 检测/分类,查看 9 项指标
巡检管理/inspection任务生命周期(待执行/执行中/已完成/失败),统计,急停
轨迹设置/trajectory航点编辑器(接近/悬停/拍摄),XY 预览,全局参数
生长检测/growth上传当前图像,查看检测结果,生长趋势图表,健康分布

API 接口

方法路径描述
POST/api/v1/analyze分析上传图像(全部任务)
POST/api/v1/analyze/{task}分析单个任务
GET/api/v1/models查看模型加载状态
POST/api/v1/ingest/detectionROS2 数据摄入接口
GET/api/v1/ingest/records查看检测记录
GET/api/v1/tasks查看巡检任务列表
POST/api/v1/tasks创建巡检任务
PATCH/api/v1/tasks/{id}更新任务状态/进度
DELETE/api/v1/tasks/{id}删除任务
GET/api/v1/growth/history每日汇总生长指标
GET/api/v1/growth/health-distribution健康标签分布
GET/api/v1/growth/records查看生长记录
POST/api/v1/growth/records创建生长记录
GET/api/v1/trajectories查看轨迹配置
POST/api/v1/trajectories创建轨迹配置
PATCH/api/v1/trajectories/{id}更新轨迹配置
DELETE/api/v1/trajectories/{id}删除轨迹配置

ROS2 集成

软件包

软件包职责
humulus_msgs自定义消息、服务、Action
humulus_arm通用机械臂驱动节点(Service/Action 服务端)
humulus_bridge将检测结果转换为机械臂目标

服务

服务描述
move_to_pose移动机械臂到目标位姿
get_current_pose获取当前机械臂位姿
gripper_control控制夹爪位置/力度
emergency_stop紧急停止

Action

Action描述
inspect_sequence对每个目标执行 接近 → 悬停 → 拍摄 → 撤回

数据模型

模型描述
InspectionTask前端任务元数据
DetectionRecordROS2 原始检测数据 + 图像路径
AnalysisRecord每张图像的结构化分析结果
GrowthRecord每日/每次巡检生长汇总
TrajectoryConfig保存的航点列表 + 全局参数

模型训练

1
2
3
4
5
6
7
8
# 训练叶片分类器
uv run python -m train.train_leaf_classifier

# 训练检测模型
uv run python -m train.train_detection

# 训练球果分类器
uv run python -m train.train_cone_classifier

技术栈

  • 后端: FastAPI, SQLAlchemy 2.0, Ultralytics YOLOv8
  • 前端: Vue 3, Element Plus, Axios
  • ROS2: Humble, rclpy, tf2_ros
  • 数据库: SQLite (aiosqlite)
本文由作者按照 CC BY 4.0 进行授权