足球机器人比赛基本方案
- 格式:pdf
- 大小:542.89 KB
- 文档页数:19
足球进攻方案敬告读者本方案仅为用户参加类似机器人竞赛项目提供参考指导,广州中鸣数码科技有限公司强烈建议用户不要采用完全一致的搭建及程序参与竞赛,其原因如下: 1.) 本方案旨在提高用户在参与机器人竞赛项目的起点水平,但并不希望因此而扼杀参赛者的主动性及创作力,也不希望因此而违背机器人竞赛活动对青少年的教育意义。
2.) 本方案仅适用于或受限制于某一特定的竞赛规则,参赛者应在充分理解要参与的竞赛的规则前提下,参考本方案,并在本方案的基础上完成自己的设计。
3.) 几乎所有的机器人竞赛都要求参赛者亲身设计,并能在竞赛现场独立调试及向评委讲解设计思路,故参赛者应通过对方案的深刻了解及日常训练使具有随机应变之能力。
4.) 本方案会在网上()以公开形式面向广大机器人爱好者发布,所有的参赛者都有可能对其有充分的了解,因此对本方案未加以改进者将甚少获胜机会。
5.) 本方案未经长时间的验证和实施,也未能发挥器材之极限性能,广州中鸣数码科技有限公司并不能保证该方案完美无缺,用户应该通过亲身实践去验证和改进,并从中学习相关的知识和获取相关的经验。
一、序言 (4)二、任务 (4)三、策略分析 (4)1、找球 (4)2、乌龙球处理 (4)3、死球处理 (4)4、追球 (4)5、击球 (5)6、流程图 (5)四、程序说明 (6)1、主程序说明 (6)2、需要输入的子程序参数 (6)<1>、deathHandle() (6)<2>、RecoveryTheBall() (6)<3>、KillBall() (6)<4>、OolongSignalProcessing() (6)<5>、OverHalfOfTheBalls() (7)五、模块说明 (7)1、deathHandle() (7)2、RecoveryTheBall() (8)3、KillBall() (9)4、OverHalfOfTheBalls() (10)5、CheckDeath() (11)6、GoAngleDistance() (11)7、GoAngle() (12)8、OolongSignalProcessing() (12)9、Angle() (13)10、turnAngle() (13)11、GetNewAngle() (13)12、ReturnOut() (13)13、SelfTest() (14)六、调试与修改 (14)1、准备前工作 (14)<1>、变量设定 (14)<2>、整理场地 (14)<3>、马达转向 (14)<4>、指南针 (14)<5>、超声测距模块 (15)2、调试步骤 (15)<1>、运行自检程序 (15)<2>、全局变量 (15)<3>、对于直线运行的程序模块调节 (15)<4>、转绝对角度调节 (16)七、常见问题 (16)1、超声测距模块读数不准 (16)2、死球的时间过长或角度过小 (16)3、向左或向右后退的弧度过大或过小 (17)4、向左或向右击球的弧度过大或过小 (17)八、使用技巧 (17)1、电池 (17)2、使用自检程序 (17)3、程序优化 (18)九、方案扩展 (18)1、可扩展为φ18和φ30的进攻方案 (18)2、可守可攻的方案 (18)3、程序选择器 (18)一、 序言本方案是针对我们公司新推出的那一款足球马达所装配成足球进攻机器人的,是一个比较简单的进攻方案。
本方案用到的传感器也很少,只用到了指南针、复眼模块和超声测距模块,而灰度测量模块、触碰模块则没有用到。
有兴趣的读者不妨加入试一下,看其效果如何。
本方案虽然是在总结以前方案的不足和优点及编者的一些经验和想法的基础上,进行了较大的改进,不过大致的策略和实现方法都和以前的方案相类似,因此,在看本方案之前,请参考以前的进攻方案。
在机器人足球比赛中,高手林立,各类机器人风格各异,形态万千,各种技术层出不穷,本方案只是提供用本公司标准器材搭建足球机器人的例程,希望起到一种抛砖引玉的作用,留给读者拓展的空间。
二、 任务足球进攻机器人,其任务就是把足球踢进对方的球门。
三、 策略分析首先我们把机器人要完成的任务拆分为以下几个部分:1、找球机器人用复眼找球非常准,当机器人在已方或敌方半场时,其复眼所有通道都没有发现球,就要跑到另一半场找球,这样就可以避免当设定看球的阀值很小时机器人会乱跑或当设定看球的阀值过大时远处的球就会看不到的问题。
2、乌龙球处理当找到球后,机器人要识别球的方向,如果是向着已方球门的方向,就不能立即踢球了,如果踢的话就乌龙球了。
因此,机器人要转到球的后面去踢球,转到球的后面,如果其当前的角度大于180度,那么机器人向右后退击球,若是小于180度,则左后退击球。
但需注意,如果球离场边太近,机器人就不能往离场边近的方向转了,不然就会撞到场边的墙壁而转不了,而距离测量模块就可以知道机器人是离左边场的墙壁近还是离右边场的墙壁近了,这个读者可以自已酌情处理。
3、死球处理机器人在踢球过程序中,可能会出现各种情况,比如说:球在四角被卡死了,怎么办呢?如果机器人在最大的时间里,其角度差小于15度(这个角度只作举例子用)时,那么就说明球被卡死或是机器人被卡死,可具体卡在哪个角落,用角度传感器来判别,而采取相应的处理策略。
4、追球以前的方法是用机器人的复眼找球,当1、2、3号通道看到球时,机器人的左轮不动,右轮正转,机器人向左边运动,当复眼的5、6、7号通道看球时,机器人的右动不动,左轮正转,机器人向右动运动,当复眼的4号通道看到球时,机器人的左、右轮同速正转,机器人就朝着球的方向运动,达到找球的目地。
在真正的比赛时,会发现,其中存在一个问题,那就是机器人的反应速度比较慢,在实战中,速度放在第一位,分秒决定胜负。
到底是慢在哪里?仔细分析,我们可以知道,当球的方向是在机器人的左边或右边时,机器人要调整方向采用了一边轮子不动,一边轮子正转的方式,可以看出,这是导至机器人反映慢的原因。
我们可以采取一边正转一边反转的方法,使机器人正对着足球,然后全速直冲过去,这样的速度就会快很多。
但这样也会存在一个问题,那就是在离球的距离近的时候会容易过冲,因此要分阶段处理,当离球比较远的时候,可采用响应快的程序,离球较近时候则采用响应慢的程序。
5、击球为了能让机器人更好的进攻,可把球场分为三个区(读者可根据自己的实际把球场分区),机器人在不同的区域就可以采用不同的进攻策略。
怎样才能分区域呢?可采用超声测距模块。
球场的情况是变化的,超声测距模块只能提供场上的大概位置,不能为机器人提供精确的位置。
机器人在追球的过程中,其角度为0度、90度、180度、270度的概率不小,因此可设八个全局变量。
当机器人的角度为0度或90度、180度或270度时,就读取超声测距模块的值,并把其变量值存贮到全局变量中。
当机器人离球较近时,读取全局变量的值,并判断机器人大概在球场上的位置,进而采取相应的策略。
详细说明请参考下面的进攻算法说明。
6、流程图根据上面的说明,可得到以下的流程图:四、 程序说明1、主程序说明若把车体反向摆置,就会进入自检程序,若不是则进入下一程序;全局变量初始化,如果装在机器人前面的复眼模块检测到球,而且当前复眼通道的值大于远距离的光值时,机器人认为此方向上有球,并逐步判断是否死球、击球、乌龙球,若全不是,则进入追球程序。
如果装在机器人前面的复眼模块检测不到球,则到另一半场找球。
2、需要输入的子程序参数<1>、deathHandle()作用:死球处理。
若检测到机器人当前的角度差在最大的时间里是否大于一定的角度deathAngle(可自定义),若小于则说明机器人卡死在球场某个位置,若大于则说明机器人不是被卡死。
子程序包括需要现场测定的参数deathAngle这一个参数。
详细说明请看后面的模块说明。
参数说明:deathAngle:机器人在最大的时间内的角度差值。
<2>、RecoveryTheBall()作用:追球。
子程序包括需要现场测定的参数如下jGuan这个参数,详细说明请看后面的模块说明。
参数说明:jGuan:当前复眼通道的近距离光值。
<3>、KillBall()作用:击球。
子程序包括需要现场测定的参数如下Distance、Dist这两个参数,详细说明请看后面的模块说明。
参数说明:Distance:左或右场边到球门边缘的距离,读者需实测;Dist:球门深度,读者需实测。
<4>、OolongSignalProcessing()作用:乌龙球处理,避免将足球踢进自己的球门。
子程序包括需要现场测定的参数如下参数:OolongLuminosity:乌龙球时,靠近球的光值,也即机器人距离球多远时执行向后退一定的弧度击球(乌龙球处理程序);P1:自定义的场地角度,判断是否朝已方球门角度;P2:自定义的场地角度,判断是否朝已方球门角度;q1:自定义的场地角度,判断是否朝敌方球门角度;q2:自定义的场地角度,判断是否朝敌方球门角度;NearRedio:近光值,即机器人向后退直到其检测到球的光值。
<5>、OverHalfOfTheBalls()作用:过半场找球。
子程序包括需要现场测定的参数如下Distancing、luminosity 这两个参数,详细说明请看后面的模块说明。
参数说明:Luminosity:无球时的光值,小于此设定值,机器人就会认为是此方向上无球,读者需实测。
Distancing:过半场的距离,读者需实测。
五、 模块说明1、deathHandle()图标:功能:检测机器人当前的角度差在最大的时间里是否小于一定的角度degree(可自定义),若小于则说明机器人卡死在球场某个位置,若大于则机器人不是被卡死。
流程图:程序详细说明:死球判断子程序的返回值为1,则检测指南针的返回变量,若其当前角度大于180度,右抛,否则左抛。
2、RecoveryTheBall()图标:功能:分段追球,与球的距离远的就采用快追球程序,离球近的就采用慢点的追球程序。
流程图程序详细说明:参数详细说明:sr:右马达控制命令字,1为停止,0为前进,2为后退;sl:左马达控制命令字,1为停止,0为前进,2为后退;maxIndex:复眼的通道号;maxValue:当前所有复眼通道的最大值;jGuan:近距离的光值,主要用在追球程序上,作用是分段执行追球程序;g_distanceLeft:全局变量,存储左超声测距模块的返回值。
检测当前所有复眼通道的最大值,如果当前所有复眼通道的最大值小于近距离的光值时,检测复眼通道最大值的通道号,根据不同的通道号执行不同的处理程序,如果复眼通道最大值的通道号等于7,那么机器人就快速向右转;复眼通道最大值的通道号等于6则中速向右转;复眼通道最大值的通道号等于5则慢速向右转;复眼通道最大值的通道号等于3则慢速向左转;复眼通道最大值的通道号等于2则中速向左转;复眼通道最大值的通道号等于1则快速向左转;在找球中若机器人的角度为80度到100度之间,读取左超声测距模块的返回值。