说实话挺不想回顾这场电赛的,因为这次比赛的结果与付出严重不成正比,但生活的真相就是这样,努力有时不一定会有回报,罗曼罗兰曾经说过:“世上只有一种英雄主义,就是认清生活的真相之后依然热爱生活”。
题目介绍
其他组的题目都是关于信号采集,AC/DC的这方面没怎么接触过,只有F组是关于送药小车的,正好手头有一个车架,于是就选了F组的题目。题目要求是先搭建下图带有几个路口的赛道,一共有八个药房,小车从起点出发前要先识别一个1到8的数字,然后根据识别到的结果小车需要沿着红线找到对应的药房。
实现过程
电赛每个小组有三个人,小组另外两个人,一个人只会写文档,一个人资历尚浅(现已是大牛),所以基本除了写文档的所有工作都落我头上了😭。首先要解决的就是识别数字,最好的方案就是拿K210,因为K210训练部署视觉识别模型迅速,并且有专门的NPU((神经网络处理单元)加速单元,识别也较为迅速。但是由于学校对于这类比赛很是轻视,没有任何资金补助(连电赛要用的纸箱子都不提供),赛前并未准备这类视觉识别模块。手头只有一个树莓派,网上利用树莓派识别数字的教程还挺多的的,多用python+opencv+tensorflow实现,我也尝试了一下发现识别的帧率只有十帧不到,这根本满足不了比赛的需求。此时已经到第二天上午了,电赛一共只有三天四夜的准备时间,万愁莫展之际我想到了一个下策,调用数字识别API,这可能有点耍阴招,但我看规则也没禁止这一行为(可能电赛加入视觉识别还没几年)。于是最终选择了调用百度api实现了数字。
接下来就是识别红线了,幸好学过一点点OpenCV,先对图像进行预处理,包括灰度化、平滑滤波、二值化,然后就能轻松框出红线了。效果如下
接下来要实现让送药小车沿着红线前进,根据识别红线框出的框在视野中的坐标对车轮转速进行PID控制,但还是由于客观设备的限制,手头只有普通的直流电机,没有编码器与编码电机,这样就无法对转速进行闭环控制,所以最后沿着红线行驶时,超调量较大,导致有时就会沿着红线左右摇摆。效果如下:
时间能力有限,到最后一天只能调成这样了,这个效果拿个省二等奖应该问题不大。但是到了最后开箱正式向评委展示的时候,发现电池没电了。。。。(调试时间太紧张,封箱前忘了给锂电池充电了)。最后小车动都没动起来,果然最终还是小细节决定成败啊😭。结果已经无法改变,总的来说这次电赛我还是学到很多的,三天四夜就没睡几个小时(提前体验996生活?😇),一直在调试软件硬件,查资料编代码的能力还是得到了一些锻炼的。