0%

RoboCon 2018

最近一直想着写写和 RoboCon 2018 相关的东西,但是愿望并没有那么强烈,所以也就一直没写。正好今晚似乎很有兴致,我也就来写写这一路走来,我的心路历程。

从我认识机器人团队里的一个成员开始说吧。他是比我高一级隔壁系的学长,但是他听闻我编程似乎很厉害,所以经常跑来问我 C语言 相关的问题,这一来二去也就慢慢熟悉了。期间他多次邀请我加入机器人团队,但是我从大学开始的时候一直秉承着不参加任何社团来避免麻烦的理念,也就多次拒绝了他。搞笑的事情是,我最后还是加入了。原因其实很简单阿,女朋友在里面,我进去也能帮帮她的忙之类的,现在看来我还是太天真了,能力越大责任越大这句话真的是太正确了。

当我和老师申请,说要加入团队的时候,老师倒是很欢迎,毕竟以我的技术,能够让团队的水平爬上一个新的水平。我记得我加入的时候大约是2017年的11月,当时所面临的最重大的一个比赛就是 RoboCon 2018。我进入团队之后,名义上是团队技术顾问,但实际上则是肩负了整个团队技术的选型,以及队员培训等任务。其实这也是我第一次站在一个技术负责人的角度来做一个项目,毕竟之前写过的东西基本都是和别人一起做,我大部分情况下是一个执行者,并不是一个决策者。

通过阅读比赛规则,以及和机械组的沟通,我们初步的技术选型为 树莓派+STM32。树莓派作为整个机器人的大脑,对于动作的执行起决策作用,STM32则作为接受指令并且控制硬件的下位机。刚好临近寒假,我在寒假前给队员分别布置了不同的任务,一部分人去研究树莓派,另一部分去研究STM32.本来我以为,以他们的学习能力,在一个寒假里面,学完树莓派或者STM32是没有什么问题的,但是我真的错了,我高估了他们的学习能力。不过好的一点是,根据后续的方案修正,扔掉了树莓派,仅留下 STM32 作为整个系统的控制核心。

由于我之前对 Linux 的熟悉程度远大于他们,所以我在整个寒假都在学习如何使用树莓派来控制一些外设,包括一些常用的协议,例如 SPI、I²C 等,所以开学之后我也扔下了树莓派,开始和他们一起学习 STM32 的开发。说起 STM32 的开发, 其实有两种途径,第一种就是使用历经检验的 STM32 外设标准库,这个库的特点就是相对于我这种只写过硬件无关代码的人来说,更加的底层,例如要根据 Datasheet 去查寄存器的设定;第二种是用 ST 公司为 STM32 系列新开发的 API——STM32 HAL库,有 HAL 这个首字母缩写词就知道,这个库对于底层的抽象程度很高,毕竟叫 硬件抽象层。我在仔细对比之后,肯定是决定使用 HAL 进行开发了,因为在完全不会的情况下,HAL 的门槛确实要比标准库低很多,并且可移植性更加好,不会因为换了 MCU 型号就需要大量的更改代码,折页为我们后来购买 RoboMaster 的开发板埋下了伏笔。

就这从 HAL 库自带的例程开始看,一点一点的啃,好在 HAL 库是完全开源的,当你感觉哪个地方看了例程和文档还是不理解的时候,可以去看看实现的源码,大概率会明白。不过,我渐渐发现,他们慢慢地都跟不上我的进度了。当然,这不是最要命的问题,最要命的问题是,虽然他们学过一个学期的 C语言,但那仅仅只是用来应付期末考试和计算机二级考试的水平,根本没有写过一个像样的工程,对于工程的组织形式也是完全不懂。这也就导致他们在看 STM32 例程的时候十分的吃力。距离比赛时间越来越短,但是他们的学习进度还是没有多大的改善。怎么办呢?我前面说过,能力越大,责任越大,这是真的。

由于我是第一次接触这方面的开发,所以对于常见外设的使用还是个完完全全的门外汉。以直流无刷电机来说,一般的控制方式有 PWM调速 和 CAN总线发包。我们购买的 RoboMaster M3508电机包含了这两种调速方式。一开始我只是天真的想,既然他的 PWM模式 可以准确的根据占空比设定转速,不如就用 PWM模式吧,省时省力。当机器人底盘下地跑的时候,我才任仕达,这个内置 PID 的 PWM模式 是多么的不靠谱。最后无奈转向了以 CAN总线 的方式来控制电机。CAN 总线其实也不难,你可以设定电机的电流,电机会反馈当前的实际电流以及转速。在此之前,我是没有用过 PID 这个控制算法,所以在理解算法的过程中,钻了很久的牛角尖,导致底盘电机的控制程序迟迟没有成形,这个浪费时间的锅我还是要背的。

然后,还有各种各样的外设,比如:超声波测距、CCD寻线等,虽然我是把任务布置下去让他们自己独立完成一个模块交付给我使用的,但是在开发的过程中我给每个组都给予了很大的协助,说是我开发的一点都不为过吧。这么说起来,我一个人写完整个单片机部分,好像也不为过。那么后果是什么呢,后果就是一个人开发的压力过大,不能发挥团队的最大能力,导致在装箱运输前的最后一刻还没能调试完成,至于比赛的结果,其实在两个月前就已经知道了。

到了东莞理工学院的体育馆,也就是最后的比赛场地,发现很多队伍已经到了,开始了紧锣密鼓的最后调试工作。看着别的队伍的机器人,我真的是非常感慨,为什么人家就能凑齐一帮热爱技术并且有实力的队员,而我们就不行?不光是软件上的感叹,机械结构上的设计更是让我赞叹,各个队伍时不时就能让我们感到非常的厉害,这个过程竟然还能用这种机械结构完成。中间的准备过程,我还是不说了吧,反正就是十分的压抑和难受,最后那个三等奖也是意料之中的,毕竟只是一个安慰奖。

RoboCon 2018 对于我来说大概只是一个开始,因为这是我来到这个团队之后参加的第一个比赛,以后还是很多的比赛等着我。这次我也肩负起了队长以及电控组组长的责任,所以在以后的日子里,我会培训他们,让他们拥有在开发方面独挡一面的能力,避免今年这种孤军奋战的情况。