一些备赛的时间轴
- 碎碎念
- 前期准备
- 为期20天的培训
-
- 图形获取和指示系统
- 智能小车
- 自动行驶小车
- 省赛
- 写在最后
碎碎念 电赛准备主要集中在七月份,前前后后做了三道题就直接比赛了。我们的准备确实很充分,到了比赛当天早上十点我们已经解决了蓝牙通信、MSP432等基本的代码问题,然后就是小车PD算法和跑圈逻辑问题。
电赛给了我整个大学以来最充实的一个暑假。老师每次都只是点到为止,大部分时间都是自己在琢磨。非常感谢CSDN,整个电赛学的大部分东西都是CSDN上的。为表示感谢,且不甘心一个月成果仅剩一张奖状,打算将这个月学到的知识写成blog,一方面记录自己的学习以免遗忘(说不准明年还来呢),一方面和大家交流交流,希望能碰撞出更多的启发。
前期准备 大约是刚开学的时候,大概三四月份,那时候跟何佬和搞智能车的浩然哥组队,这实力稳得雅痞。当时跟着b站一个阿婆主一起做,做的寻迹小车。当时买了很多模块,用的c8t6最小系统板,开始上手学习Keil。当时的学习就是一整个混沌状态,学寄存器和固件库都学不懂,看原理也不懂。后面浩然哥说直接上手hal库就行了。但是b站野火的hal库感觉讲的还是固件库,很混乱,看完还是不知道怎么写。后面搜到小蜜蜂,一种相见恨晚的感觉,讲的很清楚,很适合入门,就是外设讲的有点少。接着跟着另一个视频写了MPU6050的代码,才算真正入门。
后来课业压力比较大,大家都开始忙起来了,电赛的事情就暂时搁置了。
但是多亏了浩然哥,我们这前期看似没什么成果的准备,明里暗里为后面备赛、比赛提供了不少帮助。
为期20天的培训 说是培训,倒不如说是训练。老师给题目然后我们自己摸索着做。这里主要写一写心得吧,具体的题目思路应该会另开blog写。浩然哥因为别的任务不得不离开我们队,后面邀请了博哥一起干。我们练了三个题目:图形获取和指示系统,小车循迹+视觉,小车寻迹+视觉+小车会车。
图形获取和指示系统 题目意思主要是通过视觉获取图形形状,正方形或者圆形,然后激光笔在设定位置可以沿着黑线或者白线绕一圈并且停下。发挥部分是识别图形形状、图形大小并且给出图形面积,识别圆形、矩形迷宫并且实现走迷宫。
文章图片
文章图片
文章图片
我就是从这个题目入坑的openmv,openmv确实是一个非常强大而且好用的摄像头。三个练习题都用到了openmv,因此到比赛的时候openmv已经使用很熟练了。
做这个题目的时候,我和何佬基本已经会使用Keil了,博哥接触的比较晚,而且用的win11,安装驱动碰到了很多麻烦。
老师发过几个摄像头,包括pixy,还有ov5640,但是能找到的例程和教程都很少,ov5640更是要从底层开始编程。挣扎了大概三天,还是决定斥巨资买openmv。
另外,何佬发现hal库的例程实在太少,他之前学了一个月的固件库,知道固件库的好用。所以他花了两天封装了固件库,我们称之hel库(helao库)。后面小车题调用hel库写起来嘎嘎快。
这个阶段已经解决openmv和单片机通信模块,超声波测距模块,步进电机模块。
中间遇到了很多问题,比如步进电机和电机驱动的连线,有一天突然不动了,查了一下午发现是一根线断了;再比如摄像头看不见激光笔,一气之下发现了openmv调阈值的妙招等等。
这个阶段用的是stm32f407最小核心板,32位处理器,相对f103可以更好地处理浮点数,又引出很多引脚,很适合外设多的情况。
智能小车 第二题是小车循迹,因为刚刚上手小车,没有很多花里胡哨的跑法,就是沿着黑线跑,越快越好,跑一圈停或者跑两圈停,期间需要识别地面的图形、数字,声光提示。
文章图片
这个阶段还没有接触编码器,只能数大概给的PWM波判断是否完成一圈。用的是减速直流电机,整个小车看起来比较笨重,跑的也不快。
主要视觉非常痛苦,下午和晚上光线一变颜色阈值又改变了,而且摄像头的角度影响矩形、圆形、三角形的判断。后来请教了另一个组的同学,知道了一个在官网没看到的东西,叫solidity,有机会详细写这道题的话再细讲吧。数字识别没有做出来,时间不太够。
这个题目循迹用的也是openmv,视野里面分三段识别黑线,求出偏移角度,传递给单片机,再通过PD算法给PWM波,达到循迹的目的。现在想回来,小车走的不太顺滑估计是PD的参数没有调好的缘故。
验收前两天吧,烧了一块407,烧的那天晚上,何佬抱着车,反复看电池和407,愁的看起来一晚老了好几岁。后面何佬说,可能是因为串口和编译器同时插407,烧了。
自动行驶小车 做这道题的时候已经是离比赛不到一个星期了。我们换上了适合比赛大小的小车,带编码器的两辆很轻巧的车,带有编码器,自动计算车轮转动圈数,可以用作速度PD,也可以计算行驶圈数。这个题目要求小车可以顺时针逆时针寻迹,提高要求中要实现两小车在左边区域顺利会车。
文章图片
这个寻迹跟循迹不同,它是两边有线,中间都是空白。看着很像飞思卡尔的赛道,我们连夜找浩然哥。使用两边黑线规划路线会有局限,最后还是用第二次练习的循迹。篇幅有限,暂时不展开了。
这个题目调车调的有点久,还是不要三个人围着车一起调,效率低低低。跑这辆小车的时候,主要是我和何佬在调,就先让博哥去把蓝牙通信封装好,然后学一学MSP,谁能想到,这无意之举居然在省赛起到了最最最关键的作用!! 尽管用MSP的小车还没有跑起来。
文章图片
我开始尝试做数字识别,前前后后买了两个K210。前面用openmv做数字识别效果并不好,我们买的是openmvh7,就是openmv4,没有4plus强大的机器学习功能。坐牢坐了两天标注了两千多张数据集,最后识别效果不尽人意。买了K210,训练了五百多张,除了帧率有点低,识别正确率还是很高的。但确实K210对色彩没有openmv那么敏感。
省赛 赛题公布后的很长一段时间,我跟他们俩打趣说好像没我啥事了,我写报告吧。确实这个题目看似视觉的内容不是很多,而且他们俩一早上焦头烂额在弄MSP432和蓝牙通信,我就在旁边帮忙借借器材打打杂。这个分叉口其实挺好做的,之前循迹的基础上,视野每个部分本来是寻找一个最大色块,现在改成寻找两个最大色块,分成左边和右边分别计算偏移角,要走外圈直接取右边的偏移角,走内圈直接取左边。停止线也好做,色块面积大于一定值就认为是停止线。等待停止线我取巧了,因为会混淆停止线,我干脆不区分了,第一次停五秒,第二次直接停。
文章图片
第一天早上我们就实现蓝牙通信了。多亏博哥封装好了MSP,我们俩即使不会MSP,也能直接调用博哥封装的函数写逻辑。晚上我们调车确实是太浪费时间了,在走廊这么昏暗的环境,还要小车循迹,也太难为它了。
在大部分逻辑代码还没完成的情况下,最高效的应该是一个人调车,一个人往后写代码,一个人修改代码。当然这只是我的想法,不容易维持,因为小车一旦跑好一些了又忍不住跑过去看,再聊上几句,回来就不知道写到哪了。
我们没有用光电循迹,摄像头帧率能达到60fps,已经很够了。也没有用超声波测距,用过openmv自带的3D测距AprilTag模块,但事实上要看完整AprilTag码两小车距离已经是少于20cm了。因此比较巧妙的用了之前的色块识别,同样后面再细细讲呗。
文章图片
最后一天凌晨一点多已经跑出要求一和要求二了,结果到了七点多其中一辆跑不起来了,轮子一直打滑,拿起来在跑,放下去又不动了。换了轮子,换完轮子换电机,换完电机换电机驱动,主车的电机驱动应该是能驱动减速电机的,可是已经来不及买了。L298N好像是驱动不了减速直流电机。老师叫我们换15V电机又烧了一个L298N,后面老师送来飞思卡尔的电机驱动,已经是十点多了好像,来不及再折腾了。于是放弃第四问的速度要求,换回以前轻巧的小车。两辆车重新跑起来,已经是十二点多了。午饭已经没有心思吃了,马上重新调参,写第四问,大概在三点多,第一第二第四问基本搞定了,开始调第三问。第三问出了bug,看代码也没问题,咬咬牙重写一个开环的。那时通宵了一整天我脑袋已经不清晰了,坐在电脑前面,有思路但就是写不出来。找来何佬把代码交给他继续写。最后还是没有调出来。
文章图片
封箱前,我们的车还是会摄像头看不见到处乱跑,验收那天非常紧张。调试的时候还会看不见停止线,在弯道跑飞。及时发现是反光问题,后面还算顺利。
写在最后 【算法|2022年电设省赛碎碎念【省一!!】】本来因为暑假留校,整个人都很难过。培训的时候,整个实验室氛围极好,每个组都很认真在学习。毫不夸张地说,一个学期学的一门课程充其量也不一定比得上这个月。小车题虽然听说很卷,但要我重来,我也会选小车。我们每一点进步都能体现在小车上,它毫不掩饰表现给我们看,那种成就感和欣慰感难以言表。
推荐阅读
- 机器学习|机器学习-DBSCAN聚类算法
- 数据聚类|聚类——密度聚类(DBSCAN、OPTICS、DENCLUE)
- 单片机|基于单片机的通用定时器调度器SmartTimer
- 人工智能大数据|聚类模型、聚类分析
- 算法|基于Python实现k-means算法和混合高斯模型
- 算法|终于来了!这份NLP算法工程师学习路线yyds!
- 论文|SciFive: a text-to-text transformer model for biomedical literature
- 笔记|【深度学习】KNN算法学习
- 神经网络|深度学习算法3-BP神经网络