-------------精选文档-----------------
灭火机器人的设计 一、项目任务 在能力风暴机器人AS-UII的基础上,组装一个灭火机器人,并编写程序,让其能完成灭火任务。(任务的详细内容请参见《国际灭火比赛规则2010》) 二、项目要求 设计的机器人能在5分钟内把灭火场地中的蜡烛熄灭。每次运行时,蜡烛被任意放置在不同的房间内。 其它详细要求请参见《国际灭火比赛规则2010》 三、使用到的硬件设备 机器人的硬件: (1)传感器:碰撞传感器、红外传感器、火焰传感器、 (2)控制单元:微控制器、外部存储器、复位系统和电源 (3)驱动器:直流电动机、LCD (4)灭火风扇 四、程序的思路 在机器人灭火实验中,要求机器人实现在实验场地里迅速找到蜡烛将其熄灭,在寻找过程中要避免碰撞墙壁与蜡烛,如果发现火源,启动灭火程序,灭火,没有发现火源,走迷宫,寻找火源,所以机器人必须实现以下功能: (1)由于在实验场地中,实验规定的房间内都有可能摆放蜡烛,所以机器人必须能够实现搜索所有的房间,在行走过程中不允许碰撞墙壁,而且尽可能快的搜索所有房间,不走重复的路程。在此过程中,本人采用了迷宫法则里的左手法则(左手法则:看到墙壁往右转,没看不到墙壁往左转)。 (2)机器人在行走过程中要不断的判断是否有火源;如有还要判断火源在机器人的哪个方位、离机器人的距离等。在此过程中,需要设计一个亮度检测来寻找火源。 (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) { } 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 = 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(); } } } } } void SubRoutine_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 可编辑