【星汇极客】单片机竞赛之2024睿抗机器人大赛-火线速递赛道(持续更新)

 前言

        本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括但不限于:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三

后面会经常写一下博客,分享一下资料、经验,如果想了解其他项目、技术,可以去B站搜:星汇极客,主页链接:星汇极客

此外,还开发了个人网站,里面有一些资料和源码供下载:星汇极客网站

        火线速递这个赛道可以参加很多比赛,睿抗机器人、中国高校智能机器人、全球算法等比赛都有专门的赛道,而且比赛规则都是差不多的 。有兴趣可以好好做一下这个项目。

二、2024睿抗机器人大赛-火线速递赛道

1、题目解析

        我们需要做两个东西,一个是小车机器人,一个是传送带+炮台抛投装置,小车用来在地图中循迹、抓取沙包,传送带放在运转区、抛投装置放在发射区,用来把沙包抛出去。

地图:

任务 1:巡线机器人从起止点出发,通过巡线前进;

任务 2:弹药抓取机器人到弹药库,抓取弹药;三种颜色的弹药随机顺序放在弹药库内。

任务 3:弹药转运机器人抓取弹药继续沿引导线前进,进入发射区,并由在转运去内将弹药转移至发射机构上;

任务 4:弹药发射发射机构在监测到弹药到位后,将弹药发射进打靶区内,以弹药的最终落点计打靶环数;

任务 5:弹药巡回 射结束后机器人主动巡回弹药,并将弹药运送至回收区内对应的色框内。

PS:看着这五个任务可能不理解的话,我画个线路图出来就清晰了。

思路:1、小车从起点出发,到弹药库抓取沙包,随后自行选择路线循迹到转运区。

2、将沙包放到传送带上面,传送到发射区的炮台上,由炮台上的抛投装置将沙包抛投出去,打靶区的一圈圈圆环是计分的(按最终落点为准),中间5分往外减少。

3、小车在将沙包放到传送带上后,需要循迹往回走,在沙包落地后前往打靶区,在14处进入中间正方形区域让小车不用黑线循迹,让小车一直慢慢往前走,可利用OpenMV摄像头调整小车方向,识别到沙包后抓取并按16处走。

4、按16处走遇到全黑线,调转方向,循迹黑线走到回收区,按沙包颜色放到对应位置里,随后前弹药库抓取第二个沙包,以此类推,将三个沙包抓取、运转、抛投、寻回、放置完全,再回到起止点停下。

2、比赛答疑、注意点

(1)小车起点是让灰度传感器在黑线处,还是整体在起止点里面?

答:我在比赛时看到都是可以的,我自己是选择在起止点框里面出发。

(2)路线是固定的吗?

答:按自己的选择来,可以到左边的运转区传送,也可以到右边的。PS:你可以把三个沙包全抛了再去寻回也可以,这样可以留个保底。

(3)在运转区这里,实际地图有两条黑虚线的,你可以贴上黑胶带,虚线里面你可以放置传送带、炮台。

(4)重点:一定要做一个好的爪子,我们一开始没注意,到后面发现沙包夹着会掉下去。滑轨建议买一个15cm的,比较好把沙包放到传送带上面。

(5)想到再更新...

(6)虽然历经坎坷,最后也是获得了国二。

3、关键代码

说明:代码是在官方的STM32HAL库源码上修改的,官方代码也有些是错的,需要自己去调试修改。

注意:源码用到了FreeRTOS,没有学过的也不用慌,代码不在main.c里写,只需要知道任务执行代码在RunTask.c里就行了,根据自己的路线选择把任务代码修改。

(1)黑线路口判定修改

在track.c中。PS:循迹用了9个灰度传感器,它这里是根据识别到黑线的数量来判断路口的,如果你的小车识别路口可能误判,可以修改成 > x数字就行。

(2)灰度反馈值

在track.c中。PS:这个是PID的反馈值,调整电机速度,数值越大左右电机速度差越大,用来微调小车沿黑线直走方向。

(3)舵机控制

在servo.c中。

1、控制爪子抓取:占空比最小0,最大2000。

2、控制爪子释放:

3、注意:下面这个是控制360°舵机,占空比是1500停止转动,大于1500上升,小于1500下降,用延时控制转动时间。这个函数功能是:控制爪子上去碰到上面的微动开关停止。它跟180°舵机不同的。

(4)PID参数

在MoveTask.h中。这里是调节PID的参数,P是比例,I是积分,D是微分。

可以这样理解,调P改变车的起始速度,调I改变车的加速度,调D是减速,让小车最终趋于稳定行驶。如果车过于晃动,可以调小I,增加D。

(5)任务执行重点!!!

在RunTask.h中。调节车速

在RunTask.c中。控制小车的任务执行流程。这里面很关键!!!

第一个函数:这个是控制小车从起点出发,调用单圈函数实现跑三圈后,回到起止点。、

RunMode是要执行的功能,执行完做下一个功能。

tim在这个函数里是计时了多少ms的意思。重要!

tick是FreeRTOS里的滴答计时,不用管。

单圈函数:控制小车走一圈,实现抓取、运转、抛投、寻回、放置沙包,又去抓取沙包。

SingleMode是要执行的功能,执行完做下一个功能。

SingleTim计时了多少ms,SingleTim<500意思是在500ms内执行抓取这个功能,SingleTim<700意思是:在700-500=200ms内执行后退的功能。

4、结

因为代码实在是太多了,不一一解释,只能把关键代码讲一下。

如果你觉得这篇文章用帮助请点个赞。关注下方获取更多资源

上一篇:redis数据类型介绍


下一篇:SpringBoot中间件Docker