智能机器人红外导航.doc

上传人:豆**** 文档编号:17624753 上传时间:2022-05-25 格式:DOC 页数:8 大小:135.50KB
返回 下载 相关 举报
智能机器人红外导航.doc_第1页
第1页 / 共8页
智能机器人红外导航.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《智能机器人红外导航.doc》由会员分享,可在线阅读,更多相关《智能机器人红外导航.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流智能机器人红外导航.精品文档.智能机器人红外线导航 论 文 学院名称 :电子信息工程技术 专业班级 :电信11301 学生姓名 : 马倩倩 学 号 : 11010763 指导教师 : 杨杰 目录一、 引言.1 二搭建并测试IR发射和探测器. .2 三探测和避开障碍物.6 四高性能的IR 导航.8 五俯视的探测器.10 六总结 . .12 参考文献 . .13一 引言许多机器人使用雷达(RADAR)或者声纳(SONAR)来探测物体而不需要同物体接触。本文的方法是使用红外光来照射机器人前进的路线,然后确定何时有光线从被探测目标反射回来,通过检测反

2、射回来的红外光就可以确定前方是否有物体。由于红外遥控技术的发展,现在红外线发射器和接收器已经很普及并且价格很便宜。机器人上建立的红外光探测物体系统在许多方面就象汽车的前灯系统。当汽车前灯射出的光从障碍物体反射回来时,人的眼睛就发现了障碍物体,然后大脑处理这些信息,并据此控制身体动作驾驶汽车。机器人使用红外线二极管LED作为前灯。红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。机器人的大脑单片机AT89S52基于这个传感器的输入控制伺服电机。红外线(IR)接收/检测器有内

3、置的光滤波器,除了需要检测的980 nm波长的红外线外,它几乎不允许其它光通过。二搭建红外线前灯1.电路板的每个角安装一个IR组(IR LED和检测器)。断开主板和伺服系统的电源建立图5-3所示的电路,可参考实物图5-42. 程序#include#includeint P1_2state(void)return (P1&0x04)?1:0;int main(void)int counter;int irDetectLeft;uart_Init();printf(Program Running!n);while(1)for(counter=0;counter38;counter+)P1_3=1;

4、delay_nus(13);P1_3=0;delay_nus(13);三 探测和避开障碍物1. 没有检测到物体时,输出为高;检测到物体时,输出为低。本任务中,更改程序RoamingWithWhiskers.c使它适用于IR检测器。2. 程序#include#include#include#define LeftIR P1_2 /左边红外接收连接到P1_2#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3#define RightLaunch P3_6 /右边红外发射连接到P3_6void IRLau

5、nch(unsigned char IR)int counter;if(IR=L) /左边发射for(counter=0;counter38;counter+) /发射时间比胡须长LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_()

6、; _nop_(); _nop_(); _nop_();if(IR=R) /右边发射for(counter=0;counter38;counter+)RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();RightLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _n

7、op_(); _nop_();void Forward(void) /向前行走子程序P1_1=1;delay_nus(1700);P1_1=0;Left_Turn();else if(irDetectLeft=0)/只有左边接收到红外线Backward();Right_Turn();else if(irDetectRight=0)/只有右边接收到红外线Backward();Left_Turn();elseForward();P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void) /左转子程序int i;for( i=1;

8、i=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void) /右转子程序int i;for( i=1;i=26;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void) /向后行走子程序int i;for( i=1;i=65;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay

9、_nus(1700);P1_0=0;delay_nms(20);int main(void)int irDetectLeft,irDetectRight;uart_Init();printf(Program Running!n);while(1)IRLaunch(R); /右边发射irDetectRight = RightIR;/右边接收IRLaunch(L); /左边发射irDetectLeft = LeftIR;/左边接收if(irDetectLeft=0)&(irDetectRight=0)/两边同时接收到红外线Backward();Left_Turn();四 高性能的IR导航1.探测障

10、碍物很重要的一点是在机器人撞到它之前给机器人留有绕开它的空间。如果前方有障碍物,机器人会使用脉冲命令避开,然后探测,如果物体还在,再使用另一个脉冲来避开它。机器人能持续使用电机驱动脉冲和探测,直到它绕开障碍物,然后它会继续发向前行走的脉冲。2. 程序与注释:#include#include#include#define LeftIR P1_2 /左边红外接收连接到P1_2#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3#define RightLaunch P3_6 /右边红外发射连接到P3_6v

11、oid IRLaunch(unsigned char IR)int counter;if(IR=L) /左边发射C51 单片机与智能机器人77for(counter=0;counter38;counter+)LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _n

12、op_(); _nop_(); _nop_(); _nop_(); _nop_();if(IR=R) /右边发射for(counter=0;counter38;counter+)/右边发射RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();RightLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _

13、nop_(); _nop_(); _nop_(); _nop_();int main(void)int pulseLeft,pulseRight;int irDetectLeft,irDetectRight;uart_Init();printf(Program Running!n);doIRLaunch(R); /右边发射irDetectRight = RightIR;/右边接收IRLaunch(L); /左边发射irDetectLeft = LeftIR;/左边接收if(irDetectLeft=0)&(irDetectRight=0)/向后退pulseLeft=1300;pulseRigh

14、t=1700;else if(irDetectLeft=0)&(irDetectRight=1)/右转pulseLeft=1700;pulseRight=1700;else if(irDetectLeft=1)&(irDetectRight=0)/左转pulseLeft=1300;pulseRight=1300;else /前进pulseLeft=1700;pulseRight=1300;P1_1=1;delay_nus(pulseLeft);P1_1=0;P1_0=1;delay_nus(pulseRight);P1_0=0;delay_nms(20);while(1);五 俯视的探测器1.

15、到目前为止,当机器人探测到前面有障碍物时,主要使机器人做避让动作。也有一些场合,当没有检测到障碍物时,机器人也必需采取避让动作。例如,如果机器人在桌子上行走,IR检测器向下监测桌子表面。只要IR探测器都能够“看”到桌子表面,程序会使机器人继续向前走。换句话说,只要行走的桌子表面能够被检测到,机器人就会继续向前走。编程使机器人在桌面行走而不会走到桌边,只需修改程序FastIrRoaming.c中的ifelse语句。主要的修改是,当irDetectLeft 和 irDetectRight的值都是0时,表明在桌子表面检测到物体(桌面),机器人向前行走。机器人也会从一个检测器的那边避开,当这个检测器表

16、明它没有发现物体(桌面)时。例如,如果irDetectLeft的值是1,机器人会向右转。避开边沿程序的第二个特征是可调整的距离。机器人在检查两个检测器之间只响应一个向前的脉冲,但是只要发现边沿,在下一次检测之前希望它响应几个对转动有利的脉冲。在躲避的动作中使用了几个脉冲,它并不意味着必须返回到触须式的导航。相反,可以增加变量pulseCount来设置传输给机器人的脉冲数。一个向前的脉冲,pulseCount可以是1;10个左的脉冲,pulseCount可以设为10,等等。2. 程序及注释:#include#include#include#define LeftIR P1_2 /左边红外接收连接

17、到P1_2#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3#define RightLaunch P3_6 /右边红外发射连接到P3_6void IRLaunch(unsigned char IR)int counter;if(IR=L)/左边发射for(counter=0;counter38;counter+)LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _

18、nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();if(IR=R)/右边发射for(counter=0;counter38;counter+)RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_()

19、; _nop_();RightLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();int main(void)int i,pulseCount;int pulseLeft,pulseRight;int irDetectLeft,irDetectRight;uart_Init();printf(Program Running!n);doIRLaunch(R); /右边发射irDetectRight = RightIR;

20、/右边接收IRLaunch(L); /左边发射irDetectLeft = LeftIR; /左边接收if(irDetectLeft=0)&(irDetectRight=0) /向前走pulseCount=1;pulseLeft=1700;pulseRight=1300;else if(irDetectLeft=1)&(irDetectRight=0) /右转pulseCount=10;pulseLeft=1300;pulseRight=1300;else if(irDetectLeft=0)&(irDetectRight=1) /左转pulseCount=10;pulseLeft=1700;

21、pulseRight=1700;else /后退pulseCount=15;pulseLeft=1300;pulseRight=1700;for(i=0;ipulseCount;i+)P1_1=1;delay_nus(pulseLeft);P1_1=0;P1_0=1;delay_nus(pulseRight);P1_0=0;delay_nms(20);while(1);六 总结学习了智能控制与学习设计这门课,是我的动手能力得到进一步加强。另外,在不断的努力与尝试之中,我对c51单片机的编程环境有了更深一步的认识,编写程序对我而言还有些难度,希望在以后的环境中有更好地提高。参考文献 1谭浩强:C语言程序设计, 清华大学出版社,2008。 2夏光蔚:智能控制与程序设计, 武汉职业技术学院校内教材, 2010。3程军:传感器技术与应用,西安电子科技大学出版社,2008。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁