你好!这里是风筝的博客,
欢迎和我一起交流。
2017年,第二次参加电赛。
8月2号材料清单出来时,控制类的对象是一根杆个一群小球。接着就有一大堆预测题出来,都是板球系统,毕竟是经典的控制类题目。
也有好多人和我说这个,他们都拿板球题目来练手了,我当时都有点无语了,毕竟题目是杆和一群小球,不应该是板球啊,而且全世界都在预测板球,难道还会出板球?
后来8月9号题目出来,就打脸了。
坑啊,真是出板球,说好的一群小球呢?之前做板球的人赚了啊,不过就是 题目有点坑,板子要65
65cm,有点大…
中午到实验室,和大家商量一下题目,他们在板球系统和可见光定位这两题上犹豫,我们队则直接选择了板球。
接着就让人出去买板子了,毕竟6565cm确实有点大了。不知道他们买回来的是什么板子,有点软,我们又拿了小木条在板子背面搭了个十字做固定。直到晚上,还在搭那个板子。
8月10号,第二天就是在弄摄像头了,因为之前预测板球的太疯狂了,我队友之前也弄了一点,就是摄像头二值化识别小球的。第二天我接手他的程序接着弄,他在弄板球模型。我们用的芯片是F103的芯片,摄像头是OV7670,用例程弄了下,发现这模块的帧数只能达到15帧,320*240的分辨率下。然后图像做二值化处理,扫描白板(我们是白板黑球),队友的判断黑球是只要捕捉到黑点,就判定是小球,这就要求板子不能有其他一丝一毫的干扰,因为摄像头角度的原因,会拍到其他不相干的区域,所以在图像处理里我做了一些除法处理,结果这么一搞,图像只有8帧左右了,这就很难玩了,帧数太低太伤了。
也许是除法运算太耗时了,到了8月11号,我们打算换一块F407的芯片,提高一下运算速度,结果发现并没有太大用处,相比F103,只提高了两三帧左右,而且还不小心把F407的板子烧了…这就很尴尬了,只能换回F103了。不能用这个,那就得在小球识别的算法上做优化了。队友找有个摄像头识别红绿蓝三颜 {MOD}物体的代码,我看了下,识别算法还不错,好像是图像识别里关于腐蚀的这块算法,我理解了下,就把他移植到我们的程序来了,效果非常不错,识别非常准确,但是帧数太低这个问题还是没能解决,但是我发现一个问题,就是因为是扫描识别,320*240个像素点,小球越靠近扫描的起始点,就越快能扫描到小球,扫描所用的时间也就越低,帧数也就越高。后来学长来我这溜达,我就和他说了这个问题,他就告诉我,不要每次都从头扫描,可以从小球的位置开始发散扫描,这样就能很快再次定位到小球。我一想,这个主意很好啊,马上尝试了下,效果非常好,小球识别非常准确,而且帧数有15帧。晚饭的时候,队友和我说他在一个论坛的帖子上看到有关于OV7670时钟频率,我们就弄了下,提高了时钟频率,结果帧数达到了20帧,非常棒!
摄像头识别小球这块是弄好了,接下来就是搭好板子弄PID了,11号晚上就是开始通宵了,搭模型,调舵机,焊驱动电路,终于8月12号早上搭好了模型,可以尝试PID控制了。调的时候发现一个问题,这个OV7670的可视角度太窄了,都把摄像头架离地1.5米高了,3、6、9区域还是照不到,我们就把一个OV7725的摄像头镜头换到我们OV7670上,效果也不是很好,勉强照到3、6、9区域吧。 我们开始调PID的时候调的不好,看了下学长在弄,他的好稳,他是先把速度给控制住,速度先弄PID吧,即能把小球在板子上给固定住,再调试位置。我们也试着模仿了下,有点麻烦,没弄好,而且晚上没睡有点困,迷迷糊糊就过去了几小时,我们就一直用位置式PID一直在调,下午两点多的时候找到了一个看起来不错的PID参数,当时用的是飞卡的电池,因为担心到时电池没电了,就拿去充电了,换了一块电池来,结果参数又不对了,我就有点纳闷了,不是自适应的算法吗,电压也能影响的?结果又调了一个小时总是不好,当时下午三点了,学长就过来和我说了下他是怎么把控制的,当时我就觉得很困了,队友就照着学长的意见先把速度控制住,我就给他去弄了,和他说一个小时后,也就是四点,要是不行,只能用开始时的方案了。
结果一个小时后,弄得了一点,效果不理想,还是换回开始时的方法,位置式PID直接撸到底,换了个电源适配器来给舵机供电,防止出现因为电压影响的事情,然后当时就四点半这样了,简单调了下,PID调的不好,勉强能让小球进入指定区域,当时不能在规定时间内做到,当时当时也没时间了,勉强写了下基础题第二第三问,到了快六点的时候,因为要坐车出去,就只能封箱了…
到晚上十点钟回宿舍,想一想,已经三十八个小时没睡觉了,现在居然不困了,真是神奇
最后,勉强完成了基础前三问,就是完成时间比较长,唉,这次电赛就这样结束了 …小小不甘心吧,要是在多点时间多好啊
后记:
https://www.amobbs.com/thread-5499408-1-1.html