引言
智能车是近年来发展起来的一门新兴的综合技术,在军事领域得到了广泛应用,而且在生产和生活中的应用也日趋普遍 [1-2]。
目前智能小车的自主移动方式有两种:循迹和避障。一般的循迹功能可以通过算法使其能精确地在黑线上行驶,但是由于一些室内环境的因素,要实施黑线的布置并不符合实际要求[3-4]。一般的避障功能仅仅是通过探测前方障碍物而进行躲避,通过算法可以完成从出发点到定点的行驶[57],但是算法运算量大且放在不同的环境,就需要更改程序,这对实际应用带来很大的不便。
基于这种背景,设计了一种利用超声波测距避障功能以及Linux文件系统的路径记忆循迹智能小车,通过人为地设置障碍物来规划小车的行走路线,并将路线记录入库。小车只需读取库中的数据即可按照规划的路线行驶以实现循迹功能,可摆脱寻查黑线的循迹方式。当环境发生变化时,利用按键设置小车的工作模式,可以直接重新建立记忆库,无需更改程序,具有一定的实际意义。
1总体设计
图1为本系统总体结构框图,主要由超声波测距模块与云台、S3C6410控制器、电机驱动模块、光电测速模块以及电源等部分组成。其中,电源用于完成对整个系统的供电,超声波测距模块与云台完成对小车运行状态的预判,电机驱动模块根据预判的结果执行相应的操作,光电测速模块用于PID控制的反馈以及在转向时控制车轮运行的周数,S3C6410控制器在移植Linux操作系统的基础上完成对各模块的控制并建立小车运行状态的记忆库。
2系统硬件设
2.1控制器
S3C6410控制器[8]是由三星公司推出的一款低功耗、高性价比的RISC处理器,它基于ARM11内核(ARM1176JZFS),可广泛应用于移动电话和通用处理等领域。控制器由核心电路板和主板两部分组成,核心板上设计有S3C6410、SDRAM存储电路、NAND Flash、1.25 V电源电路和处理器复位电路等,主板上设计有串口、网口、按键等。
2.2电源与电机驱动模块
电源采用现有的锂充电电池供电,锂电池的电压约为7.2 V。电机驱动采用的是L298N驱动模块,该模块采用 ST 公司的 L298N 芯片,采用高质量铝电解电容,可使电路稳定工作;可以直接驱动两路 3~16 V直流电机,并提供了5 V输出接口,可以给5 V单片机电路系统供电,支持3.3 V ARM 控制,可以方便地控制直流电机速度和方向。
2.3超声波测距模块与云台
采用US100 超声波测距模块,该模块可实现0~4.5 m的非接触测距功能,拥有2.4~5.5 V的宽电压输入范围,静态功耗低于2 mA,自带温度传感器对测距结果进行校正,同时具有GPIO、串口等多种通信方式,内置看门狗,工作稳定可靠。
云台采用SG90舵机,工作电压为4.8~6 V,无负载的情况下转速为0.12 s/60℃。控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20 ms、宽度为1.5 ms的基准信号。将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片,决定电机的正反转。
2.4光电测速模块
本设计中的测速模块采用槽型对射光电,只要在非透明物体中通过槽型即可触发(配合小车测速码盘20格使用)输出5 V TTL电平,采用了施密特触发器去抖动脉冲,非常稳定,用于小车测转速、测距离等。
2.5电子罗盘
电子罗盘采用霍尼韦尔HMC5883L芯片,该芯片带有数字接口的弱磁传感器,应用于低成本罗盘和磁场检测领域,并附带霍尼韦尔专利的集成电路,包括放大器、自动消磁驱动器、偏差校准、能使罗盘精度控制在1°的I2C系列总线接口。
3记忆库的设计
3.1智能小车避障方案选择
根据设计要求,小车在行驶过程中需要准确地检测前方的人为障碍物,并通过障碍物的位置来确定小车下一步的运行状态,因此对测量距离有一定要求。障碍物检测可以有多种方法:红外光检测、超声波检测和机械接触。这些方法各有优缺点,常用的有红外检测和超声波检测,两种方案的区别见表1。对比两种方案的指标后,本文避障方案选择超声波检测,并且为了满足系统要求添加了SG90舵机作为辅助,使用超声波可以检测多个方向。
3.2智能小车的路径状态设计
为了简化记忆库的设计以及结合实际应用中的情况,智能小车的运行状态设定成4种情况:直行、90°左转弯、90°右转弯和180°掉头。其中,直行状态在记忆库中的表示是时间,通过Linux中的时间函数测量直行状态的持续时间,单位为s。
为了使智能小车能按照上面的4种情况运行,智能小车在行进中遇到的路径情况是人为设定的,如图2所示。
3.3记忆库的建立
智能小车的运行状态是人为设定的4种情况,记忆库中的数据就是由这4个状态标志组成。人为设置好从起点到终点的障碍物后,即可让小车在起点开始运行,并在每次改变运行状态前将运行状态记录入库。在到达终点后以180°掉头作为结束标志,然后利用Linux文件系统将记忆库里的数据保存到Linux下的一个文件当中,到此完成记忆库的建立。
根据具体环境,可建立一个起点、多个终点的路线记忆库,并将各个路线记忆分别保存在Linux下的不同文件中,智能小车通过读取文件中内容实现循迹功能。
4系统软件设计
系统软件设计分为3个层次:应用层、操作系统层和驱动层。应用层包括智能小车控制策略程序、建立记忆库和按键控制小车的工作模式;操作系统层包括Bootloader移植、操作系统ARMLinux内核的移植和根文件系统移植;驱动层主要包括us100超声波模块、SG90舵机以及电机驱动模块等驱动程序。
4.1系统移植以及驱动程序
操作系统的移植包括uboot、内核和文件系统的烧写,内核包含GPIO口、DM9000网卡、内存等关键的底层驱动。小车启动时,通过uboot对S3C6410进行必要的初始化,然后引导Linux的启动。
智能小车需要的驱动程序有:电机驱动模块驱动程序、SG90舵机驱动程序、光电测速模块驱动程序以及us100超声波模块驱动程序。其中,舵机与超声波编写到一个驱动文件中。这些模块的驱动程序都是以混杂设备驱动[9]的方式编写,主要的驱动函数采用ioctl函数。而电机驱动模块与超声波避障驱动程序的结构相似,仅是实现功能不同。电机驱动模块驱动程序框架如下:
#defineDEVICE_NAME"ok6410_dianji"
//驱动层ioctl函数
static int s3c6410_dianji_ioctl(struct inode
*inode, struct file *file, char buff)
s3c6410_dianji_fops={
.owner=THIS_MODULE,
.ioctl=s3c6410_dianji_ioctl,
};
static struct miscdevice misc={
.minor=MISC_DYNAMIC_MINOR,
.name=DEVICE_NAME,
.fops=&s3c6410_dianji_fops,
};
static int__init s3c6410_dianji_init()
static void__exit s3c6410_dianji_exit()
module_init(s3c6410_dianji_init);
module_exit(s3c6410_dianji_exit);
光电测速模块驱动程序完成两种功能:①采用中断的方式来记录小车的测速,并反馈给应用层作为PID控制的反馈;②通过应用层传递车轮运转的周数,驱动中利用异步通知的方式在运转完规定周数后通知应用层,作为小车转向时的控制。
4.2记忆库程序设计
超声波避障是决定智能小车运行状态的关键所在。利用超声波测得人为障碍物,让智能小车通过躲避障碍物实现按预定路线行走,并通过Linux文件系统将小车行走过程中所有的状态都记录在一个文件中形成记忆库。程序流程图如图3所示。
4.3智能小车控制策略程序设计
智能小车基本的控制是通过电机驱动模块将模块上对应的引脚与ARM11的GPL口和GPK口中的部分引脚相连,通过对GPIO口输出高低电平来控制小车的直行、90°左转弯、90°右转弯和180°掉头。
由于小车在转向时,轮胎会出现打滑现象,这样会影响小车的90°与180°的精确转向。为了让小车能在无黑线的情况下精确转向,本设计中采用hmc5883l电子罗盘作为小车的“眼睛”。一般的电子罗盘都会存在一定的偏差[10-11],通过校正以后可以使精度达到1°左右。
由于本设计中只是为了让小车转向,并非准确地测出与地理北极方向的偏向角,所以在校正后可直接使用输出数据。为了让小车转向时迅速且准确,设计了分段的转向运行方案,利用光电测速模块和20格码盘控制小车的运行。主要的程序流程图如图4所示。
为了让小车能在无黑线的情况下走出相对距离内的直线,在电机的控制中采用PID控制算法进行调速。根据测速系统反馈回来的当前电机速度和设定速度进行比较,将偏差作为新的输入量控制PWM信号的占空比,从而实现各个电机在单位时间内走的路程近似相等。PID控制算法原理如图5所示。
在记忆库建立完成后,智能小车的运行是从记忆库中读取已定路线在各点的状态值,最后实现小车按照规定路线行驶。主要的程序流程如图6所示,而从终点回到起点只需将记忆库的内容反向读取,并将左右转向取反。
4.4工作模式的控制
本设计中智能小车的运行有两种工作模式:第一是建立记忆库;第二是按照记忆库实现循迹。通过按键控制小车的工作模式,当环境发生改变时,只需通过按键设置成建立记忆库模式,即可完成记忆库的修改。
5系统测试结果及结论
通过对智能小车的测试,小车能将行驶过程中各个状态记录入库,完成了利用超声波避障和Linux文件系统的记忆库的建立,并且通过记忆库可实现小车按设定路径的循迹的功能。
本方案使得小车在不同的环境中只需人为地重新设置障碍,通过设置小车的功能模式让智能小车按障碍路线运行一次便可建立新的记忆库,不需要重新布线或更改程序。本设计进一步地扩展了智能小车的应用,增强了小车的环境适应性,并且可以扩展到智能家居和远程监控领域,具有较强的实用性。