引言
迷宫机器人走迷宫竞赛是一项综合性十分强的竞赛,它涉及的学科包括了计算机学、机械学、电工学、嵌入式开发知识以及算法的实现等。迷宫机器人是一种人工智能的机器人,又称为电脑鼠(Micromouse)。它拥有灵活的“双腿”,锐利的“眼睛”,还有聪明的“大脑”用于控制“眼睛”和“双腿”协调工作,最终走出IEEE标准迷宫。迷宫由256个方块(单元)组成,每个方块的大小为18 cm见方,排成16行×16列。
迷宫机器人在迷宫中要能按照一定规则完成行走,所以机器人必须具备以下几种能力:
◆ 稳定且快速的行走能力;
◆ 正确判断能力;
◆ 记忆路径的能力。
很明显,这些能力必须建立在迷宫墙壁能够被准确探知的基础上,这就要求迷宫机器人要有很强的“观察力”,即具有一双“慧眼”。现实中,能够进行避障的传感器有很多,如CCD摄像头、超声波传感器、光电传感器等。从设计成本和使用方面综合考虑,本设计采用红外式光电传感器。红外传感器的功能有两个:一是判断迷宫墙壁的有无,确定迷宫机器人的行进方向;二是根据传感器获得的数值判断迷宫机器人和墙壁之间的距离,从而对迷宫机器人的姿态进行调整,避免迷宫机器人和墙壁发生碰撞[1]。
1 光电传感器原理
红外光电传感器工作原理如图1所示。发送器对准目标发射光束,发射的光束一般来源于半导体光源、发光二极管(LED)、激光二极管及红外发射二极管。光束不间断地发射,或者改变脉冲宽度。接收器由光电二极管、光电
图1 光电传感器工作原理图
三极管、光电池组成。在接收器的前面装有光学元件(如透镜和光圈等);在接收器后面的是检测电路,用于滤除无效信号,以及对有效信号进行利用。
随着车体和墙壁的距离不同,接收管接收到的信号的强弱也不同。当车体距离墙壁较近时,大量发射的红外光线经墙壁反射后被接收管接收,产生的电压较高;反之,车体距离墙壁较远时,反射的红外光线在传播过程中会损耗,被接收管接收到的信号较弱,产生的电压也就较低。根据接收管产生电压的强弱,可以判断车体与墙壁之间的距离,为迷宫机器人避障提供数据[2]。
2 光电传感器的选用
光电传感器的特点:不受电磁波的干扰,非噪声源,可实现非接触性测量;受环境的影响非常大,物体的颜色、方向、周围的光线都可能导致测量误差;由于发射光线是光而不是声音,可以在相当短的时间内获得较多的红外线传感器测量值;测距范围较近,大致为40 cm以内[3]。
红外传感器发射管和接收管的类型很多,其工作光波长约为800~1100 nm。通常在小功率条件下的工作电压为1.5~5 V左右,工作电流为3~10 mA左右。在本设计中选用了日本ROHM公司生产的发送接收一体化反射型光电传感器RPR220。该光电管功率为80 mW,工作波长为800 nm,完全满足迷宫机器人的使用要求。
3 光电传感器应用电路
在本设计中,采用Freescale公司的16位单片机MC9S12DG128对光电传感器进行控制。单片机的A/D模块进行信号采集,获知当前的墙壁信息和车体的位置信息。单片机采集到A/D数值后,通过RS232传到PC机上。然后根据传感器采得的数值为电机指定相应的动作信号,控制迷宫机器人在迷宫中的姿态,并且实时记录迷宫墙壁有无的信息,为建立迷宫地图提供数据。
3.1 传感器电路
传感器电路是获知迷宫信息的主要途径,其电路设计的好坏直接影响着机器人的工作。一般来说,传感器电路由控制电路、发射管、接收管和信号处理电路构成。阳光谱中含有红外成分,所以在迷宫机器人中要想方设法将红外光谱消除,才能保证迷宫机器人的正常运行[4]。
图2 传感器在迷宫机器人上的分布图
本设计使用了5路传感器,分置于迷宫机器人的正前、偏左45°、左侧、偏右45°、右侧。每一路的打开与关闭由处理器控制,如图2所示。
本设计中的传感器电路如图3所示。CTR1为传感器的开关控制口,CTR1置高时,发射管两端没有电压差,所以传感器不会对外发射红外信号;CTR1置低时,发射管和传感器均工作,对外发射红外光谱信号。当
图3 传感器电路
发射的红外光谱经迷宫墙壁发射反射回迷宫机器人时,
接收管会产生感应电流。此时,RPR220的3号端口的电阻将该端的电动势拉高。
如果电流增大,那么3号端口输出的地电动势也会相应增大,从而实现对迷宫环境的信息探测。
3.2 传感器电路的使用
从前面的分析可以知道,传感器采集信号时存在着阳光干扰。在设计期间,我们也进行了相应的干扰实验。结果表明,阳光的干扰十分强烈,完全可以使得红外传感器失去作用。因此,在传感器电路的使用过程中必须考虑阳光对光电传感器的干扰,可从硬件和软件两方面去消除阳光的影响[57]。
在本设计中,采用了软件消除误差的方法。首先,CTR1置高,也就是传感器发射管处于关闭状态。这时使用处理器的A/D采集模块对接收管的信号进行采集,作为基值AD1。然后,将CTR1置低,将发射管打开,再一次用处理器的A/D采集功能进行信号采集。这时采得的数据为AD2,是反射光谱和阳光红外谱的混合信号,而真正的A/D值应为AD=AD2-AD1。软件消除阳光红外光误差的流程如图4所示。
图4 软件消除阳光红外光误差的流程
本设计采用MC9S12DG128处理器的PB0~PB4控制5个传感器的开断。实验表明,软件消除阳光红外光误差的方法效果较好。
3.3 实验结果
该实验使用RS232通信接口,将处理器采集获得的A/D数值实时传到上位机,然后改变车体与墙壁之间的距离,记录各个点的A/D数值,利用MATLAB绘制出A/D值与距离之间的关系图。
实验表明,该方法能够有效地在迷宫中进行距离的探测,最大探测距离达到20 cm,在1 cm处传感器饱和,而迷宫机器人的要求能够探测的最大距离为18 cm,饱和距离不能大于2 cm。显然,该电路完全满足使用要求[810]。实验程序如下所示:
#include <hidef.h>
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#include "main_asm.h"
void setbusclock(void){
CLKSEL=0x00;
PLLCTL_PLLON=1;
SYNR=2;
REFDV=1;
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL =1;
}
void AD_Init(void) {
ATD0CTL2=0x80;
ATD0CTL3=0x08;
ATD0CTL4=0x81;
ATD0CTL5=0xB0;
ATD0DIEN=0x00;
}
static void SCI_Init(void) {
SCI0CR2=0x2c;
SCI0BDH=0x00;
SCI0BDL=0x9c;
}
void uart_putchar(unsigned char ch){
while(!(SCI0SR1 & 0x40));
SCI0DRL=ch;
}
void main(void) {
setbusclock();
SCI_Init();
AD_Init();
DDRB=0xff;
for(;;){
while(!ATD0STAT0_SCF) ;
uart_putchar(ATD0DR0L);
ATD0STAT0_SCF=1;
}
}
实验结果如图5所示,可见距离与A/D采样值成反比。
图5 A/D采样值与距离之间的关系
4 结论
本文设计了一款新型迷宫机器人,其中光电传感器的设计部分采用RPR220实现。实验表明,本设计的探测距离完全满足迷宫机器人的使用要求。其创新点是使用软件的方法进行干扰消除,有效地避免了阳光红外信号的干扰,提高了迷宫机器人走迷宫的成功率, 机器人的可靠性也得到了大幅的提升。