【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享 |
您所在的位置:网站首页 › 循迹小车arduino代码 › 【“探索者”小车】机器人大赛“探索者”全地形小车参赛经验分享 |
提示:本文内容基于“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 |