【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享

您所在的位置:网站首页 循迹小车arduino代码 【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享

【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享

2024-07-14 06:22| 来源: 网络整理| 查看: 265

提示:本文内容基于“2022年中国机器人及人工智能大赛——全地形小车设计赛”的参赛经历而作,其他年份赛题和规则可能会有变动,所以该文章只做参考,具体操作得看实际情况。

本文只做参考,若有高解,请勿喷。 如果大家有什么问题欢迎在评论区评论

文章目录 前言一、比赛规则及注意事项二、硬件选择三、硬件设计部分1.轮胎部分2.传感器3.执行结构4.其他 四、代码设计部分五、代码调试部分六、总结

前言

提示:该文章的经验分享只做参考,具体制作视具体情况而定,希望这里的某些建议不会影响到朋友们更好的想法。

一、比赛规则及注意事项

(1)每支队伍的制作器材限定为机器时代(北京)科技有限公司的“探索者”创新套件。构成机器人的机械零件、电子部件的种类不得超出“探索者”创新套件配置范围,符合条件的零部件的使用数量不限。 (2)辅助材料方面允许使用以下参与制作:打印用纸、塑料布 、透明胶带、绝缘胶带、双面胶带、魔术贴、束线带、螺丝胶、止松垫、防滑螺母。 (3)小车的机械本体、主控板、检测元器件、电机和电池等必须在“探索者”平台指定范围内选择,不能出现平台以外的元器件。 (4)气球颜色为:深红、深绿、深蓝。气球大小(宽):22cm 和 26cm 之间,气球当然越大越好,视觉识别时候更加容易。 (5)扎气球装置末端可采用细小尖锐物体。 (6)书写报告时一定注意比赛文档的要求。 (7)在实际运行过程中尽量一次跑完,重跑会扣分。

此处规则只适用于2022年“探索者”比赛,具体规则可能会每年会有变化,具体依据当年的最新规则。

二、硬件选择

提示:以下文章全部基于此次比赛规则和硬件选择,如果规则相同硬件选择不同,或者有更好的硬件搭配的朋友,可以将部分作为参考。

1.电机:tt马达的减速电机6 2.视觉:openmv1 3.主控:arduino 4.主控拓展板:big fish拓展板 5.巡线传感器:灰度传感器*4 6.电源:4V锂电(官方提供的) 7.执行机构:舵机 8.车主体:官方套件中的铝板,铝片,螺丝和螺母等 9.其他:尼龙导轮等

三、硬件设计部分 1.轮胎部分

(1)联轴器 我们自己设计了联轴器,用于连接轮胎主体和电机的轴。 轮胎联轴器

(2)轮胎 我们一共使用了6个轮胎,其中前两个轮胎使用了大轮,并且相互绑定在一起,采用大轮增加轮胎半径便于爬坡和爬台阶。最后方的两个轮子当做辅助轮,用于辅助上台阶和坡道,使其在爬坡时车体有支撑。最前面的轮胎上装有履带,用于增大摩擦力。

2.传感器

(1)巡线传感器 我们采用了两组传感器,一组主要用于巡线。另一组主要用于检测是否到达台阶,放在车的前方。 在实验中我们发现当到达台阶部分时,可能由于巡线功能而导致轮胎差速,从而导致无法全速爬上台阶。故我们增加了另一个红外传感器,用于检测台阶。当然也有可能是我们总体结构设计的不够好,才导致我们又另外增加传感器。 (2)视觉传感器 视觉使用了openmv,安装在侧面,安装高度应保证可以成功识别到色卡与气球。

3.执行结构

执行机构为刺破气球的装置,一般选择用舵机来驱动机械臂,机械臂末端加上针或者刀片。

4.其他

为了使其过管道更加顺滑,我们增加了尼龙导轮。

四、代码设计部分

代码部分虽然会附带有部分代码片段,但主要为思路讲解,毕竟是一场比赛,得自己动手才有意义。

(1)Arduino部分

#include //引入舵机库 #include //引入软件串口库 Servo myservo; //创建一个舵机控制对象 , 使用Servo类最多可以控制8个舵机 SoftwareSerial mySerial(12, 13); // 参数(RX, TX)//定义管脚12/13分别为RX,TX.

控制舵机转向

void servo_turn() { myservo.write(0); // 指定舵机转向的角度 delay(2000); // 等待2s让舵机到达指定位置 myservo.write(160); // 指定舵机转向的角度160 delay(2000); // 等待2s让舵机到达指定位置 }

用于模拟量的采集以及阈值的设置和判断

int read_da[4] = {0, 0, 0, 0}; int read_data[4] = { 0, 0, 0, 0}; void track_read() { read_da[0] = analogRead(gray_sensorPin[0]); read_da[1] = analogRead(gray_sensorPin[1]); read_da[2] = analogRead(gray_sensorPin[2]); read_da[3] = analogRead(gray_sensorPin[3]); for (int i = 0; i xunxian[i] )//大于600 { read_data[i] = 0; } else if (read_da[i]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3