2013年8月24日,第八届飞思卡尔智能车竞赛在哈尔滨工业大学落下帷幕,我两年的智能车生涯亦随之终结。国赛之前的大部分精力几乎全部花在了如何提高车速,如何优化算法,提高鲁棒性上,而只有当国赛结束之后的这个去北京之动车的夜晚,才有灵感和时间去衡量这两年的得失。谨以此文献给浙工大智能车队全体队员及车友,望共勉之。 零.谈谈自己 初次接触智能车是在大一下,因为某人来到了建A五楼,在这里认识了很多很多学长学姐,可以说建A 5楼就是一切的开始,后来大学绝大部分的时间都将在这里度过。大二下的寒假之前,我们学校开始智能车队的招新,当时我也只是想去试试看,抱着玩玩的心态去,可能是从小就比较贪玩吧。寒假之后,我和现在的两个基友组成了一队,当时我们三个通信的,一个大一,两个大二,成为所有队伍里最奇葩的组合。跟我们一样的还有生哥他们组(今年的小钢炮),那一年,我几乎只会用C语言编程,单片机也只能说入门,连熟练都谈不上,就这样开始做起了摄像头,开始的时候还企图参考学长们的代码,但是后来发现那个学长封装的太好了,变量全是很长的宏定义,完全不知道他在说什么,再加上当时自己写的代码量太少,确实要一下子读懂几千行代码是一件很难的事。于是,我们两个做算法的就决定自己一点点开始编程序,就这样到了省赛。当时觉得拿个省三就不虚此行了。到了杭电,见识到了强队的风采,更是激起了我们的斗志。幸运的是 以倒数几名进入了决赛,当时速度还比较慢,大概2.5米不到,但是在当时的浙江赛区已经可以冲击一下国赛名额的了。遗憾的是,最后因为算法的漏洞,三次都没跑完,虽然,当时觉得很遗憾,但后来想想,都不是运气不好,全都是自己平时考虑的不周全导致的,没有任何的运气成分,于是暗暗下定决心,准备冲击第八届飞思卡尔。 从此每天叫醒我的不是闹钟,而是梦想。 第二年,我们早早地就开始了准备,芯片从S12换成了K60,我开始自学LABVIEW,准备自己制作上位机。等到比赛规则出来,上位机和底层也已经差不多成型了。K60的高主频,DMA采集图像,给我们的图像处理算法提供了更大的发挥空间,分辨率也比去年提高了好几倍,然而今年B车倒着跑却给我们造成了很大的困扰。到底电池是装在前面还是后面?主销是前倾还是后倾?这些问题对于我们这些几乎没传承的队伍来说是巨大的难题。机械结构的细微差异只有在速度达到3米左右才会显现出来,那就必须把算法先做好,而事实上很多算法跟其机械结构又是相匹配的。最终,我选择先模仿,后创新。首先,广泛地浏览国赛队伍的技术报告,尤其是那些成绩平平的队伍,因为他们的技术报告里往往更为详尽,甚至有其算法设计时碰到的主要矛盾分析等。转眼到了4月底,那时,我们刚刚初步闭环,转眼就是校赛,而结果却十分不佳,我们负于了我们学校另外一组,当时的速度大约是2米6左右。五一之前,我们组开了一次会,彻头彻尾地反省了一遍,总结了前半段的不足,制定了之后的计划以及目标。当时校内竞争的压力是十分巨大的,两个队伍速度其实差不多,但是输的一方要被迫换芯片,于是我们不得不准备两块芯片:K60和Coldfire。不过好在,后来组委会说可以有两款一样的芯片。6月初的时候,第二次校赛。这一次,我们大改了机械和算法,立誓要一雪前耻。然而校赛之前的晚上,我们的板子开始莫名其妙的出现硬件上访(第3号中断,后来发现其一般触发原因是程序跑飞,数组越界,数据类型不匹配造成的指针地址访问溢出或者是硬件电路焊接问题造成的硬件不稳定)。后来用黑胶带把PCB贴上之后就没出现了,最终,以微弱优势取胜,但是,这也警示着我们要继续努力。直到省赛之前,那组的速度又再次赶超了我们。然而,我很清楚如果比稳定性,我们在算法上有巨大的优势。预赛上午,他们以微弱优势领先,下午预赛本来准备全力冲刺,眼看着速度飞快,缺连续3次都出现复位,这种情况真是让人抓狂,申请修车也不被同意,只能自己去场地排查问题,最后发现可能是擦轮胎的时候擦的太湿,把PCB也弄湿了,好在最后决赛的时候稳定跑完拿到了国赛名额,而另一组可能因为算法或者是螺丝松了导致最终没跑完,同样令人痛心的是我们学校的小钢炮,预赛第一,而决赛三次在同样的十字弯冲出去,原因未知。 在准备国赛的一个月时间里,我们尝试了几种不同的机械结构,最后选择了对原机械结构进行微调,算法则主要在速度决策上进行了很大更改,对坡道,小S也进行了专门的处理,眼看国赛将近,我们却还有一个大弧里震荡的问题没有完全解决,最终我们选择了妥协。而后来的国赛也让我们在这点上吃尽了苦头。 8月22日试车日,一天调试下来发现现场板子摩擦力比实验室大的多,紧急提速,调整参数,制定方案,最终没出现问题。 8月23日,交车前进行最终前瞻,机械检查,保证万无一失之后交车。上午预赛以第10成绩保证了进入决赛名额,下午原本想提速,却因为差速调的过紧使弯道性能急速下降,反而速度比上午慢了0.4秒。 8月24日,看到决赛赛道,我基本上已经知道会发生什么,因为出现了我们最害怕的好几段大弧,最终迫使我们不得不降速,以29秒多的成绩保底跑完,拿到国一。 至此,国赛结束,然后在此间我也看到很多在我们之前的强队都在决赛的时候纷纷落马,因为决策的失误,又或者是程序上的小BUG,这些场面都是我们不愿意看到的,但是它往往在不经意间降临,看起来像是运气不好,其实都是水滴石穿,就像两年前我们省赛的决赛一样。 决赛跑完的那一刻,悲伤大于喜悦。 去北京的动车上,丝毫没有胜利的喜悦,剩下的只是空虚,于是便好好地问问自己,让自己回想起当初的经历。 一.初衷 很显然,举办这个比赛的初衷是提高本科生的实践创新能力,以及提供一个公平公正的竞技平台从而促使本科生对理论知识的应用。不得不承认,智能车是我所见过的所有科技竞赛里最为公平的,没有之一。然而,随着大赛的不断举办,其性质还是有所变化,变得不那么的“公平”,比如强队对前几名的垄断,克隆车等等,但这并不是这个大赛的体制的错,尤其对前者,优胜劣汰,技术的正向积累可以说本来就是适应这个社会的产物。然而后者的产生,则是浮躁的社会风气的衍生物对大学教育这块最后的净土的玷污。 二.飞思卡尔不是保研的通行证 这句话送给正在做或者正准备做飞思卡尔的学弟学妹们。如果你们做小车的初衷仅仅是为了保研的话,我强烈建议你们不要做,第一,从个人发展的角度讲,比小车“性价比”高的竞赛比比皆是。第二,从智能车竞赛发展的角度讲,个体对竞赛附属品的追求,必然会出现某些作弊现象,比如克隆车,比如换电机舵机等等,长此以往,显然是不利于大赛发展的。对于技术,我强烈建议学弟学妹们始终保持一颗虔诚的心,以及一种谦虚积极的心态。不可否认,我们学校的某人在这一届也最出了一些不太和谐的事,虽然没有被谁揭发,但是我还是想提醒你,虽然你的动机可以被我们理解,但是你的行为已经损害了其他公平备赛的队员的切身利益,我也不希望将来浙工大的名誉因为你一个人的行为受损,记住,做车既做人。 三.强队的成功不是毫无理由的,但也不是不可超越的。 举个最简单的例子就是北科。无疑,他们是所有学校里成绩最稳定,也是最强,最值得敬佩的。他们的强大来源于技术的正向积累以及一个合理的阶梯式的管理体系,两者同时形成一种文化,这也是我们做的远远不够的地方。就拿今年北科的摄像头而言,路径和速度控制是没的说,但是对于北科在障碍处的检测以及强大的加减速性能,我还是没能想通。加减速性能不像是只调整PID参数得到的,或许是用了电流环?或者是机械结构的原因? 四.正视自己,不要忽视任何一个细节 从备赛到参加比赛,首先要保证的是能够完成比赛要求,不跑出赛道,程序和硬件上没有BUG,从而把运气成分降到最低。在比赛的时候根据赛道情况制定相应的对策,以稳为主,稳中求快。不稳定的队伍,再快也不能算是真正的强队。而平时备赛其间一定要注意任何一个细小的问题,不能规避任何的BUG。上帝是公平的,平时付出多少,比赛的时候都能得到检验。关键时候任何一个细小的错误都会成为失败的原因。每次失败多找找自己的原因,想想别人成功的地方,不要总是给自己的懦弱找理由,任何失败都不是一蹴而就的。 五.不要羡慕别人,你所拥有的可能比别人好的多 所谓打江山的人所得到的远远比守江山的人所得到的多,因此你们不必去羡慕传统强队一上来就有强大的软硬件,机械结构的支持,他们可能碰到的失败远远比你少,你所收获的精神财富却远远比他们多的多,比如很多分析,解决问题的能力都只有自己亲身经历过才能真正掌握。 六.关于上位机。 每个队伍都必须有一个人精通上位机的编写,尤其是摄像头组。配合SD卡,无线,蓝牙等调试效率会成倍增加,语言可以是C,C++,C#,VB,LABVIEW等等。 引用电子科大某同学霸气的宣言:“只要三个人齐心协力,就算是北科也一定能战胜!” 我想告诉浙工大每一位智能车队的成员: 你们的路还很长,但是你们要相信你们拥有不逊色于北科的能力,只要一点点地积累和坚持不懈,则超越北科之日不远矣! 最后,我要感谢陪我一路走来,在我绝望时候始终陪在我身边的妹子,没有你,或许就没有今天的我。 PS:感谢DISUE队。 浙工大银江逐梦
|