引言
智能寻迹机器人是一种被广泛研究的机器人,而且国内外都有许多重要的比赛都以寻迹机器人为核心展开,如我国的“飞思卡尔”杯全国大学生智能车大赛,以及吸引亚太地区众多国家参赛的亚广联(ABU)机器人大赛等。
所谓的复杂路线,即由小半径弯道、各种角度折道、直道等组成的不规则导引线,它是相对由大半径弯道组成、过渡平滑的简单路线而言的。笔者所设计的寻迹机器人小车,以AT89C52单片机为控制芯片,采用自制的3个红外光电传感器,以简单的设计、较低的成本实现了复杂路线下机器人的自主寻迹。
1 硬件及电路
1.1 控制芯片
考虑到实用性和性价比,采用AT89C52单片机作为机器人的控制芯片。AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8 KB的可反复擦写的只读存储器(PEROM)和256B的随机存取数据存储器(RAM),32个I/O口线,3个16位定时/计数器,1个全双工串行通行口。器件采用Atmel公司的高密度、非易失性存储技术生产,与标准MCS51指令系统及8052产品引脚兼容。
1.2 传感器模块
作为寻迹机器人的“眼睛”,选择合适的传感器是关键。目前市面上可选用的传感器主要有CCD传感器和红外光电传感器两种。近年来CCD传感器技术已趋成熟,在近几届“飞思卡尔”杯智能车大赛上,采用CCD传感器的智能车越来越多,并取得了不错的成绩。不过,CCD传感器价格较高,体积较大,数据处理相当复杂,因此在按既定路线行走的寻迹机器人设计中,红外光电传感器以其体积小、价格低、数据处理简单而显得更有优势。
红外光电传感器由1个红外发射管和1个光敏二极管组成。工作时,红外发射管发射的红外光被被测表面反射回来,光敏二极管接收被反射光。由于被测表面的材质不同,反射率也不一样。当被测表面为白色时,反射光较强,光敏二极管将导通;反之,被测表面为黑色时,光敏二极管将截止。考虑到外界环境光照等干扰因素,输出的电压值有一定的波动范围,若直接输给单片机,可能导致检测判断错误。因此,需要将输出电压通过比较器(LM324)与预置的阈值电压比较,然后得出一个高低电平输给单片机。阈值电压通过试验测量得出,其电路如图1所示。其中LED为传感器工作指示灯,R1为阈值电压调节电阻。
图1 传感器电路图
根据上述电路,自制了3个简易的红外光电传感器。经测试表明,性能良好,有效检测距离为1~4 cm,满足机器人寻迹的要求。
1.3 驱动模块
驱动机器人行走的2个电机需要不同的转速来实现转弯。选用的驱动芯片为L293D,它包含4个输出通道,最大输出峰值电流为1.2 A,能同时驱动2个直流电机工作;其信号输入端和使能端接收到来自单片机的信号,控制电机的通断以及正、反转,还可以通过向使能端输入不同占空比的方波信号来调整电机转速 (PWM方式)。
如图2所示,IN端口接控制信号,OUT端口接电机的两端,EN端口接使能信号。一组IN端口输入为高/低或低/高电平时,能实现电机的正/反转。一组IN端口输入均为高或低电平时,电机将停转。EN使能端为高电平时,相应端口输入信号有效;反之,则输入信号无效。在EN端输入PWM波,通过调整PWM波的占空比,即可实现电机的无级调速。
图2 电机驱动电路
2 寻迹控制
机器人寻迹控制示意图如图3所示,机器人采用前轮驱动后轮辅助的三轮差动式行走方式。车体前部两轮均为主动轮,由两个电机分别驱动,利用它们的转速差来控制机器人运动方向;后轮为从动万向轮,仅起着支撑车体的作用。车底板前部以车体中心线为轴线对称放置着3个自制的红外光电传感器,作为机器人的寻迹传感器。
图3 寻迹控制示意图
机器人寻迹场地中除了黑线,其他区域均为白色。当传感器正下方为黑线时,输出“0”状态,当其为白色区域时,输出“1”状态。因此,理论上3个传感器输出的组合状态会有8种,如表1所列。每一种组合状态都对应着一种机器人下一步的行走动作,共有前进、左转、快速左转、右转、快速右转、原地旋转、停止7种动作。
表1
本机器人有着双级转弯的设计,即普通转弯和快速转弯。当机器人对黑线的偏离量比较小时,使用普通转弯,即两个驱动轮都向前运动,速度一大一小,依靠两轮的速度差来实现转弯;而当机器人偏离黑线较远时,使用快速转弯,即两个驱动轮一个向前运动,一个向后运动,这样能迅速实现转弯。普通转弯用于大半径弯道、大角度折道,而快速转弯则用于小半径弯道和直角锐角折道等非平滑过渡路线。对于非封闭路线,还设计了原地旋转的动作,来实现原路返回:一旦机器人小车走完全程,3个传感器将均检测到白色区域,输出组合状态“111”,此时一轮全速前进,一轮全速后退,小车原地旋转,直到掉过头来传感器检测到黑线为止。
3 程序设计
程序设计时,采用汇编语言编程。其思路为:第1步,系统初始化后,读取单片机P2口的值,然后对其P2.0、P2.1、P2.2按位取与,得到传感器模块的组合值。第2步,将得到的组合值与预定的值比较,若相等则执行相应的动作,否则继续比较,直到获得正确的动作。比较完全部动作后,转到第1步重新扫描传感器的状态值。
为了进一步提高系统的安全性和可靠性,还需增加异常处理算法。可能出现的异常情况有:过小弯道或小角度折道时,机器人还来不及转过弯来,就已经完全偏离黑线。这种情况下,3个传感器都输出“1”,检测不到黑线,若不及时处理,机器人将无法继续寻迹。针对该情况,设计了原地旋转动作来找回预定路线,不过原地旋转有顺、逆时针之分,因此还得区分开来。改进后编程的思路为:每次读取P2口值之前,将其上一次的传感器组合值存入某个寄存器,当出现组合值为“111”的情况时,立即查询上一次的值,根据该值,可以判断出机器人是从哪一侧偏离黑线的,从而进行顺或逆时针原地旋转。其主要程序如下:
……;系统初始化
SENSOR: MOVA,P2
ANLA,#07H;读P2口值,对P2.0、P2.1、P2.2按位取与
CJNEA,#07H,NEXT;如组合值为111,直接转到动作判断程序,否则转到NEXT
LJMPDATA_PROCESS
NEXT:MOVR5,A;将本次传感器组合值赋给R5
LJMPDATA_PROCESS
DATA_PROCESS: CJNE A,#07H,D1;对组合值判断,确认为常规动作还是旋转动作
LJMP ROTATE
D1:……;继续常规动作判断
……
ROTATE: MOV A,R7 ;旋转判断,将上一次传感器组合值赋给A
CJNE A,#06H,R1;对上一次传感器组合值判断,决定顺逆旋转
LJMPCLOCKWISE
R1:……;继续顺逆判断
……
CLOCKWISE:……;顺时针旋转动作
LJMP DELAYS
DELAYS:MOV A,R5
MOV R7,A;将本次传感器组合值赋给R7
LCALL DELAY;调用DELAYS子程序进行延时
LJMP SENSOR ;重新扫描传感器状态
END;程序结束
结语
根据上述设计思路,我们制作出寻迹机器人并进行了测试。测试场地如图4所示,黑色导引线宽度为3 cm,黑线周围区域均为白纸覆盖。测试结果表明:该寻迹机器人能在此复杂路线下平稳、顺利地沿着黑线走完全程,并在终点沿原路返回,达到了预期的目标。这为进一步研究复杂环境下的自动行走机器人提供了参考。
图4 机器人寻迹测试图
本文的创新点为:使用3个自制的红外光电传感器,以简单的设计和较少的硬件实现了复杂路线下机器人的寻迹。而基于该机器人双级转弯的设计思想,可以增加传感器数量、组成传感器阵列来实现多级转弯,从而对机器人的自主寻迹有着更为精确的控制。