灭火机器人的设计实验报告_第1页
灭火机器人的设计实验报告_第2页
灭火机器人的设计实验报告_第3页
灭火机器人的设计实验报告_第4页
灭火机器人的设计实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、灭火机器人的设计一、项目任务在能力风暴机器人AS-UII的基础上,组装一个灭火机器人,并编写程序,让其能完成灭火任务。(任务的详细内容请参见国际灭火比赛规则2010)二、项目要求 设计的机器人能在5分钟内把灭火场地中的蜡烛熄灭。每次运行时,蜡烛被任意放置在不同的房间内。其它详细要求请参见国际灭火比赛规则2010三、使用到的硬件设备机器人的硬件:(1)传感器:碰撞传感器、红外传感器、火焰传感器、(2)控制单元:微控制器、外部存储器、复位系统和电源(3)驱动器:直流电动机、LCD(4)灭火风扇四、程序的思路在机器人灭火实验中,要求机器人实现在实验场地里迅速找到蜡烛将其熄灭,在寻找过程中要避免碰撞墙

2、壁与蜡烛,如果发现火源,启动灭火程序,灭火,没有发现火源,走迷宫,寻找火源,所以机器人必须实现以下功能:(1)由于在实验场地中,实验规定的房间内都有可能摆放蜡烛,所以机器人必须能够实现搜索所有的房间,在行走过程中不允许碰撞墙壁,而且尽可能快的搜索所有房间,不走重复的路程。在此过程中,本人采用了迷宫法则里的左手法则(左手法则:看到墙壁往右转,没看不到墙壁往左转)。(2)机器人在行走过程中要不断的判断是否有火源;如有还要判断火源在机器人的哪个方位、离机器人的距离等。在此过程中,需要设计一个亮度检测来寻找火源。(3)找到火源后,机器人自动启动灭火装置(风扇)迅速将火熄灭,火源熄灭后,风扇停止转动。根

3、据以上的思路设计,在VJC编程环境下,编辑机器人行为控制程序,下载并反复调试控制程序,实现机器人灭火实验。程序流程图如下(主模块):程序的代码如下:int ir_1=0;int photo_1=0;int bmp_1=0;float tim_1=0.0;int gi_1=0;int gi_2=0;int gi_3=0;void main() 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

4、) if(photo_1 < 30) && (photo_1 > -30) SubRoutine_2 (); SubRoutine_5 (); if(gi_1 = 2) void SubRoutine_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 =

5、 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

6、, 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(); void SubRoutine_2( ) photo_1 =photo(1)-photo(2)

7、; 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;void SubRoutine_3( ) if(gi_1 = 1)

8、 ir_1 =ir_detector(); if( ir_1 = 2) printf( "ir_1 =%dn" ,ir_1); motor( 1 , 30 ); motor( 2 , 20 ); else printf( "ir_1 =%dn" ,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 =

9、%dn" ,ir_1); motor( 1 , 30 ); motor( 2 , 20 ); else printf( "ir_1 =%dn" ,ir_1); motor( 1 , 20 ); motor( 2 , 30 ); void SubRoutine_4( ) if(gi_2 = 1) ir_1=ir_detector(); printf( "ir_1 =%dn" ,ir_1); if(ir_1 = 0) drive( 0 , -100); wait( 0.050000 ); stop(); drive( 100 ,0); wait(

10、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 =%dn" ,

11、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(); dri

12、ve( 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 =%dn" ,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

13、); 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 =%dn" ,bmp_1); if(gi_1 = 1) drive( -100 ,0); wait( 0.200000

14、 ); stop(); drive( 0 , 100); wait( 0.050000 ); stop(); drive( 100 ,0); wait( 0.120000 ); stop(); return;void SubRoutine_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 =(ph

15、oto(1)+photo(2)/2; stop_motor(3); return;五、测试项目过程中出现的问题分析项目设计中采用了迷宫法则,在测试中发现迷宫行走的速度不仅和红外传感器的数量、分布位置、分布角度有关,还和迷宫法则实现的语法结构有关,可以说迷宫算法千变万化,在测试项目过程中就出现了下面的情况,有时候机器人走迷宫像飞一样,而有时候机器人走迷宫像蜗牛爬,甚至在原地打转。根据测试的调试分析,发现了两个规律:(1)红外传感器的数量越多,迷宫行走速度的分化越严重。如果做到好,红外传感器数量越多,迷宫行走的速度就越快。调式能力低,红外传感器数量越多,迷宫行走的速度就越慢,其原因是红外传感器的数量增加后,相互配合的选择性多,如果调得好,速度能加快,如果调得不好,传感器多,相互干扰大,机器人常发出的光线被反复反射后被其他传感器收到,抖动现象特别厉害,严重的甚至出现30秒不动的情况。(2)语法结构中前进的语句越多,机器人行走速度越快,撞墙的可能性也随着增加,调式难度同样增加。 在测试的过程中,由于环境光线的影响,有时候室内光线太强,会影响测试结果,导致机器人会误以为有光源在前面就停止走动,启动灭火程序了,这样就要重新调试参数重新测试才行。六、项目结论与体会(1)开发机器人项目时,硬件选择适当与否直接关系到机器人的反应能力,此次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论