机器人实训总结.docx
- 文档编号:7542546
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:15
- 大小:162.19KB
机器人实训总结.docx
《机器人实训总结.docx》由会员分享,可在线阅读,更多相关《机器人实训总结.docx(15页珍藏版)》请在冰点文库上搜索。
机器人实训总结
机器人实训总结
文件编码(GHTU・UITID・GGBKT・POIU・WUUI・8968)
机器人实训总结
学院:
专业班级:
姓名学号:
指导教师:
2013年7月
为期一周的机器人实训转眼就过去了,个人认为这是我上大学以來参加的最有意思的一次课程设计了,在实训期间,同学们亲自动手组装机器人小车并通过修改调试程序使自己的小车完成要求的任务,将平时学习的C语言和单片机知识运用到了实际操作中,极大地调动了我们学习的积极性并提高了动手能力,是我们受益匪浅!
任务一:
组装小车并完成基本调试
实训第一天我们的主要任务便是将实训机器人小车按要求组装好,这看似简单的任务是极其需要耐心与细致的,每一个螺丝都要拧紧,每一个电子元件都要安装于指定位置,特別要注意左右轮的接线,如果反接将会使小年反向运行。
经过半小时的摸索,我们的小车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测才能保证其运行的准确,调零程序如下:
#includeO
ttincludeOintmain(void)
uart_Init();
printf("TheLEDconnectedtoPl_0isblinking!
\n");while
(1);
Pl_0=l;
delay_nus(1500);
Pl_0=0;
delay_nus(20000);
将程斥录入小车并运行,旋转车轮旁的旋钮直至车轮停转便达到了调零的目的。
接下来,我们便要完成实训要求的第一个程字:
控制小车LED灯的亮灭。
通过参考指导书的已有程斥,我们比较顺利的完成了该任务,任务程序如下:
(在试验中需要注意LED灯的正负极)
ttincludeOftincludeOintmain(void)
uart_Init();
printf("TheLEDconnectedtoPl_0isblinking!
\n");while(l)
Pl_0=0;
delay_nras(500);
Pl_0=l;
Pl_l=0;
delay_nras(500);
任务二:
机器人触觉导航
该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人避开障碍物。
在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近,太远会导致机器人碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影响小车正常行进。
胡须机器人避障程丿宇如下:
#includeO
ttincludeO
intPl_4state(void)//获取Pl_4的状态,右胡须
return(Pl&OxlO)1:
0;
intP2_3state(void)//获取P2_3的状态,左胡须
return(P2&0x0S)1:
0;
voidForward(void)
Pl_l=l:
delay_nus(1700);
Pl_l=0:
Pl_0=l;
delay_nus(1300);
Pl_0=0;
delay_nras(20);
voidLeftTurn(void)
inti;
for(i=l;i<=26;i++)
delay_nus(1300);
Pl_l=0;
Pl_0=l;
delay_nus(1300);
Pl_0=0;delay_nras(20);
voidRight_Turn(void)
inti;
for(i=l;i<=26;i++)
Pl_l=l;
delay_nus(1700);
Pl_l=0:
Pl_0=l;
delay_nus(1700);
Pl_0=0;delay_nras(20);
voidBackward(void)
inti;
for(i=l;i<=65:
i++)delay_nus(1300);
Pl_l=0;
Pl_0=l;
delay_nus(1700);
Pl_0=0;delay_nras(20);
intmain(void)
uart_Init();
printf("ProgramRunning!
\n");
whiled)
辻((Pl_4state()==0)&&(P2_3state()==0))
Backward();//向后Left_Turn();//向左Left_Turn();//向左
elseif(Pl_4state()==0)
Backward();//向后
Left_Turn();//向左
else辻(P2_3state()==0)
Backward();//向后
Right_Turn();//向右
else
Forward():
//向前
任务三:
机器人红外线导航
任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探
测机器人前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射
回來的红外光就可以确定前方是否有物体。
在本次任务中,我们需要使用三极管9013,这是因为C51的10驱动能力较弱,
这里我们加入三极管使其工作在开关状态。
三极管是一种控制元件,主要用來控
ttincludeOttincludeOftincludeO
^defineLeftIR
Pl_2
//左边红外接收连接到Pl_2
★defineRightIR
P3_5
//右边红外接收连接到P35
#defineLeftLaunch
Pl_3
//左边红外发射连接到Pl_3
ftdefineRightLaunch
P3_6
//右边红外发射连接到P36
voidIRLaunch(unsigned
charIR)
intcounter;
if(IR==L')
for(counter=0;counter<38;counter++)
辻(IR==R')
for(counter=0;counter<38;counter++)//右边发射
voidForward(void)//向前彳丁走子程序
delay_nus(1700);
Pl_l=0;
Pl_0=l;delay_nus(1300);
Pl_0=0;
delay_nnis(20):
voidLeft_Turn(void)//左转子程序
inti;
for(i=l;i〈=26;i++)
delay_nus(1300);
Pl_l=0;
Pl_0=l;delay_nus(1300);
Pl_0=0;
delay_nras(20);
voidRight_Turn(void)//右转子程序
inti;
for(i=l;i〈=26;i++)
delay_nus(1700);
Pl_l=0;
Pl_0=l;
delay_nus(1700);
Pl_0=0;delay_nnis(20);
voidBackward(void)//向后行走子程丿字
int1;
for(1=1;i〈=65;i++)
delay_nus(1300);
Pl_l=0;
Pl_0=l;delay_nus(1700);
Pl_0=0;delay_nras(20);
intmain(void)
intirDetectLeft,irDetectRight;uart_Init();
printf("ProgramRunning!
\n");while(l)
IRLaunch('R');//右边发射irDetectRight=RightIR;//右边接收
IRLaunch('L^);//左边发射
irDetectLeft=LeftIR:
//左边接收
辻((irDetectLeft==0)&&(irDetectRight==O))//两边同时接收
到红外线
Backward():
Left_Turn();
Left_Turn();
else辻(irDetectLeft==O)//只有左边接收到红外线
Backward();
Right_Turn();
else辻(irDetectRight==O)//只有右边接收到红外线
Backward():
Left_Turn();
else
Forward0;
任务四:
尾随小车该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:
ttincludeOftincludeO#1ncludeOintmain(void)
intcounter;if(IR==L')//左边发射
for(counter=0;counterOS;counter++)
辻(IR==R')//右边发射
for(counter=0;counter<38;counter++)
intpulseLeft,pulseRight;
intirDetectLeft,irDetectRight;uart_Init();
printf("ProgramRunning!
\n");
do
IRLaunchR');//右边发射
irDetectRight=RightIR:
//右边接收
IRLaunchCL');//左边发射irDetectLeft=LeftIR;//左边接收if((irDetectLeft==0)&&(irDetectRight==O))//向后退
pulseLeft=1300;pulseRight=1700;
else辻((irDetectLeft==O)&&(irDetectRight==l))//右转
pulseLeft=1700:
pulseRight=1700;
else辻((irDetectLeft==l)&&(irDetectRight==O))//左转
pulseLeft=1300;pulseRight=1300;
else//前进
pulseLeft=1700;pulseRight=1300;
delay_nus(pulseLeft);
P1_1=O;
P1_O=1;
delay_nus(pulseRight);
P1_O=O;
delay_nms(20);
while仃);
任务五:
机器人的距离检测
用同样的IRLED/探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵敏度的频率可以探测距离较近的物体。
这使得距离探测就简单了。
选择5个不同频率,从最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推断物体的大概位置。
测试扫描频率程序如下:
^include<>
^include<>
//ttdefineRightLaunchP3_6//右边红外发射连接到P3_6
unsignedinttime;
intleftdistance;//左边的距离
//intrightdistance;//右边的距离
intdistanceLeft,irDetectLeft;
//intdistanceRight,irDetectRight;
unsignedintfrequency[5]={29370,31230,33050,35700,38460}:
voidtimer_init(void)
定时器模式
voidFreqOut(unsignedintFreq)
time=256-(500000/Freq);//根据频率计算初值
voidTimer0_Interrupt(void)interrupt1
LeftLaunch=^LeftLaunch;//取反//RightLaunch="RightLaunch;
〃重新设值
THO=OXFF:
TLO=time:
voidGet_lr_Distances()
unsignedintcount:
for(count=0:
count<5:
count++)
FreqOut(frequency[count])
//irDetectRight=RightIR:
//右边接收//printfC"f=%d\n"\time);
printf(^^irDetectLeft=%d\n",irDetectLeft);
//printfirDetectRight=%d\n",irDetectRight);
if(irDetectLeft==1)
leftdistance++;
//if(irDetectRight==1)
//rightdistance++;
uart_Init();
printf("ProgamRunning!
\n^);
printfCFREQENCYETECTED'n");
while(l)
Get_lr_Distances():
printf("distanceLeft=%d\n",leftdistance);
//printfdistanceRight=%d\n^,rightdistance);
\n"):
printfCdelay_nras(1000);
在进行串口调试时,应注意串口的接线位置,安装符合白己电脑的串口调试助手。
任务六:
寻线搬运机器人
可能是前儿个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。
经过一天多的调试,在机器人的运行和编程中,出现了以下儿方面的问题:
一、转弯出现问题。
在一些路口中转弯出现了问题。
所以提倡用自定义转弯,提高成功率。
2.在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发生意外。
三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方案。
4.电池的电量对小车运行影响极大最好选用质量较好的电池。
5.伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。
人熟悉自己的机器人,了解一些运行、编程的小技巧。
寻线搬运机器人编程如下:
^include<>
^include<>
#1ncludeO
#defineuintunsignedint#defineucharunsignedcharucharQTIState;
voidTimel_init(void)
EA=
TM0D
SCON
1;//硬件串口使用定时器1,供AT89S52与PC机通信使用1=0x20;
=0x50;
TH1=OxFD:
TLl=OxFD:
TRI=1;
TI=1;
//定时器1方式位自动重装模式
//模式1,8位数据
//波特率为9600
//起动定时器
voidForward(void)//向前彳丁走子程序
delay_nus(1700);
Pl_l=0;
Pl_0=l;
delay_nus(1300);
Pl_0=0;delay_nras(20);
voidPivot_Left(void)//左转子程序
Pl_l=l;
delay_nus(1500);
Pl_l=0;
Pl_0=l;delay_nus(1350);
Pl_0=0;
delay_nras(20);
delay_nus(1650);
Pl_l=0;
Pl_0=l;delay_nus(1500);
Pl_0=0;delay_nras(20);
voidRotate_right(void)
delay_nus(1650);
Pl_l=0;
Pl_0=l;
delay_nus(1650);
Pl_0=0;
delay_nras(20);
voidRotate_Left(void)
delay_nus(1350);
Pl_l=0;
Pl_0=l;delay_nus(1350);
Pl_0=0;
delay_nras(20);
voidBackward(void)//向后行走子程序
Pl_l=l:
delay_nus(1300);
Pl_l=0:
Pl_0=l:
delay_nus(1700);
Pl_0=0:
delay_nms(20);
QTIState=P2&0x0e;
voidFollow_Line(void)
Get_QTI_State();switch(QTIState)
voidmain(void)
{intcounter;
Timel_init():
runok!
");
printf("program
for(counter=0;counter<350;counter++)//寻线
Follow_Line();
/*for(counter=0;counter<20;counter++)//直走
Forward0;
}*/
for(counter=0;counter<33;counter++)//左转90
Pivot_Left0;
for(counter=0;counter<65;counter++)//直走
Forward0:
for(counter=0;counter<55;counter++)//后转
Rotate_Left();
for(counter=0;counter<38;counter++)//寻线
Follow_Line();
/*for(counter=0;counter<5:
counter++)//右转调整
Pivot_Right0;
}*/
for(counter=0;counter<20;counter++)//直走
Forward0;
for(counter=0;counterOO;counter++)//寻线
Follow_Line();
for(counter=0;counter<180;counter++)//直走
Forward0;
for(counter=0;counter<180;counter++)//后彳亍
Backward0;
for(counter=0;counter<40;counter++)//左转90
Pivot_Left0;
for(counter=0;counter<80;counter++)//直走
Forward0;
for(counter=0;counter<65;counter++)//后转
Rotate_Left();
/*for(counter=0;counter<65;counter++)//寻线
Follow_Line();
}*/
for(counter=0:
counter<135:
counter++)//右转
Pivot_Right0;
for(counter=0;counter<70;counter++)//寻线
Follow_Line();
for(counter=0;counter<80;counter++)//直走
Forward0:
while(l);
这次实训是我感触很深,收获很大,作为一名大学生,我应该多学习了解一
些先进的科学技术和最新的研究理论,时刻更新丰富H己的知识,用最新的理论
指导自己的学习,使自己有更大的收获和进步,为社会多做贡献。
特别是这次实
训的形式我感觉非常好,十分符合大学应有的教学模式,作为一洛工科学生学习
很有必要。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人 总结
![提示](https://static.bingdoc.com/images/bang_tan.gif)