1.4 项目目录结构解析
项目目录结构
Phytium-Car-STM32-Arm-onPi/
│
├── car.service # 系统服务配置文件(用于设置机器人作为系统服务启动)
├── car.sh # 启动脚本(用于启动机器人程序)
├── car_cv.py # 机器人视觉控制主逻辑(处理视觉数据并生成控制指令)
├── car_cv.yaml # Dora框架配置文件(定义节点和输入输出关系)
├── car_stop.py # 停止机器人脚本(用于停止电机)
├── color_detect.py # 颜色检测启动文件(主入口)
├── control.py # 控制模块(提供Web控制界面和Socket.IO通信)
├── index.html # Web控制界面HTML文件
├── move.py # 运动控制模块(封装运动指令发送)
├── README.md # 项目说明文件
│
├── common/ # 公共模块(数据结构和工具类)
│ ├── calculate.py # 计算类(处理目标检测结果的数据结构)
│ ├── move_data.py # 运动数据结构(用于节点间通信)
│ ├── test_move_data.py # 运动数据结构测试
│ ├── view.py # 视图数据类(用于Web显示)
│ └── __init__.py # 包初始化文件
│
├── frame/ # 存储摄像头捕获的原始帧图像
│
├── mask/ # 存储掩膜图像
│
├── motor/ # 电机控制模块
│ ├── main.py # 电机控制主程序(接收运动指令并控制电机)
│ ├── Motor.py # 电机控制基类和实现(PCA9685和Modbus)
│ ├── pyproject.toml # 电机控制模块项目配置
│ └── test.py # 电机控制测试脚本
│
├── mycv/ # 计算机视觉模块
│ ├── color.py # 颜色检测器类(识别网球)
│ ├── README.md # 模块说明
│ └── __init__.py # 包初始化文件
│
├── process/ # 存储处理后的图像
│
├── templates/ # Web模板目录
│ └── index.html # Web控制界面HTML模板
│
└── untils/ # 工具模块
├── untils.py # 工具函数(图像处理、方向转换等)
└── __init__.py # 包初始化文件
系统架构与原理
graph TD A[高清摄像头] --> B[图像采集模块] B --> C[图像预处理模块] C --> D[网球识别模块] D --> E[位置计算模块] E --> F[运动决策模块] F --> G[电机控制模块] G --> H[底盘运动执行] F --> I[机械臂控制模块] I --> J[机械臂执行] J --> K[网球收集] K --> L[状态反馈模块] L --> B L --> M[Web控制界面]
说明各模块功能:
- 图像采集模块:
- 使用OpenCV捕获视频流
- 支持多种图像编码格式(BGR8, RGB8, JPEG, PNG)
- 文件:
color_detect.py
,untils/untils.py
- 图像预处理模块:
- 高斯模糊降噪
- 中值滤波
- HSV颜色空间转换
- 形态学操作(开闭运算)
- 文件:
mycv/color.py
- 网球识别模块:
- HSV颜色阈值分割
- 轮廓检测与分析
- 圆形度计算(过滤非网球物体)
- 文件:
mycv/color.py
- 位置计算模块:
- 计算网球中心坐标
- 计算网球在图像中的比例
- 计算与图像中心的偏移量
- 文件:
car_cv.py
,common/calculate.py
- 运动决策模块:
- PID控制器实现平滑运动
- 目标丢失处理策略
- 速度平滑处理
- 文件:
car_cv.py
- 电机控制模块:
- 支持PCA9685和Modbus两种驱动方式
- 运动指令封装
- 文件:
motor/Motor.py
,move.py
- 底盘运动执行:
- 四轮底盘控制
- 前进/后退/转向执行
- 文件:
motor/main.py
- 机械臂控制模块:
- 串口通信控制
- 抓取动作序列控制
- 文件:
color_detect.py
(机械臂控制部分)
- 机械臂执行:
- 网球抓取动作
- 网球放置动作
- 文件:
color_detect.py
- 网球收集:
- 完成网球收集任务
- 重置系统状态
- 状态反馈模块:
- 实时视频流传输
- 运动数据显示
- 系统状态反馈
- 文件:
control.py
,templates/index.html
- Web控制界面:
- 摇杆控制
- 视频显示
- 状态监控
- 控制开关
- 文件:
templates/index.html
数据流说明:
视觉处理流: 摄像头 → 图像采集 → 预处理 → 网球识别 → 位置计算 → 运动决策
控制执行流: 运动决策 → 电机控制 → 底盘运动 运动决策 → 机械臂控制 → 机械臂执行 → 网球收集
反馈流: 状态反馈 → Web控制界面(用户) 状态反馈 → 图像采集(系统循环)