2023年电赛西邮校赛C题解析

1.2k 词

2023年电赛西邮校赛C题解析

题目分析

2023年电赛西邮校赛C题

  根据题意,需要我们将小球控制一维平面内的指定的五个区域内。这道题的关键是如何获取到小球的实际坐标,拿小球的实际坐标和小球的目标坐标做PID,将得到的输出值作用在舵机上即可实现对小球的控制。

硬件设计

  这道题的硬件主要分两个部分:采集小球坐标的设备和控制小球运动的机械结构。

  首先在采集小球坐标的位置上我们想到了两种方法,一种是在u型管的一侧放测距模块,获得小球的实际坐标;还有一种是使用摄像头俯视全局,将目标位置的像素点存好,获得小球的实际坐标像素,就可以获得小球当前位置和目标位置的差距了。考虑到精度问题和小球是一个球形和测距打到小球上的位置不同会导致测的的距离不准确,我们采用OPENMV做视觉模块,俯视获得小球的实际坐标。

  在制小球运动的机械结构设计上,我们采用MG995舵机+碳纤维棒延长力臂去控制整个u型管的抬起与落下达到让小球向左运动和向右运动的效果。在此值得一提的是,在设计舵机的转动传动到u型管的起落时,一定要考虑好力的传导关系,在我们的设计中是将舵机侧着放,达到让舵机上转下转和u型管的起落是正相关的!这样在后面调试PID参数时会好调的多。

软件设计

  首先说说OPENMV处理小球坐标的部分:因为我们U型管是白色的,我们使用了黑色小球,在图像处理时我们选择了灰度图,这样的话在处理图像时就可以少处理一些细节,并且识别的更准确。在识别小球时首先识别色块,再识别圆形,部分代码如下:

1
2
3
4
5
for blob in img.find_blobs(BLACK_THRESHOLD, pixels_threshold=35, area_threshold=35, roi=[x1, y1, x2, y2]):
if blob.elongation() < 0.4:
if blob.w()<200 and blob.h()<200 and blob.w()>2 and blob.h()>2:
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())

  在OPENMV识别到小球的坐标后,将小球的坐标通过串口发给STM32,通过PID处理小球与目标位置的差值,最终作用到舵机上即可。关于PID的选择,我们这里选择了位置式PID+串行PID,因为该系统是存在平衡位置的,所以我们要用位置式PID,其次舵机的转动作用于U型管,倾角的大小改变的是小球沿U型管向下的F,其实也就是改变了小球的加速度,但是该题我们实际想要改变的是小球的位置并非加速度,所以就需要串行PID,第一层PID将加速度转为速度,第二层PID将速度转为位置再输出。剩下的就是PID的调参环节了,如果前面的机械结构做的足够好的话,这里调参会发现很快就调出来了。

留言