今年电赛咱们队伍选择的是B题,滚球控制系统。最后咱们获得了省特和国一,也算是告终了我大一时的心愿吧。下面对此次比赛进行一下总结,之后回忆起来的时候也有个念想。算法
滚球控制系统是一个多变量、非线性控制对象,是球杆系统的二维扩展。本系统以Arduino Due为核心控制板,经过摄像头采集到球的位置信息,通过PID的控制算法来控制舵机的运行,从而控制小球的运动。其目的是让一个自由滚动的小球可以平衡在平板上特定的位置,或者沿必定的轨迹滚动。经测试,系统可以实现题目要求的各项功能,实测指标均达到或超过题设要求。
关键词:滚球控制系统;Arduino Due;位置检测;PID控制markdown
当时网传已经有板球系统这道题了,虽说内心没当一回事,可是仍是默默地查起了一些资料。
板球系统、板球系统,最关键的就是须要检测到球的位置,而后经过板的机械运动将球保持在指定的位置上。
怎么检查球的位置呢?有两种不错的方法:一种方法是利用电阻屏,还有一种是利用摄像头。这两种方法比赛以前我都试过,电阻屏的话市场上有卖的通常就是7寸-17寸的四线、五线电阻屏,它获取小球位置比较灵敏,并且精度高、延迟低,对小球的材质、颜色没有要求,可是要求小球具有必定的重量,要否则检测不到球呀。至于摄像头检测小球的位置的话,一种方法是检测圆形,另外一种方法是颜色检测,通常颜色检测的速度会快一些。若是使用摄像头检测小球位置的话,那么对处理器的运算速度要求较高,并且对光线的要求也较大,可是也可使用开源摄像头(如OpenMV,pixy等),直接把小球位置信息等经过I2C、USART传输回单片机上。咱们最后使用的就是Pixy。性能
最后赛题出来的时候,咱们就傻眼了,竟然和网传的消息那么像,可是尺寸却那么巨大。原本写好的电阻屏的程序是用不到了,只能用摄像头检测小球位置这种方法了。测试
固然咱们想,小的咱们都作好了,大的岂不是直接把原来的结构放大一些就是啦。可是后来发现咱们想多了,尺寸变大许多致使的结果就是,机械结构须要从新设计。以前小板球系统的稳定性超级好,根本不会出现板子的抖动问题。可是等系统变大许多,板子变得很大很重,摄像头须要架设的很高,就带来了许多问题了。优化
摄像头是距离板子1m多的位置,这带来的后果就是,可能摄像头找不到那么小的球的位置了。ui
在比赛的那几天中,咱们的机械结构换了4套。感受一直都是在作木工活。第一套结构是纯木质的,各个部位所有用胶粘死。第二套是板子用的泡沫板,其余部分仍是木质的。第三套是板子用的黑色喷漆铁板,支架是铁的,底板是木的,整套结构超级重、并且也不能拆卸。第四套结构的话,咱们板子选择的是60*60*1cm的雪弗板,这个比较轻、并且也比较平,底板是PVC版,画原理图而后切割,支持部分是铝架,全部部分都可拆卸。设计
等机械结构作好以后,还剩一天的时间来写程序,简直奔溃,感受比赛的大部分时间所有都在设计机械结构。可是这是很是必要的,由于机械结构若是很差,你的程序优化的再好,也是不会稳定的,尤为是这么巨大的一个装置。对象
前面说了一堆废话,下面说一点有用的:
①咱们选用的控制器是Arduino Due。由于使用它开发简单方便快速,并且时钟频率大84Mhz,相比于普通的stm32f1一点也不逊色。原本想直接用树莓派了,可是想到用树莓派可能有违规的可能,因此仍是算了。
②摄像头选择的是pixy。利用Pixy图像识别传感器检测小球位置坐标。Pixy支持多物体、多色彩的颜色识别,同时也支持多种通讯方式,它搭载的图像传感器配合强大的硬件,能够将小球的位置坐标信息快速地发送给微控制器。注意!!!这但是直接把小球的坐标发到单片机里唉,因此你用性能差一点的单片机也没有关系了,这大大的简化了程序的复杂性,省去了本身写图像处理部分的事,节省了许多时间。
③舵机的话咱们试了好多舵机,贵的、便宜的,最后仍是选择了MG996R。具体缘由我很少说,你们能够买来试试。图片
(待续。。。)
开发