十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32寻迹小车电赛H题完整源码与调参避坑实战指南

STM32寻迹小车电赛H题完整源码与调参避坑实战指南 简介本资源是基于STM32F10x系列芯片实现的智能寻迹小车完整工程紧扣2024年全国大学生电子设计竞赛H题要求专为计算机、自动化、电子信息等专业本科生毕业设计、课程设计及期末大作业打造。项目经导师指导并获99分高分评审代码可直接编译下载运行配套PDF文档详述硬件连接、算法逻辑与调试要点零基础学习者亦能快速上手。压缩包共107个文件含44个头文件.h定义外设接口与模块功能41个C源文件.c覆盖主控逻辑、PID循迹、电机驱动、ADC巡线采集及USART通信等核心模块另有启动文件.s、Keil工程配置.uvprojx/.uvoptx、构建脚本.bat及系统级配置.cmake/.xml整体仅533KB轻量易部署。目前已有1352人学习下载提供开箱即用的赛题级解决方案涵盖从传感器数据采集、路径识别到闭环运动控制的全链路实现。 每年电赛前总会有不少同学在群里问“H题寻迹小车怎么做有没有现成的源码可以参考”作为一个带队比过好几届电赛的老学长我太懂这种感受了。控制题说难不难但真到赛场上不是模块不工作就是小车跑着跑着飞线再就是参数调了一晚上第二天全乱套。这次整理了一套STM32寻迹小车的完整源码和文档说明里面包含了工程代码、原理图、接线说明、调参记录和常见问题排查。这篇文章就把这个项目的设计思路、核心细节、代码逻辑和避坑经验全部摊开讲一遍希望能给准备电赛或者正在做寻迹小车的同学一些实际帮助。这套东西适合谁一个是准备电赛控制题的大学生一个是自己玩STM32、想做个跑起来的小车练手的爱好者还有刚开始接触PID和电机控制的初学者。它解决的问题很简单怎么让一辆小车稳定地沿着黑线跑完指定赛道不脱轨、不原地打转、速度尽可能快。下面我按做项目的顺序来讲从方案选型到代码实现再到实际调试中遇到的坑全程干货。1. 项目整体设计与思路拆解1.1 电赛H题的考查重点与小车定位电赛的H题一般属于控制类题目核心是让小车完成指定赛道行驶任务。这类题目的特点非常明显对实时性要求高对鲁棒性要求高而且赛场上留给你的调试时间非常有限。不像纯算法题可以在电脑上慢慢跑小车是硬件和软件强耦合的系统任何一个环节拉胯整个系统都会崩溃。从题目角度看H题通常会把任务拆成几个等级简单的是循迹跑完一圈复杂一点的会加入十字路口识别、停车、避障、甚至双车交互。但不管任务怎么变底层能力始终是那几样能稳定地感知赛道信息能快速准确地控制电机能在不同光照和地面条件下保持可靠的行驶状态。所以做H题本质上不是做出来一辆能跑的车而是做出一辆“能稳定跑完全程的车”。我对这套源码的定位就是“比赛可用型”而不是“教学示例型”。什么意思就是代码不是为了演示某个外设能工作而是为了在赛场上跑出成绩。所以你会看到代码里有完整的状态机、有丢线处理、有分段PID策略这些都是实际比赛中必须考虑的东西。如果你只是随便玩玩可能不需要这么复杂但如果你想冲奖这些细节就是决定成败的关键。1.2 系统架构与模块划分整个小车系统可以拆成四个大块主控、感知、执行和电源。主控用的是STM32F103C8T6这是电赛控制题里最常见的选择之一。72MHz的主频、丰富的定时器、足够多的GPIO关键是资料多、价格便宜、坏了随时能换。做一个小车控制完全够用没必要上F4或者H7除非你要同时跑摄像头算法和复杂决策。感知部分用的是5路灰度传感器阵列就是TCRT5000那种红外反射式传感器。这套方案成本很低响应速度快在浅色地面加黑色引导线的场景下表现非常稳定。当然也有同学用摄像头加OpenMV或者K210那个赛道信息更丰富能识别更复杂的元素但对应的算法复杂度、调参成本、硬件成本都会翻倍。对于H题这种对稳定性和时间要求都很高的场景灰度传感器阵列反而是性价比最高的选择。执行部分用的是两轮差速底盘配两个直流减速电机电机驱动芯片选TB6612FNG。两轮差速的结构简单可靠转弯灵活配合PID控制可以做到很平滑的转向。直行时两个轮子同速转弯时通过给左右轮不同的速度来产生差速这是最经典的移动机器人运动模型。电源部分用两节18650锂电池串联供电经过降压模块给主控和传感器供电逻辑电压和电机电压分开走减少干扰。这个看起来很简单但很多同学在比赛中翻车都是因为供电问题。1.3 为什么选择这套方案我先说结论这套方案不是所有选项里性能最强的但它是“综合可靠性”最高的。STM32F103C8T6的优势不用多说CubeMX加标准库或者HAL库都能快速上手。更重要的是网上关于STM32的学习资源多到你根本看不完遇到问题随便一搜就有解决方案这在比赛期间就是“生命的保障”。灰度传感器阵列相比摄像头最大的优势就是实时性。摄像头需要采集图像、处理图像、提取赛道中线哪怕再快也要几十毫秒灰度传感器直接输出数字量主控只要读GPIO就能立刻算出偏差整个周期可以控制在1毫秒以内。对于高速行驶的小车来说低延迟就是一切。当然缺点也很明显就是只能识别黑白线不能识别复杂图像。但H题如果没到用摄像头那一步灰度传感器完全是够用的。TB6612FNG比L298N好用太多。L298N体积大、发热严重、压降大一片散热片就占了半个底板TB6612体积小、效率高、接口简单直接PWM控制就能调速很多模块还集成了稳压电路用起来非常省心。做小车选它几乎不用犹豫。这套方案的逻辑就是用成熟稳定的模块拼出一个高度可控的系统把主要精力放在控制算法和赛道适应上而不是花三天时间调摄像头识别。比赛比的不是你用了多高级的芯片而是谁能在截止时间前拿出一个稳定跑完全程的机器人。2. 核心细节解析与实操要点2.1 传感器选型与安装细节灰度传感器的原理其实很朴素红外发射管一直发光红外接收管检测反射回来的红外线强度。当传感器对准白纸时红外反射强接收管导通输出低电平对准黑线时红外被吸收反射弱输出高电平。模块上通常带一个比较器LM393和一个电位器拧电位器就能调整触发电平也就是白底黑线的阈值。这里有个关键细节安装高度。传感器离地面太近光线反射范围小容易漏检测离地面太远白纸和黑线的电平差变小容易误判。我试下来最合适的安装高度是1厘米左右也就是传感器底面距离地面大约一个传感器模块自身厚度的距离。建议支架做成可调的现场根据实际地面条件微调。这个小设计在比赛时非常有用因为赛场的地面可能和你们平时测试的场地不一样到时候你就能靠这点微调空间救急。传感器阵列的布局也有讲究。5路传感器排成一排中间间距要和赛道黑线的宽度匹配。我们用的黑线宽度是2厘米所以传感器之间间隔1.5到2厘米比较合适。这样排列能保证任何时候至少有传感器压到黑线上同时也留出空间可以计算小车相对于黑线的横向偏移量。安装位置的另一个重点是传感器到前轮转向轴的距离。寻迹小车实际上一直在“预测”赛道的走向传感器越靠前越能提前发现弯道留给控制系统的反应时间就越多。所以传感器阵列尽量安装在车头最前侧最好能超出车体前沿一点。2.2 电机驱动与运动模型直流减速电机配TB6612驱动控制方式就是PWM调速。TB6612的逻辑电源是3.3V或5V可以直接用STM32的GPIO驱动电机电源则根据电机的额定电压选我们用的是6V供电但很多模块标称2.7V到5.5V都能驱动实际选型时注意看一下电机的电流和电压范围。PWM频率也是一个容易被忽略的点。直流电机驱动PWM频率一般选10kHz到20kHz这个区间电机运行平稳、噪音小。频率太低会听到“滋滋”的电流声频率太高驱动芯片的开关损耗会变大。我习惯用定时器的ARR值设置PWM频率到18kHz左右实际跑起来效果很好。两轮差速运动模型是寻迹控制的基础。简单来说小车的位置和朝向可以由左轮速度v_left和右轮速度v_right唯一确定。当v_left v_right时直行v_left v_right时向右转反过来就是向左转。差速的大小决定转弯半径差速越大转弯半径越小。在实际控制里我们很少直接给左右轮发全速。通常的做法是设定一个基础速度base_speed然后根据当前偏差小车相对黑线的横向位置计算出一个转向补偿量correction最终v_left base_speed correction v_right base_speed - correction这样小车在直道上接近全速跑弯道时通过差分信号自动减速并转向实现平滑过弯。这个逻辑看起来简单但后面配合PID才能真正做好。2.3 PID控制在寻迹中的应用寻迹小车的PID控制是整个项目的灵魂。没有PID小车也能跑但弯道稍急就会飞线直道还会“画龙”——沿着黑线左右扭来扭去。PID的作用就是根据当前误差算出一个平滑、稳定的控制量。先说误差怎么算。5路灰度传感器从左到右编号0到4每一路对应一个权重位置比如由左到右权重为[-2, -1, 0, 1, 2]。检测到黑线的那一路权重就是当前误差。如果中间一路2号压线误差是0小车居中如果左边第二路1号压线误差是-1说明小车偏右了需要向左修正。只用单路位置做误差在传感器离散情况下输出不平滑。更好的做法是加权平均把每路传感器的输出权重和实际状态结合算出一个连续误差值。比如int position 0; // 加权位置 int sum 0; // 激活的传感器总数 for (int i 0; i 5; i) { position sensor[i] * weight[i]; sum sensor[i]; } if (sum ! 0) { error position / sum; // 归一化误差 }这样算出来的误差是一个更加平滑的浮点数能明显提高控制稳定性。有了errorPID输出公式就是经典的那一套int PID_calc(float error) { P_term Kp * error; I_term Ki * error * dt; D_term Kd * (error - last_error) / dt; last_error error; return P_term I_term D_term; }但寻迹小车一般只用PD控制就够了。积分项在系统存在稳态误差时有用但寻迹系统本身误差是不断变化的而且电机和传感器都有噪声积分很容易饱和反而导致转向迟钝。我只有在小车匀速直行时有系统性偏移的情况下才会加一点点I一般Ki设置为0。参数整定方面我先说一个实测顺序先把Kp从小往大调调到小车在直道上开始轻微振荡然后加Kd阻尼掉振荡逐步加大直到小车过弯不抖、直道不画龙。整个过程最好配合无线串口打印误差和输出曲线来观察比盲调快得多。电赛期间建议把每一版参数记录下来不然下午试出一个好参数晚上手滑改回去就真的崩溃了。3. 源码结构与关键实现3.1 工程结构解析用标准库写的工程整体目录结构非常清晰。主控逻辑放在User/目录下外设驱动放在BSP/目录下中间用几个头文件连接起来。这样分开的好处是你改PID逻辑的时候不用去翻电机驱动怎么初始化调传感器的时候也不用担心把主循环改崩。核心文件大概这几个main.c负责系统初始化、主循环调度。初始化包括时钟、GPIO、定时器、ADC如果用到、串口、PWM、编码器接口等。bsp_motor.c/h电机GPIO和PWM初始化左右电机速度和方向的输出接口。bsp_sensor.c/h灰度传感器IO读取和状态转换返回当前误差。control.c/h核心控制算法包含PID计算、差速分配、状态机。bsp_uart.c/h串口打印和调试接口用于调参和实时监控。bsp_timer.c/h控制周期定时器比如1ms中断触发一次控制循环。这种模块化结构不只是为了好看更是为了比赛时快速定位问题。比如车跑偏了你先把sensor_read()打印出来看是不是传感器读数正常再查PID_calc()输出是不是合理最后才怀疑到电机上。每一步都能独立测试效率高很多。3.2 关键代码逻辑说明先看一个典型的传感器采集函数。灰度传感器是数字量输出直接读五个GPIO引脚就可以了但为了提高稳定性我会做一个小滤波连续读三次取多数值作为最终结果。这样能滤掉瞬间的环境光干扰和引脚抖动。uint8_t sensor_read_filtered(uint8_t index) { uint8_t cnt 0; for (int i 0; i 3; i) { if (GPIO_ReadInputDataBit(SENSOR_PORT, sensor_pins[index]) BLACK) { cnt; } } return (cnt 2) ? 1 : 0; }然后是主控制循环。我用定时器中断实现一个1ms为一个控制周期的逻辑主循环只负责非实时任务比如按键扫描、OLED显示和状态切换。控制逻辑全部放在中断里保证周期性稳定。控制中断里做三件事读传感器、算误差、更新PWM。误差的算法前面已经写过重点说下丢线处理。当五个传感器全部没有检测到黑线时不能盲目认为是直道而要根据上一次的有效误差判断。如果上一步误差是正数说明小车正在向左偏此时丢线大概率是因为左转过度冲出了赛道应该继续保持左转修正方向。这是寻迹小车稳定性里非常关键的一招。if (sum 0) { // 丢线处理 if (last_error 0) { error MAX_ERROR; // 继续向左修正 } else if (last_error 0) { error -MAX_ERROR; // 继续向右修正 } else { error 0; // 未知情况保持方向 } }PID输出转PWM的部分我用了分段处理。基础速度不是固定的而是根据赛道元素动态调整平时直道跑60%占空比检测到弯道时降到40%如果是急弯再降一点。这个“分段”其实是比赛时通过串口实时调试出来的经验值没有固定公式但你可以设定一个简单的规则误差绝对值越大说明弯道越急基础速度应该越低。int base_speed SPEED_FAST; int abs_error (int)(error 0 ? error : -error); if (abs_error 1) { base_speed SPEED_MEDIUM; } if (abs_error 2) { base_speed SPEED_SLOW; } int correction (int)(PID_calc(error)); if (correction MAX_CORRECTION) correction MAX_CORRECTION; if (correction -MAX_CORRECTION) correction -MAX_CORRECTION; motor_left_speed base_speed correction; motor_right_speed base_speed - correction;这里还要加一个限幅函数防止PWM溢出产生反向转动。我见过不少小车在极限状态下突然抽搐其实就是PWM值超出定时器范围导致方向位跳变。3.3 文档说明与实际使用这套资料里附带了一份很详细的文档内容包括硬件清单、接线表、原理图、程序烧录步骤、PID参数记录表、常见故障和解决方式。我特别建议拿到源码后先不要急着改代码先把硬件搭起来让原版程序能跑起来再考虑优化。接线表一定要对照原理图亲自确认一遍别看着文档接线就完事。常见问题就是文档上用PB3标注但实际上是PB4这种坑在比赛时太常见了。所以拿到文档之后第一步就是用万用表测一下每个引脚在板子上的实际位置和源码注释、文档里的表格核一遍。这个习惯能帮你省下整整一个上午。烧录程序建议直接用ST-Link加STM32CubeProgrammer比串口下载稳定得多。下载方式很简单ST-Link接SWD四根线SWDIO、SWCLK、GND、3.3V在软件里选好芯片型号直接烧录。第一次烧录之后注意看串口打印的信息是否正常这一步能快速判断主控是否在工作。文档里还有一个非常有价值的部分PID参数记录表。每一版参数都记录了对应的现象比如“Kp1.2, Kd6直道稳定急弯掉线”这个记录习惯不仅对找问题有帮助也是电赛评测时给评委展示工程素养的好材料。强烈建议你在自己调参的时候也建立这样一张表。4. 常见问题与排查技巧实录4.1 底盘不走直线或轮胎打滑很多同学的第一反应是PID没调好但底盘不良很大概率是机械问题。检查顺序应该是先看两个电机在空载时转速是否一致再看装到车体后带负载时转速是否一致最后检查轮胎是否与地面贴合良好。空载不一致大概率是电机本身差异或者PWM输入接线有误。带负载不一致可能是电池电压太低或者驱动模块内阻不同。如果两个驱动模块的电源线长度不一样也会导致压降不同从而转速不同。最简单的方法是把左右轮的PWM输出做一个校准实测占空比一致时转速差多少然后在代码里补偿一个偏置。这个方法比反复调PID管用得多。轮胎打滑通常是因为速度太快、加速度太猛或者车体重心太靠后。前轮转向侧如果是万向轮检查万向轮是否顺滑如果万向轮卡涩小车在高速转弯时就会侧滑出赛道。处理办法是给万向轮上一点润滑油或者把车体重心压低前移。4.2 传感器受环境光影响误判电赛现场灯光条件千奇百怪有时候是顶灯直射有时候是大窗户侧光灰度传感器在这种环境下很容易误判。解决办法有几层第一调整传感器上的电位器阈值找到白底和黑线之间最明显的分界点第二给传感器加遮光罩用黑色热缩管或者3D打印小罩子罩住传感器周围减少环境光影响第三如果还是不行就换传感器安装高度和角度。还有一个容易被忽略的干扰源电机电刷火花。电机转动时会产生高频电磁干扰通过电源线和地线串到传感器上。遇到这种情况一定要把电机电源和传感器电源分开走线并且在传感器供电端加一颗100uF电解电容和一颗104瓷片电容滤波。实测下来这个组合能解决大部分因为电机干扰导致的传感器误判。4.3 PID越调越乱找不到头绪如果你调PID调到怀疑人生建议回到最基础的方法串口打印误差值和PID输出值配合一个简单的上位机波形显示工具观察。不要靠感觉看小车跑得怎么样因为你的眼睛会骗你。比如小车直道扭动你可能觉得是P太大但如果是D太大导致的超调现象很像。调参时有一个铁律每次只动一个参数改动幅度小一点记录下来跑一圈对比现象。不要同时改Kp和Kd不然出了问题你根本不知道是哪个参数导致的。还有PID参数不是越大越好很多同学觉得Kp大点转向响应快结果Kp调太大之后车头不断在左转右转之间横摆反而跑不出成绩。最后就是转向死区的问题。如果小车一直保持微小误差但转向修正量太小电机和齿轮箱的摩擦力会吃掉这个修正导致小车“硬生生”偏出赛道。解决方法是给PID输出设置一个死区阈值当修正量小于这个值时直接输出一个最小转向修正让车头强行归位。这个技巧能让小车在长直道上保持非常优雅的直线行驶。4.4 电池电压下降导致复位或失控电赛的赛道通常要跑好几分钟电池电压会从满电的8.4V逐渐掉到6V以下。直流电机在低压下转速下降寻迹控制性能会明显变差。如果主控直接从电池取电电压跌落超过复位门槛小车就直接重启前功尽弃。所以电源设计必须做区分电机直连电池主控和传感器经过稳压芯片比如AMS1117-3.3供电。稳压前最好加一个几百uF的大电容储能缓冲避免电机瞬间启动导致电压凹谷触发复位。我还习惯在程序里加一个低电压检测功能用ADC读取电池电压低于某个阈值时用亮灯或者蜂鸣器提示这时候就赶紧停下来换电池。这个细节对完赛率影响很大比赛现场不少人就是栽在没电这个坑上。4.5 高速冲出赛道救不回来这个问题每个人都遇到过。小车在低速时非常听话一调高速度过弯直接飞出去。原因很简单速度越快同样的物理距离所需的时间越短控制系统的滞后体现得越明显。这时候不是单纯调PID就能解决的。我的建议是从三个方向优化第一提高控制频率把控制周期从5ms降到1ms让小车更快响应赛道变化第二增加前馈控制在知道赛道元素类型比如即将进入弯道时提前减速度和加大转向量这部分可以基于编码器里程或者提前检测到前一路传感器的状态第三优化机械部分降低重心、增加轮子抓地力、减小车体惯性。最后这个往往是最立竿见影的但很多同学不愿意动结构觉得软件能补。实际上高速寻迹到极限时机械上限就是木桶最短那块板。5. 调参策略与赛道元素应对5.1 从慢到快的调参节奏寻迹小车调参最忌讳一上来就高速跑。我的建议是先在直道上用很低的速度比如20%占空比测试基本循迹功能。这时候PID只需要一个很小的Kp就能稳定主要目的是验证传感器、电机方向、控制方向是否正确。确认基础功能没问题后逐步提高速度每次提高5%到10%占空比测试直道、弯道、急弯三种情况。每提升一档速度就针对问题单独调参数。比如直道开始画龙了增加Kd过弯跟不上增加Kp或降低弯道基础速度。这样一步步推进最终找到一个速度和稳定性平衡的点。一定要记住比赛不是比谁跑得快而是比谁能在最短的有效时间内稳定跑完。很多队伍最后为了追求极速小车在赛道上翻车、飞线、原地打转成绩反而不如稳扎稳打的队伍。5.2 特殊赛道元素的处理逻辑电赛H题除了普通黑线跑道一般还会出现十字路口、直角弯、回环等元素。这些看似复杂的场景在灰度传感器方案下处理起来其实有套路。十字路口的核心问题是识别中间有个“十”字形状所有传感器都会压线短时间内没法确定车该直行、左转还是右转。解决办法是用状态机加计数。检测到全1的情况所有传感器都激活时先不立刻改变转向状态而是结合前一段时间的运动历史判断。如果之前一直在直行大概率是十字路口保持直行即可。如果之前已经在转弯就要小心是不是遇到了“T”字路口此时根据任务要求选择左转或右转。直角弯的处理更依赖丢线逻辑。当小车进入直角弯时经常会有一段时间所有传感器都看不到黑线如果你还是用“丢线维持上一步转向”的规则基本上能救回来。但如果速度太快丢线之后就冲出赛道了这时候只能靠降低入弯速度解决。我的做法是在接近直角弯之前有一个预判检测到最边上传感器压线时立即把目标速度降下来同时把转向修正量放大到最大。5.3 利用编码器测速提高稳定性如果赛题对速度控制有要求或者你希望小车在不同路段跑不同目标速度那就很有必要加编码器测速。直流减速电机的编码器通常输出AB两相正交脉冲用STM32的定时器编码器模式读回来就是实时转速。有了转速反馈就可以做速度闭环控制。速度闭环我一般用单独的PI控制器目标是让左右轮的实际速度尽可能接近目标速度。这样做的最大好处是当电池电压下降、传动阻力变化时小车依然能保持稳定的速度不会越跑越慢。转向控制环作为外环输出的补偿量再去修正左右轮的速度目标值。不过编码器也不是必须的如果只是最基本的寻迹跑圈不加编码器也能跑得很稳。加了编码器之后整个系统的复杂度会提升一截接线、初始化、调试都是额外的工作量。建议根据自己的需求决定。6. 源码文档之外还有哪些值得注意的事6.1 赛前准备与现场应变电赛是限时的赛前把该准备的工作做完现场才能从容应对。有些同学喜欢在赛场直接搭建小车结果第一天光焊板子就焊到深夜后面根本没时间调车。正常节奏应该是提前把电路板焊好、机械结构装好、代码框架写好现场只做微调和参数整定。现场环境变化是最大的变量。落地比赛时地面可能比你们学校的地板更滑、反光更强黑线的灰度值也和原来不一样。所以带齐微调工具非常重要螺丝刀、绝缘胶带、黑色电工胶布、酒精棉片。酒精棉片可以用来清洁轮胎和地面清理完一轮之后抓地力会有明显提升。还有一个小技巧多备一套传感器模块。灰度传感器是最容易在比赛中损坏的因为安装位置低经常被地面异物刮坏。赛前一晚检查一遍信号线连接并用胶固定。一旦现场传感器读数异常不要犹豫直接换备用模块。6.2 代码版本管理与文档记录很多队伍在比赛期间会频繁修改代码但很少用版本管理工具。结果就是改崩了想回到上一个能跑的版本却找不到备份只能现场重写。我的建议是至少用Git做本地提交每次跑出有效成绩后就打个标签比如v1.3_stable_lap_13s。如果后续改崩了随时可以回到这个版本。文档记录也是同样的道理。把每天解决的问题、调参记录、硬件改动、赛道的特殊现象都记录在案。这个文档不光是替你省时间也是最后技术报告和答辩的重要素材。一个调试记录完整的队伍在答辩环节也更容易得到评委的认可因为评委可以直观看到你的分析和解决问题的过程。6.3 电赛的收获不止于奖项从做这套寻迹小车的项目中我收获最大的并不是最后拿了什么奖而是建立了一套完整的工程思维从需求分析到方案选型从模块测试到系统集成从问题定位再到稳步优化。这个过程里踩过的每一个坑都是以后工作上珍贵的经验。比如说我现在调试任何新硬件第一反应都是先检查电源和接线而不是去翻寄存器配置遇到行为异常先怀疑机械和环境因素再考虑软件逻辑。这些习惯就是通过一遍遍做小车练出来的。所以我真心建议每一个做电赛或者学习嵌入式的同学都从一个小车项目开始不管是寻迹还是避障把整个闭环跑通你学到的东西会远超课堂。另外在最后的实测中我发现寻迹小车这个项目特别适合作为后续扩展的基础。你可以加个蜂鸣器、OLED屏幕、无线遥控模块甚至把摄像头换成OpenMV让小车识别数字和颜色这些都是H题或更高阶题目的常见需求。先把这个基础打好后面往上加功能会容易得多。最后分享一个小技巧做寻迹小车一定要在代码里预留一个“调试模式”。打开这个模式后串口会周期性打印当前的传感器状态、误差值、PID输出、左右轮PWM参数。有了这个输出你在现场调车时就不再是盲人摸象每一个参数的影响都能实时看到。很多队伍调不好车不是能力不行而是连小车现在到底在想什么都不知道。把这个窗口打开问题往往就解决了一半。本文还有配套的精品资源点击获取
返回列表