宝贝车机器人实习报告西北农林科技大学.docx
《宝贝车机器人实习报告西北农林科技大学.docx》由会员分享,可在线阅读,更多相关《宝贝车机器人实习报告西北农林科技大学.docx(38页珍藏版)》请在冰豆网上搜索。
宝贝车机器人实习报告西北农林科技大学
宝贝车机器人实习报告
实习任务:
宝贝车机器人
时间:
2010.7.5-2010.7.23地点:
工程训练中心201
一、实习目的、任务及要求
1.1实习目的
①通过训练,了解一个完整的、可以运动的机器人应由那几部分组成。
理解每一个机器人都是根据特定要求而设计的,设计的第一步就是将使用要求分析清楚,确定设计时需要考虑的参数,包括:
机器人的运动路径、定位精度,重复定位精度、任务执行参数等。
②了解目前机器人的能量供给的各种形式,掌握控制部分和执行部分的供电方式。
③理解机器人的运动系统的构成及其原理。
④了解机器人探测周边环境的传感器有那些,掌握传感器的信号如何传送给单片机的。
⑤理解机器人是如何根据传感器的信息做出决策。
⑥掌握机器人如何运动,并且了解机器人运动的其它方法。
⑦理解机器人与用户交换信息的各种方法。
⑧通过训练,学会独立完成开发一个基于单片机控制的机电系统。
⑨尽可能的在组装好的宝贝机器人上实现不同情况的开发。
⑩培养团队协作和独立工作能力。
1.2实习任务及要求
①熟悉宝贝机器人的组成部分,组装并测试好宝贝机器人。
②宝贝机器人的前进、后退单方向行走距离不小于10米,可以左转弯、右转弯,并在允许范围内可调节速度。
③陈述清楚宝贝机器人如何实现运动。
④掌握宝贝机器人的控制部分和运动部分的供电方式,并画出这两部分的电路示意图。
⑤理清宝贝机器人的人机交互关系,陈述清楚宝贝机器人如何实现人机交互(通过串口调试软件实现人机交互)。
⑥陈述清楚宝贝机器人有那些传感器,传感器的信息是如何传送到单片机的。
⑦完成宝贝机器人的触觉导航、光敏电阻导航、红外线导航、距离检测这四个任务,并陈述清楚其原理。
⑧能在实验中迅速排除各种故障。
⑨鼓励创新,在完成前八个任务的前提下,尽量能做出新的开发,如果现有硬件条件不满足,可以陈述清楚创新原理。
二、实习准备
2.1实验设备
硬件:
PC机一台、AT89S52型单片机、机器人组件、ISP下载电缆、串口线、电池
软件:
KeiluVision4IDE集成开发环境、SL-ISP软件下载工具、串口调试软件
2.2机器人的组装和软件的安装及初步应用
2.2.1组装宝贝车机器人
“龙人宝贝”是由许多部件组成的一款机器人,在使用及编程控制其运动之前,首先要进行组装,步骤如下:
(1)安装机器人底盘硬件
零件列表:
宝贝车底盘、螺柱、盘头螺钉、13/32英寸的橡胶圈
1.将13/32英寸的橡胶套圈插到宝贝车底盘中心的孔内,确保底盘中心孔的边缘嵌在橡胶圈的凹槽中;
2.用4个螺钉将螺柱固定在底盘上。
(2)拆除伺服喉,将电机安装在底盘上
零件列表:
宝贝车底盘(已部分组装好)、连续旋转电机、螺钉3/8英寸4-40、
螺母4-40
1.用螺钉和螺母将电机固定在底盘上,为了最好性能,需从里面将电机放入底盘。
由于底盘空间小,螺钉也小,所以螺丝起子不容易进去,螺钉的安装需要有一定的耐心;
2.用标签纸表示左右电机轮。
(3)安装电池盒和轮子
零件列表:
宝贝车底盘、平头螺钉3/8英寸4-40、螺母4-40、带有插头的电池盒、开口销、球状尾轮、橡皮圈、塑胶轮子
1.安装电池盒比较简单,注意的就是在将电源线和伺服电机线穿过橡胶圈的孔时,由于两条线的接头比较大,可先将橡胶圈取出便于穿出,当线穿过之后再将橡胶圈安在底盘的空上;
2.安装尾轮,用开口销作为轴,穿过底盘左侧、尾轮、底盘右侧的孔,将球状尾轮固定在底盘上,并将开口销的一端弯曲;安装驱动轮,只要将两个轮子有凹槽的一面压在输出轴上,并用螺钉固定即可,注意给轮子安橡胶圈时,为了便于安装将橡胶圈可裁窄一些。
(4)安装教学底板
零件列表:
宝贝车机器人底盘、平头螺钉、带控制器的教学板
1.连接伺服电机到教学底板上的电机接口处;
2.将贴着“L”的插头接到PC3端口,贴着“R”的插头连接到PC2端口。
对于新版的“龙人宝贝”在一块底板上有两块芯片AVR和C51,我们选择了比较熟悉的C51单片机,将贴着“L”的插头接到P1.0端口,贴着“R”的插头连接到P1.1端口;
3.将主板放在四个支架上使其与四个孔对齐,确保面包板接近驱动轮而不是尾轮;
4.用平头螺钉连接主板和支架;
5.整理伺服电机线和电池线,放到合适的位置。
2.2.2安装软件及其初步应用
本次实验需要用到3款软件:
KeiluVision4IDE集成开发环境、SL-ISP下载软件、串口调试软件。
以安装KeiluVision4为例简述安装步骤:
1.执行KeiluVision4安装程序,选择EvalVersion版进行安装;
2.在后续出现的窗口中全部选择Next按钮,将程序默认安装在C:
\ProgramFiles\Keil;
3.将光盘“头文件”文件夹的文件复制到C:
\ProgramFiles\Keil\C51\INC文件夹里(注意一定要是C51文件夹里的头文件,否则在创建程序时就会出现失败)。
4.其他软件安装类似。
在软件安装好以后,应有串口的连接和ISP下载线的连接,以实现编程和交互。
KeiluVision4软件的使用:
启动KeiluVision4→Project→NewProject→在文件名中输入“001”,保存在想保存的位置→选择AT89S52,确定→选择不加载“否”→单击新建按钮,将编号的程序写入→保存001.c在项目文件夹→在目标工程项目中,右键“SourceGroup1”→单击AddFilestoGroupSourceGroup1→Add→右键Target1→选择Optionfortarget‘Target1’→单击output,选择CreateHEXFi:
→确定→运行,没有错误即创建成功→文件名为001.hex,这个文件就是将来可以烧录到C51单片机中的可执行程序。
ISP的使用:
选择下载软件,本书使用并口LPT1,选择下载速度为TURBO模式,下载速度最快,单片机型号选择AT89S52。
单击Flash按钮,选择要下载的可执行hex文件----001.hex,选择后单击编程开始下载,如果是第二次下载程序,先选中擦除复选框。
此软件是指用户把已编译好的程序代码通过一条“下载线”直接写入到器件的编程(烧录)方法已经编程的器件也可以用ISP方式擦除或再编程。
串口调试软件的使用:
打开串口调试终端,选择COM1后单击“打开串口”,在程序运行时,在接收区就会看到单片机向PC发出的信息。
此软件用来显示单片机与计算机的交互信息,在硬件上要有串行接口或USB接口来与单片机教学板的串口连接。
三、实习任务
3.1伺服电机的控制
3.1.1单片机的输出测试
在做实验之前,先了解一下具有彩色环带的电阻阻值如何确定,可以用欧姆表来测量比较简单,再没有欧姆表的条件下,可以通过如下方法识别:
首先不同颜色的含义为黑0棕1红2橙3黄4绿5蓝6紫7灰8白9,及金银无色的含义,然后是环带的个数的含义,这里只针对五环电阻,前三位代表数值,第四环代表倍率乘数,第五环是容差,例如五环电阻为红黄白银棕,银代表的倍率为1/100,棕代表容差为1%,故为249×1/100=2.49欧,±1%,利用这种方法可以一一分辨出所给电阻的阻值。
单片机的输出测试是通过控制单灯闪烁实现的根据图1搭建LED电路:
图1
通过编程控制单灯闪烁、两灯同时闪烁和两灯交替闪烁,以及其闪烁的时间,只要让两个LED灯分别接到P1_0和P1_1,电路连接方式相同,通过对P1_0和P1_1赋值,并改变delay_nms(time)即可实现以上各种控制,例如两灯交替闪烁,间隔时间为1s,程序如下:
#include//头文件
#include//头文件
intmain(void)
{uart_Init();//初始化串口
printf("TheLEDconnectedtoP1_0isblinking!
\n");//通过串口调试软件
while
(1)
{P1_0=1;//P1_0输出高电平
P1_1=0;//P1_1输出低电平
delay_nms(500);//延时500ms
P1_0=0;//P1_0输出低电平
P1_1=1;//P1_1输出高电平
delay_nms(500);}//延时500ms
3.1.2伺服电机的标定
在测试控制伺服电机转速的信号之前,一定要对伺服电机标定(调零),其程序如下:
●对右轮标定
#include
#include
intmain(void)
{uart_Init();//初始化串口
printf("TheLEDconnectedtoP1_0isblinking!
\n");
while
(1)
{P1_0=1;//P1_0输出高电平
delay_nus(1500);//延时1.5ms
P1_0=0;//P1_0输出低电平
delay_nms(20);//延时20ms
}
}
此程序使左轮静止不动,如果左轮缓慢动,应用起子对其调整,具体步骤:
将教学底板上的三位开关扳到2,调整底盘下边伺服电机的调零螺钉,调整时要缓慢,直到标定的轮子静止不动。
●对左轮标定
#include
#include
intmain(void)
{uart_Init();//初始化串口
printf("TheLEDconnectedtoP1_0isblinking!
\n");
while
(1)
{P1_1=1;//P1_1输出高电平
delay_nus(1500);//延时1.5ms
P1_1=0;//P1_1输出低电平
delay_nms(20);//延时20ms
}
}
此程序使右轮静止不动,如果右轮缓慢转动,同样应用起子对其调整,具体步骤同左轮的标定。
遇到的问题及解决办法:
分别标定两个伺服电机比较浪费时间,可以将两个程序写在一起,同时对左右电机进行标定,可节省时间。
3.1.3对电机控制信号的测试
控制电机的速度的是高电平持续时间,当高电平持续时间为1.3ms时,电机顺时针全速旋转,当高电平持续时间1.7ms时,电机逆时针全速旋转
注意的问题:
顺时针和逆时针是从所测试的轮子的外面轴向看过去的旋转方向。
●图2为电机转速为0的控制信号时序
图2
●图3为1.3ms的控制脉冲序列使电机顺时针全速旋转
图3
●图4为1.7ms的控制脉冲序列使电机逆时针全速旋转
图4
心得体会:
电机转动方向及速度的调节可以通过改变delay_nus();括号中数值来实现调节。
实际测试小车时,合理的速度及左右轮方向的配合可以使小车行走时更可靠,这需要反复调试程序。
3.2机器人巡航控制
3.2.1基本巡航动作
这个任务主要是改变机器人的前进方向,实现向前、向左、向右、向后、原地转、绕支点转,并结合上一任务循环次数的控制来控制运动时间。
机器人的转向问题无非是通过控制机器人的两个轮子逆时针、顺时针旋转来实现。
表1说明了机器人在标定电机后在不同脉冲序列的情况下的运动形式。
表1
左轮
右轮
转向
P1_1=1;delay_nus(1700);P1_1=0;delay_nms(20);
左轮逆时针转
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
右轮顺时针
前进(全速)
P1_1=1;delay_nus(1300);P1_1=0;delay_nms(20);
左轮顺时针转
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);
右轮逆时针
后退(全速)
P1_1=1;delay_nus(1300);P1_1=0;delay_nms(20);
左轮顺时针转
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
右轮顺时针
双轮左转
P1_1=1;delay_nus(1700);P1_1=0;delay_nms(20);
左轮逆时针转
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);
右轮逆时针
双轮右转
P1_1=1;delay_nus(1500);P1_1=0;delay_nms(20);
左轮停止
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
右轮顺时针
以左轮为支点左转
P1_1=1;delay_nus(1700);P1_1=0;delay_nms(20);
左轮逆时针
P1_0=1;
delay_nus(1500);
P1_0=0;
delay_nms(20);
右轮停止
以右轮为支点右转
注意:
伺服电机的控制线连接在教学板的单片机上,通过给单片机控制器编程,使单片机的P1端口的第一引脚P1_1和第二引脚P1_1来发出伺服电机的控制信号,控制信号通过控制线来控制左右伺服电机的转动,从而实现机器人以不同的速度及方向运动。
3.3机器人触觉导航
3.3.1连接触觉导航电路并测试
零件列表:
金属丝2根、平头M3×22盘头螺钉2个、13mm圆形立柱2个、M3尼龙垫圈2个、3-pin公-公接头2个、220欧电阻2个、10k欧电阻2个
安装步骤:
1.拆掉连接主板到前支架的两颗螺钉;
2.螺钉依次穿过尼龙垫圈和圆形立柱;
3.把须状金属丝的其中一个勾在尼龙垫圈之上,另一个勾在尼龙垫圈之下,调整位置使他们横向交叉但又不接触;
4.拧紧螺钉到支架上。
按照图5搭建电路:
图5触须电路原理图
电路原理:
由原理图可知,每条胡须都是一个常开开关。
连接到每个胡须电路的I/O引脚监视着10k上拉电阻上的电压变化。
当胡须没有被触动时,连接胡须的I/O管脚的电压是5V,当胡须被触动,I/O短接到地,所以I/O管脚的电压是0V。
单片机可以读入相应的数据,进行分析、处理、控制机器人运动。
在进行胡须测试之前需将串口电缆连接好,需用到调试终端以显示左右胡须状态,调用相关程序进行测试。
3.3.2胡须导航
两个胡须状态有三种,需分情况讨论,需用到if语句。
程序中应用的子程序(Ox代表十六进制数):
●获取P1_3的状态,即左胡须
intP1_3state(void)
{return(P1&0x08)?
1:
0;}
●获取P1_2的状态,即右胡须
intP1_2state(void)
{return(P2&0x04)?
1:
0;}
●向前子程序
voidForward(void)
●左转子程序
voidLeft_Turn(void)
●右转子程序
voidRight_Turn(void)
●后退子程序
voidBackward(void)
●循迹左转
voidLeft_Turnsmall(void)
●循迹右转
voidRight_Turnsmall(void)
●左拐180度
voidLeft_Turn180(void)
●右拐180度
voidRight_Turn180(void)
●小幅度左拐
voidLeft_Turn111(void)
●小幅度右拐
voidRight_Turn111(void)
●停车
voidStop_car(void)
注:
子程序中的左右转和后退可以设定一个变量,用来代表循环次数,然后只需在主程序中更改变量的值即可实现左右转角度的改变及后退距离的改变,程序更容易修改。
说明:
左胡须接引脚P1_3,右胡须接引脚P1_2,在机器人的运动过程中,当左右胡须同时触到障碍物时,两个引脚输入全为0,此时通过调用相应函数Backward();Left_Turn();Left_Turn();实现后退并转180度;当只有左胡须触到障碍物时,P1_4输入为0,此时调用函数Backward();Right_Turn();实现向后并向右转;当只有右胡须触到障碍物时,P2_3输入为0,此时调用函数Backward();Left_Turn();实现向后并向左转。
函数调用的过程中其实是通过连接在单片机引脚上的两个伺服电机控制线,向伺服电机发送不同的脉冲序列,从而实现电机的不同运动。
3.4红外线导航
清单列表:
两个红外探测器、两个IRLED、四个470欧电阻、两个9013三极管
3.4.1红外导航电路图及其工作原理
按照图6建立电路图:
图6
电路工作原理:
在连接三极管时注意三极管的管脚分别属于什么极,由电路可以看出,三极管相当于一个开关:
当P1_3(P3_6)置高时,从集电区到基区到发射区电路导通,加载在IRLED上的电压为VCC,IRLED向外发射红外线,当P1_3(P3_6)置低时,电路又断开,IRLED停止发射。
探测器只能接收频率为38.5kHz的红外信号,当没有红外信号返回时,探测器的输出状态为高,当它检测到被物体反射的38.5kHz的红外信号时,它的输出为低。
探测器的输出作为单片机引脚的输入,根据单片机两个引脚不同的输入,通过伺服电机控制线分别向伺服电机发送不同的脉冲序列,从而控制伺服电机的不同运动。
发送完信号后立即将IR探测器的输出存储到变量中,这些存储的值会显示在调试终端或被机器人用来导航。
3.4.2探测和避开障碍物
红外探测与触须的输出非常相像,没有检测到物体时,输出为高,检测到物体时,输出为低。
根据左右探测器接收到红外线的情况可以分情况讨论其运动形式。
注意:
为了使IRLED发射红外线的频率更精确,可采用空函数_nop_(void),它能延迟1us,减少了由于调用延时函数产生的延时。
程序中应用到的子程序:
●IRLED发射红外线子程序
IRLaunch(‘L’);左边发射
IRLaunch(‘R’);右边发射
●向前行走子程序
Forward(void);
●左转子程序
Left_Turn(void);
●右转子程序
Right_Turn(void);
●后退子程序
Backward(void);
红外探测程序流程图如下:
图7
说明:
通过调用IRLED红外发射器和探测器子程序打开发射器和探测器,在机器人运动过程中,当两个探测器同时探测到障碍物时,通过给伺服电机发送相应的脉冲,使机器人后退并转180度;当左边探测器检测到障碍物时,通过给伺服电机发送右转的脉冲,使其向右转;当机器人右边探测器检测到障碍物时,通过给伺服电机发送向左的脉冲,使其左转。
即可实现红外线导航。
3.5光敏电阻导航
3.5.1光敏电阻工作原理
光敏电阻又称光导管,它几乎都是用半导体材料制成的光电器件。
光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也可以加交流电压。
无光照时,光敏电阻值(暗电阻)很大,电路中电流(暗电流)很小。
当光敏电阻受到一定波长范围的光照时,它的阻值(亮电阻)急剧减少,电路中电流迅速增大。
一般希望暗电阻越大越好,亮电阻越小越好,此时光敏电阻的灵敏度高。
3.5.2光敏电阻应用导航
基于光敏电阻的工作原理,可以将其应用于机器人的导航,如下电路图:
●分压电路如图8:
R为光敏电阻,光敏电阻在受到光照时,电阻会减小,则R上的分压减小,V0增大,当大于1.5V时为高电平;当没有光照时,光敏电阻阻值很大,R上分压也大,V0减小,当小于1.5V时为低电平。
●光检测电路如图9:
P1_5、P2_3为与光敏电阻连接的引脚,当在空白有光处,光敏电阻阻值很小,与之所连接的引脚为高电平;当遇到阴影处,光敏电阻阻值很大,与之连接的引脚为低电平。
根据引脚的高低电平可以避开阴影区从而实现光敏电阻导航。
图8图9
心得:
实际应用时光敏电阻距离路线图距离需要反复调节达到最优距离,使检测更精确,因为有时候程序是完全正确的,可能会因为检测信号的不稳定使小车不能完成预定任务。
四、机器人走迷宫
4.1硬件准备
在走迷宫之前首先应该确定四个传感器OUT1、OUT2、OUT3、OUT4与P1_4、P1_5、P1_6、P1_7引脚如何对应,最终选择四个传感器OUT1、OUT2、OUT3、OUT4分别对应C51单片机的P1口的4、5、6、7位。
这样选的原因:
因为从左到右的四个传感器正好对应P1口由低到高的四个位,便于识别,调试程序方便。
4.2校园游迷宫
4.2.1原理
此次实验的最终结果是完成机器人成功走出预设的迷宫,迷宫中有许多路口:
T字路口、十字路口、直角,还设有许多障碍物,这需要机器人能够识别路径,避开障碍物,完成左转、右转、前进、后退,并能成功回到起点。
这需要编程实现控制,使机器人始终沿着黑色路成功完成任务。
具体如下:
1、宝贝车的底盘前下方安装四个红外传感,有发射器和探测器,通过从地表反射回来的红外线探测路况,当传感器下方是白色时,红外线反射给探测器,则与此探测器连接的引脚输出为低电平0;当传感器下方是黑色时,红外线被吸收,探测器接收不到红外光,则于此探测器连接的引脚输出为高电平1。
通过编程实现机器人沿着黑色胶带路运动,而不会跑到外边。
2、让机器人避开障碍物,采用触须导航即可实现,将触须导航电路连接,设置程序使之成功避开。
4.2.2程序分析
迷宫程序中所用到的子程序:
●右触须状态检测子程序
intP1_2state(void)
{return(P1&0x04)?
1:
0;}
●左触须状态检测子程序
intP1_3state(void)
{return(P1&0x08)?
1:
0;}
●机器人底盘下边的四个探测器的状态检测
intP1_4state(void)//p1_4-P1_7四个传感器
{
return(P1&0x10)?
1:
0;
}
intP1_5state(void)
{
return(P1&0x20)?
1:
0;
}
intP1_6state(void)
{
return(P1&0x40)?
1:
0;
}
intP1_7state(void)
{
return(P1&0x80)?
1:
0;
}
●前进
voidForward(void)
●小左拐
voidLeft_Turn111(void)
●小右拐
voidRight_Turn111(void)
●左拐180度
voidLeft_Turn180(void)
●右拐180度
voidRight_Turn180(void)
●小向前子程序(脉冲为2)
Forward_small(ints)
注:
通过改变s变量的值,可以实现不同向前距离的改变。
●双轮左转弯90度
Left_Turn(void)
●循迹左转
Left_Turnsmall(void)
●双轮右转90度
Right_Turn(void)
●循迹右转
Right_Turnsmall(void)
●后退子程序
Backward(void)
●停止子程序
Stop_car(void)
●碰到十字路口选择转向子程序
Choice(void)
迷宫程序流程图10:
图10
说明:
为了流程图能看的清楚,判断