智能两轮自平衡车项目学习计划

从 STM32 硬件底座到 PID 闭环、上下位机通信与 Python 视觉,最终完成整车联调。策略为「前期重跑通、后期重调参」——每次学习留下可运行代码、波形截图或简短总结。

5.25 — 6.27 · 项目专项
每三天一次 每次 1—2 小时 不含课业安排

📚 一、整体学习计划

学习框架 · 全周期

整体目标是从「认识 STM32 开发环境与基础外设」出发,逐步掌握姿态传感器读取、PID 闭环控制、上下位机通信与 Python 视觉辅助,最终完成智能两轮自平衡车的整车联调,实现平衡站立与基础循迹/跟随。5 月下旬以 STM32 底座与串口调试为主;6 月上旬以 PID 调参与通信协议为主;6 月中下旬以 OpenCV 视觉与整车集成为主。

核心模块 学习重点 阶段目标
STM32 硬件底座 GPIO、定时器、中断、I2C/SPI/UART、CubeMX 工程 能独立驱动 IMU(如 MPU6050)并稳定输出姿态数据
PID 控制算法 直立环、速度环、位置式/增量式 PID、上位机波形调参 能实现电机速度/位置闭环,并为自平衡控制打基础
通信与上位机 串口帧协议、PyQt6/Web Serial、可选 Wi-Fi/蓝牙 能实时下发控制指令并接收硬件状态,支撑调试与联调
Python 视觉 OpenCV 预处理、色彩空间、边缘检测、简单目标追踪 能实现基于颜色或形状的目标检测,并输出偏差信息
整车集成联调 硬件+控制+通信+视觉协同、失败重试与参数管理 完成平衡站立演示,并具备基础循迹/跟随扩展能力

⏱️ 二、执行节奏与学习方法

每三天一次 · 1—2 小时

每次学习建议分为理论学习、板级/代码跟练和复盘记录三个环节,尽量留下可运行代码、波形截图或一段简短总结。

学习环节 执行方式 作用
理论学习 只看当前任务相关章节,不追求一次看完 避免被过多概念拖慢进度
代码跟练 每次至少完成一个小实验,保存到同一项目仓库 形成可复用的工程积累
工具调试 练习串口助手、逻辑分析仪、Vofa+/匿名上位机或 OpenCV 窗口 建立工程排错能力
复盘整理 用 5—8 句话写清今天学会了什么、哪里还不懂 便于写项目文档和技术总结

核心模块详解

🧩 模块一 · STM32 基础与硬件底座

核心色:蓝色系

阶段目标

掌握 ARM Cortex-M 内核架构与常用外设驱动。

关键任务

  • 熟练配置 GPIO、定时器(Timer)、中断(EXIT)。
  • 掌握 I2C, SPI, UART 串行通信协议。
  • 学习使用 STM32CubeMX + Keil/VS Code 开发环境。

工程检验标准

通关条件
独立编写驱动读取 IMU 传感器(如 MPU6050)数据。

🎯 模块二 · PID 控制理论与算法实践

核心色:橘色系

阶段目标

理解闭环控制理论,具备工程调参能力。

关键任务

  • 深入理解 P(比例)、I(积分)、D(微分)各环节对系统的影响。
  • 编写位置式 PID 与增量式 PID 的 C++ 代码。
  • 学习使用匿名上位机或 Vofa+ 进行波形实时调参。

工程检验标准

通关条件
实现电机的速度闭环控制与位置闭环控制。

🌐 模块三 · 交互通信与上位机开发

核心色:紫色系

阶段目标

打通软硬件数据链路,实现跨平台交互。

关键任务

  • 设计可靠的串口通信协议(帧头、数据基、校验位)。
  • 学习 Python PyQT6 或 Web Serial API 编写交互界面。
  • 掌握基于 Wi-Fi/蓝牙的 Socket 网络通信。

工程检验标准

通关条件
开发一个可视化上位机,能实时下发控制指令并接收硬件状态。

🛰️ 模块四 · Python 进阶与图像处理

核心色:绿色系

阶段目标

引入视觉感知能力,为系统注入“眼睛”。

关键任务

  • 深入 Python 高级特性(面向对象、多线程并发、高级数据结构)。
  • 掌握 OpenCV 库:图像预处理、色彩空间转换、边缘检测。
  • 了解传统特征匹配与简单目标追踪算法。

工程检验标准

通关条件
实现基于颜色或特定形状的摄像头目标追踪程序。

🏁 模块五 · 整车集成联调

核心色:金色系

阶段目标

硬件、控制、通信与视觉协同运转,完成可演示的整车系统。

关键任务

  • 梳理硬件层、视觉层、通信层分工与数据流。
  • 在支架或辅助轮上测试直立环参数,记录多组 Kp/Ki/Kd。
  • 绘制系统框图,编写 README,说明各层接口与后续计划。

工程检验标准

通关条件
车身能短暂维持平衡或明显趋稳;团队成员能看懂数据流与接口。

📅 三、5 月学习计划(5.25 — 5.31)

STM32 底座

5 月下旬完成从「点亮 LED、串口打印」到「定时器中断」的过渡,学习重点放在 CubeMX 工程、基础外设与串口调试上。

日期 学习主题 学习任务与验收标准
5 月 25 日 开发环境与首灯实验 用 CubeMX 建工程,点亮一颗 LED,熟悉下载烧录流程。验收标准:能重复编译、下载并看到 LED 按预期闪烁。
5 月 29 日 串口通信入门 配置 UART,串口打印一句文字,电脑端用串口助手接收。验收标准:波特率、引脚与接线正确,数据稳定可读。
5 月 31 日 定时器与中断基础 用定时器产生周期中断,在中断里翻转 LED 或计数。验收标准:能说明中断与主循环的分工。

📅 四、6 月学习计划(6.1 — 6.27)

控制 · 通信 · 视觉 · 联调

6 月掌握 PID 调参、通信协议、视觉初体验并向整车联调推进。上半月重控制与通信,下半月重视觉与集成;每模块结束做通关检验再进入下一阶段。

日期 学习主题 学习任务与验收标准
6 月 1 日 PID 概念入门 弄清 P、I、D 分别管什么,阅读一篇入门文章或示例。验收标准:用自己的话解释三项作用,并写出最简单 PID 计算函数(可先不接电机)。
6 月 4 日 PID 代码与打印验证 实现位置式或增量式 PID 函数,用固定目标值打印输出验证。验收标准:输入变化时输出方向符合预期。
6 月 7 日 电机驱动与速度环 驱动电机(或电机驱动模块),尝试速度闭环。验收标准:能转起来,并用上位机或串口观察速度反馈。
6 月 11 日 直立环思路与波形调参 结合 IMU 角度,理解直立环结构;用 Vofa+ 或匿名上位机看波形。验收标准:能在仿真/静态支架上观察角度与输出关系。
6 月 15 日 串口协议设计 设计帧头、数据域、校验位的简单协议,定时发送角度/速度占位值。验收标准:收发双方解析一致。
6 月 19 日 Python 读取下位机数据 用 Python 脚本或串口助手读取并显示协议数据。验收标准:能实时刷新关键字段。
6 月 23 日 上位机界面 + 颜色识别 ① 用 PyQt6 或 Web Serial 做简单界面:显示状态、下发指令,能按钮控制模式切换或参数下发。② 识别画面中一种明显颜色(如红色贴纸),在窗口标出中心,能输出目标偏差或坐标。
6 月 27 日 平衡控制联调 在支架或辅助轮上测试直立环参数,记录多组 Kp/Ki/Kd。验收标准:车身能短暂维持平衡或明显趋稳。

🔗 五、课程与资料链接表

项目驱动优先

按「项目驱动优先、官方文档查缺补漏」使用下列资源,不必逐章从头学完。

方向 推荐资源 链接 使用建议
STM32 入门 正点原子 / 野火 STM32 教程 openedv.com 配合 CubeMX + Keil/VS Code,优先 GPIO、UART、I2C、定时器
CubeMX STM32CubeMX 用户手册 st.com · CubeMX 建工程、时钟、引脚与外设初始化
IMU MPU6050 寄存器说明 invensense.tdk.com 理解原始数据、量程与采样率
PID 调参 平衡车 PID 相关视频 B 站 · 平衡车 PID 直立环、速度环分工与调参顺序
上位机 PyQt6 官方文档 PyQt6 Docs 做显示面板与串口控件
视觉 OpenCV-Python 教程 OpenCV Python 图像读写、色彩空间、轮廓与追踪
通信 Serial 协议设计笔记 (项目组文档) 帧格式、校验、超时与重传
版本管理 Pro Git 中文版 git-scm.com/book/zh 基础命令、分支与 README

✅ 六、阶段性成果与验收标准

5 月底 · 6 月中旬 · 6 月底
时间节点 成果名称 验收标准
5 月底 硬件底座 demo LED、串口、定时器中断正常;能稳定读取 IMU 并输出
6 月中旬 控制与通信 demo PID 函数可验证;串口协议与 Python/上位机互通
6 月底 整车路线初版 视觉能标定目标;系统框图与 README 说明各层接口与后续计划

📝 七、每次学习记录模板

可复制填写

每次学习结束后保留简短记录,内容包括本次目标、实际完成、运行结果、遇到的问题、解决办法和下次任务。后续做项目汇报、比赛文档时可直接复用。

本次日期
填写学习日期,例如 6 月 7 日
本次主题
填写学习内容,例如 直立环波形调参
完成内容
写清完成了哪些实验、命令或代码提交
问题记录
写清报错、卡点或未理解的概念
解决方式
写清查了哪份资料、改了哪段代码
下次任务
写清下一次要继续完成什么

🌟 项目目标:智能两轮自平衡车

上述学习与 5—6 月日程均服务于该目标:融合硬件、算法、通信与视觉,在真实系统中协同运转。可按周任务灵活微调,与文档版学习计划保持同步。

硬件层 STM32 读取陀螺仪,通过直立环/速度环 PID 控制两轮电机维持平衡。
视觉层 树莓派/Jetson 或 PC 端运行 Python OpenCV,识别前方的特定轨道或手势。
通信层 通过交互通信将视觉处理结果下发给 STM32,实现自主寻迹或手势跟随。