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/detection | ROS2 数据摄入接口 |
| 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 | 前端任务元数据 |
DetectionRecord | ROS2 原始检测数据 + 图像路径 |
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)