站内搜索
发作品签到
2025全国大学生电子设计大赛K题-自动避障小车-(全网行进速度最快)

分类

技术干货

2025全国大学生电子设计大赛K题-自动避障小车-(全网行进速度最快)

原创精选
1.3k
4
4
1

简介

基于 K230与STM32的视觉导航小车,融合YOLO11识别、A*路径规划与双闭环控制,实现黑白柱检测、地图构建与自主避障导航的完整嵌入式智能系统。

简介:基于 K230与STM32的视觉导航小车,融合YOLO11识别、A*路径规划与双闭环控制,实现黑白柱检测、地图构建与自主避障导航的完整嵌入式智能系统。
更新时间:2026-07-02 09:50:05

【2025电赛K题开源】基于 K230 + STM32 的视觉导航自动避障小车

这是一辆为 2025 全国大学生电子设计竞赛 K 题设计的视觉导航避障小车。

它要完成的任务并不只是“能跑”,而是要在随机摆放黑白圆柱的九宫格场地中,自己看懂赛场、生成地图、选择路线,并稳定避障到达目标区域。

项目最终采用 K230 + STM32F407 双处理器架构:K230 负责视觉识别和路径决策,STM32 负责底盘控制和状态执行。视觉端使用 YOLO11 识别黑白柱,控制端使用编码器反馈和双闭环控制,让小车从“看得见”真正走到“走得准”。

项目已完整开源
GitCode:https://gitcode.com/Embodied-AI-Workshop/Auto_Hide_Car
演示视频:
BillBill:https://www.bilibili.com/video/BV17XTu65Esx/


1. 项目亮点

这个项目比较有意思的地方在于,它不是单独验证某个算法,而是把视觉、规划、通信、控制和整车联调都串成了一个闭环。

亮点说明
K230端AI识别使用 YOLO11 识别黑柱、白柱,减少光照变化对识别的影响
九宫格地图构建根据检测框中心点聚类,自动生成赛场地图
Route路径模板将路径规划简化为稳定路线选择,降低底盘执行难度
STM32双闭环控制位置 PD + 速度 PI,让小车走得更稳
状态机异常恢复增加超时、fallback 和恢复机制,避免整车联调时卡死

一句话概括:

K230负责看懂赛场,STM32负责把路线稳稳跑出来。

2. 项目效果

小车上电后的完整流程如下:

摄像头采集
  -> YOLO11识别黑白柱
  -> 生成九宫格地图
  -> 路径决策
  -> UART发送运动指令
  -> STM32执行双闭环控制
  -> 自主完成避障导航

50b45c9b817622bdc5c81b7685d08aa.jpg

动画_compressed.gif

整体演示_compressed.gif

赛题场地为固定 3x3 九宫格区域,黑白圆柱随机放置。小车需要自动识别柱子位置,建立地图,规划或选择通行路线,并避开障碍物行驶至目标区域。

Pasted image 20260627150832.png


3. 系统架构

项目采用双处理器架构:

模块主要职责
K230摄像头采集、YOLO11推理、目标坐标提取、九宫格地图生成、路径决策
STM32F407UART接收、状态机调度、编码器采样、PD/PI控制、电机驱动

这样分工的核心原因很直接:视觉计算量大,底盘控制又特别吃实时性。如果把所有任务都压在一个处理器上,视觉推理一旦卡顿,控制周期就会抖,小车轨迹也会跟着飘。

所以我们把系统拆成两层:

  • K230 做“上层感知和决策”;
  • STM32 做“底层控制和执行”。

系统主流程:

摄像头
  -> YOLO11识别
  -> 目标中心点提取
  -> 九宫格地图生成
  -> 路径决策
  -> UART通信
  -> STM32状态机
  -> PD位置环
  -> PI速度环
  -> 电机驱动
  -> 编码器反馈
  -> 回到控制闭环

4. 硬件组成

模块型号 / 说明
AI视觉处理器K230
主控STM32F407VET6
摄像头OV5640
电机四驱减速电机
编码器霍尔编码器
电源2S锂电池

Pasted image 20260627190022.png

41614f8d371b10474239a7adc4df90f.jpg

为什么选择 K230

项目初期考虑过 OpenMV 和树莓派,但最终放弃:

  • OpenMV 做颜色阈值识别时,对光照、阴影和反光非常敏感;
  • 树莓派性能足够,但功耗、体积和现场部署成本更高;
  • K230 自带 AI 加速能力,适合部署 YOLO 类目标检测模型。

所以视觉端最终选择 K230,将黑白柱识别问题从“调阈值”转为“目标检测”。

为什么选择 STM32

底盘控制最重要的是实时性。STM32 定时器、PWM、编码器接口和中断资源成熟,适合承担运动控制和状态执行任务。视觉结果由 K230 计算,STM32 只接收明确的运动指令并稳定执行。


5. 视觉识别与地图构建

从颜色识别到 YOLO11

最开始我们也走过很常见的路线:HSV 阈值分割、颜色检测、简单规则判断。实验室里看起来没问题,甚至还会给人一种“这题好像不难”的错觉。

但一换到真实场地,问题立刻出现:

  • 光照变化会导致阈值失效;
  • 阴影会让白柱和地面混在一起;
  • 反光会带来误检;
  • 遮挡和视角变化会让规则方法不稳定。

也就是说,颜色识别不是完全不能用,而是太依赖现场环境。为了让系统更稳,最终改用 YOLO11 目标检测方案,只训练两个类别:

black pillar
white pillar

Pasted image 20260627150520.png

545c694c837055f2e06b70688b4465b.png

6fe8187aa07da97853197cc8110070f.png

b77309a4ec2ad0af1c21313120a9f6f.jpg

识别流程:

摄像头采集 -> YOLO11推理 -> NMS去重 -> 输出检测框 -> 提取中心点 -> 生成九宫格地图

70833df11c728ba6a282dc93a34e8f6.jpg

最大的问题:斜视摄像头

比赛中摄像头安装在小车前方,看到的是斜视图,而不是俯视图。

这是整个项目里最容易被低估的问题之一:YOLO 的检测框明明是对的,但九宫格地图还是会错。

原因在于,斜视画面存在透视关系。远处柱子的像素距离会被压缩,近处柱子的间距会被拉大。如果直接按 X 或 Y 坐标排序,就会把真实空间里的格子顺序排乱。

30dd2c51d9b0f1d49e5a9e9a5d23ef2.jpg

70833df11c728ba6a282dc93a34e8f6.jpg

173d50db3d23d906b85b2c0215894c4.jpg

最终采用自适应聚类方法,根据目标中心点的空间分布自动分组,再生成九宫格状态。这个改动之后,识别结果才真正从“检测框正确”变成“地图正确”。

九宫格生成流程:

检测结果 -> 提取中心点 -> 自适应聚类 -> 行列映射 -> 九宫格地图

示例地图输出:

white black white
black white black
black black white

这部分是整个视觉系统中最关键的工程问题之一。目标检测解决的是“看见柱子”,九宫格映射解决的是“理解柱子在赛场中的真实位置”。


6. 路径决策方案

项目中尝试过两类路径方案:A* 路径规划和规则 Route 模板。

A* 路径规划

A* 的思路是将九宫格建模为图结构,把黑色柱子视为不可通行节点,通过启发式函数搜索从起点到终点的路径。

A* 搜索流程:

开始 -> Open表 -> 取最小F节点 -> 扩展相邻节点 -> 到达终点 -> 生成路径

6e7182c98cb6e61727ae8c493acc642.png

A* 的优点是泛化能力强,理论上能处理更多障碍分布。但在实际小车系统里,算出路径只是第一步,底盘能不能稳定执行才是更现实的问题。

对于固定九宫格赛题,完全动态的路径输出会让控制端面对更多变化,调试成本也会增加。

规则 Route 模板

为了提高稳定性,后续方案将路径搜索问题简化为规则决策问题:K230 根据九宫格状态直接选择预定义路线,STM32 只负责执行对应轨迹。

这个思路听起来没有 A* 那么“通用”,但非常适合电赛:场地规则固定、目标明确、稳定优先。与其追求每次都算一条理论最优路径,不如把路线模板提前调稳,让小车每次都按熟悉的轨迹走。

对比项A*路径规划规则Route模板
决策方式图搜索规则映射
输出结果动态路径Route编号
实时性中等
控制端执行路径变化较多轨迹固定、易调试
适用场景障碍分布复杂固定九宫格任务

Route 层最终保留四类路线:

Route作用典型场景
Route1左绕路线左侧通道优先
Route2右绕路线右侧通道优先
Route3直行或轻微调整前方通畅或轻度障碍
Route4备用绕行路线复杂或不确定场景

四条预定义路线如下:

路线一.png

路线二.png

路线三.png

路线四.png

核心判断区域是前方三格:

front = current_map[6:9]

常见规则示例:

[0, 0, 0] -> Route3
[1, 1, 1] -> 根据左右通道选择 Route1 / Route2 / Route4
[1, 0, 0]、[0, 1, 0]、[0, 0, 1] -> 结合左右列状态选择绕行或微调

规则 Route 模板的本质,是把“路径规划问题”降维为“有限规则决策 + 稳定轨迹执行”。对于电赛这种规则明确、场地固定的任务,这比追求通用最优路径更容易稳定落地。


7. STM32 运动控制

视觉和路径决策只能告诉小车“往哪里走”,真正决定比赛表现的是底盘能不能稳定、准确地走到目标位置。

这一部分也是从“能跑”到“能比赛”的关键。刚开始小车能动起来会很开心,但真正联调时才会发现:能动不代表能走准,能走准不代表每次都稳定。

实际调试中遇到的主要问题包括:

  • 电机非线性;
  • 地面摩擦变化;
  • 编码器噪声;
  • 转向惯性;
  • 左右轮响应不一致。

这些问题会让理论路径和实际轨迹产生明显偏差。

第一版:单环 PID

最初方案是直接用位置误差控制 PWM:

目标位置 -> PID -> PWM -> 电机

这一版最大的优点是简单,小车确实能动起来;最大的问题也是简单,轨迹偏移严重,到点后容易抖动,无法稳定停车。问题在于位置误差被直接转换为电机输出,中间缺少速度约束,控制过于粗暴。

第二版:位置 PID

加入编码器位置反馈后,小车的位置控制有所改善,但仍然存在超调、回摆和 S 型修正问题。根本原因仍然是控制结构缺少速度层,位置误差一大,输出就容易过激。

第三版:位置 PD + 速度 PI 双闭环

最终稳定方案采用双闭环控制。它的思路是先由位置环算出“应该跑多快”,再由速度环把电机速度稳住:

目标位置
  -> 位置误差
  -> PD位置环输出目标速度
  -> 速度误差
  -> PI速度环输出PWM
  -> 电机执行
  -> 编码器反馈

双闭环控制流程:

目标位置
  -> PD位置环
  -> 目标速度
  -> PI速度环
  -> PWM输出
  -> 电机
  -> 编码器反馈
  -> 回到位置环和速度环

位置环负责“该往哪里走”,速度环负责“以什么速度稳定地走”。PD 位置环避免积分带来的位置振荡,PI 速度环用于消除电机速度稳态误差。这个结构比单环 PID 更容易调参,也更适合四驱小车的实际运动。


8. 关键踩坑总结

下面这些问题基本都是整车联调时一点点踩出来的。单看代码时不一定明显,但一上车跑,问题就会非常真实地表现出来。

问题现象根本原因最终解决方案
颜色识别不稳定光照变化后误检、漏检HSV阈值强依赖环境改用 YOLO11 目标检测
九宫格映射错位检测框正确,但地图顺序错误摄像头斜视导致坐标非线性使用自适应聚类生成九宫格
转向严重过冲左右来回摆动,难以对准单环控制过激,未处理惯性分阶段控制,降低过冲
积分项导致震荡到点后持续抖动积分累积和编码器噪声被放大限幅积分、误差死区、必要时冻结积分
状态机偶发卡死小车停止运动但无明显报错状态切换条件不完整,异常无出口增加超时、watchdog 和 fallback 状态

这些问题说明:机器人系统不是单个算法正确就能稳定运行。视觉、路径、通信、控制和状态机必须一起闭环,任何一个环节不稳定,最终都会体现在车辆行为上。


9. 开发过程复盘

项目整体经历了五个阶段:

阶段目标结果
颜色识别验证快速让小车识别柱子实验室可用,真实环境失败
引入 YOLO11提高视觉鲁棒性识别稳定性明显提升
地图构建 + A*让小车自动找路路径能算出,但执行不够稳定
Route模板 + 双闭环提高运动稳定性路线执行更可控
整车联调解决通信、状态机和异常恢复系统稳定完成任务

回头看,整个项目不是一次性设计出来的,而是被问题一步步推着改出来的。最重要的认识是:

算法正确 != 系统稳定

在真实小车上,能跑起来只是第一步。真正困难的是让系统在光照变化、摩擦变化、通信延迟和控制误差存在的情况下,仍然保持可恢复、可调试、可重复运行。


10. 开源资料

项目开源内容包括:

  • K230 端源码;
  • STM32 端源码;
  • YOLO11 模型;
  • 数据集;
  • 原理图;
  • 技术文档;
  • 调试记录。

开源地址:

https://gitcode.com/Embodied-AI-Workshop/Auto_Hide_Car

11. 总结

这个项目把 AI 视觉、地图构建、路径决策、嵌入式控制和整车联调完整串在了一起。前期看起来只是“识别柱子并避障”,真正做起来才发现,它本质上是一套小型机器人系统。

最终方案可以概括为:

K230负责看懂赛场
STM32负责稳定执行
YOLO11解决识别鲁棒性
聚类映射解决九宫格定位
Route模板降低路径执行难度
双闭环控制保证底盘稳定

希望这份开源项目能给后续做电赛、智能车和机器人方向的同学一些参考,也欢迎交流和改进。

添加到专辑
0
0
分享
侵权投诉

附件

序号文件名称下载次数
1
K230源码.zip
31
2
训练模型.kmodel
15

评论

全部评论(1
按时间排序|按热度排序

底部导航