1. 项目概述
作为一名参加过三届智能车竞赛的老兵,我想用这篇日记记录下从菜鸟到老司机的完整成长历程。第一次参赛时连PID是什么都不知道,到第三年带队拿下分区赛一等奖,这中间踩过的坑、熬过的夜、烧过的芯片,都是最珍贵的实战经验。
智能车竞赛本质上是一场软硬件结合的极限挑战,需要在规定时间内让一辆巴掌大的小车自主完成赛道识别、路径规划、速度控制等任务。别看车小,里面包含了嵌入式开发、自动控制、图像处理、机械结构等多项技术,是工科生检验综合能力的绝佳试金石。
2. 第一年参赛:从零开始的懵懂期
2.1 硬件选型的教训
第一次参赛时,我们组三个大二学生选择了最基础的电磁组。当时天真地以为淘宝买个现成车模就能轻松完赛,结果开箱后发现只有个光秃秃的底盘。舵机是MG995这种大路货,电机连编码器都没有,最要命的是主控板用的还是过时的K60芯片。
关键教训:一定要研究透竞赛规则,官方指定的芯片型号每年都可能调整。我们第一年就吃了大亏,比赛前两周才发现规则要求必须使用新款KL系列MCU。
2.2 软件开发的坎坷
调车时最痛苦的是没有系统性的开发思路。当时连基本的开发环境都搭不好,IAR的license问题折腾了两天。最基础的GPIO控制都能写出内存泄漏,更别提后来调PID时各种参数乱试。
记得第一次试跑时,小车像醉汉一样左摇右摆,最后直接冲出赛道卡在了桌腿下。后来才知道是因为:
- 没有做加速度滤波
- PWM输出频率设置错误
- 中断优先级配置冲突
3. 第二年进阶:系统化提升
3.1 硬件架构优化
吸取教训后,第二年我们选择了摄像头组,并重新设计了硬件架构:
- 主控:STM32H743(带硬件浮点运算)
- 传感器:MT9V034全局快门摄像头
- 驱动:MOSFET全桥驱动+512线编码器
- 机械:3D打印的轻量化悬架
这个配置让图像采集速度从30fps提升到120fps,电机控制精度提高了一个数量级。特别是自己设计的四层PCB主板,把原来面包板上飞线的各种干扰问题彻底解决了。
3.2 控制算法升级
最大的突破是实现了基于状态机的控制架构:
c复制typedef enum {
INIT_MODE,
CALIBRATION,
NORMAL_RUN,
EMERGENCY_STOP
} RunMode;
void MainControlLoop() {
switch(currentMode) {
case CALIBRATION:
CameraCalibration();
break;
case NORMAL_RUN:
ImageProcessing();
PathPlanning();
MotorControl();
break;
//...其他状态处理
}
}
配合改进的模糊PID算法,小车在S弯道的速度从0.8m/s提升到2.1m/s。这里有个重要参数经验值:
- 直道KP: 12-15
- 弯道KP: 8-10
- KD值通常取KP的1/5
4. 第三年蜕变:追求极致性能
4.1 图像处理优化
到第三年带队时,我们在图像算法上做了三项关键改进:
- 动态ROI(感兴趣区域)技术,将处理区域从全图缩小到1/4
- 基于跳线扫描的快速边缘检测算法
- 赛道记忆功能,对已知路径做预测补偿
这使得图像处理耗时从8ms降到了2.3ms,为控制周期争取了宝贵时间。实测在光照突变场景下,误识别率从15%降到了3%以下。
4.2 机械调校秘诀
经过多次迭代,总结出几个机械调校的黄金法则:
- 重心高度要低于轮距的1/2
- 前轮束角建议0.5-1度外八
- 后轮差速器摩擦系数控制在0.3-0.5N·m
- 电池尽量前置以增加前轮附着力
这些细节调整让我们的过弯极限速度又提高了30%,特别是在复合弯道表现非常稳定。
5. 参赛全流程指南
5.1 备赛时间轴
- T-6个月:确定组别,学习往届技术报告
- T-4个月:完成硬件选型,开始基础驱动开发
- T-2个月:实现基本循迹功能
- T-1个月:优化算法,进行压力测试
- T-2周:制作技术文档和答辩材料
5.2 现场调试技巧
比赛现场往往状况百出,这几个技巧能救命:
- 准备多种焦距的镜头(4mm/6mm/8mm)
- 带备用电机和舵机(建议至少3套)
- 用热熔胶固定所有接插件
- 准备不同摩擦系数的轮胎(60°-80°邵氏硬度)
- 带个USB小风扇给主控芯片降温
6. 常见问题解决方案
6.1 图像处理类问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 赛道边缘断裂 | 阈值设置过高 | 动态阈值算法 |
| 误识别十字弯 | 特征点不足 | 增加十字靶标检测 |
| 反光干扰 | 曝光时间过长 | 自动曝光控制 |
6.2 机械故障排查
最头疼的是偶发性死机问题,我们的排查清单是:
- 首先检查所有接地是否良好
- 用示波器看电源纹波(要<50mV)
- 检查电机碳刷火花干扰
- 确认堆栈空间是否足够
- 看门狗定时器是否启用
7. 给新手的建议
- 不要过早追求速度,先保证稳定性
- 每天保存可运行的代码版本
- 做好详细的调试日志
- 多和其他队伍交流(赛后)
- 准备个可靠的SD卡备份工具
这三年最大的体会是:智能车竞赛就像微缩版的工程项目,需要同时兼顾技术创新和工程实现。那些凌晨三点在实验室调参的日子,最终都化作了领奖台上的会心一笑。现在看到新队员遇到我们当年同样的问题时,总会想起老师那句话:"调车如修行,欲速则不达。"
