新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM和Linux的路径记忆循迹小车

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

作者: 时间:2016-09-12 来源:网络 收藏

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

4 系统软件设计

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

4.1 系统移植以及驱动程序

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

需要的驱动程序有:电机驱动模块驱动程序、SG90舵机驱动程序、光电测速模块驱动程序以及us-100超声波模块驱动程序。其中,舵机与超声波编写到一个驱动文件中。这些模块的驱动程序都是以混杂设备驱动的方式编写,主要的驱动函数采用ioctl函数。而电机驱动模块与超声波避障驱动程序的结构相似,仅是实现功能不同。电机驱动模块驱动程序框架如下:

d.jpg

e.jpg

光电测速模块驱动程序完成两种功能:①采用中断的方式来记录小车的测速,并反馈给应用层作为PID控制的反馈;②通过应用层传递车轮运转的周数,驱动中利用异步通知的方式在运转完规定周数后通知应用层,作为小车转向时的控制。

4.2程序设计

超声波避障是决定智能小车运行状态的关键所在。利用超声波测得人为障碍物,让智能小车通过躲避障碍物实现按预定路线行走,并通过Linux文件系统将小车行走过程中所有的状态都记录在一个文件中形成记忆库。程序流程图如图3所示。

f.jpg

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

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

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

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

g.jpg

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

h.jpg

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

i.jpg

4.4 工作模式的控制

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

5 系统测试结果及结论

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

本方案使得小车在不同的环境中只需人为地重新设置障碍,通过设置小车的功能模式让智能小车按障碍路线运行一次便可建立新的记忆库,不需要重新布线或更改程序。本设计进一步地扩展了智能小车的应用,增强了小车的环境适应性,并且可以扩展到智能家居和远程监控领域,具有较强的实用性。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭