把比赛收获的经验放在最前面:
技术上:
1.平时要多做做项目,c语言功底要打牢,不然临场写程序很容易error而且一下子找不出来原因。
2.各种常用模块比如摄像头、霍尔传感器、mpu6050之类的角度传感器、陀螺仪都要会用。
3.各种通讯协议要掌握,学会用上位机调试(比如匿名四轴地面站),要会自己拟定通讯协议,要会给个上位机的通讯协议能写出符合协议的通讯代码。
单纯比赛的准备上:
1.多买点模块玩玩吧。
2.提前打好板子,比如摄像头与单片机核心板的连接,再比如核心板和键盘、屏幕的连接。
3.少用杜邦线,至少用了得拿胶粘牢来。
4.提前准备各种电源,控制题比赛总不能抱个学生直流电源去吧。
5.核心板最好连个触摸屏,什么gui什么的提前写好。。。比赛的时候不能带电脑。low点也可以搞个矩阵键盘+oled调试。要是啥调试途径都没有那评测的时候就很难受了。
其他方面:
1.赛前好好睡觉。不然比赛的时候就会意识到睡眠的可贵了。。
2.和队员好好沟通,比赛过程中意外肯定是难免的,心态要放好。
3.还是心态,心态一定要好,别总想这拿大奖,比赛就一个劲做下去,不能想太多。目标太大,遇到困难很容易心灰意冷就放弃了。
有幸在大一这个暑假参加了电竞,由于电赛注册系统更新,比赛前一周突然可以报名了,就拉着留校做项目的俩大一室友开搞了。。。我们仨技能点都差不多51->stm32,我多一个arduino的经验,但32用的不熟。
这次电赛我们选择的b题--滚球控制系统。当时出来元器件清单,网上已经有很多预测是做这个东西的,但我们没怎么信,因为据说滚球控制系统已经是很成熟的方案了,很多高校都有样品。万万没想到,真理往往还是在大多数人手里,就是要做滚球控制系统。
按元器件清单买的直线丝杆电机恐怕没有用了,之前调了几天的mpu6050模块也没有用武之地,而继续的摄像头和推杆电机(舵机)都没有准备,一切从头开始。
第一天早上八点拿到题目,赶紧采购、搭建机械结构,经过简单的讨论,我们选择用180°X2的舵机(从实验室翻到一只机械臂然后上拆下来的)控制平板角度,考虑到arduino库比较方便,决定使用arduino作为主控、l298n驱动、由于没有使用摄像头的经验,所以决定先盲控试试能不能搞定。
很快我们就学会了使用舵机。中午12点,我调好了舵机并封装了一些控制函数,嘉宁提前学习摄像头的知识,鑫伟去列采购清单。
中午吃完饭,一行仨人前赴建材市场大肆采购。买来kt板、铝合金条、泡沫胶、皮筋、美工刀之类的。
下午开始搭建机械结构,我们用铝合金条搭架子铺kt板做板面,感觉挺稳的。舵机连着舵机,以一个类似机械臂的结构固定在板中央控制板面。。。半夜搭完。。。睡觉。。
早上起来调舵机,才发现我们这种结构松动有点严重,而且舵机每打一个角、板面倾斜角度过大。老师建议我们改万向节连接-边缘打角的机械结构,但买不到万向节了。。。。硬着头皮干吧。。。。。调了一下午,居然能盲控实现到第二个要求了,虽然成功率只有50%,但我们很兴奋。
调到第二天中午,发现盲控并没有什么提升空间,而且特别受外界因素干扰结果。觉得得找合适的传感器检测小球位置才能把这个控制做好。
于是我们打起了实验室的祖传线性ccd的主意,好像是智能车用剩的,于是planB诞生:ccd小球检测法。第二天傍晚调通线性ccd,这模块用起来是真简单,读个模拟值就行,但无奈视角太狭窄。于是planB流产。。。只能晚上和一起做控制题学长合资购买摄像头---ov7670,发顺丰到付。。。继续盲调。。。
第三天下午,摄像头到货。嘉宁很快就调通了摄像头demo,并且让实时画面显示在了一块lcd屏幕上。但我们发现f103驱动摄像头的例程帧率实在是太低了,大概只有2-3帧/s,显然这个帧率对控制的实时性是不能保障的。这时候嘉宁的技术很好的体现了。嘉宁对着demo一顿操作,在删删减减后,帧率达到了7-8帧/s。时间到了第三天晚上,现在问题就是如何定位小球的位置了。。。
很快我就通过软件实现了将摄像头图像二值化(其实就是设置一个阈值,大于这个值判定为白 {MOD},否则判定为黑 {MOD}),但在如何从二值化的图像上提取小球的位置这一问题上,我和嘉宁出现了分歧:我认为将颜 {MOD}跳变的像素点向后读三位,如果还为黑 {MOD}则判定为有效像素点并记录下来,最后对有效像素点统计取个平均就行;嘉宁思路和我不大一样,所以我们各自写程序测试,这是个痛苦的过程,因为c语言不够熟练、加上对模块的不熟悉,夜里很深我和嘉宁才各自调通,实现对小球的定位。两个程序都有问题,就是健壮性很烂,很容易受到外界干扰影响。加上摄像头我们是杜邦线连的,干扰就更强了。因为各种玄学原因,我的程序面对干扰稍微靠谱些,就采用我的prj了。。。
f103采集图像定位,将小球位置发送给arduino。arduino的pid和舵机控制程序我在摄像头到货前的夜里已经写好了。现在问题是二者如何通讯。串口连线吧,又快又方便。我负责arduino通讯协议,嘉宁写f103的,然而我们一对接,发现数据根本就读不出来。。。。。。。。。。又忙活了几个小时,天都亮了,还是读不出来。(至今不知道那天夜里无法通讯的原因)。。。。还是技术不过关吧,心灰意冷,感觉非常丧气。。。。这时候瞟到桌上魏老师为电赛特地买的的串口wifi模块,我之前调试过,拿来一用,果然好用。。。就决定是他了。。。。哈哈。。柳暗花明。。
第四天,也就是最后一天。。调了一整天的PID,苦于调pid经验不足和摄像头时不时罢工和抽风,整个板球控制系统宛如一个智障。。。
后来综测就不说了,电源都没准备好,杜邦线+面包板连接的电路从封装箱子里拿出来都散架了,好容易把线整理好,用手机充电器驱动舵机,舵机直接选择罢工不干了。。。。。。。。。。。。
这次电赛没拿到成绩,不过也是不悔的,毕竟收获了很多经验,现在写出来和大家共勉:
技术上:
1.平时要多做做项目,c语言功底要打牢,不然临场写程序很容易error而且一下子找不出来原因。
2.各种常用模块比如摄像头、霍尔传感器、mpu6050之类的角度传感器、陀螺仪都要会用。
3.各种通讯协议要掌握,学会用上位机调试(比如匿名四轴地面站),要会自己拟定通讯协议,要会给个上位机的通讯协议能写出符合协议的通讯代码。
单纯比赛的准备上:
1.多买点模块玩玩吧。
2.提前打好板子,比如摄像头与单片机核心板的连接,再比如核心板和键盘、屏幕的连接。
3.少用杜邦线,至少用了得拿胶粘牢来。
4.提前准备各种电源,控制题比赛总不能抱个学生直流电源去吧。
5.核心板最好连个触摸屏,什么gui什么的提前写好。。。比赛的时候不能带电脑。low点也可以搞个矩阵键盘+oled调试。要是啥调试途径都没有那评测的时候就很难受了。
其他方面:
1.赛前好好睡觉。不然比赛的时候就会意识到睡眠的可贵了。。
2.和队员好好沟通,比赛过程中意外肯定是难免的,心态要放好。
3.还是心态,心态一定要好,别总想这拿大奖,比赛就一个劲做下去,不能想太多。目标太大,遇到困难很容易心灰意冷就放弃了。