微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种机器人的寻迹算法

一种机器人的寻迹算法

时间:01-19 来源:互联网 点击:

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”即多个方向,这时可采用“内外层切换规则”,也就是说从内层切换到外层,启用外层扫描值重复上述前后比较规则来进行判断。启用外层信号进行二次判断能很好的处理曲线拐弯及曲线断续等内层处理不好的情况。但用外层信号判断,因为其传感器布置的间隙距离比内层大,其控制精度不如用内层信号判断高。

(3) 纠错规则

在运行中,传感器有可能受到干扰而发出错误信号导致机器人走错或迷失方向,这个时候纠错规则能让机器人后退起到纠错作用。所谓纠错规则就是在走错后出现了内外层左前、前、右前均没有探测到引导线,而后向探测到了导引线的情况下,让机器人后退,一直退到前面三个方向传感器里有传感器探测到导引线为止。此时再用(1)式求得新的行进方向,从而实现纠错功能。

其中前后比较法的逻辑处理及随后的判断程序具体如下:(30H放本次信号值,32H放前次信号值)

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”再判

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top