机器人实训总结.doc

上传人:scccc 文档编号:13958643 上传时间:2022-01-28 格式:DOC 页数:17 大小:130.50KB
返回 下载 相关 举报
机器人实训总结.doc_第1页
第1页 / 共17页
机器人实训总结.doc_第2页
第2页 / 共17页
机器人实训总结.doc_第3页
第3页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《机器人实训总结.doc》由会员分享,可在线阅读,更多相关《机器人实训总结.doc(17页珍藏版)》请在三一文库上搜索。

1、机器人实训总结学院:专业班级:姓名学号:指导教师:2013年 7月为期一周的机器人实训转眼就过去了,个人认为这是我上大学以来参加的最有意思的一次课程设计了,在实训期间,同学们亲自动手组装机器人小车并通过修改调试程序使自己的小车完成要求的任务,将平时学习的C 语言和单片机知识运用到了实际操作中,极大地调动了我们学习的积极性并提高了动手能力,是我们受益匪浅!任务一:组装小车并完成基本调试实训第一天我们的主要任务便是将实训机器人小车按要求组装好,这看似简单的任务是极其需要耐心与细致的,每一个螺丝都要拧紧,每一个电子元件都要安装于指定位置,特别要注意左右轮的接线,如果反接将会使小车反向运行。经过半小时

2、的摸索,我们的小车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测才能保证其运行的准确,调零程序如下:#include#includeint main(void)uart_Init();printf(The LED connected to P1_0 is blinking!n);while(1);P1_0=1;delay_nus(1500);P1_0=0;delay_nus(20000);将程序录入小车并运行,旋转车轮旁的旋钮直至车轮停转便达到了调零的目的。接下来,我们便要完成实训要求的

3、第一个程序:控制小车LED灯的亮灭。通过参考指导书的已有程序,我们比较顺利的完成了该任务,任务程序如下:(在试验中需要注意LED灯的正负极)#include#includeint main(void)uart_Init();printf(The LED connected to P1_0 is blinking!n);while(1)P1_0=0;P1_1=1;delay_nms(500);P1_0=1;P1_1=0;delay_nms(500);任务二:机器人触觉导航该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人避开障碍物。在安装胡须时,需要注意胡须距传感立柱既不能太远也

4、不能太近,太远会导致机器人碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影响小车正常行进。胡须机器人避障程序如下:#include#includeint P1_4state(void)/获取 P1_4的状态 , 右胡须return (P1&0x10)?1:0;int P2_3state(void)/获取 P2_3的状态 , 左胡须return (P2&0x08)?1:0;void Forward(void)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void L

5、eft_Turn(void)int i;for(i=1;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

6、_0=1;delay_nus(1700);P1_0=0;delay_nms(20);int main(void)uart_Init();printf(Program Running!n);while(1)if(P1_4state()=0)&(P2_3state()=0)Backward(); /Left_Turn();/Left_Turn();/向后向左向左else if(P1_4state()=0)Backward();/向后Left_Turn();/向左else if(P2_3state()=0)Backward();/向后Right_Turn();/向右elseForward();/向前

7、任务三:机器人红外线导航任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。在本次任务中,我们需要使用三极管9013 ,这是因为 C51 的IO 驱动能力较弱,这里我们加入三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,简单地说,是用小电流去控制大电流。红外导航避障程序如下:#include#include#include#define LeftIRP1_2/左边红外接收连接到 P1_2#define RightIRP3_5/右边红外接收连接到 P3_

8、5#define LeftLaunchP1_3/左边红外发射连接到 P1_3#define RightLaunchP3_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_(); _nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_();

9、 _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_(); _nop_();RightLaunch=0;_nop_(); _nop_(); _no

10、p_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();void Forward(void)/向前行走子程序P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void)/左转子程序int i;for( i=1;i=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay

11、_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_nus(1700);P1_0=0;delay_nms(20);int main(void)int irDetectLeft,irDetectRigh

12、t;uart_Init();printf(Program Running!n);while(1)IRLaunch(R); /右边发射irDetectRight = RightIR;/右边接收IRLaunch(L); /左边发射irDetectLeft = LeftIR;/左边接收if(irDetectLeft=0)&(irDetectRight=0)/两边同时接收到红外线Backward();Left_Turn();Left_Turn();else if(irDetectLeft=0)/只有左边接收到红外线Backward();Right_Turn();else if(irDetectRigh

13、t=0)/只有右边接收到红外线Backward();Left_Turn();elseForward();任务四:尾随小车该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:#include#include#include#define LeftIRP1_2/左边红外接收连接到 P1_2#define RightIRP3_5/右边红外接收连接到 P3_5#define LeftLaunch P1_3/左边红外发射连接到 P1_3#define RightLaunch P3_6/右边红外发射连接到 P3_6void IRLaunch(unsigned char IR)int counter

14、;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_(); _nop_(); _nop_(); _nop_();if(IR=R)/右边发

15、射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_(); _nop_(); _nop_();int main(void)int pulse

16、Left,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;pulseRight=1700;else if(irDetectLeft=0)&(irDetectRight=1)/右转pulseL

17、eft=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);任务五:机器人的距离检测用同样的 IR LED/ 探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵敏度的频率可以探测距离较近

18、的物体。这使得距离探测就简单了。选择5个不同频率,从最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推断物体的大概位置。测试扫描频率程序如下:#include #include #define LeftIRP1_2/ 左边红外接受连接到 P1_2/#define RightIRP3_5/ 右边红外接收连接到 P3_5#define LeftLaunchP1_3/ 左边红外发射连接到 P1_3/#define RightLaunch P3_6/ 右边红外发射连接到 P3_6unsigned int time;int leftdistance;/左边的距离/int

19、rightdistance;/右边的距离int distanceLeft, irDetectLeft;/int distanceRight,irDetectRight;unsigned int frequency5=29370,31230,33050,35700,38460;void timer_init(void)IE=0x82;/ 开总中断 EA,允许定时器 0中断 ET0TMOD |= 0X01;/ 定时器 0工作在模式 1:16位定时器模式void FreqOut(unsigned int Freq)time = 256 - (500000/Freq); /根据频率计算初值TH0 =

20、0XFF;/ 高八位设 FFTL0 = time;/ 低八位根据公式计算TR0 = 1;/ 启动定时器delay_nus(800);/ 延时TR0 = 0;/ 停止定时器void Timer0_Interrupt(void) interrupt 1LeftLaunch = LeftLaunch;/ 取反/RightLaunch= RightLaunch;TH0 = 0XFF;/ 重新设值TL0 = time;void Get_lr_Distances()unsigned int count;leftdistance = 0;/rightdistance = 0;for(count = 0;co

21、unt5;count+)FreqOut(frequencycount);irDetectLeft = LeftIR;/irDetectRight = RightIR;初始化左边的距离/ 初始化右边的距离左边接收/ 右边接收/printf(f=%dn,time);printf(irDetectLeft = %dn,irDetectLeft);/printf( irDetectRight = %dn ,irDetectRight);if(irDetectLeft = 1)leftdistance+;/if (irDetectRight = 1)/rightdistance+;int main(vo

22、id)uart_Init();timer_init();printf(Progam Running!n);printf(FREQENCY ETECTEDn);while(1)Get_lr_Distances();printf(distanceLeft = %dn,leftdistance);/printf( distanceRight=%dn,rightdistance);printf(-n);delay_nms(1000);在进行串口调试时,应注意串口的接线位置,安装符合自己电脑的串口调试助手。任务六:寻线搬运机器人可能是前几个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任务

23、再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。经过一天多的调试,在机器人的运行和编程中,出现了以下几方面的问题:一、转弯出现问题。在一些路口中转弯出现了问题。所以提倡用自定义转弯,提高成功率。二、在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发生意外。三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方案。四、电池的电量对小车运行影响极大最好选用质量较好的电池。五、伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。六、熟悉自己的机器人,了解一些运行、编程的小技巧。寻线搬运机器人编程如下:#include #include #inclu

24、de#define uint unsigned int#define uchar unsigned charuchar QTIState ;void Time1_init(void)EA = 1;/硬件串口使用定时器 1, 供AT89S52与PC机通信使用TMOD |= 0x20;/定时器 1方式 2.8 位自动重装模式SCON = 0x50;/模式 1, 8位数据TH1 = 0xFD;/波特率为 9600TL1 = 0xFD;TR1 = 1;/起动定时器TI=1;void Forward(void)/向前行走子程序P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;de

25、lay_nus(1300);P1_0=0;delay_nms(20);void Pivot_Left(void)/左转子程序P1_1=1;delay_nus(1500);P1_1=0;P1_0=1;delay_nus(1350);P1_0=0;delay_nms(20);void Pivot_Right(void)/右转子程序P1_1=1;delay_nus(1650);P1_1=0;P1_0=1;delay_nus(1500);P1_0=0;delay_nms(20);void Rotate_right(void)P1_1=1;delay_nus(1650);P1_1=0;P1_0=1;de

26、lay_nus(1650);P1_0=0;delay_nms(20);void Rotate_Left(void)P1_1=1;delay_nus(1350);P1_1=0;P1_0=1;delay_nus(1350);P1_0=0;delay_nms(20);void Backward(void) /向后行走子程序P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Get_QTI_State(void)QTIState = P2&0x0e ;void Follow_Line(void)G

27、et_QTI_State();switch(QTIState)case 0x04 : Forward();break;case 0x06 : Pivot_Right();break;case 0x02 : Rotate_right();break;case 0x0c : Pivot_Left();break;case 0x08 : Rotate_Left();break;/*case 0x0e : Forward();break;*/default :break;void main(void)int counter;Time1_init();printf(program run ok!);fo

28、r(counter=0;counter350;counter+)/寻线Follow_Line();/*for(counter=0;counter20;counter+)/直走Forward();*/for(counter=0;counter33;counter+)/左转 90Pivot_Left();for(counter=0;counter65;counter+)/直走Forward();for(counter=0;counter55;counter+)/后转Rotate_Left();for(counter=0;counter38;counter+)/寻线Follow_Line();/*f

29、or(counter=0;counter5;counter+)/右转调整Pivot_Right();*/for(counter=0;counter20;counter+)/直走Forward();for(counter=0;counter30;counter+)/寻线Follow_Line();for(counter=0;counter180;counter+)/直走Forward();for(counter=0;counter180;counter+)/后行Backward();for(counter=0;counter40;counter+)/左转 90Pivot_Left();for(c

30、ounter=0;counter80;counter+)/直走Forward();for(counter=0;counter65;counter+)/后转Rotate_Left();/*for(counter=0;counter65;counter+)/寻线Follow_Line();*/for(counter=0;counter135;counter+)/右转Pivot_Right();for(counter=0;counter70;counter+)/寻线Follow_Line();for(counter=0;counter80;counter+)/直走Forward();while(1);这次实训是我感触很深,收获很大,作为一名大学生,我应该多学习了解一些先进的科学技术和最新的研究理论,时刻更新丰富自己的知识,用最新的理论指导自己的学习,使自己有更大的收获和进步,为社会多做贡献。特别是这次实训的形式我感觉非常好,十分符合大学应有的教学模式,作为一名工科学生学习很有必要。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1