2023年电赛E题--运动目标控制与自动追踪系统 全国二等奖,核心代码思路分享
糕手li 2024-08-20 08:01:02 阅读 71
引言
在2023年的国赛中,我们经历了一段充满挑战与激情的旅程。整个竞赛分为四个紧张而刺激的阶段,每个阶段都对我们的团队提出了不同的要求。
第一阶段是在四天三夜制作出能够满足题目要求的产品,第二阶段是产品现场测评,第三阶段是综合测评,第四阶段是复测。
在最初的四天三夜里,我们全身心投入到产品的制作中。这个阶段要求我们在有限的时间内,设计并制作出一个能够满足题目要求的产品。我们不断地修改代码,完善功能,力求让整个系统的效果达到最佳。同时我们不仅要确保产品的功能完善,还要考虑到后续阶段的现场测试和复测,因此我们添加了许多防干扰措施,确保产品在各种环境下都能稳定运行。这个过程中,我们几乎没有时间休息,熬夜通宵成了常态。尽管疲惫,但我们始终团结一致,互相支持。熬夜通宵、不断调试、反复测试。团队成员之间的互帮互助和共同目标的奋斗氛围,让我们充满了动力。我们享受着这个竞赛带来的激情过程,感受着团队成员之间的默契与合作。最终,我们的努力得到了回报,我们成功挺进了国赛,并荣获国二的荣誉。
【金山文档 | WPS云文档】 E题_运动目标控制与自动追踪系统
https://kdocs.cn/l/ct2qTUIGCm6X
上述文件为电赛E题要求
现在我分享一下我认为的核心代码思路,想必大家基础部分第一题第二题都能完成,第三问在我看来就是在做一边第二问,只是在过程中增加暂停功能,这个暂停功能可以利用简单的扫描,也可以使用定时器中断或者外部中断,所以我们只要分享第四问的思路,首先,按照题目要求,矩形是评委放的,也就是不固定,所以我们需要OPENMV来确定矩形的位置,确定矩形位置后,将有以下两个思路。
(舍弃)思路一:利用OPENMV的像素坐标对应舵机在白板上的PWM坐标值
解析:因为白板上激光笔的坐标值是由上下两个舵机的PWM值决定的,所以可以利用两个舵机的PWM值来代表白板的坐标点,白板上的某一点对应两个舵机PWM的某一值,而矩形坐标在OPENMV像素坐标中,用OPENMV的像素坐标对应舵机的PWM坐标值即可将矩形坐标从OPENMV像素坐标传递给舵机的PWM坐标值,在从舵机的PWM坐标值传递给到白板上,从而实现在白板上画矩形。
方法:在白板上取4个边缘点和中心点,分别将两个舵机的PWM值记下,OPENMV像素点记下(扫描红色光点得到),将两个舵机的PWM值这5个坐标与OPENMV像素点5个坐标对应,找出其中X轴与Y轴方向上的关系,并利用差值列出公式增加补偿,将其加入代码中,在多次实验中调整补偿。
缺陷:但这种方案属于开环式方案,对白板与装置的位置要求非常高,摆对了位置任务完美完成,摆错了“一泻千里”,并且激光是一条射线,在边缘处舵机的PWM坐标值对应的白板坐标值不是均匀增加,而OPENMV像素坐标是均匀增加,所以在边缘处并不稳定。
(选择)思路二:将第一次矩形坐标记录下来,之后获取红色光点坐标,在利用PID使红色光点坐标轮流向矩形四个角靠近
解析:将第一次OPENMV获取的矩形四个顶点像素坐标保存下来,接下来利用OPENMV识别红色光点像素坐标,利用PID使红色光点坐标不断依次靠近矩形四个顶点像素坐标,即可达到画矩形的目的
方案:首先利用OPENMV识别矩形四个顶点像素坐标发送STM32并保存下来,在STM32中将首先将矩形分为4段路程(线段),记录每段路程(线段)的起始点与终点,将每段路程平均分为5个目标点(openmv上像素点)(分为5段的目的是缩短路程,减小误差,并减慢速度),再按下按键发送串口数据给OPENMV,OPENMV接收到数据从识别矩形函数切换成发送红色光点坐标函数,并将红色光点坐标数据发送STM32,STM32接收到数据后将红色光点坐标数据在定时器中用pid使激光点坐标依次逐渐靠近所分的目标点(每段路程所分的5个目标点),当激光点坐标分别到达目标点坐标附近时,利用定时器判断并更新下一个目标点,从而使激光点跑完整个矩形,在暂停任务中利用关闭定时器来实现暂停功能,再次打开定时器即可再次运行
代码:
OPENMV代码:
BUG1:OPENMV会识别出两个矩形
原因:矩形框边框范围较大,会识别出两个矩形
解决方法:取矩形顶点坐标首先判断短边长度是多少,因为一个顶点必定连接一条短边一条长边,所以可以利用这个顶点分别与其相邻的两个顶点求长度(利用两个点坐标求长度)长度较短的即为短边,多次记录下短边的值,必定会出现有的短边较长,有的较短,较长的即为矩形外框的短边长度,较短的即为内框的短边长度,将矩形外框的短边长度与内框的短边长度取平均值,每次识别将矩形短边与平均值作判断,如果大于说明为识别为矩形外框,小于则为内框,并按照外框与内框不同将顶点坐标进行补偿,例如:识别外框时,发送的像素坐标要向内框靠近几个像素点(+/-几个像素点)
代码:
发挥部分:绿色激光与OPENMV中心补偿坐标相绑定,即控制舵机使OPENMV中心补偿坐标(绿色激光点)向红色激光点靠近,利用定时器判断红色光点坐标是否在OPENMV中心补偿坐标附近,并判断是否发出声光提示
原因:绿色激光在OPENMV下方固定,即OPENMV中心像素坐标向下补偿几个像素点坐标就是绿色激光在OPENMV中像素点坐标,所以可将OPENMV中心补偿坐标(绿色激光坐标)作为目标坐标,利用PID控制舵机将OPENMV移动使红色光点坐标靠近OPENMV中心补偿坐标
方案:在OPENMV中识别红色光点坐标数据发送给STM32,在STM32中将红色光点坐标数据加入PID为当前值,OPENMV中心补偿坐标(绿色激光坐标)作为目标坐标,控制舵机将OPENMV移动使红色光点坐标靠近OPENMV中心补偿坐标即可完成追踪,利用定时器判断红色光点坐标是否在OPENMV中心补偿坐标附近(防抖动),并判断是否发出声光提示,暂停功能可以利用简单的扫描,也可以使用定时器中断。
资源:
需要资源私信我
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。