Skip to main content
新的开始

新的开始

·8184 words·17 mins·
Hollow Dobt/帆楼
Author
Hollow Dobt/帆楼
Flowers’ fade, leaves’ birth
Table of Contents

九月初 September: 九寨沟之旅
#


虽然是四川的孩子, 但我从没有去过川西高原和川北地区. 藏区的风光很独特很美丽, 接待我们的藏族人民也很热情, 不过去那边玩儿时如果不是组团还是要注意一些.

话接上回, 我决定趁暑假即将结束的时候去一个地方玩儿玩儿. 于是, 我随同母亲工作的那个团队一起去了九寨沟.

黄龙九寨站的海拔不算很高, 所以一路上几乎都没有出现高原反应. 但是, 从车站到九寨沟的距离实在是太远了! 加上全都是盘山公路, 我一路上都在努力忍着不吐出胃里翻腾的食物. 想来九寨沟玩儿的朋友也要注意, 如果是容易晕车的体质, 千万别在动车上吃太多东西了.

到民宿后, 我们去了一个藏族人家开的农家乐式餐馆. 十分诚恳地说, 藏族人民实在是太热情了, 整个吃饭的过程都在载歌载舞, 还邀请我们中的一些人上去表演. 其中一位叔叔洋相尽出, 逗得大家哈哈大笑, 他自己也笑个不停. 不过对于我这个在外面很内向的人来说, 这种热情确实是有点灾难了.

藏民提供的食物相较于一般的旅游景点便宜很多, 当时我们每个人吃比较饱, 平均开销却只有四十多元. 大部分菜都是很好吃的, 最多也就是有些吃不惯. 唯一我无法接受的只有青稞酒. 也许是品质不够好? 对我而言, 青稞酒的味道和大头菜榨汁没什么区别, 有一种酸涩怪味儿.

之后是随便逛逛. 最让我印象深刻的是这里随处可见极其干净(或许"极端"更为准确)的泉水小溪. 这些水清澈见底, 不但不臭, 反而有一股泥土和青草混合的清香. 作为雪山融水, 这些水似乎不需要过多加工就可以直接饮用. 这让我一个在长江边上长大的孩子十分震撼.

当然了, 这次来的主要目标是九寨沟, 民俗什么的都是顺便. 所以第二天我们就去了九寨沟, 直指目的地!

当天天气算是不错的, 有晴天的时刻, 也有多云遮挡的时刻. 因此, 我们看到的九寨沟是真正五彩缤纷的九寨沟. 这里必须强调, 九寨沟就是有这么美! 我没有加任何滤镜! 如果不亲自来一趟, 我也很难相信这种地方是在现实世界中真实存在的. 此情此景, 所有描述美的词句都已经失效了.

当然, 唯一遗憾的是, 九寨沟和黄龙的景色非常相似, 游玩方式也没有太多的区别. 因此第二天去黄龙时, 已经没了第一次见到那种宛如碧玉的池水时的那种惊喜感.

九月中旬 - 十月底 September, October: CIAME, 组队与备赛
#


过去很长一段时间, 我对自己的未来是有些迷茫的. 我不确定自己的未来到底可以是什么. 最迷茫的时刻, 学长学姐让我知道我期望的一种未来是真的可以实现的.

这次组队我吸取了上次的教训, 担任了队长, 并开始了为期一个月的备赛生活. 尽管历经许多挫折, 但不同于培训赛, 我们最终拿到了极其优异的成绩. 并且, 队员们(应该)和我在这个成长了许多, 也结下了深厚的友谊.

Chap I CIAME: 预选赛
#

本来不想再打比赛了, 尤其是培训赛那次惨败之后. 但是, 我总觉着这算是一种遗憾, 还差那么一点儿才足够圆满. 因此, 尽管那里曾经让我十分痛苦, 我最后还是选择了去参加.

暑假时的六人队伍到重新组队时只剩下了三人: 我(帆楼), 乐乐, 混世大魔王. 当时我们互相开玩笑, 如果组不了队参赛就给 ARC 打打工, 我写一点儿程序设计的教材帮助后面的新人入门, 另外两人为大家的琐事提供一些帮助. 这也是我们队伍叫做"赤石"的原因, 我们都觉得我们队伍只能打酱油吃翔. 但是, 恬淡突然的私聊让我意识到我们还有参加比赛的机会. 或许是她觉得自己那神奇的设计就那么付诸东流很是可惜, 也许是其他原因, 总之她带着另外一人 Aurora 加入到了我们队伍, 达到了参加比赛所需的机构(恬淡, Aurora)-电路(乐乐, 混世大魔王)-代码(我)五人组. 后来我们队伍还加入了另一个人糖醋哈密瓜, 虽然没有参与机构电路代码的框架和主体设计, 但是帮助我们解决了许多硬件和软件上的疑难问题.

之后是队伍的第一次会议. 我作为群主和会议主持人被他们直接指定为了队长, 我立刻制定了绝对不熬夜的规矩. 随后恬淡讲出了她那准备已久的神奇机构设计. 因为当时大家都是第一次见到这种样式的播种器, 加上还没仔细熟悉过规则, 所以几乎都没听懂. 仔细思考后, 我理解了, 并且认为这是一种优秀的创新. 因此我向被自己绕晕的恬淡和另外的队员解释了机构的播种原理, 告诉他们这是一种在原理上非常新奇并且实用的设计. 在后面比赛时据我观察, 考虑到装填难度与运行稳定性, 其实所有队伍中只有我们队伍的播种器的设计方式是最可能用于实际播种的.

最后, 大家一致同意使用这种播种器作为基本机构. 我们便开始了播种机器人的制造. 因为浙大参加这次比赛的队伍数量有限, 俱乐部安排举行校内赛淘汰一支队伍. 我们队伍作为典型的"拼好队", 实际上是最危险最容易被淘汰的几支队伍之一. 因此, 我们队内一致认可, 只要可以通过预选赛, 不被这场预选赛解散就算是胜利!

因为大家都是新人, 所以使用了传统的"浙大 ARC 专属"底盘作为基本结构, 转而专注于播种器的开发. 对于寻迹, 我原本的计划是使用红外传感器进行黑色识别. 但经过盛老师等学长的提醒, 我决定还是使用 OpenMV 进行视觉寻迹. 这是我非常缺少使用经验的一个新兴部件, 因此对我而言也算是个不小的挑战. 尽管如此, 经过一段时间的学习(抄别人的代码), 我还是写出了令人满意的寻迹代码. 加上糖醋哈密瓜调试出的超强的 PID 参数, 最后的比赛中, 很少有其他队伍像我们队伍的小车寻迹如此稳定准确, 在转弯的时候也用寻迹并且能稳定运行.

一切本来都是很顺利的, 但是, 在预选赛前夕, 我们队伍的电路出现了问题. 乐乐设计的电路板存在缺陷, 尽管当时我提醒修改了一小部分, 但是关键的设计问题没能改正. 加上时间紧张, 我不可能让他再做修改. 我没有时间在预选赛之前就给出小车运行的实例了.

于是, 对我而言痛苦的预选赛(“ppt 大赛”)开始了. 因为没有实例, 我讲解的时候其实还是有些没底气的. 后来有人说我太能扯了, 叽叽歪歪避开了一大堆关键内容, 试图不让缺少运行实例成为扣分点, 突出播种器设计的奇妙(这其实成功引来了专业老师的深入探讨, 这次探讨为最后那个最强版本做了铺垫), 让听的人云里雾里的.

当时预选赛结束后, 因为我们赤石队是答辩时被质问最多的一队, 大家都觉得自己队伍已经没什么晋级到正式赛的机会了. 于是大家一同去吃了散伙饭. 对, 是散伙饭!

这次吃饭让我想起了暑期培训赛那次比赛最后的聚餐, 我抛开了那些杂七杂八的念头, 专心和大家吃吃喝喝. 吃饭时一位明星也来了同一家餐厅, 不过大家都不认识. 后来糖醋哈密瓜在刷抖音时刷到了一张有我们队伍的照片, 发现他竟然就是吴克群!

接下来算是一个惊喜? 本来大家都放松打算回归正常课程了, 觉得一切都结束了, 但是我们忽然接到通知, 预选赛在六支队伍里面排行第四, 拿到了前五的排名, 需要参赛!

于是, 我们重新打起精神继续准备比赛. 许多细节都忘记了, 我只记得当时是国庆前后. 我很不幸运, 连着十多天遇到了许多挫折. 当时很多人都回家或者出去玩儿了, 只有我是一直留在学校, 陪他们一个个过来, 离开. 我那会儿才知道一个人可以多倒霉, 电脑屏幕莫名其妙碎了; 想调试的时候机器人基地的保安相比于以前忽然死活不同意我们登记进入; 电路一直出现奇奇怪怪的问题; 大改机构后电路又出现了这样那样的电路问题; 我作为唯一有能力写完完整程序的人, 无法调试验证程序的正确性, 进度一拖再拖. 我还要帮助电路的同学修复各种各样的电路 bug.

那段时间是对我而言非常痛苦, 总是在应对各种各样的意外, 物质, 身体和精神上都有不小的伤害, 手臂被机器人划伤出一道不算浅的伤口, 价值一万多没有质保的电脑坏掉了, 各种各样不停的麻烦找上门, 国庆大家都能抽出时间出去玩儿, 而我还得守着应对许多意料之外的问题, 行政上的混乱让我必须时刻关注最新的消息, 欠下的功课等待着我的学习, 中间的组会让我这个在这段时间被各种意外困住而几乎没有进展的报告人支支吾吾, 被莫名其妙压力而且没有进展但是不想让队员丢弃手中的假期赶来干活让我陷入非常无助的状况.

Chap II 一位学姐的自述
#

不断的新问题压得我喘不过气, 最后, 一直压在心底里的那些最根本的问题在我接近崩溃时终于爆发了.

我们这个专业脱离了宏大叙事后还剩下什么? 或者说我们作为这个专业普通的个人未来又究竟能做什么? 明明都说不歧视不歧视, 但是为什么面对国内的"土博士"还是选择偏心外国的那些留学生呢? 明明说关注农业问题关注农业问题, 可是拿出的那些待遇和社会认可度真的像十分重视吗? 一个真正贫困的人无法拿到本院足够的出国报销, 但是本专业那短时间出国之后有什么真正的意义吗? 最后, 我真的喜欢这个专业吗?

我在校内论坛上漫无目的地翻翻找找, 试图散散这焦躁的心. 也算是偶然吧, 我找到了一个我很感兴趣的帖子. 这个帖子的帖主提到了权衡农工直博利弊的事, 我便和她私聊了一会儿, 问了很多问题. 她回答了我她对于农工直博项目的看法, 总的来说让我明白了这其实仅仅是一个对少数人来说"锦上添花"的东西. 和她聊天时, 我还惊喜地发现她和我的发展思路差不多, 并且凭借她自己的能力与结局已经证明了这个思路是可行的. 这个专业并不是完全没有出路的, 只是作为这个专业的学生, 必须早早地知道自己到底想要得到什么. 只是按照学院的要求走一步看一步, 很难发现一条真正适合自己的道路. 或者说, 学院从来没有考虑过这一点.

那天我想了很多, 在最后智慧农工直博项目面试的前一天我选择了退出. 我想明白了一点, 我现在已经知道了自己最想做的目标. 那就是, 在不断的尝试与探索中找到自己的目标本身.

尽管经历了很多伤透脑筋的事, 但是我得到了当时对我而言最为重要的东西, 我感觉高中时代那个头铁自信的我回来了.

Chap III CIAME: 决赛前夜
#

恢复了斗志后, 我开始认真对待这个一开始半摆烂状态的比赛. 第二次组会前夕我, 恬淡和糖醋哈密瓜认真思考了现在播种器的问题. 因为我写程序的工具, 思路和程序本身的框架比较先进并且相对完整, 加上糖醋哈密瓜估计和调试参数的能力非常强, 因此尽管之前在电路和机构上比其他队伍慢, 我们很快便追上并且更完美地完成了寻迹部分的代码, 现在是时候认真考虑播种器的事了. 我基本同意恬淡的观点, 至少应该有个停车播种的稳妥方案, 因为不停车播种的难度非同寻常, 甚至在这个缺少其他机构与电路组件的前提下是几乎无解的. 基于此, 我们重新设计了播种器的结构, 我提议选择使用之前那位老师在组会上提到的"左右摇摆"方案来取代现有的单方向长距离旋转方案, 并且将这个方案进一步改为和现在一样的双通道同时工作的结构, 尽可能避免使用基于预测的播种. 但是, 与单方向长距离不同, 这一方案很可能因为大量的转向改变造成 0 度误差累积. 为了消除这一点误差, 糖醋哈密瓜提出了使用限位器的想法. 如果可以实现这个限位器, 那么代码中转动步长不需要精确计算, 也不会出现严重的误差累积问题, 并且可以保留我们这一相对简洁的播种器设计. 不久之后, 恬淡成功地把我们的想法实现在了播种器上, 并且顺带改进了之前缓冲器的设计(这玩意儿是聪明的恬淡同学偶然试出的一种避免种子到处滚动的特殊机构, 加上之后可以把播种精准度提高数倍). 这就是我们播种器的最终版本: 播种稳定, 装填方便, 高效率. 很明确的说, 这已经是除了垂直方向播种器外基于此类设计思路的最优方案(水平播种器).

与此同时, 我翘掉了一些课, 将代码从头进行了大规模的重构. 我将状态控制加入到了小车, 把停车播种的程序赶在最后一次组会前夕写好了.

期间, 负责机构和电路的其他同学一直默默奉献, 帮助我们解决了许多行政组织上的琐事. 记得很清楚, 当时糖醋哈密瓜在更换连接电路板的铜柱时不小心把这玩意儿弄短路了, 几个连接电机的引脚直接没信号了. 没办法, 只得交给乐乐解决了. 起初, 我们大家都觉得是某个电路板上的元件坏掉了, 或者是电路板烧坏了. 但排查到最后, 发现是 Arduino 的问题而不是电路板的问题: 是 Arduino 烧坏了! 尽管似乎浪费了不少时间, 但这实际上让我们后面在决赛时可以想到往这方面解决问题.

而后, 家豪哥哥帮助我们把球形种子替换为方形种子, 避免种子到处滚动的问题. 这一点同样是很重要的. 尽管比赛结束后恬淡说球形种子一样能跑的很好, 但毕竟这个方形种子更加保险嘛. 我认为纯粹是她嘴硬.

之后, 我们组总共有四个人去了武汉. 当时参看了其他队伍的作品, 才发现我们的完成度和准确度已经非常优秀. 我当即决定, 再花个四五小时我改成加速度控制并且调试完成之后大家就解散. 毕竟当初我们组队很重要的目标就是:

绝不学其他组熬夜! 学习第一! 生活第一! 快乐第一!

然而, 仿佛生活就是和我过意不去, 一个小小的硬件 bug 突然演变成了巨大的灾难.

Chap IV 意外
#

当时是一条线的信号问题. 我很早就注意到了这个问题, 但当时出于程序员的本能, 觉得小车也就一点儿暗病, 能跑就行, 也没多管. 但到了接近上午十点钟的时候, 小车那个单轮信号丢失的问题越来越严重. 我用尽了所有我知道的调试方法, 仍然无力回天. 当时联系了家豪学长远程帮忙, 同样没有解决方法. 之后, 我切换到了备用线, 问题更严重了, 那个电机直接不转了.

叶老师听说我们的困难就赶来了, 并且开始帮助我们修复这一硬件 bug. 虽然他的修复方法没有问题, 但因为前期我们队伍做的线质量太差, 大量的暴力扯线导致了更多的问题发生. 最后, 瓜瓜老大帮助我们修复问题的时候, 在使用万用表时不小心短接了电路, 小车彻底死了. 四个轮子只剩下一个可以转, 其他的要么线断裂有问题, 要么接触不良, 要么就是引脚没信号.

当时的我和其他三人都很绝望. 大家都去黄鹤楼吧, 乘黄鹤而西去.

但是我知道, 我绝对不能就在这里放弃. 前面那么多苦难, 我是白白承受了吗? 我已经有自己的目标了, 难道不想实现吗? 作为团队的老大, 怎么可以简简单单就说不行呢? 所谓的负责人, 不就是即使知道自己负责的东西没有十全的把握, 还是告诉大家自己一定可以完成目标吗?

对于整个电路, 因为完全不想就此放弃, 我决定死马当作活马医. 在叶老师的帮助下, 我意识到所有问题可以一个一个分开解决. 首先发现的问题, 最可笑的是混世大魔王做的备用线, 说怎么换上去不能用了呢, 因为他接的线完全是反的! 驱动没有因此烧坏, 真的是一个奇迹. 对于另外两轮奇怪的信号丢失, 如前面提到的那样, 之前我们就经历过类似的引脚丢失信号的问题, 我和乐乐根据之前的经验, 加上电路板的外观和电路没有香味推断大体应该没有问题, 加上 VCC 等引脚电压正常, 信号引脚几乎不可能因为短路烧坏, 引脚信号的缺失应该来自 Arduino 本身没有发送信号. 基于此, 我让他赶紧焊一个新的 Arduino 板备用. 接下来, 我在瓜瓜老大和叶老师的帮助下依次测试了四个驱动, 将驱动依次连接到信号输出正常的引脚上测试, 发现只有一个的电机转动有问题. 通过前面叶老师的提示, 我立刻明白了这是接线上出现了问题. 于是, 我找寻其他组要了备用线, 重新连接了驱动和电机. 但是, 还是没有解决? 哦, 对, 只剩下一个可疑的线了. 这就是官方出品的电路板引脚和驱动的连线. 之前一直不曾怀疑过这根导线, 因为使用万用表的通路测试时都显示是正常导通的. 叶老师嘿嘿一笑, 扯了扯那根线. 奇了, 电机忽然转了几下; 而后又扯回去. 怪了, 电机同样是没信号?

我瞬间懂了. 这条线本身确实是可以导通的, 甚至在露出来的那一小段金属也可以. 因为我测试时万用表放置的两处本来就是好的, 出问题是因为露出的金属部分弹性丢失, 没有像我使用万用表时紧密贴合! 于是, 我叫了瓜瓜老大和刚焊好 Arduino 的乐乐, 让他们把线重新做一下. 我则替换了新的 Arduino, 通过跑测试代码一个引脚一个引脚地证明小车控制端恢复了正常. 我们是幸运的, 同时也亏安装了保险丝, 电路板上没有其他部件的损毁.

最后, 当所有东西都修好后, 我让小车在夜幕刚刚落下的武汉跑了一次. 调好 OpenMV 黑色阈值, 嗯, 寻迹正常; 嗯, 播种功能似乎也是对的; 我们还有希望.

从早上开始修复问题到最后我和乐乐完成修复, 整个修复过程大概持续了七个小时. 修复的时候我们时常因为不确定最后努力是否会付之一炬而感到焦虑, 但是大家源源不断的帮助, 不管是老学长的直接帮忙, 叶老师不厌其烦地引导和亲自下场 debug, 还是其他组同学为我们提供的硬件支持, 让我们无比感动. 那是我第一次打从心底地认可这个地方, 我也终于理解了, 那些写在 ppt 上平淡的话中藏着远超文字本身所能表达的感情.

我知道自己的程序和他们做的播种器已经很棒, 白天也调试过, 所以那天晚上我们早早回了酒店, 吃了晚饭(也许算半个夜宵了)就赶着 ddl 做作业去了. 不管最后成绩如何, 今天的经历已经让我和乐乐觉得很满足了.

Chap V CIAME: 决赛
#

第二天忽然晴了, 并且似乎集中在我们那一小块比赛的地方. 这对于我们使用视觉寻迹的小车而言不算什么好消息.

果不其然, 在阳光照射下, Sow A Bit 队出现了意外. 他们和我们的 OpenMV 视觉识别模块原理差不多, 代码实现上也只有我们写的处理部分存在区别, 黑色色块信号检测都是一样的. 当时我们十分担心, 小车是不是就这样失效了呢? 尽管我测试过, 在阳光下对于小车的视觉影响似乎不大, 但是毕竟 Sow A Bit 队的测试结果和我们是一样的.

在不断的担心中, 我们迎来了转机. 前面所有的队伍几乎都遇到了这个问题, 而当轮到我们队伍时, 天气忽然变得不那么晴朗了. 我仔细观察了一下, 估计一小会儿后天气会达到最佳状况. 于是我申请了一小段 debug 的时间, 等待天气变阴. 果然, 不到一分钟, 天变阴了, 这是反光最弱对机器视觉影响最小的时刻. 我立刻申请开始比赛, 趁这段一小会儿好天气的时间立刻跑完全程. 小车走的很顺利, 没有出现 Sow A Bit 队因为反光识别失败的问题, 并且拿到了相当高的分数. 而跑完没一会儿, 在下一队上场前, 太阳又缓缓升起了. 某种意义上说, 尽管运气不佳, 但这一轮比赛是真的占尽了天时地利人和. 尽管我认为自己的代码在光照极强的条件下仍然能跑, 但是第二轮的时候似乎是太阳照射的白光分解出了红色部分的原因, 小车识别失败了. 考虑到第一轮已经跑的很好, 第二轮我们并没有太过担心. 尽管如果第二轮不出意外估计可以拿到 1000 分以上稳拿第三名, 但其实仅仅是第一轮我们队就已经拿到了这个名次.

还好最后 Sow A Bit 队和我们一样也拿到了一等奖, 不然我真得愧疚死, 毕竟我们两支队伍除了播种器设计和使用的电机不同外, 原理几乎是一样的, 再加上他们帮助过我们很多次, 在小车上花费的时间也远远多过我们(我们不熬夜但早起, 他们不但熬夜还早起), 实在是不忍心看到他们失败.

最后不出意外, 我们仅次于两个拿了 1000 多分的队伍, 以接近 950 分的水准拿到了一等奖. 这个分数应该是校内队伍的第二名, 也是决赛所有队伍的第三名. 说实话这很难让人想象, 我们是当初建立时仅仅以通过预选赛为目标, 早早吃了散伙饭, 如同拼多多那样开赛时培训赛时两队拼出的那支队伍.

Chap VI 尾声
#

恬淡说, 结束之后忽然感觉, CIAME 似乎只是一件很小的事. 可我不这么觉得. 经此一役后自己成长了不少, 不管是带团队还是写代码, 以及中间点点滴滴教会我的门路或者道理, 还有面对反对者的包容心.

更多的还有这段友谊. 我觉得, 我队里所有的队员们都很团结并且善良, 每当我遇到非代码问题召集他们过来时他们都会努力争取抽出时间, 我偶尔的无理取闹他们也表示理解. 尽管大家都开玩笑说搞不好那就散伙打工, 但是面对这个项目没一个人的态度是真正嘻嘻哈哈的. 尤其是糖醋哈密瓜, 因为参赛人数限制和既定排名, 我无法给他任何荣誉, 但是他依然随叫随到, 每当我有需要召唤他时他都会过来, 并且勤勤恳恳地帮助我们. 到此为止, 我已在心中哽咽, 不知说什么为好, 因为一切都那么美好, 一切都刚刚好. 结束比赛之后我都有点依依不舍, 不想离开他们这群可爱的人.

那就这样吧, 谢谢各位看到这儿, 我祝福自己的队员们(混世大魔王, 乐乐, 恬淡, Aurora, 糖醋哈密瓜)能够做到队里一开始说的那样, 找到自己的目标, 好好学习, 每一天都过得充实快乐, 绝不熬夜!

Chap VII 附录: 队伍信息
#

职责
帆楼队伍负责人, 主攻代码, 附带机构设计和电路修复. 有点傲, 不过代码能力很强, 在电路出问题时花了两天时间靠代码追平甚至超过了其他组
混世大魔王做线的, 这篇文章中的核心背锅侠, 但其实是因为其他所有人都不会做线. 会做估计也会背锅
乐乐主攻电路板设计, 也背了不少锅, 但其实电路板除了位置设计的不好从来没出其他问题
恬淡主攻播种器机构设计, 这个机器人灵魂的设计者, 将其他人的想象付诸实践者, 常常有奇思妙想
Aurora主攻小车底盘设计, 能靠他暴力解决的问题就不是问题. 其实可以是体育生
糖醋哈密瓜队伍宝藏男孩, 各个地方出现了问题总能从文档中发现答案进行解决. 就是老是跑很远去找 npy 玩儿