基于ARM和Linux的路径记忆循迹小车*

2015-07-02 00:17:24吴文豪张建国高磊魏诺庞庆
单片机与嵌入式系统应用 2015年6期
关键词:循迹驱动程序小车

吴文豪,张建国,高磊,魏诺,庞庆

(西安建筑科技大学 理学院,西安 710055)



基于ARM和Linux的路径记忆循迹小车*

吴文豪,张建国,高磊,魏诺,庞庆

(西安建筑科技大学 理学院,西安 710055)

针对智能小车在实际应用中的需要,设计了一种基于ARM和Linux的具有路径记忆循迹功能的智能小车。利用ARM和Linux操作系统,实现了对智能小车的超声波避障模块、电机等的控制。利用电子罗盘,实现了小车在无黑线情况下精确转向;利用超声波测距避障以及Linux文件系统建立和保存了智能小车运行的路径记忆库;通过读取记忆库的数据实现智能小车的循迹功能。结果表明,该设计方案可以很好地实现循迹功能并且对环境的适应性较强。

ARM;Linux; 智能小车;记忆库

引 言

智能车是近年来发展起来的一门新兴的综合技术,在军事领域得到了广泛应用,而且在生产和生活中的应用也日趋普遍[1-2]。

目前智能小车的自主移动方式有两种:循迹和避障。一般的循迹功能可以通过算法使其能精确地在黑线上行驶,但是由于一些室内环境的因素,要实施黑线的布置并不符合实际要求[3-4]。一般的避障功能仅仅是通过探测前方障碍物而进行躲避,通过算法可以完成从出发点到定点的行驶[5-7],但是算法运算量大且放在不同的环境,就需要更改程序,这对实际应用带来很大的不便。

基于这种背景,设计了一种利用超声波测距避障功能以及Linux文件系统的路径记忆循迹智能小车,通过人为地设置障碍物来规划小车的行走路线,并将路线记录入库。小车只需读取库中的数据即可按照规划的路线行驶以实现循迹功能,可摆脱寻查黑线的循迹方式。当环境发生变化时,利用按键设置小车的工作模式,可以直接重新建立记忆库,无需更改程序,具有一定的实际意义。

1 总体设计

图1 系统总体结构框图

图1为本系统总体结构框图,主要由超声波测距模块与云台、S3C6410控制器、电机驱动模块、光电测速模块以及电源等部分组成。其中,电源用于完成对整个系统的供电,超声波测距模块与云台完成对小车运行状态的预判,电机驱动模块根据预判的结果执行相应的操作,光电测速模块用于PID控制的反馈以及在转向时控制车轮运行的周数,S3C6410控制器在移植Linux操作系统的基础上完成对各模块的控制并建立小车运行状态的记忆库。

2 系统硬件设计

2.1 控制器

S3C6410控制器[8]是由三星公司推出的一款低功耗、高性价比的RISC处理器,它基于ARM11内核(ARM1176JZF-S),可广泛应用于移动电话和通用处理等领域。控制器由核心电路板和主板两部分组成,核心板上设计有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 超声波测距模块与云台

采用US-100 超声波测距模块,该模块可实现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所示。

图2 人为设定的小车行驶情况

3.3 记忆库的建立

智能小车的运行状态是人为设定的4种情况,记忆库中的数据就是由这4个状态标志组成。人为设置好从起点到终点的障碍物后,即可让小车在起点开始运行,并在每次改变运行状态前将运行状态记录入库。在到达终点后以180°掉头作为结束标志,然后利用Linux文件系统将记忆库里的数据保存到Linux下的一个文件当中,到此完成记忆库的建立。

根据具体环境,可建立一个起点、多个终点的路线记忆库,并将各个路线记忆分别保存在Linux下的不同文件中,智能小车通过读取文件中内容实现循迹功能。

4 系统软件设计

系统软件设计分为3个层次:应用层、操作系统层和驱动层。应用层包括智能小车控制策略程序、建立记忆库和按键控制小车的工作模式;操作系统层包括Bootloader移植、操作系统ARM-Linux内核的移植和根文件系统移植;驱动层主要包括us-100超声波模块、SG90舵机以及电机驱动模块等驱动程序。

4.1 系统移植以及驱动程序

操作系统的移植包括uboot、内核和文件系统的烧写,内核包含GPIO口、DM9000网卡、内存等关键的底层驱动。小车启动时,通过uboot对S3C6410进行必要的初始化,然后引导Linux的启动。

智能小车需要的驱动程序有:电机驱动模块驱动程序、SG90舵机驱动程序、光电测速模块驱动程序以及us-100超声波模块驱动程序。其中,舵机与超声波编写到一个驱动文件中。这些模块的驱动程序都是以混杂设备驱动[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所示。

图3 建立记忆库主程序流程图

4.3 智能小车控制策略程序设计

智能小车基本的控制是通过电机驱动模块将模块上对应的引脚与ARM11的GPL口和GPK口中的部分引脚相连,通过对GPIO口输出高低电平来控制小车的直行、90°左转弯、90°右转弯和180°掉头。

由于小车在转向时,轮胎会出现打滑现象,这样会影响小车的90°与180°的精确转向。为了让小车能在无黑线的情况下精确转向,本设计中采用hmc5883l电子罗盘作为小车的“眼睛”。一般的电子罗盘都会存在一定的偏差[10-11],通过校正以后可以使精度达到1°左右。

由于本设计中只是为了让小车转向,并非准确地测出与地理北极方向的偏向角,所以在校正后可直接使用输出数据。为了让小车转向时迅速且准确,设计了分段的转向运行方案,利用光电测速模块和20格码盘控制小车的运行。主要的程序流程图如图4所示。

图4 电子罗盘转向控制流程图

为了让小车能在无黑线的情况下走出相对距离内的直线,在电机的控制中采用PID控制算法进行调速。根据测速系统反馈回来的当前电机速度和设定速度进行比较,将偏差作为新的输入量控制PWM信号的占空比,从而实现各个电机在单位时间内走的路程近似相等。PID控制算法原理如图5所示。

图5 PID控制算法原理图

在记忆库建立完成后,智能小车的运行是从记忆库中读取已定路线在各点的状态值,最后实现小车按照规定路线行驶。主要的程序流程如图6所示,而从终点回到起点只需将记忆库的内容反向读取,并将左右转向取反。

图6 记忆库循迹主程序

4.4 工作模式的控制

本设计中智能小车的运行有两种工作模式:第一是建立记忆库;第二是按照记忆库实现循迹。通过按键控制小车的工作模式,当环境发生改变时,只需通过按键设置成建立记忆库模式,即可完成记忆库的修改。

5 系统测试结果及结论

通过对智能小车的测试,小车能将行驶过程中各个状态记录入库,完成了利用超声波避障和Linux文件系统的记忆库的建立,并且通过记忆库可实现小车按设定路径的循迹的功能。

[1] 刘崇翔,于力革,高美凤.基于ARM的智能小车驱动程序的开发[J].计算机与现代化,2012(8):173-175.

[2] 李波,杨卫,张文栋.一种智能小车自主寻/循迹系统设计[J].计算机测量与控制, 2012,20(10):2798-2801.

[3] 董宗祥.基于ARM的自寻迹机器人小车的研发[D].上海:东华大学,2010.

[4] 余红英.基于ARM的智能寻迹小车的设计与实现[D].太原:中北大学,2012.

[5] 闫晶,周浚哲,刘喜梅.基于DSP的智能小车避障系统设计[J].沈阳理工大学学报,2008,27(1):37-41.

[6] 李磊,曹生炜.智能小车避障技术的实现[J].微电机,2011,44(6):109-111.

[7] 卢威.智能小车避障系统的设计与实现[D].南昌:南昌大学,2012.

[8] Samsung.USER’S MANUAL S3C6410X RISC Microprocessor,2009.

[9] 杨水清,张剑.精通ARM嵌入式Linux系统开发[M].北京:电子工业出版社,2012.

[10] 孟健.三轴磁强计误差分析与校正[D]. 哈尔滨:哈尔滨工业大学,2011.

[11] 晁敏,蒋东方,文彩虹.磁罗盘误差分析与校准[J].传感器技术学报,2010,23(4):525-531.

吴文豪(在校研究生)、张建国(副教授),主要研究方向为光电检测与嵌入式技术。

Car Path Tracking Memory Based on ARM and Linux

Wu Wenhao,Zhang Jianguo,Gao Lei,Wei Nuo,Pang Qing

(Faculty of Science,Xi’an University of Architecture and Technology,Xi’an 710055,China)

Aiming at the practical application,a smart car based on ARM and Linux is designed,which has the function of path tracking memory.The design uses the ARM and Linux operating system to achieve the control of ultrasonic obstacle avoidance module and motor module.The car realizes accurate steering without black line using the electronic compass.A running state memory bank of the car is established using the ultrasonic obstacle avoidance and Linux file system.Then it achieves intelligent car tracking function by reading data from memory bank.The experimental results show that the scheme can realize tracking function and has strong adaptability to the environment.

ARM;Linux;smart car;memory bank

国家自然科学基金项目:11347119;陕西省大学生创新项目:0885。

TP312

A

迪娜

2015-01-19)

猜你喜欢
循迹驱动程序小车
基于DFT算法的电力巡检无人机循迹检测系统设计
大车拉小车
快乐语文(2020年36期)2021-01-14 01:10:32
自制小车来比赛
科学大众(2020年17期)2020-10-27 02:49:02
刘老师想开小车
文苑(2018年22期)2018-11-19 02:54:18
基于单片机的智能循迹小车的设计
电子测试(2018年15期)2018-09-26 06:01:14
两轮自平衡小车的设计与实现
电子制作(2018年8期)2018-06-26 06:43:02
智能差分循迹小车设计
电子制作(2017年1期)2017-05-17 03:54:20
基于MC9S12XS128处理器的智能循迹小车分析研究
电子制作(2016年11期)2016-11-07 08:43:49
驱动程序更新与推荐
驱动程序更新与推荐