滚球控制系统

滚球控制系统

    • 一、选材
      • 主控部分
      • 摄像头
      • 电机
      • 平板
    • 机械结构
    • 算法部分

一、选材

主控部分

我们组选用的是407探索者做主控,战舰板做比较吃力,mini板做图像处理就更难受了。

摄像头

我们在尝试的过程中,使用了三款摄像头,ov2640、ov7670和openmv3(ov7725),其中ov2640和openmv3都可以实现,ov7670则比较吃力。建议使用ov2640,由于该题图像处理部分并不复杂,只需要具备简单的图像处理知识即可,调整好背景环境的情况下简单的二值化就可以得到很好的效果。

这里说下图像处理的目的:
经过图像处理后的最理想的效果,应该是主控单片机的屏幕上只有白色的球,其他背景都是黑色。这时,我们只需要摄像头实时获取小球的上下左右四个边界点即可,也就是[xmin,xmax],[ymin,ymax],此时圆心坐标即 [(xmin+xmax)/2,(ymin,ymax)/2]

另外需要注意几个常见的坑:

  1. 板球系统应该选择黑白分明的板和球,这和图像处理有关,这样二值化后可以使得整个板所在的画面中只有白色的球和黑色的背景,而不存在白色的噪声点。这里还有个问题,是板黑球白的组合好些还是板白求黑的组合效果更好点?我们在实验的过程中发现,白色的板子会反光,使得图像处理的效果不好,同样白色的球也会反光,因而选择器材的时候要尽量避免这点,最理想的搭配应该是下图的组合。另外实验时,影子也会影响光线,需要注意这点。
  2. 关于二值化阈值的选取。在背景理想的情况下,手动调阈值即可。但若想达到自动调节阈值,得选取实现一些阈值选取的方法,例如大津阈值。但此题的重点不在图像处理,因而手动调节即可达到不错的效果。

另外opemmv3采用STM32F7作为处理核心,时钟频率可以达到216M。搭载7725,输出帧率可以高达85帧。此外外部提供python接口,只要几行代码即可完成一个项目,最后提供多种例程,如找小球,找色块,循迹,光流等等都不在话下。用在这里有点大材小用了。
那选择ov2640和openmv的区别就在于是否需要实现复杂的图像处理,简单情况下ov2640是可以满足需求的。

电机

在电机使用的过程中,也存在一些问题。我们选取的是数字舵机。之前有使用过步进电机的经验,因而很快便让数字舵机转动起来了。其实这些电机只要给它pwm脉冲即可以转动,没有太多的操作难度。
这里的坑有如下几个:

  1. 使用过程中需要注意接线问题。怎么接线需要根据定时器的脉冲引脚来接线,选定好定时器和通道之后,单片机的引脚也就选好了,只要把舵机线接到该引脚即可。由于舵机线需要接的长一点,我们组一开始使用了十多根杜邦线连起来,但总是会出现连接的地方松动的问题,这时候检查就需要一个一个去检查,很浪费时间。因而我们买了1m长的杜邦线,可以防止错误的累积。
  2. 实验室的舵机有三种款式,每种款式的功率规格都不一样,因而一定要判断功率的问题,我们组曾以为电机坏了,换了稳压电源才发现是功率不够。功率不够的话,电机是不会转动的,但是电机内部还是会轻微颤动

球,球是很关键的一个,乒乓球太轻而且重心不在球心。我们实验过程中先使用了钢球,几乎不受风的影响。但是钢球银白色,会反光,图像处理效果不好(可以考虑给球上色)。然后我们找了个小黑球,重量大概比玻璃弹珠轻一点。

平板

平板,建议大家采用亚克力板,轻薄平整,玻璃的话太厚。我们队伍先使用了木板,但是发现太重了,调节不够灵敏(而且光滑,反光)。亚克力板有无色跟白色可选,,最好拿透明的亚克力板,一面撕去纸,一面将纸张用墨水染黑,这样调整一下灰度的阈值就能追踪小球了。

机械结构

机械结构很重要,很重要,很重要。一个好的机械结构就已经成功了一半了。这里贴上网上的几个版本,大家可以自己对比下。
滚球控制系统_第1张图片

机械结构这个地方需要大家自己去搭建去摸坑,尝试了才知道又怎样的差别。
这里最好使用万向节

算法部分

整个算法部分分为图像处理和PID条件,其中图像处理较为简单,重点还是在PID怎么调节。
图像处理部分如下:
滚球控制系统_第2张图片
这里我们调节PID的大致步骤如下:

  1. 首先需要找到舵机中值对应的pwm,也就是板子大概水平时候的pwm数值。这里一个小技巧,我们让两个舵机的pwm值实时显示在主控单片机的屏幕上,这样只需要调节平衡就可以直接读取数值。(同样,获取小球坐标也可以使用这个方法,让计算出的小球坐标实时显示在屏幕上,用来标定9个目标区域)
  2. 微调pwm的范围。由于机械结构的原因,常常小球已经到达边缘了,舵机还未来的及反应或者反应太剧烈,这种情况可以改进pid来调节,但是不需要这样做。我们只需给pwm一个取值范围即可,不让舵机摆动幅度太大,让板子的切斜角度始终在一个小的范围内变化。这样舵机有足够的时间去反应。
  3. (说下我调节的经验,仅供参考)先调P,D为0。D的作用就是让小球的速度减慢,D越大效果越明显,当把p调的很小的时候,如果球还会飞出去,那就调节D大些,直到球能在某个点来回的晃来晃去。然后继续调节P,直到晃动幅度很小或者基本稳定在一点。
  4. 对于题目要求的到达某点,只要给出目标点的坐标,PID算法会根据期望点坐标和当前小球坐标不断的时候调整PWM的值,使得电机转动,动态调节,直到小球到达目标点。

你可能感兴趣的:(滚球控制系统)