“灭火机器人”教学案例_机器人教学案例

2020-02-25 其他范文 下载本文

“灭火机器人”教学案例由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“机器人教学案例”。

“灭火机器人”培训经验介绍

和衷小学

苏峻

机器人灭火是中小学机器人比赛的常规项目,怎样提高机器人灭火的速度和稳定性是我们需要重点解决的问题。我校在近几年中四次参加了该项目的比赛。现将平时训练及比赛的经验总结如下。

一、整体算法

1、第一搜索方案

我校使用右手法则为主的迷宫搜索方法,从起点向右走左手法则进4号房间,如果有火,进去扑灭,如果没有,后退走右手法则搜索3号房间,2号和1号房间做同样处理。如果机器人漏过了有火房间,则进入补救搜索阶段。

2、补救搜索方案

补救搜索方案强调的是成功率,我们使用了简单的右手法则,用前面的传感器检测1、2、3号房间,在机器人左侧向左下角方向安装一个火焰检测传感器,在路过4号房间时发现里面的火焰。如果机器人在1、2、3号房间内发现火焰,进入0号房间灭火程序。0号房间灭火程序是不区分房间的通用灭火程序,灭火成功后使用万能回家算法回家,这样的目的是提高稳定性。我们使用首选方案来追求好成绩,用补救来处理意外情况。

二、补救算法体系

机器人首先使用无火不进房间的第1搜索方案,如果没有发现火焰,使用补救搜索方案,在没有发现火焰的情况下机器人不停止动作。搜索到火焰后机器人进入灭火程序,如果第1灭火方案灭火失败,机器人开始调用第1补救方案。第1补救使用后退,对光,前进的方法,2次尝试还没有灭火成功,机器人调用第2补救方案,第二补救使用下图所示的方法:

机器人先走右手法则到白线,停在那里判断前面的火焰强弱,如果火焰强,开始灭火,如果没有火焰,后退,转身,走左手法则到另一条白线,另一白线附近没有发现火,又后退转身走右手,这样反复两次,如果还是没有灭火成功,机器人调用第3补救方案,第3补救类似于补救搜索方案,机器人前进到墙壁,走右手法则到其他房间搜索火焰。如果发现了火焰,又进入灭火程序。这样算法就构成了一个环,也就是说这里使用了复杂的递归函数,机器人是不灭火焰绝不罢休,除非内存空间被耗尽。第1补救方案主要解决机器人陷在灭火圈里面或撞在灭火圈附近的墙壁上等问题,第2补救方案解决机器人离火焰较远的问题,第3补救是为了解决机器人把无火房间当有火的问题。这样有计划地使用不同的补救方案,搜索时间逐渐增加,搜索范围逐渐扩大,有效地处理了速度与稳定之间的平衡。

三、万能回家算法

一个比较完善的灭火机器人一般把迷宫搜索分为两个阶段,首先使用第一方案,第一方案大多使用无火不进房间的方法,如果第一时间没有发现火焰,则机器人自动进入补救搜索阶段,补救搜索一般使用简单的“左手法则”或“右手法则”,由于机器人离开启动的时间比较久,机器人已经行走了很大一段路程,这时候如果还想通过计算白线的数目来知道自己处于哪个房间是很难的,错误的判断将导致机器人回家失败。所以开发一种不管哪个房间都能够成功回家的算法是很有必要的,据悉,新疆的两位高中生已经找到了这一算法,但他们并没有发表论文,在这里我们向大家公开自己的研究成果,以利于相互促进、共同提高。

本算法的关键是要找到一种能够计算是否到家,又不影响迷宫行走的方法,如果机器人判断自己已经回家则停止所有动作,如果到了一条白线,但又不是家,则机器人要越过这条白线继续走迷宫。万能回家算法适合用右手法则来实现,这一算法应用在1、2、4号房间效率很高,在这里我们首先来讨论3号房间的回家问题,如下图所示: 机器人首先走一段时间右手,再走出房门,以后都按照下面的方法处理:走迷宫一直到白线,向左转弧线并进行到家判断,如果到家则停止动作,如果没有到家则再向右划弧线直到看到墙壁,继续走迷宫并按照上述方法处理,下面对最主要的到家判断进行具体描述。

int djqr()//到家确认模块

{ int bs=120;//白线的灰度值

float md;//白线密度

int n=0;//检测次数

int bm=0;//白线数目

long qst;//时间变量,控制转左弧线

long qtt;///时间变量,控制地面灰度测量 motor(0,80);//前进1小段 motor(1,80);sleep(0.03);qst=mseconds();qtt=mseconds();while(mseconds()-qst

motor(0,-30);motor(1,30);

if(mseconds()-qtt>10l)//每10毫秒收集1次地面灰度值 { qtt=mseconds();n++;//检测地面的次数

if(analog(2)

stop();

md=(float)bm/(float)n;//计算白线在总检测次数中的比例 if(md>0.6)//如果白线比例很高 return(1);//表示到家了 else return(0);// 表示没有到家 }

上述回家算法已在本校实验室验证通过,本算法应用在1、2、4号房间同样正确,并且可以取得很高的效率。

四、防止30秒静止不动的算法

上面介绍了补救算法和万能回家算法,似乎机器人灭火回家的成功率就会很高,但在测试过程中机器人还是会出现30秒静止,转5个相同的圈,撞倒蜡烛等导致任务失败的情况。为此,我们有必要在程序中加入防止上述情况出现的代码,提高稳定性。关于防止30秒静止不动,我们已经找到比较稳定的算法,介绍如下。

通过实验,我们发现导致机器人静止不动的主要原因有下面两点,一种情况是代码进入了死循环。例如,为了让机器人前进到墙,假设前面安装了13号红外避障传感器,下面的代码:

while(digital(13)!=1)//前进到墙模块 { motor(0,60);motor(1,60);}

看上去没有任何错误,但当机器人走的不好,如上图位置时,由于前面的传感器永远不会检测到墙壁,那么,上面的循环条件永远得到满足,这里就成了死循环代码,这样机器人就会30秒静止不动.为此我们可以做以下改进: st=mseconds();//记下开始前进时间 while(digital(13)!=1)//如果看不到墙壁 { motor(0,60);//前进 motor(1,60);if(mseconds()-st>1000L)//1秒后退出循环,1000毫秒时间根据需要可以 //修改,比实际需要长一点 break;//退出循环 } 通过时间变量的引入,确保1秒后退出循环,这类死循环机器人经常发生,我们要小心应用循环语句,我们把这一情况叫机器人特色的死循环。

第2种经常发生的情况是机器人做出自相矛盾的微动作,从人的视觉上来说是静止不动,例如纳英特机器人在走左手法则,在位置不好的时候。

机器人前面的传感器看不到墙壁,根据左手法则,它要左转,转了一点以后,前面的传感器看到了墙壁,根据法则又要右转,这样循环往复,机器人就在这里停步不前,对此我们可以使用类似下面的算法,下面的算法是走到一条白线的安全方法,这里是为了走回家。Daojia=0;while(daojia==0){ gst=mseconds();

while(mseconds()-gst

if(i==1)//检测到白线 { daojia=1;stop();break;} } if(daojia==0)//还没有到家,调整机器人姿态1次。{ motor(0,-100);//后退1点 motor(1,-100);sleep(0.03);

motor(0,100);//左转1点 motor(1,-100);sleep(0.08);} } 从某点出发走左手,如果在正常情况下4秒可以回家,但现在5秒还没有回家,那么调整动作就会起作用。只要我们选择合适的参数,就可以防止机器人30秒静止不动,又不影响正常行走时的效率。

《“灭火机器人”教学案例.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
“灭火机器人”教学案例
点击下载文档
相关专题 机器人教学案例 机器人 教学案例 机器人教学案例 机器人 教学案例
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文