当前位置:首页 > 申请书大全 > 【直面机器人足球竞赛中的核心问题】 机器人足球竞赛
 

【直面机器人足球竞赛中的核心问题】 机器人足球竞赛

发布时间:2019-01-27 03:59:46 影响了:

  目前,有关青少年机器人制作的赛事不少,其中,机器人足球是大家较为喜爱且十分火爆的竞赛项目。许多教练员总是在硬件上下工夫,追求强力且高堵转值马达、高转化率的大功率驱动板和稳定的传感器等。尽管这些工作是至关重要的,但由于器材上的升级牵涉太多方面,所以在通用的基本结构基础上,本文重点就如何设计程序加以阐述。
  防守机器人
  对于机器人足球竞赛来说,有些教练员会沉迷于华丽的进攻,殊不知防守才是重点。不良的防守不仅会给对手更多进球的机会,还可能产生乌龙球。因此在“矛”与“盾”的关系中,应以后者为先。那究竟要如何评价“盾”呢?按照中国科协2011年的竞赛规则,在对方只有一台进攻机,自己一台防守机时,能保证全场不进一球,防守就是高效的。比赛中共有4台机器人参赛,会有各种各样复杂的情况发生,而对于程序研究者来说,只能在单纯的环境中保证万无一失,所以下面我将就各种因素分别展开讨论。
  1.指南针的控制
  指南针作为方向定位的重要传感器,时刻要担负着使防守机器人角度归零的重要任务,以保证防守机器人面对前方。以下是我根据2009年中国科协竞赛规则自编的一段代码,当机器人处于15°~45°的调整位置,使指南针值归零。这里的“零”不是一个值,而是指一个范围,也就是机身正对敌方即可。
  while ( (b!=9999)&&(b>=0)&&(bGuanKan ) /**发现球**/
  {
  break; /**跳出循环**/
  }
  b = GetCompassB(_COMPASS_1_);/**读指南针值**/
  if ( b>15&&bGuanKan )
  /**角度已经转到位或发现球**/
  {
  SetMotor(_MOTOR_left_, 1, 30); /**左马达停止 **/
  SetMotor(_MOTOR_right_, 1, 30); /**右马达停止 **/
  SetMotor(_MOTOR_front_, 1, 30); /**前马达停止 **/
  SetMotor(_MOTOR_back_, 1, 30); /**后马达停止 **/
  break; /**跳出循环**/
  }
  SetMotor(_MOTOR_left_, 2, 70);/**以离15°最近的方向以70速度转动**/
  SetMotor(_MOTOR_right_, 2, 70); /**以离15°最近的方向以70速度转动**/
  SetMotor(_MOTOR_front_, 2, 70); /**以离15°最近的方向以70速度转动**/
  SetMotor(_MOTOR_back_, 2, 70); /**以离15°最近的方向以70速度转动**/
  SetCentiS(5); /**预留5%秒完成动作**/
  }
  经验表明,指南针是很可能出错的,因此,在程序开始端必须将出错情况排除。图1中将0°~360°分成9个区,其中0°≤b≤15°和345°≤b≤360°这个区域已经是正向面对敌方,无需再做调整。建议这个范围还可以稍大些。过于严格的范围虽然会带来准确性,但更大的可能是使机器人处于不断的调整之中。同理,在调整过程中也要保留宽松的出口条件,程序行if(bGuanKan)中b值就控制在20°,而不是区域分界值15°。
  2.测距模块(超声波测距或红外测距)的优化
  机器人要获取自身所处的位置和目标位置,就需要测距传感器进行定位。指南针归零后,就要马上移动到目标位置。一般情况下,机器人共有4个测距模块(也可以是3个),安装于机身的前后左右。笔者试图安装过8个,并求出算术平均值,以期得到更精确的数据,但事实上,过多的传感器会给机器人带来犹豫,更别说其存在的耗电问题。对于防守任务来说,快速回到球门是至关重要的。因此,后测距变量的值要根据停在球门前的适当位置来确定,宽松的条件是很重要的,不能因为追求准确而浪费了回防时间。不仅如此,后测距一定要优于左、右和前测距,回防动作要预留一定的运行时间,保证动作的完成(或部分完成),再顺序执行其他模块,所以程序中应选择循环语句,而不是条件语句。
  3.误差的规避与出错的引导
  任何传感器在应用中都存在误差甚至错误,这是不可避免的。在实际中,我们可以通过硬件挑选和程序设计来规避风险。
  (1)传感器的挑选
  许多指导教师常常一旦发现传感器有误差,就将其立即更换,却发现越换越差,事倍功半。其实,要规避传感器的误差,首先要了解传感器的技术参数。在日常训练中,笔者都会要求学生对传感器进行测试。这种测试不是简单地凭感觉进行草率评价,而是要用数字说话――画检测图。
  以Sharp芯片组的红外测距为例,在产品的标贴中,就已经明确说明其有效测试距离在8cm~80cm,距离越远,红外数值越小。特别是当距离小于8cm时,其读取数值不变小,反而增大,也就是所谓的盲点。通过绘制红外值与距离的关系图,就可以发现产品的优劣。图2的曲线接近于线性,没有突变,特别是在10cm~100cm区间,红外值依次递减,说明其测距效果更佳。
  (2)出错的引导
  在竞赛中,经常会出现防守机器人在一个位置(死角)卡住并对来球无反应的情况。这在2011科协规则中被定义为“损坏”的机器人的一种,会被罚移出场外。此时,对于防守方极为不利。发生这种情况的原因较为复杂,除了程序设计有问题外,也不能排除传感器出错的因素。笔者曾试图用读取系统时间的方式来解决,也就是该状态出现150毫秒后,就重新读值或执行命令,代码如下。
  SetSysTime(0); /**设置系统时间**/
  while (1)
  {
  t = GetSysTime();/**读取系统时间值**/
  if ( t>150 ) /**当时长超过150毫秒**/
   ……/**执行命令**/
  }
  4.不出黑区
  为了适应竞赛规则的不断变化,防守已经从攻防兼备发展到纯防守,也就是说不出黑区(图3中的“罚球区”)。最常见的方法是,通过读取地面灰度的颜色值作为回黑区的判断条件。那么,当对方来球时,防守机器人却因上一次推球而部分机身出了黑区,接下来是要优先返回黑区还是处理推球程序呢?如果执行返回黑区,就可能会在调整过程中露出空门。如果执行推球,也会因为防守机器人没有调整到位而造成推球方向错误,最终导致防守失败。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文   要解决这个问题,灰度阀值定为多少才合理呢?如果发现机器人不断地在黑区内前后左右移动,并且对来球不敏感,就要把灰度阀值调大些。此外,再配合使用后红外测距判断机器人是否已经离球门较远,如果是,则执行返回程序。这样调整灰度阀值可以加“油门”,后红外测距可以踩“刹车”,操作起来就游刃有余了。
  进攻机器人
  在自身拥有了严密的“盾”后,“矛”就应该出场了,毕竟足球竞赛是要求胜的。那如何评价进攻机器人的优劣呢?简单地说,当进攻机器人面对空门(无人防守)时,能够快速进球,就是好的进攻。这个“快速”的具体时间值要根据其位置不同而变化。下面,就进攻程序与参数值进行具体分析。
  1.分清左右
  很难想象一台无法分清左右的进攻机器人能够获胜。足球在机器人的左边,机器人就要通过位置调整,把球向右推向对方球门,若反之,则向左推。这样,才有可能高效地快速进球。
  一般情况下,人们都是利用地面灰度来帮助机器人确定左右,最多配合使用红外测距。但在日常训练中,我们发现其判断的准确率较低,这与周围光线有一定的关系,也可能与追球模块有关。后来,我们尝试使用复眼模块来确定位置,通过复眼的22个通道(从0到10为前半圆,11到21为后半圆)所读到的红外值的差别,并利用库函数EyeChMax()来获取火焰最大值的通道号,来确定足球的相对位置(图4),代码如下。
  void eye_s(void)
  {
  ch1=EyeChMax();/**ch1为最大红外值的复眼通道号,也就是离球最近的通道号**/
  if(ch120) flag=4; /**此时通道号为0和21,球就在左边4号位**/
  else if(ch1>=1&&ch1=4&&ch1=7&&ch1=10&&ch1=12&&ch1=15&&ch1 本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3