一种机器人的寻迹算法
0赞摘要:针对基于光电传感器组寻迹的自动导引机器人,设计了传感器阵列的布置方式。根据此布置方式,提出了三个处理规则结合而成的轨迹识别算法。即使在导引线复杂的情况下,用此算法也能得出行进方向,控制机器人沿轨迹运动。甚至遇到干扰走错时,机器人也能自动纠错。
关键词:机器人,寻迹算法,规则
1引言
近年来,机器人的发展遍及机械、电子、冶金、交通、宇航、国防等领域,机器人的智能水平不断提高。在自主式智能导航系统中,机器人要实现自动导引功能就必须要感知导引线,即常说的“寻迹”,这相当于给机器人一个视觉功能。
笔者所设计的机器人是一个自动导引小车(AGV),包括两大部分:一是行进方向的检测处理;二是步进电机的驱动。
在该系统里,采用与地面颜色有较大差别的线条作引导,使用传感器感知导引线,用单片机AT89C52扫描光电传感器组,对采集到的信号进行分析处理并做出逻辑判断后,得到行进方向,然后根据一定的步数去驱动步进电机,实现机器人的循迹行进。
小车的驱动采用步进电机,因为步进电机具有快速起停能力,且转换精度高,正反转控制灵活。
小车的驱动采用步进电机,因为步进电机具有快速起停能力,且转换精度高,正反转控制灵活。
2硬件电路
采用AT89C52单片机作为控制核心对光电传感器送来的各种信号进行分析处理,以控制机器人的方向和驱动及数据显示等,如图1所示。
为了检测黑色导引线,笔者采用了8个光电传感器组成的矩阵组。如图2所示,相对于小车底盘的中心,我们布置了内外两层各4个传感器。每层4个传感器对应着中心的4个方向:前、后、左前、右前。可采用扫描方式分两次得到各行数据。
图1 硬件框图
图2 光电传感器矩阵组
导引线检测的具体电路如图3所示。此处采用的是TCRT1000反射式红外光电传感器。以第1行第1列的光电传感器为例,其工作原理是这样的:P1 .0输出低电平时,三极管A1015导通,光电传感器工作,TCRT1000的发射端发出不可见的红外光。当反射物由非黑色导引线变为黑色导引线时,光电三极管的基极接受不到反射光,从而光敏三极管由导通变为截止,使得集电极电压由低电平变为高电平,经过74LS14反相器反相整形,输出值由逻辑1变为逻辑0后,送入单片机中进行进一步处理。
值得指出的是在此处PNP三极管A1015的使用。此处如果选用NPN三极管,则在开机或复位时P1口各位输出高电平会误扫描传感器矩阵,而选用PNP三极管就可以避免这种情况,能很好的控制光电传感器的工作,并可以增加驱动能力。
图3 光电传感器寻迹电路图
3寻迹
单片机控制寻迹的原理是这样的:第一步,通过矩阵式扫描,即给光电传感器矩阵分别输入两个“1”信号的行值,将输出的4个列值信号分别存入两个地址(如30H、31H)的低4位,低4位从高到低分别对应着4个方向:前、后、左前、右前。然后用“F0”与这八位做“或”逻辑运算,即屏蔽掉高四位后作为本次的信号值;第二步,将本次的信号值与上一次扫描处理后的信号值进行逻辑处理,得出一个新方向,作为机器人行进的方向。
在这个程序里,逻辑处理内外层得到新方向是寻迹的关键。笔者在其中按先后步骤使用了3种规则:
前后比较规则,内外层切换规则,优先级规则。
(1)前后比较规则
此规则是这个算法的核心规则。它的目的是尽可能的用新探测到的黑点作为新方向。新方向F通过
(1)
来求得。(其中为本次的信号值,为前次的信号值)逻辑处理前“0”表示黑线轨迹,逻辑处理后“1”表示轨迹行进方向。举例如下:以内层为例,设当前测得的值为
且前一次测得的值为
经过上述(1)逻辑处理后,假设结果为
则正前方是行进的新方向。
(2)内外层切换规则
如果光电传感器组前后两次所检测的值完全一样,则在逻辑处理后会出现全零,这时保持原方向行进。如果碰到曲线拐弯或者曲线断续,则有可能出现多个“1”即多个方向,这时可采用“内外层切换规则”,也就是说从内层切换到外层,启用外层扫描值重复上述前后比较规则来进行判断。启用外层信号进行二次判断能很好的处理曲线拐弯及曲线断续等内层处理不好的情况。但用外层信号判断,因为其传感器布置的间隙距离比内层大,其控制精度不如用内层信号判断高。
DATADEAL:MOV A, 30H
XRL A, 32H
ANL A, 32H ;按(1)式求新向
MOV 36H, A ;保存
MOV R3, #8
MOV R4, #0
COUNT: JB ACC.0, ADDN
COUNT1: RR A
DJNZ R3, COUNT
CJNE R4, #1H, JUDGE ;R4里所含不是1个“1”时,
;转“JUDGE”再判断
AJMP MOTORRUN ;R4里只有一个“1”时,以此
;“1”所代表的方向作为新方向
ADDN: INC R4
AJMP COUNT1
JUDGE: JC KEEPMOVE ;少于一个“1”,保持原方向
AJMP OUTCHECK ;多于一个“1”,则取用外层
……
MOTORRUN:…… ;电机驱动子程序
KEEPMOVE:…… ;保持原运动状态子程序
OUTCHECK:…… ;取用外层信号值判断子程序
4执行
导引机器人的驱动方式采用一驱动轮一转向轮方式:将后轮作为驱动轮,前轮作为转向轮,通过切换转向轮向左或向右的方式改变机器人的方向。这种方式与汽车的控制方式一样,直线行进性能好,可以高速移动。从1个步进脉冲对应的行进路程,可以预算出应给步进电机发出的脉冲数。预定的行进路程以小于内层传感器间隙距离的1/2为宜,这样可以保证机器人位置测量的连续性和方向识别的准确性。单片机AT89C52根据其逻辑处理出来的方向,调用步进电机的驱动程序即可实现机器人循迹连续运动的功能。
5结束语
笔者在做好硬件部分的基础上,根据上述思路编制了程序进行了实验。实验中笔者采用了与底色有较大差异的黑色胶带作导引线,胶带宽1.8cm,其中导引线总长6000mm,断续部分的间断距离不大于10mm,步进电机执行一次驱动预定的行进路程为4mm。在没有强烈日光干扰的情况下,笔者所设计的寻迹系统能自动识别黑色导引线并选择正确的方向运动。测试结果:系统总能在60S内连续正确地走完全程,而且机器人(中心)所走的轨迹基本上在黑线上。可见,即使是比较复杂的曲线,笔者设计的导引机器人也能准确地实现寻迹功能。
本文作者的创新点是:针对基于光电传感器组寻迹的自动导引机器人,设计了一种新的传感器阵列的布置方式。根据此布置方式,提出了三个处理规则结合而成的轨迹识别算法。