浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

文章目录

  • 1.比赛背景
  • 武术擂台机器人分类
  • 轮式比赛场地
  • 轮式比赛形式
  • 2.元器件和电路
  • 2.1.主控器
  • 2.2.动力套件
  • 2.2.1电机
  • 2.2.2.舵机
  • 2.3.传感器
  • 2.3.1.数字量 I/O传感器
  • 2.3.2.模拟量 A/D传感器
  • 2.4.电机驱动电路的设计
  • 3.结构设计
  • 3.1.上台装置
  • 3.2.铲子结构
  • 3.3.灰度传感器布局
  • 3.4.光电传感器和红外测距传感器布局
  • 3.5.整体布局
  • 4.程序设计
  • 4.1.程序框架流程图
  • 4.2.上台程序
  • 4.3.机器人巡台程序
  • 4.4.掉台后重登擂台
  • 5.总结

  • 1.比赛背景

    中国智能机器人格斗大赛(Intelligent Robot Fighting Competition,简称IRFC)是在机器人武术擂台赛的基础上发展而来,从2008年开始举办,已有十多的历史,为莘莘学子提供了工程实践、创新和展示的平台。2017年,智能机器人格斗大赛(IRFC)正式纳入世界机器人大赛体系,具有较大的行业和社会影响力。每年举办一次,如今已经有包括清华北大在内的上千个队伍都已经加入其中。

    好了话不多说,下面介绍一下笔者当年的比赛规则,参考《中国智能机器人格斗及竞技大赛》官网:robo-maker.org/about/guize/。这是最新的比赛规则,规则每年都有变动,本文讨论的比赛规则是比赛当年整理的,可能已经不是最新的了。

    也可以参考关于2018年华北五省的这篇文章:机器人武术擂台—无差别组

    武术擂台机器人分类

    先认识一下什么是武术擂台机器人,其实武术擂台机器人分为很多种,这里简单介绍三种:轮式自主格斗-统一部件、轮式自主格斗-开放部件,以及仿人自主格斗
    轮式自主格斗-同一部件
    轮式自主格斗-同一部件的机器人要求必须外观必须使用非金属材料,不能是黑色外观,而且通常指定使用博创尚和的STM32主控、电机驱动和电机。这比赛的机器人形态主要有两种,第一种就是像下面这种的,使用博创尚和的创意之星套件拼接而成,看起来比较简陋,就像乐高玩具车一样。所以,这种机器人在赛场上往往被打的最惨。

    还有一种就是像下面那样的,主要区别就是机身使用3D打印结构,设计更加合理,看起来也更加美观,攻击性也更高一些。

    轮式自主格斗-开放部件组

    这种机器人对应了开放部件组,有的比赛也称之为非标准组或者无差别组,上面那篇关于华北五省的就是属于武术擂台开放部件的。他的特点就是比赛规则和标准格斗的大体一致,都是轮式带铲子的车型结构,不同点就是机器人的机身材料可以是钢、铁、铝等金属,而且主控、驱动和电机不受限制。这种机器人往往具有更强破坏性,当然格斗场面也更刺激。赛场上打出火花、自燃的也是这种机器。
    轮式自主格斗的机器人机身长宽都不能超过300*300,重量不超过4KG。重量、尺寸允许误差范围 5%,以比赛现场测量为准。

    仿人自主格斗

    这种机器人的特点就是有四个带轮子的底盘,上面是仿人的上半身,一个简陋的头和有两个用于格斗的舵机机械臂。用到的部件有点和轮式自主格斗-统一部件的类似,统一的主控、电机和电机驱动。

    这玩意相比于上面两种机器人的明显缺点就是长得太高了,容易翻跟头,格斗双方也是利用这一特点试图把对方推倒。

    轮式比赛场地

    比赛场地大小为长、宽分别为是 2400 mm,高 60mm 的正方形矮台,台上表面即为擂台场地。场地中央有一个正方形红色区域,区域中心是一个白色“武”字。底色从外侧四角到中心分别为纯黑到纯白渐变的灰度。出发区用正蓝色和正黄色颜色涂敷,尺寸为500mm*400mm。场地地面为黑色,擂台四周有宽为200mm 的黑色色带。场地四周700mm 处有高 500mm 的方形黑色围栏。场地的材质为木质,场地表面最大承重能力 50kg,场地表面的材料为亚光 PVC 膜。

    轮式比赛形式

    比赛开始前,参赛队员将机器摆在出发区等待出发,准备好后向裁判举手示意,裁判吹哨后比赛开始。裁判吹哨前,机器人必须处于静止状态,连续三次违规提前运动,取消当场比赛资格。裁判吹哨后,参赛队员必须用非接触的方式启动机器人,不能再接触机器人,接触一次给对方加 1 分,然后重新重启出发。机器人须从擂台下出发区启动,任意地方上擂台(无斜坡),一方登台后,另一方 10 秒还未完成登台,给在台上的一方加 1 分,继续读秒。机器人掉落台下后,须在 10 秒内从擂台四周任意位置自主登上擂台继续比赛,参赛队员不能接触机器人,如在裁判口头 10 秒倒计时后仍未能登台,对方得 1分,随后以每 10 秒得 1 分给对方加分,直至机器人登上擂台。被打下擂台后,在上台的过程中,以 10 秒为单位给对方加 1 分。

    在比赛进行过程中,参赛双方都可以重启机器人,重启前必须举手向裁判示意,裁判同意后才可以拿着机器回出发区重启出发。重启一次给对方加 3 分,重启次数不限制。重启后读秒罚分和比赛刚开始后一样。双方都在擂台上,一方掉下擂台,在擂台上的一方得 1 分,双方先后掉下擂台,都不得分。只有一方在擂台上,以 10 秒为单位给在台上的一方加 1 分,出现在台上的一方掉台的情况时另一方也不得分。双方都掉下擂台超过 10 秒后,经裁判示意,双方可以从各自的出发区域重新出发,继续比赛。

    未经裁判允许触碰机器人扣 1 分,故意踏进围栏扣 1 分。
    参赛队长可以向裁判员宣布本队弃权,弃权后,对方 5:0 获胜。
    在比赛过程中,裁判有权要求消极比赛的机器人重新启动并给对方加 1 分。

    比赛规则形式说了这么多,总之就是下面一张图。

    以上是轮式自主格斗等比赛规则,详细可去B站观看比赛场面合集视频:格斗机器人自制组(中国智能机器人大赛)

    机器人武术擂台赛的比赛规则算是比较公平的,参赛对象可以是985、211的院校,也可以是职业技术类的高职高专类院校,只要是国家教育部承认的高等院校都可以在同一赛场一绝高低。


    /*下面从电路结构和程序,3个方面浅谈一下设计一台武术擂台机器人需要注意的地方。以轮式自主格斗统一部件组的机器人为例。*/

    2.元器件和电路

    参赛队伍采用统一标准的控制器、动力模块、传感器、供电模块等。
    a、控制器只可选用 Multiflex-AVR、LUBY、Multiflex-AI 控制器;
    b、动力模块方面,可选用 BDMC 系列驱动器及配套电机、cds5516 系列舵机及配套舵盘;
    c、传感器选用三线制传感器,选用的摄像头只能进行图像采集传输,不得使用具有独立处理功能的摄像
    模块(如 OpenmV 模块等);//这部分是2022年的要求,已经改成摄像头了,在2020年以前都是用数字量或者模拟量的传感器的。
    d、供电模块选用 7.4V、14.8V、22.2V 锂电池。

    2.1.主控器

    这里仅介绍一下用到比较多的LUBY控制器。这玩意长得像掌上游戏机一样。


    luby控制器集成数字量接口、模拟量接口、数字舵机接口、RS232接口,TTL电平IO输出接口,具有丰富的扩展能力。Luby控制器具有反接保护、过流保护功能,支持串口及U盘下载程序,可储存多个用户程序并通过面板按钮进行选择和运行,并支持蓝牙点对点无线数据传输和ZigBee无线组网通信。
    主控是基于stm32f103,官方提供了封装好的函数库,用的时候直接调用就行。

    2.2.动力套件

    2.2.1电机

    开放部件组的电机可以有很多种,直流有刷或者无刷电机都行。但是统一部件组的电机都是统一的直流有刷电机,冯哈勃Faulhaber 2342 电机,这电机光名字听起来就很高大上,单价1200一个。电机主要由3个部分组成,行星减速箱、电机主体和编码器组成。


    下面是该系列电机的参数,选用24V的。

    对于开放部件组的,电机型号就不受限制了,可以选用价格便宜10倍而且动力强大的无刷电机。

    2.2.2.舵机

    舵机也是用指定的cds5516 系列舵机。性能参数如下。

    2.3.传感器

    不管是统一部件还是开放部件组,或者是仿人格斗,传感器都是有要求的。所用的传感器可以分为三类,数字量 I/O传感器、模拟量 A/D传感器和其他传感器。这里主要讨论前两种,其他传感器主要是指超声波模块、陀螺仪、倾角传感器这些。

    2.3.1.数字量 I/O传感器

    SIG/VCC/GND三线制接口,TTL电平,可以连接到控制器的数字量输入通道。

    在这些数字量传感器中,我们只需用到第一个就行,红外接近开关。

    优点:有效检測距离长,通过调节固定的角度能够在机器人没有达到擂台边缘前。提前检測到擂台边缘。

    缺点:体积大,怕反光,怕黑色,假设对手是黑色或者反光,非常容易误推断擂台边缘,造成不攻自破的结果。
    

    数字量传感器仅仅能返回0、1两个状态,到达或者没到达,判定标准通过电位器调节。单片机仅仅需读取IO状态就可以,程序编写简单。

    2.3.2.模拟量 A/D传感器

    SIG/VCC/GND三线制接口,可以连接到控制器的模拟量输入通道

    这些传感器中主要用到两种传感器,红外测距传感器和灰度传感器。红外测距传感器这玩意长得像两颗眼睛一样,圆溜溜的。

    推荐采用夏普的psd红外测距传感器,优点颜色对测距基本无影响其二返回信号是可变的电压值,不同距离对应不同的电压值。

    下面这个是灰度传感器,用于擂台检测的。灰度传感器优缺点如下。

    优点:体积小,能够通过推断擂台的颜色得出机器人距离擂台边缘的距离,固定在机器人底部。碰到反光对手不会误判擂台边缘
    
    缺点:有效检測距离比較短	
    


    灰度传感器的明显缺点就是不适合长距离探测,所以一般都用来放到车底下做灰度值采集。

    2.4.电机驱动电路的设计

    统一部件组基本上不需要自行设计电路,直接把传感器接到控制器的对应接口就行。但对于开放部件组而言,电路部分尤为重要,特别是电机驱动电路的设计上。
    用到的电机驱动基本上就是典型的“H”驱动电路,下面是局部参考电路,具体的工作原理网上也有相关的。电机供电和主控供电分开,这是常识。而且MOS管的选型一定要根据电机参数来,耐压值、通过电流尽可能大一些,不然赛场上“啪”的一声,驱动炸板子也是常有的事情。

    3.结构设计

    3.1.上台装置

    上台装置为一个弧形板,安装在机器人的尾部与下底板相连,这个板与底板成一定角度。
    这种上台装置只需要机器人后端朝着擂台,提供一定的速度即可冲上擂台,不需要其他额外其他的动力装置和机械装置。

    3.2.铲子结构

    铲子要充分贴地,最好是设计成固定铲,限制铲臂的活动,防止被“掀裙底”。

    3.3.灰度传感器布局

    灰度传感器用于安装在机器底部,感知擂台的灰度值。灰度传感器最好是布局在底部的四个角落位置。如下图所示。

    3.4.光电传感器和红外测距传感器布局

    光电传感器的作用是和灰度传感器一起判断擂台边缘,光电传感器通常要倾斜向下安装,用于照射擂台。机器人行驶到擂台边缘时,光电传感器照射到了擂台下面,光电传感器发出一定距离的光没有被反射回来,这时会给主控发送一个电平信号,仿佛告诉机器人主控:前方危险!探测到擂台边缘,再往前走就可能掉下去了。

    红外测距传感器用于探测对手,当检测到对手或者障碍物时,机器就会启动攻击程序,把铲子朝向对手撞过去。红外测距传感器要水平安装在机器的四个面,前面和后面可以各加两个增加探测区域。

    3.5.整体布局

    同一部件和开放部件的机器人主要区别就是结构和外观,统一部件组的机器外观建议使用3D打印。
    在结构设计上,应该要关注以下3点:
    1.首要一点就是底盘尽可能的低,这样能把重心降低,使机器移动时更加稳定。
    2.为了方便走线,电机驱动可以藏在机器肚子里,但是主控器要放到最上面,也方便操作。
    3.要用两个电池,一个7.4V的2S锂电池专门给主控器供电,一个是22.2V的6S锂电池专门给电机供电,这样能起到电源隔离的作用。如果只用一个电池,机器上台或者攻击格斗时,电机会输出较大功率,会把电池电压拉低,会引起主控供电不足。而且电池要用电池仓保护着,电池这玩意在打斗的时候有可能会被对手磕碰到,电池断电都好说,打斗场面电池起火就刺激了。
    4.开关的安装位置要合理,开关不要藏在机器肚子里,这样用手不好操作。也不要放到容易被磕碰到的位置,以免意外碰到开关导致机器关机。

    4.程序设计

    4.1.程序框架流程图


    软启动: 通过左右两侧的红外光电传感器来实现。
    登台:通过倒退车尾以最大速度冲上擂台。
    擂台漫游: 顶部的4个红外光电传感器检测边缘。
    擂台上敌人:四周的红外光电和红外测距来检测敌人。
    擂台下:四周的红外光电和红外测距连检测。
    卡在擂台边缘:通过倾角传感器来检测是否发生倾斜。

    4.2.上台程序

    根据比赛规则,比赛开始后,要以非接触的方式让机器启动上台程序。我们可以把机器的一个光电传感器作为上台程序的启动开关,机器电源开关打开后,各个传感器开始工作了,此时机器静止不动,当我们用手遮挡一下(不要碰到机器)光电传感器的光线,光电传感器给主控发送一个电平变换的信号,此时主控就会给电机输出最大PWM数值,机器就以最大数值冲上擂台。机器人冲上擂台后,开始向右拐弯围绕擂台转圈。
    上台程序代码如下:

    
    void Go_up()  //上台程序函数,这个函数在定时器中断内执行。
    {
    	move(-6800,-7500); //左电机反转速度6800,右电机反转7500。
    	                   //车是在出发区倒退冲上去的,而出发区左边就是擂台边缘,所以上台的时要让车向右偏一些,防止冲下擂台                     
    	timercount=130;  //上台动作延续的时间
    	while(timercount)UP_delay_us(1);
    	move(-3500,-5000);  //冲上台后立即开始掉头,不能总是倒退走路
    	timercount=40;
    	while(timercount)UP_delay_us(1);
    	move(1500,1500);  //直行
    	tb=0;
    	taixia=0;		//在上台的过程中可能会触发台下识别程序认为在台下,所以在执行完上台程序后taixia清零
    	Tubian=0;
    	QingJiaoFlag=0;
    }
    

    4.3.机器人巡台程序

    机器上到擂台后,开始巡台,就是在擂台上转圈圈,寻找对手。根据不同的灰度区间,我们将武术擂台分成 3 个圆形轨道:


    A、track1,中心武字:一旦进入红色区域,灰度将不再遵循渐变规律,而白色武字为武术擂台
    上灰度最大的区域。
    B、track2,灰度渐变:灰度越小,越靠近擂台边缘,越容易掉落擂台;
    C、track3,四个角落:由于角落的颜色已经接近纯黑,灰度差异非常小,一旦陷入此区域,机器人将很难判定自己的方向。
    实际上这是加大位置参数的颗粒度,这样的好处是能很好地降低灰度的误差。实际上我想分成多少个轨道都可以,但是我们的实践发现,三个轨道的分法是最完美的。在第三个轨道外的区域将被视为危险区域,机器人一旦陷入其中就必须想尽一切方法抽离。

    那么每个灰度区间的两边的灰度值要怎么确定呢?需要每个轨道都去测量一遍吗?当然不需要,只需要测量一下TRACK_3 外圈处的灰度值 Gray_Black 和 TRACK_1白色与红色交界处的灰度值 Gray_White,然后将[Gray_Black, Gray_White]区间分成 3 段就可以了。

    Gray_Black 值的大小完全取决于擂台的测量位置,所以,危险区域的大小可以自行决定。如果你想要采用保守点的战术,就让危险的区域变大些。我们的机器人有四个灰度传感器,我们可以先确定四个灰度传感器分别处于哪个轨道,再将各种可能出现的情况进行编码,确定机器人的轨道信息。

    根据灰度传感器采集的结果控制巡台速度,擂台中间时灰度传感器采集结果数值最大,此时速度可以设置为巡台允许最大速度。在靠近擂台边上时,灰度传感器结果减小,巡台速度将逐渐降低。

    机器人在台上巡台,当四个方位的红外测距传感器判断到敌人时,触发定时器中断程序,机器人发起攻击。
    部分代码如下:

    /***********************敌人判断**************************************/		
    
    /***********************↓前方判断↓**************************************/	
    if(AD6>NEAR_ENEMY||AD7>NEAR_ENEMY||AD8>NEAR_ENEMY)
    {
    	Fenemy=1;
    }
    else//三个传感器都未检测到有物体
    {
    	Gongji=0;
    	Fenemy=0;
    }
    if(Fenemy==1)
    {
    	Fenemy_Time++;
    }
    else
    	Fenemy_Time=0;
    
    
    if((AD0>3650||Hui1[19]==BLACK)&&(AD1>3600||Hui2[19]==BLACK)&&AD2>3700&&AD3>3700&&Fenemy_Time>150)//攻击持续1.5S后灰度全白
    {
    	taixia=1;
    }
    /***********************↑前方判断↑**************************************/	
    
    /***********************↓右方判断↓**************************************/	
    if(AD9>900||AD21==0)//右侧光电检测到时
    {
    	Renemy=1;//*****************************************************************************************************************************************************************************************************************************************************
    }
    else
    {
    	Renemy=0;
    }
    /***********************↑右方判断↑**************************************/	
    
    /***********************↓后方判断↓**************************************/	
    if(AD10>900||AD11>900)
    {
    	Benemy=1;
    }
    else
    {
    	Benemy=0;
    }
    /***********************↑后方判断↑**************************************/	
    
    /***********************↓左方判断↓**************************************/	
    if(AD12>900||AD20==0)//左侧光电检测到时
    {
    	Lenemy=1;//*****************************************************************************************************************************************************************************************************************************************************
    }
    else
    {
    	Lenemy=0;
    }
    /***********************↑左方判断↑**************************************/	
    if(Fenemy==0&&Renemy==0&&Benemy==0&&Lenemy==0)//无敌人判断
    {
    	Nenemy=1;
    }
    else
    {
    	Nenemy=0;
    }
    

    4.4.掉台后重登擂台

    机器人被对手推下擂台后,要自主识别到擂台然后重新登上擂台。擂台下不同擂台上,擂台下的区域都是全黑的,不是擂台上那种由黑渐渐变白。利用这一点,我们可以通过判断四个灰度传感器的数值都是全黑对应的数值,而且都相差很小,就可以知道机器人处于台下,需要重新回到擂台上。这时我们不管机器人车头朝向哪边,让机器直接向前移动,直到铲子撞到围栏,机器人尾部自然朝向擂台,这时就可以执行上台程序了。
    部分代码如下:

    void Re_go_up()  //掉台后重登擂台函数
    {	
    	move(2800,2800);//左右两边两个电机的速度都设置2800,
    	timercount=100;
    	while(timercount){UP_delay_us(1);}
    	move(3200,3200);
    	timercount=50;
    	while(timercount&&(my_abs(AD10,AD11)>100)){UP_delay_us(1);}	//修正,让尾部尽量与擂台保持平行
    	move(0,0);
    	timercount=25;
    	while(timercount)UP_delay_us(1);
    	move(-6800,-7500);  //跟第一个上台程序一样,开始冲上擂台
    	timercount=130;
    	while(timercount)UP_delay_us(1);
    	move(-1500,1500);
    	tb=0;
    	taixia=0;
    	Tubian=0;
    	QingJiaoFlag=0;
    }
    

    5.总结

    以上本篇文件讲的内容,本文首先是介绍了武术擂台格斗机器人大赛的规则和背景,然后从机械结构、电路和编程等3个方面阐述设计一台武术擂台机器人需要注意的地方。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。部分图片素材来源于网络,侵权删。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 浅谈武术擂台格斗机器人大赛

    发表评论