# smartcar_20th **Repository Path**: user-arthur/smartcar_20th ## Basic Information - **Project Name**: smartcar_20th - **Description**: 第20届智能车 缩微光电组别——华北赛区二等奖 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2025-05-29 - **Last Updated**: 2026-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: 智能车 ## README # 智能车项目文档 ## 项目简介 本项目是为智能车设计的一套控制系统,主要功能包括路径识别、电机控制、陀螺仪数据处理、图像处理等。项目基于嵌入式系统开发,适用于自动循迹、避障、圆环识别等场景。 ## 主要功能模块 ### 控制模块 (`control.c`) - **转向控制**:`turn(float mid, float k)` 函数用于控制车辆转向。 - **舵机控制**:`servo(float mid)` 和 `servo_control_roundabout(float mid)` 用于普通和圆环场景下的舵机控制。 - **电机控制**:`Motor_Control(int32 Speed_L, int32 Speed_R)` 和 `Final_motor_control(int32 speed, float k)` 用于控制左右电机速度。 ### 图像处理模块 (`image.c`) - **图像裁剪**:`crop_image()` 函数用于从摄像头获取图像并进行裁剪。 - **图像二值化**:`image_binaryzation(uint8_t threshold)` 函数用于将图像转换为黑白二值图像。 - **起始点检测**:`Get_Start_Point()` 函数用于检测图像中的起始点。 - **路径识别**:`Dir_Labyrinth_5()` 函数用于识别路径并返回路径点。 ### 编码器模块 (`encoder.c`) - **编码器初始化**:`encoder_init()` 函数用于初始化编码器。 - **编码器数据获取**:`encoder_data_get()` 函数用于获取编码器数据。 - **速度计算**:`Update_Wheel_Pulses()` 和 `Get_Wheel_Speed()` 用于计算车轮速度。 ### 陀螺仪模块 (`gyro.c`) - **陀螺仪初始化**:`gyro_zero_param_init()` 函数用于初始化陀螺仪参数。 - **陀螺仪数据处理**:`gyro_transform_value()` 函数用于转换陀螺仪数据。 - **积分计算**:`gyro_yaw_integral()` 和 `reset_yaw_integral()` 用于计算偏航角积分。 ### PID 控制模块 (`pit.c`) - **PID 计算**:`PID_Position()` 和 `PID_Increase()` 函数用于实现 PID 控制算法。 - **动态 PID 设置**:`dynamic_pid_value_set()` 函数用于动态调整 PID 参数。 ### 圆环识别模块 (`roundabout.c`) - **圆环状态检测**:`Detect_roundabout()` 函数用于检测是否进入圆环。 - **圆环路径识别**:`Loop_tarck()` 函数用于识别圆环路径。 - **圆环状态更新**:`Update_Roundabout_Dir()` 函数用于更新圆环方向。 ### 显示模块 (`display.c`) - **图像显示**:`display_image_page1()` 函数用于显示图像页面。 - **PID 参数显示**:`display_pid_page2()` 函数用于显示 PID 参数。 - **用户界面更新**:`UI_display_page()` 函数用于更新用户界面。 ### 点线识别模块 (`dotted_line.c`) - **点线状态识别**:`determine_dotted_link_mood()` 函数用于识别点线状态。 - **路径连接**:`Link_up_line()` 和 `Link_left_line()` 用于连接路径。 ### 元素识别模块 (`element.c`) - **路径点识别**:`row_col_element_find()` 函数用于识别路径点。 - **路径点计算**:`calculate_weighted_midpoint()` 函数用于计算路径中点。 ### 闪存模块 (`flash.c`) - **断路记忆**:`flash_break_road_1_memery_angle()` 等函数用于存储断路角度。 - **断路读取**:`flash_road_1_read_get()` 等函数用于读取断路数据。 ### 初始化模块 (`init.c`) - **系统初始化**:`init()` 函数用于初始化系统。 ### 按键控制模块 (`key_control.c`) - **按键处理**:`car_start()` 函数用于处理启动按键。 - **页面切换**:`exchange_show_page_control()` 函数用于切换显示页面。 ### 电机模块 (`motor.c`) - **电机初始化**:`motor_init()` 函数用于初始化电机。 - **电机速度设置**:`L_motor_set_speed()` 和 `R_motor_set_speed()` 用于设置左右电机速度。 ### 状态机模块 (`process.c`) - **状态识别**:`determine_tracking_state()` 函数用于识别当前状态。 - **状态处理**:`Line_track_solution()` 和 `roundabout_solution()` 用于处理不同状态下的路径跟踪。 ### 低通滤波器 (`function.c`) - **滤波器初始化**:`LPF_InitByAlpha()` 和 `LPF_InitByFrequency()` 用于初始化低通滤波器。 - **滤波器更新**:`LPF_Update()` 函数用于更新滤波器输出。 ## 使用说明 ### 硬件要求 - 支持摄像头输入(如 MT9V03X)。 - 陀螺仪模块(如 ICM20602)。 - 编码器模块。 - 舵机和电机驱动模块。 ### 软件要求 - 支持 C 编译器(如 GCC、IAR)。 - 嵌入式操作系统(如 FreeRTOS)。 ### 编译与部署 1. 使用 IAR 或 GCC 编译器打开项目。 2. 配置硬件参数(如摄像头分辨率、陀螺仪偏移值等)。 3. 编译并烧录到目标设备。 ### 运行流程 1. 系统初始化(包括摄像头、陀螺仪、编码器等)。 2. 进入主循环,实时获取图像和传感器数据。 3. 根据图像识别路径并计算中点。 4. 使用 PID 控制舵机和电机。 5. 在 OLED 或 TFT 屏幕上显示图像和调试信息。 ## 调试与优化 ### 调试工具 - 使用 `display.c` 中的函数在屏幕上显示图像和参数。 - 使用 `key_control.c` 中的按键切换调试页面。 ### 参数调整 - **PID 参数**:在 `pit.c` 中调整 `Kp_base` 和 `Kd_base`。 - **图像阈值**:在 `image.c` 中调整 `th1` 和 `th`。 - **陀螺仪偏移**:在 `gyro.c` 中调整 `gyro_zero_param`。 ## 版本与更新 - **版本 1.0**:基础功能实现,包括路径识别、PID 控制、图像处理等。 - **版本 1.1**:增加圆环识别功能。 - **版本 1.2**:优化图像处理算法,提高识别精度。 ## 贡献指南 欢迎提交 Pull Request 来改进项目。请确保代码风格与现有代码一致,并提供详细的注释。 ## 许可证 本项目采用 GPL-3.0 许可证。详见 `GPL3_permission_statement.txt`。