站内搜索
更多
2024 全国大学生电子设计竞赛 H 题:自动行驶小车

分类

技术干货

2024 全国大学生电子设计竞赛 H 题:自动行驶小车

原创
1.1k
0
0
0

简介

基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线

简介:基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线
更新时间:2026-07-27 09:46:26

基于 MSPM0G3507 的 2024 电赛 H 题自动行驶小车|双编码器 + MPU6050 + 8 路灰度

car_hardware.jpg

一、项目简介

这是一个基于 TI MSPM0G3507 的双轮差速自动行驶小车工程,用于完成 2024 年全国大学生电子设计竞赛“自动行驶小车(H题)”的 H1~H4 路线。

项目不是单纯按固定时间开环运动,而是组合使用:

  • 左右轮正交编码器速度闭环;
  • MPU6050 软件积分 Yaw 航向;
  • 8 路灰度传感器循迹和端点识别;
  • 路线状态机、速度规划和非阻塞安全保护;
  • OLED 状态显示、四按键启动及 UART 在线调参。

当前公开版本已经在实车上完成 H1~H4 功能验证。由于场地、轮胎、电池、电机一致性都会影响表现,本文不虚构通用成功率;复现时应按文末顺序重新做低速验证和参数微调。

赛题正式名称和原始资料可在全国大学生电子设计竞赛培训网查看。

二、路线说明

image.png

启动方式执行路线
按键一 / H1A→B
按键二 / H2A→B→C→D→A
按键三 / H3A→C→B→D→A
按键四 / H4H3 路线连续运行 4 圈

四个按键都采用周期扫描、消抖和按下沿事件,程序中没有等待按键松开的阻塞循环。路线运行期间按下任意一个按键,或通过串口发送 STOP,都会立即进入停车状态。

course_overview.jpg

三、硬件组成

核心硬件如下:

模块用途
MSPM0G3507 开发板主控制器
双轮差速底盘两个带正交编码器的直流减速电机
双路 H 桥电机驱动电机方向和 PWM 控制
MPU6050Z 轴角速度和软件 Yaw
8 路灰度传感器黑线位置和端点检测
SSD1306 OLED显示模式、阶段、编码器和传感器状态
有源蜂鸣器、LED到点和故障提示
四个独立按键启动 H1~H4、运行中急停

主要接线:

功能MSPM0G3507 引脚
左电机方向 AIN1/AIN2、PWMPB25 / PB20 / PA7
左编码器 A/BPB18 / PB17
右电机方向 BIN1/BIN2、PWMPA16 / PA14 / PA22
右编码器 A/BPA0 / PA1
MPU6050 软件 I2CPA8 / PA9
8 路灰度软件 I2CPA12 / PB23
OLED 软件 I2CPB8 / PB9
UART TX/RXPA10 / PA11
按键一~四PB3 / PB16 / PB2 / PB15
蜂鸣器 VCC/IOPA30 / PB21,IO 低电平触发
LEDPB22

电机必须通过驱动板供电,MCU、传感器、电机驱动和电源必须共地。完整接线注意事项见工程中的 docs/HARDWARE.md

四、软件架构

image.png

程序使用单主循环协作调度,不依赖 RTOS。1 ms SysTick 只提供时间基准,各任务按时间戳周期运行:

  • 5 ms:按键扫描;
  • 10 ms:灰度数字状态;
  • 20 ms:编码器速度 PI、路线控制和电机输出;
  • 较低频率:OLED 刷新、灰度模拟值和串口状态输出。

empty.c 中只保留应用入口,主要功能集中在以下文件:

  • app_autocar.c:调度器、路线状态机和控制算法;
  • app_config.h:速度、角度、距离和保护参数;
  • BSP/:电机、编码器、MPU6050、灰度和 OLED 驱动;
  • empty.syscfg:MSPM0 外设与引脚配置。

校准、转向、刹车、蜂鸣器、端点确认和路线切换全部采用非阻塞状态机,不会因为一个动作卡住传感器更新或急停响应。

五、关键控制方案

1. 编码器负责速度和安全,不单独决定到点

实车标定 100 cm 的累计计数为左轮 7359、右轮 7357,程序默认取平均值 7358 进行距离估算。

编码器距离只用于三件事:

  1. 在预计距离的 82% 后主动减速;
  2. 为捕获阶段提供距离保护;
  3. 超过预计距离的 140% 仍未检测到端点时停车报警。

正常到点仍由灰度传感器确认。这样既能避免轮胎打滑导致“计数到了但车没到”,也不会因为 A→C、B→D 等路线长度不同而误停。

2. 直线使用速度 PI 和 Yaw 航向保持

左右轮各有一个 20 ms 速度 PI。直线段从速度 20 在 500 ms 内平滑提升到 55,减少起步时打滑和航向突变。

MPU6050 的 Yaw 来自 GZ 零偏校准后的积分。直线控制使用目标航向误差与 GZ 阻尼抑制摆动;每次上电必须让小车静止完成零偏校准。

陀螺仪会有零漂和温漂,因此本项目不把长时间累计 Yaw 当成永远可靠的绝对角度。在弧线后完成稳定对正时,程序会重新锚定路线航向原点,限制漂移跨阶段累积。

3. 弧线循迹取消 GZ 阻尼并按误差动态降速

弧线本身需要持续角速度。实测发现,如果把直线使用的 GZ 阻尼原样叠加到弧线循迹中,控制器会把正常转弯也当成扰动抵消,表现为速度上不去、弧线跟随迟钝。因此 H 路线的弧线循迹取消 GZ 阻尼,只使用灰度位置误差控制左右轮差速。

弧线最高速度为 40,但不是全程硬跑 40:

  • 黑线位于中间区域时允许加速;
  • 偏差变大时依次降到 34、28;
  • 仅外侧探头检测到黑线时降到 20;
  • 控制输出限制最大转向差,避免瞬时反打过强。

这种速度规划比单纯加大循迹比例系数更稳定。

4. A→C 与 B→D 使用路线感知的切入方向

diagonal_run.jpg

小车从对角线接近圆弧时,经常不是中间探头最先碰线,而是某一侧外部探头先碰到。若直接把这次检测交给普通循迹,控制器可能朝错误方向猛打,随后脱线。

程序知道当前行驶的是 A→C 还是 B→D,因此进入捕获阶段后使用不同的预置方向:

  • A→C 到达圆弧:按左向圆弧进行切入;
  • B→D 到达圆弧:按右向圆弧进行切入。

默认捕获转向量为 4,最大捕获角为 45°,并带有 2.6 s 超时和距离保护。这不是完全开环转弯,而是给传感器一个稳定进入有效区域的机会。

5. 偏置压线也允许进入循迹

offset_capture.jpg

早期版本要求中间探头压中黑线后才退出捕获,图中的情况虽然已经可靠碰到黑线,却会因为没有居中而停车。

当前逻辑设置了两条通过条件:

  • 中央两路连续检测 3 个控制周期,立即进入循迹;
  • 任意 1~4 路黑线稳定存在 6 个控制周期(约 120 ms),也允许以低速进入循迹。

切入后的前 300 ms 还会保持正确的路线转向方向,防止外侧探头先碰线时产生反向修正。只有进入较稳定区域后,才逐步交给完整的灰度误差控制。

arc_tracking.jpg

6. 弧线结束后做路线相对的绝对航向对正

只依靠“原地右转固定 15°”不能消除每圈不同的弧线出口误差。当前方案保存路线起始航向,并为各阶段计算目标相对航向。弧线退出后使用航向 PD 原地对正:

  • 大角度时限制最大转速;
  • 接近目标后降低最大转速;
  • 角度误差小于 3°、角速度小于 5°/s,并稳定 80 ms 后才通过;
  • 超过 3 s 未完成则停车保护。

对正完成后才进入下一段直线,因此 H3/H4 中从 B 点走向 D 点的初始车头方向更一致。

六、默认参数与在线调参

参数默认值
直线巡航速度55 计数/20 ms
弧线最高速度40 计数/20 ms
捕获/接近速度18 计数/20 ms
直线起步速度20 计数/20 ms
直线后段速度28 计数/20 ms
A→C 初始转角 HTA34°
C→D 修正角 HCD18°
任务完成回正角15°
A→C / B→D 捕获上限45° / 45°

UART 为 115200、8N1,命令以回车或换行结束。常用命令:

H1
H2
H3
H4
STOP
HSPEED 55
HARC 40
HAPP 18
HTA 34
HCD 18
HACAP 45
HBDCAP 45
HACT 4
HBDT 4

建议一次只改一个参数,并先从 H1、单段对角线和单段弧线开始验证。速度值是编码器每 20 ms 的计数,不是 cm/s,不同电机和编码器不可直接照搬。

七、调试中解决的几个典型问题

H3 转弯后蜂鸣器响一下就停止

根因不是角度不够,而是状态机在同一个控制周期内切换阶段后继续向下执行,后续代码仍使用旧阶段计算出的局部变量,导致新阶段的最大距离为 0 并立即触发保护。

修复方法是在周期入口快照当前阶段,一个周期只执行该阶段的分支;阶段切换后的逻辑从下一个控制周期开始。

对角线到圆弧时只有最外侧探头碰线

仅靠普通循迹会因第一帧误差过大而强烈反打。最终使用“路线决定捕获方向 + 偏置稳定确认 + 方向锁 + 动态降速”解决,而不是继续提高循迹增益。

弧线出口车头方向每次不同

固定补偿角只能修正平均误差,无法修正每次不同的出口误差。改为路线相对航向 PD 对正,并在稳定后重新锚定 Yaw,后续对角线的一致性明显更好。

八、编译与复现

已验证环境:

  • Code Composer Studio(Theia 版);
  • MSPM0 SDK 2.10.00.04;
  • SysConfig 1.26.2;
  • TI Arm Clang 4.0.2.LTS。

复现步骤:

  1. 下载完整工程并解压;
  2. 在 CCS 中选择 File → Import Projects,导入 GitCode 仓库中的 code/2024_H_AutoCar
  3. 确认工程名为 2024_H_AutoCar
  4. Build 后下载到 MSPM0G3507;
  5. 架空驱动轮,检查左右电机方向、编码器正负和急停;
  6. 放到场地上,静止等待 MPU6050 零偏校准完成;
  7. 先把速度降到 HSPEED 30HARC 20 验证路线;
  8. 再逐步恢复到当前实车默认值。

如果只是用 CCS 打开普通文件夹,而没有按 CCS Project 导入,界面不会出现构建按钮,Ctrl+B 也不会生效。

九、开源资料

工程包包含:

  • 可直接导入 CCS 的完整源码和工程元数据;
  • 硬件接线表;
  • 控制算法与状态机说明;
  • 串口命令和调参顺序;
  • 构建、烧录与故障排查;
  • 发布前测试清单;
  • 已编译固件;
  • 本文和全部配图。

原创应用代码采用 MIT License。TI、器件厂商及第三方示例代码保留各自原始权利和声明,具体以工程中的 THIRD_PARTY_NOTICES.md 为准。

十、安全提示

  • 首次调试必须架空驱动轮,并准备好按键或串口急停;
  • 不要用 MCU GPIO 直接驱动电机;
  • 更换轮胎、轮距、电机、编码器或电池后应重新标定;
  • 高速测试应保持赛道周围无人员和易损物品;
  • 上电进行陀螺仪零偏校准时,不要移动小车。

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

评论

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

底部导航