基于C51单片机智能机器人触觉导航系统设计
2015-05-15雷道仲
雷道仲
(湖南信息职业技术学院,湖南长沙,410200)
1 触须传感器
机完成机器人导航功能,直流伺服电机是机器人的行走系统,完成各种行走动作。
触觉传感器工作原理非常简单,其的等效电路原理图如图2中虚线所示[2]。传感器在扑捉或感知外界信息是靠其装在传感器外面的触须来完成,图中的“右触须”、“左触须”实际上就是两个带触须的触觉型开关,当它们平时没有触碰到实物时,它们处于常开状态;将它们一端连接到单片机的I/O控制端口上(图中P3.2/P3.3),则对应的端口呈现出高电平状态;当胡须触碰到物体时,与它联动的开关因受力而闭合,从而拉低对应的单片机端口引脚电平,单片机则通过判断对应引脚电平的高低来间接感知外部事件(触须触碰到障碍物)是否发生。
图1 机器人触觉导航系统构成框图
2 系统设计方案
系统主要由单片机AT89C51、触觉传感器、直流伺服电机、供电电路等组成,其系构成框图如图1所示。其中单片机是整个系统的控制核心,用来接收触觉传感器传回来的外界信息,并根据信息情况作出相应决策;控制伺服电机作出相应动作,如:前进、后退或左、右转弯等。触觉传感器用来感知外界障碍物,配合单片
基金项目:湖南教育厅科学研究项目(No.12C1176)
3 硬件电路设计
3.1 机器人触觉导航系统电路设计
3.2 电路工作原理
如图2所示的电路工作过程如下:电路通电后,单片机P2.0与P2.1输出伺服电机的控制信号,从而引导机器人朝前行走,同时单片机P3.2、P3.3端口负责收集左、右触觉传感器采集到的信号,当左、右传感器没有碰到障碍物时,P3.2=P3.3=1;当某个时刻,左触须碰到障碍物,P3.2=0;则进入相应左避障子程序,如:后退——右转等,完成避障;右触须工作过程跟左触须类似。如同时检测到P3.2=P3.3=0;则先后退——再掉头往反方向走,完成避障和导航功能。
4 软件系统设计
4.1 机器人触觉导航系统程序设计
机器人触觉导航系统程序设计思路如下,51单片机的两个端口P3.2和P3.3分别负责对左、右触觉传感器触须进行监控,当机器人前进过程中左前方有障碍物时,左边的触须碰到这个障碍物时,P3.2引脚电平会变成低电平,程序会立刻转至左避障函数中去执行,只要我们在左避障函数中合理设置相关避障函数,如:后退——右转——再前进等,便可以成功避开障碍,完成机器人导航。右触须程序设计思路与此类似,右触须被端口P3.3所监控,整个系统主程序流程图如图3所示。
图2 机器人触觉导航系统电路
5 系统测试
5.1 触觉传感器测试
根据图2所示的系统硬件电路原理图,焊接好电路控制板,并将触觉传感器的两个触须安装在单片机P3.2与P3.3端口上。检查供电正常后,开机运行。将数字万用表打至直流20V档,黑表笔接地,红表笔触碰单片机P3.2引脚,如果此时触觉传感器的触须没有碰到障碍物时,万用表在P3.2引脚应该检测到一个接近5V左右的高电平;触须碰到障碍物则万用表应该检测到接近0V的低电平;如果没有检测到相应的电平,则说明触觉传感器未能正常工作。则应逐步仔细排查电路,直至触觉传感器正常工作为止。
5.2 系统整体调试
根据机器人触觉导航系统程序设计思路,在KEIL C中编写、编译完成相应程序代码,将产生的可执行文件烧写到单片机程序存储器,开机运行机器人,我们发现机器人在触觉传感器的引导下能够很好规避正前方障碍物,实现机器人导航功能。但如果机器人进入到90度的墙角时,我们发现机器人总是左触须触墙,于是右转,向前行走,右触须触墙,于是左转,继续前进,又碰到左墙,再次碰到右墙……,如果不是你把它从墙角拿出来,它将会一直困在墙角里而出不来。要解决这个问题,需要运用一些编程策略对程序中作一些修改。
基本思路是先判断前方障碍物是不是墙角,如果确认是墙角,那么就让小车作一个U形转弯,即掉头逃离墙角,如果不是墙角,则按一般避障功能便可以解决。
图3 主程序流程图
判断机器人进入90度墙角的方法[1]:如果函数P3_2state()返回0,函数P3_3state()返回1;当触须碰到右墙时,函数P3_2state()返回1,函数P3_3state()返回0;由此可推测,若前方障碍物是90度墙角,那么这两个函数返回的值彼此不相等,而且各自前后两次返回的值也不相等,我们可以在程序中设两个变量用来记录两个触须前一次触动的旧状态,再与两个触须的当前状态进行对比,如果前后两次的状态交替出现,就用一个变量作为计数器记录交替的次数,若交替总数超过了程序中预先设定的阀值,就可以认定前方的障碍物是墙角,那么就编程让小车作一个U形转弯,掉头逃离墙角,同时将记录交替次数的计数器变量复位,下面具体运用这种思路修改的主函数,使智能机器人能够逃离墙角,修改后的主函数如下:
void main(void)
{
uchar counter=1; //触须碰撞总次数
uchar old_R=1; //右触须旧状态
uchar old_L=0; //左触须旧状态
while(1)
{
if(P3_2state()!=P3_3state())
{
if((old_R!=P3_3state())&&(old_L!=P3_2state()))
{
counter=counter+1;
old_R=P3_2state();
old_L=P3_3state();
if(counter>4)
{
counter=1;
Backward();//向后
Left_Turn();//向左
Left_Turn();//向左
}
}
else
{按主程序流程图避障}
6 结束语
实践表明,运用触觉传感器设计出的智能机器人导航系统能够很好地规避正前方的障碍物,从而引导机器人完成导航功能;并且,触觉传感器具有价格低、易于控制等优点,因此,它是机器人或智能玩具中设计避障、导航功能的不二选择。
参考文献
[1] 秦志强等编著.C51单片机应用与C语言程序设计[M].北京:电子工业出版社.,2007
[2] 谭立新,雷道仲等编著.单片机技术及应用[M].长沙:中南大学出版社.2013
[3] 宋雪丽,王虎林,王毅.基于单片机的寻迹机器人的系统设计[J].仪表技术.2009(04)
[4] 王东峰,王会良,董冠强编著.单片机C语言应用100例[M].电子工业出版社2009年3月