关于颜色识别机器人的研究
“关于颜色识别机器人的研究”
设计说明
--2013X00022
院(系、部): 信息
学院
姓 名: 刘吉祥 蔺军效 陈晓露
高翔 黎玲萍
指导教师: 王淑鸿
月 26 日?北京 2013年 9
I
目 录
一、小车研究的背景和目的 .......................................................... III 二、智能小车简介 ......................................... 错误~未定义书签。 三、总体
及论证 ..................................... 错误~未定义书签。 四、系统整体流程图 ..................................... 错误~未定义书签。 五、硬件清单 ................................................................................... X 六、搬运智能小车的实用价值 ...................................................... XI 七、总结与体会 .............................................................................. XI 附录 程序代码 ............................................. 错误~未定义书签。
II
一、智能搬运小车研究的背景和目的:
随着科技发展,现代社会越来越趋近于智能化,人力劳动需要大幅度的解放出来,把一些重复的动作及操作交给机器去做,而机器在使用过程中变得越来越智能化,能实现更繁杂的任务,
运货是各个行业不可或缺的过程,人工运货随着经济的快速发展,不能完全满足市场的需求。世界上许多国家都在积极进行智能车辆的研究和开发设计。移动机器人是机器人学中的一个重要分支,出现于20世纪60年代。当时斯坦福研究院的Nils Nilssen和charles Rosen等人,在1966年至1972年中研制出了取名shakey的自主式移动机器人,目的是将人工智能技术应用在复杂环境下,完成机器人系统的自主推理、规划和控制。从此,移动机器人从无到有,数量不断增多,智能车辆作为移动机器人的一个重要分支也得到越来越多的关注。
基于颜色传感器的智能搬运小车可以安装不同的末端以完成各种不同形状和状态的工件搬运工作,自主识别颜色,可分类搬运,大大减轻了人类繁重的体力劳动,具有广阔的市场前景。
二、智能小车简介
本智能车由open公司提供的龙人宝贝机器人套间搭建,,主要的控制器为at89s52,此单片机已固定在开发板上了,开发板上提供了一片面包板,能实现所需要的电路连接。驱动轮的驱动动力来自两个
III
舵机,用pwm控制较为简单易行,主要的执行部件为右端的加持装置。机器由下图的可充电锂电池供电。
本项目中的智能小车通过四个颜色传感器
不同颜色的木块,然后单片机对小车的行为发出控制指令,不仅能将木块搬运到指定的位置,还可以自己识别颜色,对应颜色放置。
本项目中的智能搬运机器人基于at89s52单片机为微控制器,以颜色传感器为主要传感器,以舵机实现运转,在这样的系统下,智能机器人能够完成一些具有重复性的任务。
小车整体造型如下图
IV
三、总体方案及论证
3.1、小车功能
此智能小车希望能够可以自动识别颜色抓取货物,循迹行进,将货物搬运到对应颜色的位置。
3.2、搬运小车调试
本项目中所用舵机的调零点为1500,也就是说1500的脉冲刚好使小车动起来,那么要让小车前进,就需要给左边的舵机1300的脉冲,右边的舵机1700的脉冲。此时小车全速前行。要让小车左转,则是给左右舵机都给1700的脉冲,同理,右转时给左右舵机都是1300
V
的脉冲,后退时所给的脉冲都为1300。小车在没有人为干涉的情况下完成跟踪黑线的任务
3.3、QTI传感器完成追踪黑线的能力
Qti为光电传感器,在检测到黑线时返回数字1,在检测到白色的时候返回值为0。
根据qti传感器的返回值的16种组合基本可以确定小车处于地图的位置,藉此来确定小车下一步的任务。在白色背景中有一条黑色的线,小车就是要沿着这条黑线行走,通过判断反射式光电传感器所接收到的反射光来判断小车所应行走的方向。以三个反射式光电传感器为例进行说明循线的原理。光电传感器与黑线位置关系示意图如下图所示。
光电传感器与黑线位置关系示意图
VI
VII
循迹
否是否到达取物
处停止
是
是否到达卸货
处
夹取货物
抬起机械臂3.4、颜色传感器的识别
智能小车下面安装了4个QTI传感器作为巡线来识别路线。在大
于木块的高度放了一个架子作为安放颜色传感器的装置,首先由QTI后退
传感器识别路线,按照程序中所说的顺序进行巡线,当到达木块摆放
的地方时,颜色传感器识别颜色确定此颜色的摆放位置,然后确定路
线,到达指定位置是小车将退回原点。
掉头
3.5、具体设计:
VIII
循迹
否
是
停止
放下货物
松开货物
后退
掉头
整个系统包括单片机控制模块、电机驱动模块、颜色传感器模块、光电传感器、机械手模块、模拟电源模块、小车车体。将单片机控制模块,驱动模块固定在小车上端;颜色传感器和光电传感器安装在小车底部;将机械手安装在小车上部的前端;车架结构选择铝板。
四、系统整体流程图及软件设计
4.1、整体流程图
整体流程图
4.2系统软件设计
采用PWM(Pulse Width Modulation,脉冲宽度调制)来调节直 流电机的速度。PWM是通过控制固定电压的直流电源开关频率,从而改
IX
变负载两端的电压,进而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。
安装完颜色传感器调节白光平衡,由于白光是等量的红光,蓝光等的组合体,平衡时红、蓝、绿等的强度大小应为相等,当小车即将搬运的货物为红色,红色光值大小应该改变,应大于平衡时的大小,单片机则识别出货物是红色。同理,其他颜色也是如此识别。 五、硬件清单
元件 数量 规格 其他
实验板 1 Qti传感器 4 光电 带信号传输线 颜色传感器 1 夹持装置 1
舵机 2 调零脉冲1500
电池 2 龙人宝贝车身 1
电池盒 1
跳线 若干 Isp
线 1
X
六、智能小车的实用价值
本智能小车主要是为了锻炼我们的编程能力及动手能力,其在工业控制上的体现主要是自动化控制,在无人操作的地方,能够自主识别自主控制的智能小车往往是解决问题的最佳思路。
七、总结与体会
通过这次机器人大赛,我们学会了很多,收获很大,首先我们学会了使用51单片机并能用它完成一些比较简单的工业控制。其次我们明白了面对困难时能积极动脑,共同合作来解决问题、克服困难的重要性。同时也使我们对机器人的机械扩展、电子扩展、传感器扩展以及程序控制有了一个全新的认识。
附录
#include "uart2.h"
#define LED P1_3
sbit s0 = P2^1; sbit s1 = P2^2;
sbit s2 = P2^3;
sbit s3 = P2^4;
long int green=0,red=0,blue=0; //RGB颜色初始化
/**********************RGB比例系数***************************/
/****************通过白平衡得出的时间比例系数*************/ #define pred 143
#define pgreen 100
#define pblue 67
int disp_tc; //计数标志
void yanse();
void zhizou();
XI
/***************************led测试 闪烁3次
****************************/
void test_led()
{
uchar i;
for(i=0;i<3;i++)
{
LED=0;
delay_nms(200);
LED=1;
delay_nms(200);
}
LED=0;
}
/***************************计数器初始化****************************/
void t0_init()
{
TMOD=0x51;//设置定时器0为工作方式一
TH0 =0xfc;
TL0 =0x66;//如果晶振是11.0592MHZ的话,误差是0.00017%
EA=1;
ET0=1;
TR0=1;
TR1=1;
}
/************************10ms中断子程序 *******************/
void c1ms_out() interrupt 1//定时器0 1ms中断响应 {
TR0=0;
TR1=0;
disp_tc=disp_tc+1; //计数值加一
TH0=0xfc;
TL0=0x66+TL0; //加定时器补偿
TR0=1;
TR1=1;
}
XII
/*****************************主控制程序****************************/
void main()
{
/*test_led(); //测试led
delay_nms(80); //延时 等待串口调试工具
LED=1; //打开led
s0=1; s1=1;
t0_init();
Time2_init(); */
while(1)
{
yanse();
}
}
/*****************************颜色识别****************************/
void yanse()
{
disp_tc=0;
s2=0;
s3=1;
while(disp_tc!=pblue);
TR0=0;
TR1=0;
blue=TH1*256+TL1;
TL1=0x00;
TH1=0x00;
disp_tc=0;
TR0=1;
TR1=1;
//选择绿色滤光
s2=1;
s3=1;
while(disp_tc!=pgreen);
TR0=0;
TR1=0;
green=TH1*256+TL1;
TL1=0x00;
XIII
TH1=0x00;
disp_tc=0;
TR0=1;
TR1=1;
//选择红色滤光
s2=0;
s3=0;
while(disp_tc!=pred);
TR0=0;
TR1=0;
red=TH1*256+TL1;
TL1=0x00;
TH1=0x00;
disp_tc=0;
//关闭定时计数器,只为显示。
delay_nms(200);
TR0=1;
TR1=1; }
XIV