# 2025年电赛E题云台与视觉 **Repository Path**: xiaoqi472/Start ## Basic Information - **Project Name**: 2025年电赛E题云台与视觉 - **Description**: 2025年电赛E题云台与视觉(省一、基础题满分) 不是很优秀,供大家参考 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-22 - **Last Updated**: 2025-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云台控制 这是一个基于 STM32F407 的嵌入式项目,主要用于控制云台。该项目使用了 STM32 HAL 库和 PID 控制算法。 ## 功能特性 - 使用 UART 进行通信 - 使用 PID 控制算法进行精确控制 - 支持任务调度 - 支持步进电机控制 - 支持 Emm_V5 设备控制 ## 目录结构 - **Core** - 包含核心 STM32F4 系列芯片的驱动代码 - **Drivers** - 包含 STM32F4xx HAL 驱动和 CMSIS 核心文件 - **User** - 包含用户自定义模块和应用程序 - **build** - 构建输出目录 - **CMakeLists.txt** - CMake 构建配置文件 ## 主要模块 ### 用户应用程序 (User/APP) - **pid_app.c/h** - PID 控制应用 - **scheduler.c/h** - 任务调度器 - **user_uart.c/h** - UART 通信处理 ### 用户模块 (User/Module) - **Emm_V5.c/h** - Emm_V5 设备控制 - **pid.c/h** - PID 控制算法实现 - **step_motor_bsp.c/h** - 步进电机控制 ## 依赖项 - STM32F4xx HAL 驱动库 - CMSIS 核心文件 ## 构建说明 使用 CMake 进行构建,具体步骤如下: 1. 安装 CMake 2. 创建构建目录并进入 3. 运行 `cmake ..` 4. 运行 `make` ## 使用说明 1. 初始化 UART 通信 2. 初始化 PID 控制 3. 初始化步进电机 4. 启动任务调度器 ## 视觉代码 version_1.py为视觉代码,使用MaixVision软件平台和MaixCam硬件平台 # 视觉跟踪系统 ## 项目概述 这是一个基于MaixPy框架的实时视觉跟踪系统,主要用于检测矩形目标并计算目标中心与预设基准点的偏差。系统支持透视变换显示和原图标记两种显示模式,并通过串口实时输出误差数据。 ## 核心功能 ### 1. 矩形目标检测 - 使用OpenCV进行图像预处理(高斯模糊、边缘检测) - 轮廓检测和多边形近似识别矩形 - 按面积大小排序,优先处理最大矩形 - 提取矩形的角点、中心点、面积和周长信息 ### 2. 透视变换 - 支持对检测到的矩形进行透视变换 - 将倾斜的矩形校正为正视图 - 提供透视变换的逆变换功能 ### 3. 误差计算与输出 - 计算目标中心与预设十字标记的x、y轴偏差 - 通过串口(115200波特率)实时输出误差数据 - 数据格式:`xerr=X,yerr=Y` ### 4. 双显示模式 - **透视变换模式**:显示校正后的矩形视图 - **原图标记模式**:在原图上标记检测结果和十字基准 ## 硬件要求 - 支持MaixPy的开发板(如K210系列) - 摄像头模块(320×240分辨率) - 显示屏模块 - 串口通信接口 ## 软件依赖 ```python from maix import camera, display, app, time, image, pinmap, uart import cv2 import numpy as np import struct ``` ## 核心参数配置 ### 图像处理参数 ```python process_every_n_frames = 2 # 每2帧处理一次,优化性能 screen_width = 320 # 屏幕宽度 screen_height = 240 # 屏幕高度 ``` ### 十字标记参数 ```python cross_x = 160 # 十字x坐标(动态计算) cross_y = 106 # 十字y坐标(固定) cross_size = 10 # 十字大小 cross_color_green = (0, 255, 0) # 绿色标记 ``` ### 检测参数 ```python # 边缘检测阈值 cv2.Canny(blurred, 60, 180) # 多边形近似精度 epsilon = 0.02 * perimeter # 最小面积阈值 if area > 500: ``` ## 算法流程 ### 1. 图像预处理 1. 读取摄像头图像 2. 转换为灰度图 3. 高斯模糊降噪 4. Canny边缘检测 ### 2. 矩形检测 1. 查找轮廓 2. 多边形近似(4个角点) 3. 面积过滤 4. 按面积排序 ### 3. 透视变换(可选) 1. 提取最大矩形的角点 2. 按左上、右上、右下、左下顺序排列 3. 计算透视变换矩阵 4. 应用变换得到校正图像 ### 4. 误差计算 - **透视模式**:计算透视中心与图像中心的偏差 - **原图模式**:基于矩形周长动态计算十字x坐标 ```python cross_x = int(-0.065 * perimeter + 171.5 - 1) ``` ### 5. 数据输出 - 计算x轴和y轴误差 - 通过串口发送格式化数据 - 实时显示处理结果 ## 关键函数说明 ### `order_points(pts)` 按照左上、右上、右下、左下的顺序重新排列矩形角点。 ### `find_rectangles(gray_img)` 在灰度图中检测所有符合条件的矩形,返回按面积排序的矩形列表。 ### `perspective_transform(img, src_points, width, height)` 对图像执行透视变换,返回校正后的图像和变换矩阵。 ### `calculate_and_print_error(cross_pos, rect_center)` 计算目标偏差并通过串口输出,返回x、y轴误差值。 ## 使用方法 1. 确保硬件连接正确 2. 上传代码到MaixPy设备 3. 运行程序 4. 将矩形目标放置在摄像头视野内 5. 通过串口监控误差输出数据 6. 可通过修改`show_perspective`变量切换显示模式 ## 性能优化 - 采用间隔帧处理策略减少计算负担 - 按面积排序优先处理最大目标 - 使用适当的图像处理参数平衡速度与精度 ## 注意事项 - 确保目标矩形面积大于500像素以避免误检 - 串口波特率需与接收端匹配(115200) - 光照条件会影响检测效果,建议在稳定光源下使用 - 目标矩形应具有清晰的边缘轮廓 ## 许可证 该项目使用 MIT 许可证,请参阅项目根目录下的 LICENSE 文件获取详细信息。