基于ARM和Linux的路径记忆循迹小车
设计 为了简化记忆库的设计以及结合实际应用中的情况,智能小车的运行状态设定成4种情况:直行、90°左转弯、90°右转弯和180°掉头。其中,直行状态在记忆库中的表示是时间,通过Linux中的时间函数测量直行状态的持续时间,单位为s。 为了使智能小车能按照上面的4种情况运行,智能小车在行进中遇到的路径情况是人为设定的,如图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超声波模块驱动程序。其中,舵机与超声波编写到一个驱动文件中。这些模块的驱动程序都是以混杂设备驱动的方式编写,主要的驱动函数采用ioctl函数。而电机驱动模块与超声波避障驱动程序的结构相似,仅是实现功能不同。电机驱动模块驱动程序框架如下: 光电测速模块驱动程序完成两种功能:①采用中断的方式来记录小车的测速,并反馈给应用层作为PID控制的反馈;②通过应用层传递车轮运转的周数,驱动中利用异步通知的方式在运转完规定周数后通知应用层,作为小车转向时的控制。 4.2 记忆库程序设计 超声波避障是决定智能小车运行状态的关键所在。利用超声波测得人为障碍物,让智能小车通过躲避障碍物实现按预定路线行走,并通过Linux文件系统将小车行走过程中所有的状态都记录在一个文件中形成记忆库。程序流程图如图3所示。 4.3 智能小车控制策略程序设计 智能小车基本的控制是通过电机驱动模块将模块上对应的引脚与ARM11的GPL口和GPK口中的部分引脚相连,通过对GPIO口输出高低电平来控制小车的直行、90°左转弯、90°右转弯和180°掉头。 由于小车在转向时,轮胎会出现打滑现象,这样会影响小车的90°与180°的精确转向。为了让小车能在无黑线的情况下精确转向,本设计中采用hmc58831电子罗盘作为小车的“眼睛”。一般的电子罗盘都会存在一定的偏差,通过校正以后可以使精度达到1°左右。 由于本设计中只是为了让小车转向,并非准确地测出与地理北极方向的偏向角,所以在校正后可直接使用输出数据。为了让小车转向时迅速且准确,设计了分段的转向运行方案,利用光电测速模块和20格码盘控制小车的运行。主要的程序流程图如图4所示。 为了让小车能在无黑线的情况下走出相对距离内的直线,在电机的控制中采用PID控制算法进行调速。根据测速系统反馈回来的当前电机速度和设定速度进行比较,将偏差作为新的输入量控制PWM信号的占空比,从而实现各个电机在单位时间内走的路程近似相等。PID控制算法原理如图5所示。 在记忆库建立完成后,智能小车的运行是从记忆库中读取已定路线在各点的状态值,最后实现小车按照规定路线行驶。主要的程序流程如图6所示,而从终点回到起点只需将记忆库的内容反向读取,并将左右转向取反。 4.4 工作模式的控制 本设计中智能小车的运行有两种工作模式:第一是建立记忆库;第二是按照记忆库实现循迹。通过按键控制小车的工作模式,当环境发生改变时,只需通过按键设置成建立记忆库模式,即可完成记忆库的修改。 5 系统测试结果及结论 通过对智能小车的测试,小车能将行驶过程中各个状态记录入库,完成了利用超声波避障和Linux文件系统的记忆库的建立,并且通过记忆库可实现小车按设定路径的循迹的功能。 本方案使得小车在不同的环境中只需人为地重新设置障碍,通过设置小车的功能模式
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)