智能工程训练报告迷宫机器人文档格式.docx
《智能工程训练报告迷宫机器人文档格式.docx》由会员分享,可在线阅读,更多相关《智能工程训练报告迷宫机器人文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
附录:
……………………………………………………………………………13
附录1:
参考文献…………………………………………………………13
附录2:
程序源码及注释…………………………………………………13
视频连接:
一、课程在教学计划中的地位和作用
《智能系统工程训练》课程是智能科学与技术专业方向本科生必修的一门专业实践课程。
通过该课程的学习,使得学生能够对智能系统的开发工具、智能搜索策略、智能机器人的工作原理有所了解。
为了使智能系统工程训练目标更明确,要求更具体,学生收获更大,我们采用竞赛制的方式组织本年度的工程训练。
共设两个实际科目的竞赛项目,学生根据本人的爱好任选其中一个课题,自由组队,以团队形式完成课题,并参加最终的竞赛。
要求写出工程训练设计报告书,设计出原理图,说明工作原理,编写程序及程序流程图。
希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完成智能系统工程训练。
智能技术的发展日新月异,因此,学习这方面的知识必须紧密联系实际:
掌握这方面的知识更要强调解决实际问题的能力。
同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。
二、课程设计选题
(1)选题:
运用所学知识,基于实验室的相关硬件设备,设计并编程实现一个迷宫机器人(实物)。
(2)实验目的:
进一步熟悉和掌握搭建机器人的方法,选择合适的传感器进行障碍检测;
设计机器人行走策略,能够快速通过迷宫。
(3)竞赛形式:
由裁判组设计实物迷宫,并设计考核评分方案;
所有竞赛组通过统一的迷宫(赛前提供参考迷宫地形,比赛当天布置新迷宫),以通过时间、碰撞次数等指标进行考核评分。
三、系统主要模块和功能
根据此次课程设计的课题要求,我们将系统分为以下两个部分:
(一)硬件部分
1、运动载体----宝贝车
宝贝车由一个车架、两个360°
连续舵机以及尾部球形轮组成,实物图如下:
图3.1.1宝贝车实物图
2、控制电路板
本设计采用AT89S52单片机作为控制芯片。
好处:
编程方便,控制简单,有多个I/O口,可同时对多个传感器采集的数据进行读取和对两个360°
连续舵机的控制。
我们设计的小车上的控制电路板实物图见下图:
图3.1.2控制电路模块
3、传感器
一个正常人不可能一直闭着眼睛行走,同样,机器人在迷宫中行走必须借助传感器来获取环境的信息。
综合控制算法设计方面需求以及我们实验值器材供应的情况,我们选择使用红外壁障传感器。
我们使用的是3-50cm可调E18-D50NK红外避障传感器,如图3.1.3所示。
图3.1.3E18-D50NK红外避障传感器
具体参数如下:
红外壁障传感器E18的技术参数:
1、输出电流DC/SCR/继电器Controloutput:
100mA/5V供电
2、消耗电流DC<
25mA
3、响应时间<
2ms
4、指向角:
≤15°
有效距离3-50CM可调
5、检测物体:
透明或不透明体
6、工作环境温度:
-25℃~+55℃
7、标准检测物体:
太阳光10000LX以下白炽灯3000LX以下
8、外壳材料:
塑料
电气特性:
U:
5VDC
I:
100mA
Sn:
3-50CM
4、传感器的安装及迷宫机器人的整体硬件设计如下图所示
图3.1.4硬件整体布局图
(二)程序控制部分
1、迷宫机器人如何走出迷宫的算法设计
对于初次进入迷宫的机器人来说当前的路径都是未知的,机器人为走出迷宫首先进行盲目搜索,我们采用深度优先的算法作为机器人在迷宫中行走路线选择的标准。
程序设计流程如图3.2.1:
图3.2.1程序设计流程图
2、对舵机的控制
舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
其工作原理是:
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。
它(舵机)内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。
最后,电压差的正负输出到电机驱动芯片决定电机的正反转。
当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。
一般舵机的控制要求如
图3.2.2所示。
图3.2.2舵机的控制要求
单片机系统实现对舵机输出转角的控制,需要完成两个任务:
首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;
其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。
当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。
这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高
下面是一个用AT89S52对舵机实现控制是一个小程序:
要求,单片机控制舵机,让舵机到中间位置后,左转15度,延迟2ms,右转15度。
(度数不要求精确)。
舵机为0.5~2.5ms。
晶振11.0592M
#include<
reg52.h>
unsignedintpwm;
unsignedcharflag;
sbitp10=P1^0;
voidtimer0()interrupt1using1
{
p10=!
p10;
pwm=20000-pwm;
TH0=pwm/256;
TL0=pwm%256;
flag++;
if(flag<
10)flag++;
if(flag==10&
&
p10==0){pwm=1250;
flag=11;
}//保证回到90度再左转15;
}
voidtimer1()interrupt3using1
ET1=0;
//2ms到关闭定时器1
ET0=0;
TR0=0;
pwm=1750;
ET0=1;
TR0=1;
}
voidint0(void)interrupt0using1
//判断左转到15,通过传感器判断或者其他信号判断,能正好保证刚左转15度,开始延时2ms
TR1=1;
//定时器1开始计数
voidmain(void)
p10=1;
TMOD=0x11;
pwm=1500;
//回90度
TH1=2000/256;
TL1=2000%256;
EA=1;
ET1=1;
while
(1);
3、岔道控制程序列举:
/*======================================================================
右转部分
========================================================================*/
if((key_H==0&
key_L==0&
key_R==1)|(key_H==0&
key_L==1&
key_R==1)|(key_H==1&
key_R==1))//右转
{
delay1ms(9);
if((key_H==0&
delay1ms(9);
key_R==1))//再次右转
{
RDJ=20-LDJ;
ET1=0;
TR1=0;
delay1ms(610);
//600
ET1=1;
TR1=1;
delay1ms(500);
}
}
/*=======================================================================
直道部分
if((key_H==1&
key_R==0)|(key_H==1&
key_R==0))//走直道
delay1ms(9);
if((key_H==1&
{
delay1ms(9);
if((key_H==1&
key_R==0))//再次确定走直道
RDJ=20-LDJ;
delay1ms(100);
//勿动
}
左转部分
if(key_H==0&
key_R==0)//左转
if(key_H==0&
key_R==0)//再次左转
ET0=0;
TR0=0;
delay1ms(640);
ET0=1;
TR0=1;
进入死胡同部分
key_R==0)//死胡同,原地旋转180°
{
delay1ms(18);
delay1ms(108);
key_R==0)
RDJ=LDJ;
delay1ms(580);
RDJ=20-LDJ;
delay1ms(500);
4、系统框图如下所示:
图3.4系统框图
在实际运动中,利用红外接近传感器实现对墙体的感应,产生相应的高低电平并输出至控制模块,由控制模块对信号进行相应的分析,并通过路径规划算法确定行进路线,最后由驱动模块控制小车做出相应的运动。
四、结束语
根据本次智能系统工程的设计要求,我们小组系统地阅读了大量的资料,认真分析了设计课题的需求,并且系统学习了AT89S52单片机的工作原理及其使用方法。
以实验室提供的硬件设备为基础,我们系统的进行了多次试验,结合课题任务和机器人硬件进行了程序的编制,本系统基本能够满足设计要求,能够较快较平稳的使小车避开障碍物、寻找路径、走出迷宫
本次课题设计,不仅是对我们课本所学知识的考查,更是对我们的自学能力和收集资料能力以及动手能力的考验。
本次设计使我们对一个项目的整体设计有了初步认识,从硬件到软件,以及传感器的接入,提升了我们对智能系统的认识与掌握。
当然,在处理硬件接口和软件调试的过程中,出现过些问题,但是在大家的努力下最后都能够比较好的解决。
总之,在此次智能系统工程训练的过程中,无论是对于过去学习过的智能控制方法或是其他一些相关知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践动手能力。
附录1:
参考文献
[1].蔡自兴.《智能控制导论》.中国水利水电出版社.2007年5月1日
[2].郭天祥.《单片机原理及应用》
附录2:
程序源码及注释
REG52.h>
#defineuint8unsignedchar
#defineuint16unsignedint
sbitkey_H=P2^0;
sbitkey_L=P2^1;
sbitkey_R=P2^2;
//PWM的输出端口
sbitPWM_OUT0=P0^0;
sbitPWM_OUT1=P0^1;
//PWM的数据值
uint16PWM_Value0[]={500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500};
uint16PWM_Value1[]={500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500};
uint8order1;
//定时器扫描序列
//uint8dangwei=0;
//舵机转速档位
uint8LDJ;
//左舵机参数设定
uint8RDJ;
//右舵机参数设定
uint8zfz;
//控制舵机正反转
/*=============================================================================
定时器T0的中断服务程序
=============================================================================*/
voidtimer0(void)interrupt1using1
switch(order1)
case1:
PWM_OUT0=1;
TH0=-PWM_Value0[LDJ]/256;
TL0=-PWM_Value0[LDJ]%256;
break;
case2:
PWM_OUT0=0;
TH0=-(20000-PWM_Value0[LDJ])/256;
TL0=-(20000-PWM_Value0[LDJ])%256;
order1=0;
default:
order1++;
/*============================================================================
定时器T1的中断服务程序
voidtimer1(void)interrupt3
{
switch(order1)
PWM_OUT1=1;
TH1=-PWM_Value1[RDJ]/256;
TL1=-PWM_Value1[RDJ]%256;
break;
case2:
PWM_OUT1=0;
TH1=-(20000-PWM_Value1[RDJ])/256;
TL1=-(20000-PWM_Value1[RDJ])%256;
初始化中断
voidInitPWM(void)
order1=1;
TMOD|=0x11;
TH0=-1500/256;
TL0=-1500%256;
TH1=-1500/256;
TL1=-1500%256;
EX0=0;
ET1=1;
PT0=1;
PT1=1;
PX0=0;
voiddelay1ms(unsignedintms)//1ms延时函数
unsignedinti;
while(ms--)
for(i=0;
i<
115;
i++)
{;
uint8ydxz;
LDJ=0;
InitPWM();
while
(1)
{
/*============================================================================
右转部分
直道部分
/*================================================