ARTICLE DETAIL

资讯详情

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

一个人备赛智能车竞赛:蚂蚁搬家式从零到稳定跑完赛道

一个人备赛智能车竞赛:蚂蚁搬家式从零到稳定跑完赛道 全国大学生智能车竞赛的备赛周期里一个人完成智能车从组装、布线、调试到跑完赛道的全部工作听起来像支离破碎的流水账但经历过之后回头看这反而是大一阶段最值得认真做的一件事。备赛过程很像蚂蚁搬家硬件模块一小批一小批买回来代码一小段一小段写上去赛道一圈一圈跑出数据最后才把一辆能稳定过弯的小车搬进赛场。这篇文章不是竞赛攻略也不是获奖经验分享我把它写成一份“一个人也能走完”的备赛记录重点讲清准备什么、怎么调试、为什么踩坑、以及怎么撑住心态。先给结论如果你在大一暂时没有队友又想参加智能车竞赛一个人备赛是可行的但必须重新规划节奏。不要指望一个人能同时完成硬件焊接、算法调试、机械调校和文档整理只能用“蚂蚁搬家”的方式把任务拆到每天只动一小块。要时刻记住站在赛场上的车队大多有分工而你需要把人数劣势变成流程优势。1. 一个人参加智能车备赛先想清楚这几点再动手1.1 别急着买模块先确认赛题规则和备赛周期智能车备赛最容易犯的错是一上来就买摄像头、买主板、买各种传感器结果发现规则里根本用不到或者型号不匹配。第一次参加这类比赛第一步不是逛购物车而是把竞赛规则、赛道元素和往年参赛资料完整看一遍。我当时做的第一件事是把当年“全国大学生智能车竞赛”的规则文档下载下来通读了两遍。重点看三块内容赛道基本元素直道、弯道、十字、坡道、路肩、起跑线等。车模限制允许使用的车模型号、电池电压、轮胎要求。组别要求摄像头组、电磁组、创意组的技术方向完全不同。如果你的目标是传统竞速组那么核心任务就是“循迹 提速”。如果目标是创意组还涉及视觉识别、语音交互甚至地图任务那一个人就需要更保守地规划。比如第二十一届智能车的相关讨论里很多人关注讯飞创意组和国赛名单创意组往往对方案形态要求更高反而更适合有资源、有团队的人。如果大一是零基础我更建议从传统组别切入先把车跑起来再谈创意。1.2 一个人备赛最容易踩的坑高估进度低估环境一个人参赛最大的问题不是能力而是“没人提醒你”。没有人帮你检查电源接反没有人在你调了一下午舵机后告诉你“可能只是螺丝松了”没有人替你盯着比赛截止日期。我当时给自己做的第一张表不是任务清单而是一份“环境清单”。说白了就是先确认自己的硬件环境、软件环境、场地环境能不能支撑备赛。用一句话概括有没有一间可以长期铺赛道而不被收走的屋子比有没有一块好开发板更重要。很多同学觉得备赛等于写代码其实智能车备赛的环境要求非常具体场地至少需要一段 4 米以上的直道能画弯道和十字的平面区域。电源需要稳定的电源插座锂电池充电和放电设备要有专门位置。电脑能运行开发环境接口能连接单片机调试器。测试工具万用表、烙铁、热风枪、剪刀、扎带、胶带、螺丝刀套装。这些看起来不复杂但在宿舍里往往很难满足。我见过不少队伍因为场地被宿管收回、楼道不允许铺赛道、测试时电池充电不方便最后进度断档。一个人备赛一定要先把环境问题解决掉再买硬件。1.3 备赛节奏怎么拆先能跑再会跑最后跑得稳一个人备赛最忌讳按“完整方案”来推进因为完整方案意味着同时要做 10 件事。合理的节奏应该是三段式能跑车模能通电、能前进、能转弯传感器能读到赛道数据。会跑能在简单赛道上沿黑线或电磁线跑完一圈不冲出赛道。跑得稳连续多圈不失误弯道不摇摆速度可调参数可复现。我建议用第一个月只做“能跑”。先把最小闭环打通单片机下载程序、电机驱动转动、转向机构动作、传感器数据正常输出。这一个月不需要追求速度甚至不需要画完整赛道只要让车“动起来”。第二个月再做“会跑”。这时候开始铺直道和简单弯道调整传感器高度和阈值让车能跟着线走。第三个月以后才进入“跑得稳”阶段逐步提高速度、测试坡道和十字记录每轮修改。很多人倒下的原因不是不会写 PID而是“能跑”阶段拖了两周没搞定心态直接崩掉。我个人的判断标准是如果新环境从零到让车动起来超过三周那一定是环境或者硬件连接出了问题不要继续加功能先停下来把所有线重新查一遍。2. 从零到第一辆能跑的车硬件、工具、场地2.1 硬件清单不用一步到位按“蚂蚁搬家”式逐批采购一个人备赛预算通常不宽裕。我的建议是不要一次性买全按“批次”购买每批够用就行。这样做的好处有两个一是资金压力小二是每批配件到手后可以立即安装测试避免一堆模块堆在桌面却不知道从哪开始。第一批只买核心动力和车体车模底盘按竞赛规则允许的型号。电机驱动模块能带动当前电机即可。单片机最小系统板常见型号即可。锂电池、电源开关、降压模块。必要的杜邦线、螺丝、铜柱、扎带。第二批买传感器和转向摄像头、镜头、图像处理相关板卡或电磁传感器方案。舵机。编码器或测速模块。第三批才买测试辅助设备调试器、无线串口模块、蓝牙模块、显示屏。备用电机、备用轮胎、备用螺丝。这套顺序的底层原因是先让车模有动力再让车模有感知最后才能谈控制。如果第一周就把摄像头和编码器全装上很可能出现供电不足、信号干扰、程序里全是报错的情况根本分不清问题是硬件还是软件。2.2 工具和环境烙铁、万用表、电池、赛道纸一个人备赛工具就是你的队友。我最常用的五样东西恒温烙铁焊电机线、电源线、传感器排针。万用表查短路、量电压、测传感器输出。热熔胶枪固定摄像头、固定扎带、处理临时结构。多功能螺丝刀套装车模是消耗品螺丝非常容易松。标签纸每个接口、每根线都贴标签不然一周后自己都看不懂。赛道纸的选择也有讲究。很多新手直接用黑色胶带贴地面结果反光严重、传感器误判。更稳妥的做法是找哑光黑色电工胶带或者用白纸打印黑线宽度按规则来。第一次可以只铺一条 4 米直道后面再拼弯道。我特别想补一条电池安全。智能车用锂电池一个人备赛时如果充电没有大人或同学在旁边至少要清楚充电器有没有过充保护充电时不要放在棉被、纸箱等易燃物上。这个问题很基础但每年都有人忽略。2.3 第一版车模组装顺序第一版组装不要图快按照“动力 → 转向 → 感知 → 控制”的顺序来做。先把电机装上确认两轮能差速转动。没有转向功能也能通过手动抬起车体检查电机正反转。接着安装舵机把前轮转向结构调到一个接近中位的位置。不要一上来就设程序先把机械部分调整到“手推起来基本能走直线”。然后安装传感器支架。摄像头高度和角度是后面调参的关键但第一版只要能固定住、不要晃动就行。编码器安装在车轮附近注意齿轮咬合不能太紧也不能太松。最后才是接线和供电。接线时用不同颜色区分电源和信号正负极多检查一遍。第一版不追求走线美观但至少要做到“线不磨轮子、不挡住底盘、不会在转弯时被拉扯”。装完之后用一个最简单的测试程序验证void setup() { pinMode(MOTOR_PIN, OUTPUT); pinMode(STEER_PIN, OUTPUT); } void loop() { digitalWrite(MOTOR_PIN, HIGH); // 让电机以固定占空比转动 analogWrite(STEER_PIN, CENTER_VALUE); delay(1000); }这段代码不是完整方案只是让车模“通电后轮子会转、舵机有反应”的最小测试。能跑通这一步说明硬件链路基本正常后面才轮到图像或者电磁采样。3. 赛道元素和分段式训练从直道到弯道3.1 先把最基本循迹跑通对摄像组来说“循迹”通常是指通过摄像头提取赛道黑线计算出偏差再映射到舵机打角。对电磁组则是通过电感值判断导线位置。无论哪种方案第一步都不需要做复杂算法先做一件事把传感器数值实时读出来。我用的是屏幕和无线串口两种方式。先在屏幕上显示摄像头图像或者电磁值波形确认传感器能正确区分“白底”和“黑线”。如果这一关过不了后面所有 PID 调参都是空谈。简单循迹方法的判断标准车放在直道中心时偏差接近 0。车放在黑线左侧时偏差方向正确。车放在黑线右侧时偏差方向相反。传感器阈值在明亮和昏暗环境下都有余量。如果偏差方向不对不要改算法先检查摄像头是否镜面翻转、图像是否左右颠倒。这类问题 90% 是成像方向或坐标轴理解错了而不是控制逻辑问题。3.2 弯道和十字规则允许的处理方式直道跑通以后要及时铺一条带弯道的赛道。弯道会让两个问题浮出水面一是舵机打角滞后二是速度过快导致冲出赛道。第一次过弯时建议把速度降到 0.5m/s 甚至更低先让车“慢速过弯不压线”。只要能稳定走完一个半径 60cm 左右的弯道再逐步加速。十字和坡道是我的另一个坎。很多人在十字路口会把线“跟丢”原因不是算法能力不够而是没有对十字区域做专门处理。常见思路有两种当图像里突然出现大面积白色或全白时认为是十字区域保持上次打角或按规则直行。通过元素识别提前减速让车有足够的处理时间。无论用哪种方式都必须记录“车在十字前的速度、十字中的偏差、十字后的恢复时间”。一辆能过弯的车不代表能过十字一辆能过十字的车也不一定能稳定连跑三圈。所以我会把每个元素拆开单独练再连成完整赛道。3.3 逐项加入元素用标签记录每次修改很多队伍在比赛前一周才第一次跑“完整赛道”结果发现前面各元素单独都能过连起来就乱。原因很简单车在元素间切换时状态没有复位。建议把赛道训练分成四档第一档只有直道主要调摄像头阈值和电机中值。第二档直道 一个弯道主要调舵机响应。第三档连续弯 十字主要调速度控制逻辑。第四档加入坡道、路肩等元素做完整圈测试。每调一次就在代码或文档里留下标签。比如“0321_速度1.2_弯道偏移30”表示 3 月 21 日、目标速度 1.2m/s、弯道偏差修正参数是 30。这个习惯非常重要因为智能车调参很容易“上周能跑这周改崩了”没有标签就不知道改回了哪一步。4. 调试像蚂蚁搬家每次只改一个变量4.1 速度分档低速稳定中速验证高速调参一个人调车最忌讳同时改多个参数。把速度调上去同时换了一套新轮胎结果车变快了但打滑你会完全搞不清是轮胎抓地力的问题还是速度控制的问题。我采用分速调试法低速档 0.4m/s用于验证基本循迹和机械结构。中速档 0.8m/s用于验证弯道打角和加减速逻辑。高速档 1.2m/s 以上用于追求单圈成绩调整转向提前量。每个速度档位都先跑 10 圈记录有效圈数和切赛道次数。有效圈数是“没有冲出赛道、没有漏掉关键元素”的圈数切赛道次数是“车从赛道边沿冲出或压线严重”的次数。如果低速档有效圈数低于 80%就不要上中速档。这个标准虽然简单但能避免反复把时间耗在高速调参上。4.2 看日志和打点不要只靠眼睛一个人看车跑最大的问题是肉眼只能看到“冲出去了”看不到“冲出去之前发生了什么”。所以从第一天起就要加日志。最少要打三类信息传感器原始数据阈值上下的差值。控制输出数据舵机 PWM 值、电机 PWM 值。状态切换数据现在是直道、弯道、十字还是坡道。日志不用每行都存比赛中跑一圈几十 KB 就够了。通过无线串口把数据传回电脑导出后画成曲线很容易看出来问题是偏差突变、输出饱和还是状态切换不及时。有一次我的车总是在一个固定弯道外切肉眼看了半小时也没发现异常。后来把日志导出来发现弯道入口处舵机 PWM 已经顶到极限但车身还是偏外。原因不是舵机不够快而是这个弯道前有 4 米直道速度已经加到中速档上限入弯时减速太晚。如果只看视频根本不会想到是减速策略问题。4.3 参数版本化日期、赛道、速度三位命名一个人备赛代码版本管理不能省。不需要复杂工具最基本的做法是每次修改前复制一份原工程命名带上日期和关键参数。我当时用的命名格式car_0321_v1.0_1.0m_s car_0322_v1.1_0.8m_s后来我还增加了一个“赛道标签”因为不同场地的摩擦系数、光照条件完全不同car_0321_bedroom_1.0m_s car_0325_lab_1.2m_s保存版本不是强迫症而是为了能快速回滚。一个人面对“这周改了八个地方突然不行了”的情况时最有效的手段就是回滚到上一版本。我看到很多比赛车队习惯用一个叫“最终版”的文件夹结果里面十几个“最终版”。不要把命名当小事它在关键时刻能救你。5. 一个人也要做的“团队活”技术文档、时间管理、心理支撑5.1 写备赛日志比写代码更值得如果你问我在整个备赛过程中最遗憾的事情是什么我会说“日志写得太晚”。前期我把几乎所有精力放在代码和硬件上后面回头看真正让自己进步的不是某段代码而是每天的记录。备赛日志不需要写成论文只需要回答四个问题今天做了什么改了什么参数出现了什么现象下一步准备怎么验证哪怕只有三行坚持两周后作用就会显现。因为一个人备赛时很容易出现“今天花 6 小时解决了一个三天前就埋下的接线错误”如果没有日志下个月还会再犯一次。5.2 时间规划每天早上先跑三遍再改参数一个人的时间和精力有限必须把最清醒的时间留给最重要的调试。我后来形成了一套固定节奏和“蚂蚁搬家”很像每天搬一点但不停上午先跑车三遍录日志不急着改。下午根据日志改一个小问题最多改两个参数。晚上写日志整理下一步不熬夜调车。周末预留半天做大调整比如换传感器支架、改赛道布局。不要误解“努力”的衡量标准。很多人在实验室待 12 小时其实只有 2 小时真正有效。一个人备赛时坐不住、分心、刷手机都是常见问题所以我会用“有效调车次数”衡量一天而不是“待在实验室的时长”。5.3 一个人孤独是常态必要时找线上社区智能车备赛是一个很容易“憋出内伤”的过程。别人看到你一个人忙可能觉得你很厉害但你自己知道很多问题就是找不到人问。我的建议是主动找线上社区和往年参赛者。当年我很喜欢看卓晴老师公众号上的赛题解析和答疑也会翻往届国赛名单和获奖队伍的技术报告。花时间看这些内容不是为了复制代码而是为了确认“别人遇到过类似问题”“这个坑不是只有你踩”。但要注意不要过度停留在线上的对比里。看到 21 届智能车国赛名单或者全国大学生智能车竞赛获奖名单时你可能会羡慕别人有队伍、有指导老师、有充足资金。但你的目标是完成自己的车不需要用别人的条件来否定自己。线上社区带来的真正价值是“方向感”和“心理支持”不是饭圈式刷屏。如果发现自己每天看资讯的时间超过调车时间就要把手机放下。6. 比赛日和赛后验证、复盘、别否定自己6.1 比赛前一天的检查清单比赛前一晚很多人还在改参数这其实是风险最高的操作。我的经验是赛前一天不碰大改只做检查和备份。检查清单可以这样列电池充满两块以上确认接线稳固。轮胎是否磨损过多是否需要换备用胎。螺丝底盘、舵机、摄像头支架是否松动。代码把确认能跑的版本复制到新工程备份到网络。传感器在赛场灯光下重新校准阈值。赛道纸到场后先走一圈确认起跑线和十字位置。工具包烙铁、万用表、螺丝刀、胶带、扎带、备用杜邦线。有人会觉得备份代码是小事。但比赛现场最怕“这台电脑打不开工程”“刚才还能跑现在不行了”。备份不是给自己留后路是减少现场无谓的焦虑。6.2 现场突发问题怎么处理智能车比赛现场和实验室环境差别很大。光线不一样、地面摩擦不一样、电磁干扰不一样甚至电池电压会因为充放电次数不同有细微差别。第一个建议到场后适应场地不要急于上高速。先低速跑两圈确认基本循迹正常再逐步提高速度档位。第二个建议出现问题时按顺序排查不要乱改。先看机械——轮胎有没有卡死、螺丝有没有松再看电源——电池电压够不够、降压模块有没有过热再看传感器——阈值是否偏离最后才看代码参数。比赛现场最容易犯的错误是“明明是场地光线变化导致阈值失效却把 PID 调了一个小时”。这个问题我曾亲眼见过。如果你的车在实验室跑得很稳到现场频繁丢线优先怀疑传感器和环境而不是控制算法。6.3 竞赛结果不是唯一收获如果最终没有进入国赛甚至没有拿到名次也不用把这次经历定义为失败。智能车备赛的意义不在于最终那张获奖名单而在于它逼着一个人学会拆问题、写文档、查环境、复盘修改。我到现在还记得第一次把车放在赛道上它慢悠悠走完一个完整弯道时的那种满足感。对在大一选择一个人做这件事的人来说那一刻已经说明你有能力把一个复杂的、没有人监督的项目从零推到能运行的状态。很多人输给的不是技术而是“坚持发布”。赛程中期最累的时候我用“蚂蚁搬家”提醒自己搬一颗石头看似没效果搬一整个月赛道边缘就会有一堵墙。如果你想参加智能车竞赛并且现在只有一个人不要急着找队友也不要急着放弃。先准备好环境把第一批硬件买回来把最小测试跑通。每天改一点点记录每一次调整跑完每一圈。当比赛结束那天你可能没有站上领奖台但你手里那辆小车已经证明了一件事一个人也能把一件看似很大的事一点一点搬完。
返回列表