灭火机器人的设计实验报告.docx
- 文档编号:11457519
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:15
- 大小:83.15KB
灭火机器人的设计实验报告.docx
《灭火机器人的设计实验报告.docx》由会员分享,可在线阅读,更多相关《灭火机器人的设计实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
灭火机器人的设计实验报告
灭火机器人的设计
一、项目任务
在能力风暴机器人AS-UII的基础上,组装一个灭火机器人,并编写程序,让其能完成灭火任务。
(任务的详细内容请参见《国际灭火比赛规则2010》)
二、项目要求
设计的机器人能在5分钟内把灭火场地中的蜡烛熄灭。
每次运行时,蜡烛被任意放置在不同的房间内。
其它详细要求请参见《国际灭火比赛规则2010》
三、使用到的硬件设备
机器人的硬件:
(1)传感器:
碰撞传感器、红外传感器、火焰传感器、
(2)控制单元:
微控制器、外部存储器、复位系统和电源
(3)驱动器:
直流电动机、LCD
(4)灭火风扇
四、程序的思路
在机器人灭火实验中,要求机器人实现在实验场地里迅速找到蜡烛将其熄灭,在寻找过程中要避免碰撞墙壁与蜡烛,如果发现火源,启动灭火程序,灭火,没有发现火源,走迷宫,寻找火源,所以机器人必须实现以下功能:
(1)由于在实验场地中,实验规定的房间内都有可能摆放蜡烛,所以机器人必须能够实现搜索所有的房间,在行走过程中不允许碰撞墙壁,而且尽可能快的搜索所有房间,不走重复的路程。
在此过程中,本人采用了迷宫法则里的左手法则(左手法则:
看到墙壁往右转,没看不到墙壁往左转)。
(2)机器人在行走过程中要不断的判断是否有火源;如有还要判断火源在机器人的哪个方位、离机器人的距离等。
在此过程中,需要设计一个亮度检测来寻找火源。
(3)找到火源后,机器人自动启动灭火装置(风扇)迅速将火熄灭,火源熄灭后,风扇停止转动。
根据以上的思路设计,在VJC编程环境下,编辑机器人行为控制程序,下载并反复调试控制程序,实现机器人灭火实验。
程序流程图如下(主模块):
程序的代码如下:
intir_1=0;
intphoto_1=0;
intbmp_1=0;
floattim_1=0.0;
intgi_1=0;
intgi_2=0;
intgi_3=0;
voidmain()
{
gi_1=1;
gi_2=1;
gi_3=1;
while(gi_3==1)
{
if(gi_1==1)
{
SubRoutine_4();
photo_1=(photo
(1)+photo
(2))/2;
if(photo_1<20)
{
}
if((photo_1<30)&&(photo_1>-30))
{
SubRoutine_2();
SubRoutine_5();
}
}
if(gi_1==2)
{
}
}
}
voidSubRoutine_1()
{
if(gi_1==1)
{
ir_1=ir_detector();
if(ir_1==1)
{
motor(1,80);
motor(2,30);
}
else
{
if(ir_1==4)
{
motor(1,80);
motor(2,50);
}
else
{
motor(1,40);
motor(2,80);
}
}
bmp_1=bumper();
if(bmp_1!
=0)
{
drive(-40,0);
wait(0.200000);
stop();
drive(0,100);
wait(0.250000);
stop();
}
tim_1=seconds();
if(tim_1>60.000000)
{
gi_1=2;
}
}
else
{
if(gi_1==2)
{
drive(0,80);
wait(0.600000);
stop();
gi_1=3;
}
else
{
if(gi_1==3)
{
ir_1=ir_detector();
if(ir_1==1)
{
drive(0,100);
wait(0.250000);
stop();
}
else
{
if(ir_1==4)
{
drive(0,100);
wait(0.250000);
stop();
}
else
{
motor(1,20);
motor(2,80);
}
}
bmp_1=bumper();
if(bmp_1!
=0)
{
drive(-40,0);
wait(0.500000);
stop();
drive(0,100);
wait(0.250000);
stop();
}
}
}
}
}
voidSubRoutine_2()
{
photo_1=photo
(1)-photo
(2);
if(photo_1<20)
{
}
if(photo_1<20)
{
drive(0,-20);
wait(0.100000);
stop();
}
else
{
if(photo_1<20)
{
drive(0,20);
wait(0.100000);
stop();
}
else
{
drive(100,0);
wait(0.090000);
stop();
motor(1,0);
motor(2,0);
motor(3,100);
gi_3=0;
}
}
return;
}
voidSubRoutine_3()
{
if(gi_1==1)
{
ir_1=ir_detector();
if(ir_1==2)
{
printf("ir_1=%d\n",ir_1);
motor(1,30);
motor(2,20);
}
else
{
printf("ir_1=%d\n",ir_1);
motor(1,20);
motor(2,30);
}
tim_1=seconds();
if(tim_1>60.000000)
{
gi_2=2;
}
}
else
{
ir_1=ir_detector();
if(ir_1==1)
{
printf("ir_1=%d\n",ir_1);
motor(1,30);
motor(2,20);
}
else
{
printf("ir_1=%d\n",ir_1);
motor(1,20);
motor(2,30);
}
}
}
voidSubRoutine_4()
{
if(gi_2==1)
{
ir_1=ir_detector();
printf("ir_1=%d\n",ir_1);
if(ir_1==0)
{
drive(0,-100);
wait(0.050000);
stop();
drive(100,0);
wait(0.100000);
stop();
}
else
{
if(ir_1==4)
{
drive(0,100);
wait(0.250000);
stop();
}
else
{
drive(0,-100);
wait(0.010000);
stop();
ir_1=ir_detector();
if(ir_1==1)
{
drive(0,100);
wait(0.050000);
stop();
drive(100,0);
wait(0.200000);
stop();
bmp_1=bumper();
printf("bmp_1=%d\n",bmp_1);
if((bmp_1==5)||(bmp_1==1))
{
drive(-50,0);
wait(0.400000);
stop();
drive(0,100);
wait(0.050000);
stop();
drive(50,0);
wait(0.240000);
stop();
}
}
}
}
tim_1=seconds();
if(tim_1>110.000000)
{
gi_2=2;
}
tim_1=seconds();
}
else
{
if(gi_2==2)
{
drive(0,100);
wait(0.250000);
stop();
drive(100,0);
wait(1.000000);
stop();
drive(0,100);
wait(0.100000);
stop();
gi_2=3;
}
else
{
if(gi_2==3)
{
ir_1=ir_detector();
printf("ir_1=%d\n",ir_1);
if(ir_1==0)
{
drive(0,-100);
wait(0.050000);
stop();
drive(100,0);
wait(0.050000);
stop();
}
else
{
if(ir_1==4)
{
drive(0,100);
wait(0.250000);
stop();
}
else
{
drive(0,-100);
wait(0.010000);
stop();
ir_1=ir_detector();
if(ir_1==1)
{
drive(0,100);
wait(0.050000);
stop();
drive(100,0);
wait(0.100000);
stop();
bmp_1=bumper();
printf("bmp_1=%d\n",bmp_1);
if(gi_1==1)
{
drive(-100,0);
wait(0.200000);
stop();
drive(0,100);
wait(0.050000);
stop();
drive(100,0);
wait(0.120000);
stop();
}
}
}
}
}
}
}
return;
}
voidSubRoutine_5()
{
photo_1=(photo
(1)+photo
(2))/2;
if(photo_1<200)
{
stop();
photo_1=(photo
(1)+photo
(2))/2;
while(photo_1!
=255)
{
motor(1,0);
motor(2,0);
motor(3,100);
photo_1=(photo
(1)+photo
(2))/2;
}
stop_motor(3);
}
return;
}
五、测试项目过程中出现的问题分析
项目设计中采用了迷宫法则,在测试中发现迷宫行走的速度不仅和红外传感器的数量、分布位置、分布角度有关,还和迷宫法则实现的语法结构有关,可以说迷宫算法千变万化,在测试项目过程中就出现了下面的情况,有时候机器人走迷宫像飞一样,而有时候机器人走迷宫像蜗牛爬,甚至在原地打转。
根据测试的调试分析,发现了两个规律:
(1)红外传感器的数量越多,迷宫行走速度的分化越严重。
如果做到好,红外传感器数量越多,迷宫行走的速度就越快。
调式能力低,红外传感器数量越多,迷宫行走的速度就越慢,其原因是红外传感器的数量增加后,相互配合的选择性多,如果调得好,速度能加快,如果调得不好,传感器多,相互干扰大,机器人常发出的光线被反复反射后被其他传感器收到,抖动现象特别厉害,严重的甚至出现30秒不动的情况。
(2)语法结构中前进的语句越多,机器人行走速度越快,撞墙的可能性也随着增加,调式难度同样增加。
在测试的过程中,由于环境光线的影响,有时候室内光线太强,会影响测试结果,导致机器人会误以为有光源在前面就停止走动,启动灭火程序了,这样就要重新调试参数重新测试才行。
六、项目结论与体会
(1)开发机器人项目时,硬件选择适当与否直接关系到机器人的反应能力,此次项目要用到的就是火焰传感器而不是光敏传感器,。
(2)通过实际环境的调试,能够较好地完成任务,是机器人具备了较强的智能性,能够顺利地完成了灭火任务。
(3)开发的机器人还存在性能不稳定的问题,在某个环境开发的项目程序不能在别处不同的环境下直接让机器人完成任务,而必须重新检测,确定某些参考值,在进行相关调试才能达到目的。
(4)通过本次的项目开发,掌握了灭火机器人的搭建与迷宫灭火程序的设计,同时使自己的观察能力和动手能力有了进一步的提高,学会了对机器人迷宫灭火的策略分析。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 灭火 机器人 设计 实验 报告