智能车赛后检讨

华北赛结束了。
没有进入决赛,长期为决赛准备的各种功能(急弯,人字弯,避障碍物,上下坡)没有了发威的时候,非常可惜。
8个月,从K60转到XS128,从速度与激情过档到Unlimited。
本文将对做车历程进行简单的检讨,总结经验与教训。


策略

缺少适应简单赛道的高速方案

华北赛预赛赛道相对简单,没错,对手们都跑得飞快,我们无缘决赛。
在赛前的一个月调试里,我们针对各种恶心路况进行过调试,得出了一套可以稳定通过几乎所有路况的方案,华北赛正是用的这套方案。
缺点很明显,方案是为所有路况而设的,速度也就被“最恶心路况”所限制了。而对于预赛的简单赛道,车大爷完全有能力以更高速度通过,只需要我们赛前调试几天就能出来方案。
如果要重来,在调车的时候,应该分路况单独调试,得出每种路宽的最大通过速度以及对应的参数。赛前一星期进行组合和调试,快速通过预赛赛道应该不成问题。

及时纠正:慢启动

预赛前一天晚上,队友意外从网上看到华东赛的预赛赛道,发现赛道刚起步就迎来急转弯,与我们平时调试的赛道有很大出入。我们原方案的启动加速过快,极可能在启动时就冲出赛道。
于是当天晚上就使劲改代码,解决了这个问题。(我当时在一边嚷嚷着:比赛前一天改代码很危险啊,没测试过的代码不能用啊!)
不过实话说,如果不改代码,可能真的预赛都跑不完。
所以说,“全面考虑比赛可能出现的情况”真的很重要。

硬件

硬件部分我基本没参与,只怪队友太强大了。

接线整洁好处无穷

速度与激情的小车,从刚开始就注意接线的整洁,可是慢慢到最后,接线就开始变混乱了。
无下限的车由两位心灵手巧的女生亲自操刀,自然接线就特别整洁。
整洁的接线由明显的好处:容易Debug,且基本不会接错。

中国人是有办法的

小车的电路和结构总会出现意想不到的问题,师傅名言“中国人是有办法的”,嗯,多想想,解决办法总会有的。

程序

控制理论知识欠缺

直立车比起四轮车,控制显得尤为重要。
速度与激情三人都在信通院,几乎没有接触过自动控制的相关理论。
Unlimited的两女同胞虽是自动化,但是大二还没学到相关的理论知识。
于是,后期遇到控制瓶颈的时候,只能依靠感觉调试,显得被动。

要做到正确、易读、效率高

正确、易读、效率高,程序的三大要素。
效率在单片机编程尤为重要,时间复杂度和空间复杂度都要省。
开个数组,RAM就没了。能省就省,能用char的不用int,能用int的不用float,最好还把一个char掰成8个bit来用。
大三上学期学的汇编,也算是对程序效率作出贡献了。

模块化

设计程序的时候,已经考虑过模块化。
基本上“人字弯识别”“人字弯转向”“避障碍物”“起跑线识别”都通过模块化与寻迹、控制分离开了。
但是后期加入的“起跑线停车”“启动加速”,与PIT联系太紧密,两者几乎糅合在一起,牵一发而动全身。程序设计的前期没有对“时间”相关的功能进行过模块化考虑,以致后面写代码“能用就行”,留下隐患。

测试、测试、测试

循环赛之前,文齐大人狠狠地教训我:有想法之后,要用上位机测啊!
曾经,我每次有了新想法(寻迹、方向输出等),都会直接写进单片机,让小车跑。结果每次跑得都很恶心,然后心灰意冷否决一个想法。
其实通过上位机测试,比如测试100张图的输出,可以发现很多潜在的问题,解决这些问题之后,把程序写到小车里,就基本达到预期效果了。
所以在华北赛前的一个月,我每做一次改动,会起码用100张图来进行测试,虽然每次测试都很耗费时间,但总比小车出了状况再找问题要省事。
测试,测试,测试!

团队

靠谱的队友是成功的一半

大二就报名过智能车比赛,拉了一个对智能车根本不感兴趣的同学当队友,没多久就放弃了。
大三再次报名参加,由执行力超强的文齐当组长,倍感放心。
报名之初,另外一队友是经管院的女生,表示“对智能车有极大的兴趣,啥都可以学”。结果我都没见过她,她就说不参加了。
后来电路大神“师傅”加入了我们,电路问题No Problem,2天画好板子,半天焊好,电路出了问题给师傅打个电话总能快速解决。
我是个懒惰的人,不过做车的日子里,文齐大人几乎天天都早早把我弄醒,偷偷刷微博也总会把他逮住。

男女搭配 干活不累

文齐大人强大的执行力让我们走到循环赛。
结果还是被俩学妹赢了,伤心。
后来发现,几乎进入华北赛的队伍都有女生,嗯。

队伍间交流

北邮参加华北赛有两支队伍,但是两队之间的交流甚少,基本上是出了大问题才互相问。
缺乏交流,一定程度影响了两队的效率。
在循环赛之前,各队伍之间都是竞争关系,习惯了自己做自己的。后面虽然成了合作关系,但交流的习惯确实难培养起来。

心理

做车的痛苦远远大于成功的喜悦,要坚持混下去真考验能耐。

可执行的目标

有了大二放弃的阴影,大三报名时,我定下了一个目标:不管能不能赢得比赛,先做出一辆能跑完全程的小车。
试想,如果目标是“赢得校内赛”,我可能在第一次评测的时候就放弃了。从第一次评测,到校内热身赛,我们队都没有“赢得校内赛”的希望,甚至在校内赛也只是龟速前进。
“做出能跑完全程的小车”,设下这个可执行的目标,算是我最正确的决定之一。

爱拼才会赢

可能是我目标太低,“赢”这个字甚少出现于我脑海。
爱拼才会赢,文齐大人给我做了个好榜样。
评测,校内赛,循环赛的前一天晚上,文齐大人都抓我刷夜去了。
想赢就必须要争取,事实证明前一天晚上刷夜还是能出成果的。循环赛前一天刷夜,突然把速度翻了一倍,吓坏对手。

不弃疗就有希望

最后一个月,Unlimited将车的结构大改,代码也重新写了一遍。
无数次绝望到弃疗,又无数次互相打气重拾信心,终于好了。
啥,经历那么多才一个月时间?程序猿工资果然不是白发的....