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

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

文章目录

  • 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)正式纳入世界机器人大赛体系,具有较大的行业和社会影响力。每年举办一次,如今已经有包括清华北大在内的上千个队伍都已经加入其中。
浅谈武术擂台格斗机器人大赛_第1张图片

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

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

武术擂台机器人分类

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

还有一种就是像下面那样的,主要区别就是机身使用3D打印结构,设计更加合理,看起来也更加美观,攻击性也更高一些。
浅谈武术擂台格斗机器人大赛_第3张图片

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

仿人自主格斗
浅谈武术擂台格斗机器人大赛_第5张图片

这种机器人的特点就是有四个带轮子的底盘,上面是仿人的上半身,一个简陋的头和有两个用于格斗的舵机机械臂。用到的部件有点和轮式自主格斗-统一部件的类似,统一的主控、电机和电机驱动。
浅谈武术擂台格斗机器人大赛_第6张图片
这玩意相比于上面两种机器人的明显缺点就是长得太高了,容易翻跟头,格斗双方也是利用这一特点试图把对方推倒。

轮式比赛场地

浅谈武术擂台格斗机器人大赛_第7张图片

比赛场地大小为长、宽分别为是 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 分。

比赛规则形式说了这么多,总之就是下面一张图。
浅谈武术擂台格斗机器人大赛_第8张图片

以上是轮式自主格斗等比赛规则,详细可去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控制器。这玩意长得像掌上游戏机一样。

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

2.2.动力套件

2.2.1电机

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

浅谈武术擂台格斗机器人大赛_第10张图片
下面是该系列电机的参数,选用24V的。
浅谈武术擂台格斗机器人大赛_第11张图片
对于开放部件组的,电机型号就不受限制了,可以选用价格便宜10倍而且动力强大的无刷电机。

2.2.2.舵机

舵机也是用指定的cds5516 系列舵机。性能参数如下。
浅谈武术擂台格斗机器人大赛_第12张图片

2.3.传感器

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

2.3.1.数字量 I/O传感器

SIG/VCC/GND三线制接口,TTL电平,可以连接到控制器的数字量输入通道。
浅谈武术擂台格斗机器人大赛_第13张图片
在这些数字量传感器中,我们只需用到第一个就行,红外接近开关。

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

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

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

2.3.2.模拟量 A/D传感器

SIG/VCC/GND三线制接口,可以连接到控制器的模拟量输入通道
浅谈武术擂台格斗机器人大赛_第14张图片
这些传感器中主要用到两种传感器,红外测距传感器和灰度传感器。红外测距传感器这玩意长得像两颗眼睛一样,圆溜溜的。
浅谈武术擂台格斗机器人大赛_第15张图片
推荐采用夏普的psd红外测距传感器,优点颜色对测距基本无影响其二返回信号是可变的电压值,不同距离对应不同的电压值。

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

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

缺点:有效检測距离比較短	

浅谈武术擂台格斗机器人大赛_第16张图片
灰度传感器的明显缺点就是不适合长距离探测,所以一般都用来放到车底下做灰度值采集。

2.4.电机驱动电路的设计

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

浅谈武术擂台格斗机器人大赛_第17张图片

3.结构设计

3.1.上台装置

上台装置为一个弧形板,安装在机器人的尾部与下底板相连,这个板与底板成一定角度。
这种上台装置只需要机器人后端朝着擂台,提供一定的速度即可冲上擂台,不需要其他额外其他的动力装置和机械装置。
浅谈武术擂台格斗机器人大赛_第18张图片

3.2.铲子结构

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

3.3.灰度传感器布局

灰度传感器用于安装在机器底部,感知擂台的灰度值。灰度传感器最好是布局在底部的四个角落位置。如下图所示。
浅谈武术擂台格斗机器人大赛_第19张图片

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

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

红外测距传感器用于探测对手,当检测到对手或者障碍物时,机器就会启动攻击程序,把铲子朝向对手撞过去。红外测距传感器要水平安装在机器的四个面,前面和后面可以各加两个增加探测区域。
浅谈武术擂台格斗机器人大赛_第21张图片

3.5.整体布局

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

4.程序设计

4.1.程序框架流程图

浅谈武术擂台格斗机器人大赛_第23张图片
软启动: 通过左右两侧的红外光电传感器来实现。
登台:通过倒退车尾以最大速度冲上擂台。
擂台漫游: 顶部的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 个圆形轨道:

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

那么每个灰度区间的两边的灰度值要怎么确定呢?需要每个轨道都去测量一遍吗?当然不需要,只需要测量一下TRACK_3 外圈处的灰度值 Gray_Black 和 TRACK_1白色与红色交界处的灰度值 Gray_White,然后将[Gray_Black, Gray_White]区间分成 3 段就可以了。
浅谈武术擂台格斗机器人大赛_第25张图片
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.结束语

武术擂台赛,作为一个传统机器人格斗竞技类赛事,参加这个比赛可以和自全国各地的参赛队设计的机器人进行一场大比武,不管晋级还是淘汰,你的能力都有所提升,而且你能从中看到自己的长处和不足,你会看到自己还有很多要学习的地方。
武术擂台赛和全国大学生电子设计竞赛、飞思卡尔智能车还有“蓝桥杯”等学科竞赛不同,它更侧重考验知识综合利用的能力,不是单纯考验某一学科的运用(当然,和大疆RoboMaster相比还是差一些)。就拿设计这个机器人来说,如果团队里的人只懂机械结构,尽管能设计出完美的外观,而且又通过仿真分析各受力点,但是一些基本电路和程序逻辑,特别是一些传感器的基本属性都不懂,那这个机器人在赛场注定会被淘汰。
武术擂台赛还在一定程度上磨练人的意志,有利于养成一种工程思维,把控全局,做一个产品尽可能考虑多方面因素。

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

你可能感兴趣的:(stm32,单片机)