近来确实有些慵懒了,电赛结束后便回了惠州,项目组的导师都默许我们这些回家的人理所应当地摆烂了。末了,看了好几天日漫后觉得无所事事。按照鄙人的习惯,无所事事就要作文章,想来自己搭个博客买个域名放了五个多月都没动过,就此再做些吹牛或是卖狗皮膏药的事吧。
大部分人都不会对失败的行动进行记录的,但是纵观我多年来的奋斗,若是只记录那些胜利的喜悦,那么我的文章或许只能有薄薄的两页纸。为了混个“文章等身”的虚名,我向来是喜欢败事自吹的。实际上按照观察者的公义,这次行动理应成功才是,但是具体执行时却出了些小差错,以致于最后机关算尽,功败垂成。但若是谈及收获,我觉得这次行动是我上大学以来最成功的,最正确,最好最好的行动,这个到文章后半段会慢慢谈到。
电赛,全称是大学生电子设计大赛。赛事分为国赛和省赛,奇数年为国赛,偶数年为省赛。组别分为本科组和高职组,赛题类型分为控制类、信息类、电源类等等。它也是电子信息专业业界认可度最高的比赛之一。不过现在都叫“TI杯”了。原因是美国德州仪器(Texas Instruments)为了推广其芯片并增强其在大陆的知名度(实际上我觉得很多余,因为就模拟电子(不是指半导体,别硬杠)而言,但凡有点见识的人都知道德州仪器是天下第一),对此比赛进行了赞助。但当然,所有参加过电赛并经历过“限板卡”折磨的人大都学到了一点,就是以后再也不用TI的板卡了,至于原因,我稍后便会谈到。
其实经历了去年的国赛后我便决议不再参加这种比赛了。第一,传统单片机嵌入式已经没有什么爆炸性增长点了,未来是属于FPGA的。第二,我其实不太适合做乱七八糟的硬件,如果要打比赛,需要一个厉害的硬件师辅助。第三,去年国赛经历十分难评,是我近一千个工作日以来最失败的行动之一。但是由于放弃保研(原因在以后的文章中大概会提到)后,我的大学生活进入养老循环,实在称不上是“精英主义者”,可以说是与精英主义背道而驰。所以被迫重操旧业,去参加这所谓“业界最认可的比赛”,以装点门面,让自己看起来像个“体面人”。
当然,我虽然跟李中堂一样是“裱糊匠”,但是做事还是看契机的。三月底我与一同僚组队参加校赛,这儿不方便透露他的名字,就叫同僚A吧。这同僚A是个能力很强,为人正派的人,在后续合作中也成为了我上大学两年以来唯一认可的人。虽然校赛行动失败,但也证明了他是个不错的硬件师,这一点为后续我决议参加省赛埋下了伏笔。
在三月到五月这一期间除了同僚A之外,我又跟另一个二次元+音游玩家混熟了,他校赛时未与我组队,不过也失败了。至于我一个极端现实主义者+精英主义者+亡命徒为什么会跟二次元音游宅男混熟,其间原因相当复杂,简而言之不过是一次人际发展实验罢了。事实证明我只要想,我可以跟任何人混熟。就叫他同僚B吧,反正他后面戏份挺多的。
起初在校赛结束后,我自知我流年不利,参加省赛只许输,不许赢,所以我是打算及时止损的。在命运赌桌上,任何犹豫的代价都是惨重的。而此时同僚B邀请我一起参加省赛,考虑到“乞丐永远不会破产”,我终究还是应承了下来,但是我提出了参加比赛两大条件,一是必须拉到此前提到的同僚A打比赛,二是我不做队长。第一点很好理解,同僚A是我唯一信任的硬件手,如果可以获得他的支持,那么比赛在开赛前我便已经赢了一半(事实上也确实是如此)。我与同僚B的原话是“队伍需要一个会画板子,焊接技术好,有组装能力和硬件解决方案提出能力,又带点奇思妙想的人,而xx(同僚A)是我整个通讯录唯一符合条件的人”。在后续的备赛过程中,以上特点一一验证,毫厘不爽。其实至此一切还是正常的,因为我确实也没做队长,而是推给了同僚B做,我对其给出的理由是“我容易弃赛跑路”,实际上我是个十分执着并且会拼命的人,根本不存在弃赛跑路这种可能。真正原因是我不想让队伍为我运势所累。此时大言不惭的唯物主义者必然是要来执笔投墨来讨伐我了。当然,对于涉世未深的小孩子我也一向是抱有“童言无忌”的态度的。其实最后队伍依旧为我运势所累了,因为我对一件事的计算有所误解。就是如果获得了高级奖项后,好处的分配。在我的印象里,在竞赛中夺取了高级奖项后,好处基本上都会落在队长和队员2身上,而队员3则只是图个虚名,所以我尽管是队伍主控手,是绝对主力,我却主动当了队员3,为得就是确保整体的胜利。因为这样算的话,就算拿到了高级奖项,我也不过是得不到实质好处“为他人做嫁衣的”那个人罢了,而天道酬勤,我尽心尽力只为图个虚名,观察者完全没有理由卡我们。我把这招叫“移花接木”,而前期准备的顺利也让我自以为我的招数奏效了。直到有一天,同僚A跟我说对于最后的加分或者其他竞赛带来的好处,是由队内认同的贡献度决定的,而不是队长身份。这时我就知道这场比赛的最终结果了。因为在队伍中我是主控手,如果按贡献度来划分,在获得高级奖项后,最后的好处会落到我头上。这时整场比赛的性质就改变了,观察者会伸出看不见的手不留余力地卡死我们,直到我们精疲力竭。
当然,在比赛之前,虽然忌惮观察者的恐怖限制力量,但是我还是有点不信邪的。因为就技术层面而言,在经历了一整个七月份的卷生卷死,我们小队的实力已经凌驾于北华园电信学院百分之九十的队伍了,是妥妥的T0级别。主控、硬件、视觉都是备赛实验室中一流的存在。但是事实上,最后在这场比赛中很多T0级别的队伍都翻车了(小声bb:我怀疑观察者为了对付我一个人把所有人都对付了,正如22年高考),反倒是一些不起眼的队伍拿到了一等二等。
抛开运势不谈,其实行动失败的原因还有队内的裂痕。这件事我觉得同僚B负百分之九十的责任,因为这个人实力不强却傲慢,而且情商低。在备赛的过程中其实一直都存在一些小摩擦,但是都由我两边说和盖过去了。为得就是先比赛,后算账。
正式开赛的时候我的疑虑被全部验证了。我们选择的是小车题(H题),此题限TI板卡,就是必须用M0系列开发板来做,然后不准架摄像头(视觉手下线),而在前期备赛时小车的模型和构造我们早就摸清楚了,所以硬件手一个早上的工夫也就下班了,所有的压力正式给到主控手,而我就是那个决定胜负的人,也是观察者唯一想要对付的人。
事已至此,只能拼了。那题要用到一个模块MPU6050,也是我最忌讳的模块。这里简单说一下,MPU6050是一个六轴姿态传感器,有XYZ三轴加速度计和XYZ三轴角速度陀螺仪构成。而它真正的作用是得到六轴原始数据后在主控端进行融合解算,得到三个欧拉角,分别为横滚角,俯仰角和偏航角,其中横滚角和俯仰角的解算结果是正确的,而偏航角却有温漂(随着时间推移,该角会自动增加),而那题正好要用偏航角。且不说温漂的问题,就是单单得到这个偏航角,所需要克服的困难也是巨大的。首先,TI的板卡性能相当感人,在如果用它直接与MPU6050进行硬件IIC通信并用DMP库进行偏航角解算,会将整个程序卡死,使单片机沦为一个只读取偏航角而无法进行任何任务的废品。这时正常人都会想到用另一块单片机专门进行解算,再将得到的数据传给TI板卡,就可以解决这个问题。实际上我们也确实这样子做了,但是这种想法其实低估了TI板卡的垃圾,因为当我们把解算好的偏航角传给TI板卡时,却发现由于串口通信的影响,电机编码器的读取被致命性破坏,也就是此方法根本不奏效。后来经过了漫长的资料查找,总算在TI板卡上实现了对MPU6050的软件IIC读取以及卡尔曼滤波解算,结果发现,由于软件IIC通信的影响导致TI板卡的while主循环无法执行,也就是说,仅仅是将这一过程放置在定时器中断,也足以掠夺M0G3507的全部算力。后来我不得已将定时器手动二分频,才为其他任务的执行留出了一半的算力。功能的实现才得以继续进行。
比赛第一天晚上是我睡的最久的一个晚上了,睡了四个多小时,后来的比赛里,我几乎没有休息了。由于题目离谱+板卡限制,我们之前所做的大部分准备其实都已经无效了。而且最重要的是,两个队友真的只能主打陪伴,因为他们被迫下线了,其间我de了无数的Bug,四天三夜的84个小时里,我只睡了7个小时,敲了不下一千五百行代码(最后有用的大概六百行),为的就是去搏那一点点胜利的可能,因为我知道两个队友其实备赛不易,一个多月的努力绝不能为我运势所累。我很喜欢《龙族》里面楚子航的一句话——“如果你还有命能拼,就别等到后悔再去拼”,这也是亡命徒最基本的做事逻辑。到了第四天早晨,我感觉自己意识有些模糊了,敲代码的时候手甚至会颤抖,于是招呼同僚A陪我回宿舍休息(那时我确实害怕我半路栽了),实际上回宿舍之后我也没睡着,干躺半小时后我便回实验室了。那时要攻克功能3,只要功能3被攻克了,就是二等。而功能4是功能3的重复性操作,考验的是系统稳定性。最后我拼尽全力确实把功能3跑出来了,而功能4由于时间关系无力实现。那时我的心态还是放平的,因为,虽然结果不合预期,但是勉强还能接受。但是我确实没想到最后验收的时候会被观察者再摆一道。
验收当天,我们有十五分钟的测试环节,测试完后再验收。测试的时候功能123很快就成功跑出来了,但是我们考虑到还有时间,于是想多跑两遍功能3以求稳妥,实际上这是正确的对策。但是在快要结束测试的时候我们小车的牛眼轮却出了问题,以至于我们写死的开环程序(也就是功能3)无法正常实现。我是根本没有想到硬件上最后会被摆一道的。对此硬件师也有些自责,但是我心里清楚,有些事情,根本无法改变。因为就算是在比赛时实现了功能3和功能4,最后观察者依旧会有办法限制我们,最后结果自然是顺应天意的,当然,观察者做的也没有太死,最后赐了三等奖让我们避免面对高额的“竞赛赔款”(打电赛相当烧钱)。因为三等奖可以拿到百分之80的报销,加上虚报,实际上基本上不会亏本,算上元件的可复用性,甚至还有点赚。
验收完当天我为了迎合队友们沮丧的心情,也是适时调出了沮丧的自己以适配场景。其实我的心中不能说毫无波澜吧,但是也相当平静。我总是跟同僚A说我是在事情的最开始就能知道结局的人,我想我有这个能耐,但是还有下一句,就是纵使知道结局也会去拼命,那不是愚蠢,因为我相信终有比命运更高的公义,会为百折不挠的人加冕。
其实在五月份决定组队的时候,有个气运很好的人(同僚C)找我组队,但此人心术不正,投机取巧,只会抱大腿和指点江山,所以我扯谎拒绝了他。在七月份备赛的过程中我曾跟同僚A提过此事,并百分之百肯定地说“答应跟他(同僚C)组队的人必然会有不错的结果”。那时同僚A其实半信半疑,因为就实力而言这件事发生的概率是很低的。而最后这个人组的队在验收时与评审员顶撞,还拿到了二等,并因为题目性质(信息类)盖过了所有一等奖得主被派去参加全国邀请赛。看到这里你可能会觉得我是在吹牛,但是这却是事实。在多年的战斗中我逐渐锻炼出了出神入化的洞察力,虽然这样的洞察力对我来说是无用的,因为就算我是个每次都会把polo衫扣子扣满三个的变态萝莉控(笑),我也断然不会违背原则去跟那样的人合作,但是反过来想,在大部分时候,不就是那样的人在一直赢么。
写到这儿,读文章的可能还是不明白为什么我会说这次行动是我两年来进行的最正确,最最好的行动之一。其实除了技术上确实有很大的提升之外,最重要的是我交到了同僚A这个朋友。不能以万里长城去形容他吧,但是我也明白,在浑浑噩噩了两年之后,我终于迎来转机了。
到这不写首说不过去,写呗。
七月七盘电赛印证
一事从来有一根,一根自有一乾坤。
纵知万事悖于我,肯把三才决一身。
机关算尽惊覆盘,命运多舛哽如针。
仙人绝无两般话,道不虚行只在人。
这诗大段抄袭了《观易吟》,但是也无所谓了。
————————————————————————————————————————————————————————————————甲辰年七月初七七夕夜于惠州