机器人实训总结_第1页
机器人实训总结_第2页
机器人实训总结_第3页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

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

2、的摸索,我们的小车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测才能保证其运行的准确,调零程序如下:#include<BoeBot.h>#include<uart.h>int 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<BoeBot.h>#include<uart.h>int 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

4、_nms(500);任务二:机器人触觉导航该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人避开障碍物。在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近,太远会导致机器人碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影响小车正常行进。胡须机器人避障程序如下:#include<BoeBot.h>#include<uart.h>int P1_4state(void)/获取 P1_4的状态 , 右胡须return (P1&0x10)?1:0;int P2_3state(void)/获取 P2_3的状态 , 左胡须r

5、eturn (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 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_nms(20);void Right_Turn(void)int i;for(i=1;i<=26;i+)P1_1=1;delay_nus(

6、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)uart_Init();printf("Program Running!n");while(1)if(P1_4state()=0)&&(P2_3state()=0)Backward()

7、; /Left_Turn();/Left_Turn();/向后向左向左else if(P1_4state()=0)Backward();/向后Left_Turn();/向左else if(P2_3state()=0)Backward();/向后Right_Turn();/向右elseForward();/向前任务三:机器人红外线导航任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。在本次任务中,我们需要使用三极管9013 ,这是因为 C51 的IO 驱动能力较弱,这里我们

8、加入三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,简单地说,是用小电流去控制大电流。红外导航避障程序如下:#include<BoeBot.h>#include<uart.h>#include<intrins.h>#define LeftIRP1_2/左边红外接收连接到 P1_2#define RightIRP3_5/右边红外接收连接到 P3_5#define LeftLaunchP1_3/左边红外发射连接到 P1_3#define RightLaunchP3_6/右边红外发射连接到 P3_6void IRLaunch(unsigned

9、 char IR)int counter;if(IR='L')for(counter=0;counter<38;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_(); _n

10、op_(); _nop_();if(IR='R')for(counter=0;counter<38;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_(); _

11、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_nms(20);void Right_Turn(void)/右转子程序int i;for( i=1;i<=26;i+)P1_

12、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,irDetectRight;uart_Init();printf("Program Running!n");while(

13、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(irDetectRight=0)/只有右边接收到红外线Ba

14、ckward();Left_Turn();elseForward();任务四:尾随小车该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:#include<BoeBot.h>#include<uart.h>#include<intrins.h>#define LeftIRP1_2/左边红外接收连接到 P1_2#define RightIRP3_5/右边红外接收连接到 P3_5#define LeftLaunch P1_3/左边红外发射连接到 P1_3#define RightLaunch P3_6/右边红外发射连接到 P3_6void IRLaunc

15、h(unsigned char IR)int counter;if(IR='L')/左边发射for(counter=0;counter<38;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_(); _no

16、p_(); _nop_(); _nop_(); _nop_();if(IR='R')/右边发射for(counter=0;counter<38;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_();

17、_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)&&(ir

18、DetectRight=0)/向后退pulseLeft=1300;pulseRight=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;de

19、lay_nus(pulseRight);P1_0=0;delay_nms(20);while(1);任务五:机器人的距离检测用同样的 IR LED/ 探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵敏度的频率可以探测距离较近的物体。这使得距离探测就简单了。选择5个不同频率,从最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推断物体的大概位置。测试扫描频率程序如下:#include <BoeBot.h>#include <uart.h>#define LeftIRP1_2/ 左边红外接受连接到 P1_2/#define Right

20、IRP3_5/ 右边红外接收连接到 P3_5#define LeftLaunchP1_3/ 左边红外发射连接到 P1_3/#define RightLaunch P3_6/ 右边红外发射连接到 P3_6unsigned int time;int leftdistance;/左边的距离/int rightdistance;/右边的距离int distanceLeft, irDetectLeft;/int distanceRight,irDetectRight;unsigned int frequency5=29370,31230,33050,35700,38460;void timer_init

21、(void)IE=0x82;/ 开总中断 EA,允许定时器 0中断 ET0TMOD |= 0X01;/ 定时器 0工作在模式 1:16位定时器模式void FreqOut(unsigned int Freq)time = 256 - (500000/Freq); /根据频率计算初值TH0 = 0XFF;/ 高八位设 FFTL0 = time;/ 低八位根据公式计算TR0 = 1;/ 启动定时器delay_nus(800);/ 延时TR0 = 0;/ 停止定时器void Timer0_Interrupt(void) interrupt 1LeftLaunch = LeftLaunch;/ 取反/

22、RightLaunch= RightLaunch;TH0 = 0XFF;/ 重新设值TL0 = time;void Get_lr_Distances()unsigned int count;leftdistance = 0;/rightdistance = 0;for(count = 0;count<5;count+)FreqOut(frequencycount);irDetectLeft = LeftIR;/irDetectRight = RightIR;初始化左边的距离/ 初始化右边的距离左边接收/ 右边接收/printf("f=%dn",time);printf

23、("irDetectLeft = %dn",irDetectLeft);/printf(" irDetectRight = %dn ",irDetectRight);if(irDetectLeft = 1)leftdistance+;/if (irDetectRight = 1)/rightdistance+;int main(void)uart_Init();timer_init();printf("Progam Running!n");printf("FREQENCY ETECTEDn");while(1)Ge

24、t_lr_Distances();printf("distanceLeft = %dn",leftdistance);/printf(" distanceRight=%dn",rightdistance);printf("-n");delay_nms(1000);在进行串口调试时,应注意串口的接线位置,安装符合自己电脑的串口调试助手。任务六:寻线搬运机器人可能是前几个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。经过一天多的调试,在机器人的运行和编程中,出现了

25、以下几方面的问题:一、转弯出现问题。在一些路口中转弯出现了问题。所以提倡用自定义转弯,提高成功率。二、在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发生意外。三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方案。四、电池的电量对小车运行影响极大最好选用质量较好的电池。五、伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。六、熟悉自己的机器人,了解一些运行、编程的小技巧。寻线搬运机器人编程如下:#include <AT89X52.h>#include <stdio.h>#include<BoeBot.h>#de

26、fine 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;delay_n

27、us(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;delay_n

28、us(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)Ge

29、t_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!");for(counter=0;counter<350;counter+)/寻线Follow_Line();/*for(counter=0;counter<20;counter+)/直走Forward();*/for(counter=0;counter<33

温馨提示

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

评论

0/150

提交评论