板球系统制作经历"/>
板球系统制作经历
序言
- 怎么说呢,我走过的最长的路,就是板球系统的弯路,试过了很多方案,有别人成功的,也有网上的大佬的设想,我发现别人的方案不一定是适合自己的,我用Ov7725摄像头检测的小球位置,听了学长的鬼话,为了那可有可无的六帧,去掉了滤波算法,划重点,这一步是我用网上很多方案做不到的关键原因。我用的是32F4系列单片机做的主控,在有滤波算法的时候稳定18帧,去掉后稳定24帧,在这里我觉得有15帧做这个题已经够用了,滤波算法会写的最好是加上。在网上有很多人都说用最小二乘法对圆进行解析,别听他们扯淡,不搭载linux的单片机算这种东西掉帧掉到怀疑人生,不如加个滤波。我确定圆心用的就是很简单的边界两个点相加除以二,效果还是很不错的。图像算法算是这个题最难的部分,但是,我在这上面并没有浪费时间,最大的弯路都走在算法上面,这里不得不感谢我的学长,每次我想改到正路总会把我带歪。最后按照自己的想法将程序重构一波解决这个题。
- 下面为我做的实物部分题目的演示视频
板球系统
硬件部分
- 硬件使用的是两个舵机进行控制,用Ov7725反馈小球位置,通过PID对小球位置进行计算,输出PWM的值。也就是现在比较经典的系统,唯一要注意的就是舵机安装一定要在中轴上面,歪了的话会加长小球到达目标坐标的时间。
程序部分
- 算法就是很简单的位置PID,这里会有人去误导你,起码要用模糊PID,加了陀螺仪用串级PID勉勉强强,这都是没做过的云玩家,用陀螺仪这种操作我也是无力反驳,不过别人毕竟是好心,误导我一个月我也不好意思说什么。我觉得这里最关键的就是PID输出你是怎么用的,(偷偷地喷一下,我问学长输出值是不是在上一次舵机PWM基础上进行叠加,学长说是,最后我没这样做学长说我做的和他的一样,mmp。),不管是怀着怎样日了狗了的心情,我最后按照自己的想法做出来了,PID输出直接在平衡的那个数据上加减,每次都是重新计算,参数更是只有PD需要调,就可以达到题目要求,要是想更快的话,可以加上
I
。没错你没看错,就一个位置式,哪怕你硬件误差大一些也能用。到这里就已经可以定点了,这时你会发现,只有一个题还需要写点算法,其他的题已经全部完成了。
有一道题是输入随机的四个点,到达指定位置,这里就会用到非指定的四个点,就是“田”每个正方形框中间的那个点,这里是用作一个缓冲的点,不让他压到非指定点。这个题需要一个算法进行选路,算出两点间的最近路线。我的思路是,先看一下两个点之间的像素点,我的临近点像素差是80像素,跨一个点是160像素,那么,当检测到目标距离大于120像素的时候,我就会将下一个目标点定在缓冲点,缓冲点选择的一套逻辑就不再多说了,挺好弄得。到这里这个题基本就是结束了,发挥部分网上有追激光笔的,这个只要打开灰度模式,然后定点就行了。
结语
-
思路正确后板球的题目并不困难,算法的参数整定可以说是近几年电赛体中最简单的。
除去扩展题之外全部完成,为了保证每个题目的稳定和改BUG的便捷,程序有些简陋,有代码优雅强迫症的就别看了。板球系统源码
更多推荐
板球系统制作经历
发布评论