基于STM32的智能车控制系统的设计与实现
2018-09-21黄姝娟刘萍萍白小军
黄姝娟,刘萍萍,白小军,张 雅
(西安工业大学 计算机科学与工程学院,陕西 西安 710021)
0 引 言
随着计算机技术的快速发展,人工智能[1]、物联网[2-3]等新技术也渐渐走入人们的视野。智能交通系统(intelligent transportation system,ITS[4-5]),就是一种先进的一体化交通综合管理系统,是指利用先进的信息技术、数据通信传输技术、电子传感器技术、电子控制技术和计算机处理技术相对完善的基础设施,有效整合了整个运输管理系统,建立实时、准确、高效的综合运输管理体系[6]。ITS可以有效利用现有交通设施,减少交通负荷和环境污染,确保交通安全,提高交通运输效率,从而受到了广泛关注。
智能车是智能交通系统的重要组成部分[7],也是轮式移动机器人[8],是现代汽车工业和电子计算机互相结合的最新科技成果,具有自动驾驶、自动变速,甚至具有道路自动识别的功能。目前物联网技术飞速发展,并广泛应用于各行各业之中,无人驾驶智能车也必将成为物联网技术应用的主流领域。智能车是指将汽车模型化,并以此为载体装载各种功能型的控制器、传感器、执行器等装置,通过传感系统感知和智能信息交换,以实现循迹、避障、无人驾驶等功能[9]。在此背景下,文中基于STM32微控制器[10-11]、磁导航传感器、红外线传感器、RFID模块[12-13]、ZigBee通信[14-15]模块等设计了一款能够自动循迹、规定路线行走避障的无人驾驶的智能车控制系统。
1 系统总体设计
1.1 硬件设计
系统设计实现智能车的路径规划、碰撞检测、与上位机通信三大功能,所涉及到的系统结构如图1所示。其中智能车主要是由STM32F10x芯片、L298电机驱动芯片、磁导航传感器、RFID传感器、红外传感器以及ZigBee通信模块组成。上位机与智能车之间通过ZigBee通信。
图1 智能车控制系统结构
智能车电机使用STM32芯片的四个管脚PB12、PB13、PB14、PB15分别控制智能车的左前轮、左后轮、右前轮和右后轮。当PB12为低电平,PB13为高电平,PB14为低电平,PB15为高电平时,四个电机正转,实现智能车的前进;当PB12为高电平,PB13为低电平,PB14为高电平,PB15为低电平时,四个电机反转,实现智能车的后退;当PB12、PB13为低电平,PB14为低电平,PB15为高电平时,左轮停止右轮正转,实现智能车的左转;也可以通过左轮右轮的速度差实现智能车的左转右转。
系统中的三个传感器:磁导航传感器、RFID传感器、红外传感器分别负责循迹、转向以及避障。ZigBee通信模块主要负责与上位机进行通信,实时汇报智能车所处位置以及接受上位机发来的命令。
1.2 软件功能模块划分
智能车控制系统主要完成路径规划、碰撞检测以及与上位机通信三大功能。
(1)路径规划。
智能车路径规划分为两部分,一是利用磁导航传感器完成自动循迹功能。通过磁导航传感器三个扫描点扫描路面上的磁条,结合智能车的左轮或右轮调速来调整智能车的转向,以保持智能车在路面的中间行驶而不会偏离轨道。二是对路线进行规划,智能车在前进中会扫到RFID电子标签,根据标签决定智能车是否转向。具体由路径编码和路径编码有效位数决定。
(2)碰撞检测。
通过红外传感器扫描识别智能车前方有无障碍物,扫描到前方有障碍物时智能车停止然后绕过障碍物。通过检查外部中断触发请求,说明前方有障碍物。
(3)与上位机通信。
主要实现的是智能车与上位机之间收发无线通信传输的数据,智能车需要通过ZigBee模块将一些数据信息上报给上位机,包括智能车信息、智能车运行状态、智能车到达特殊位置反馈指令、智能车的位置信息等。而上位机是通过协调器的ZigBee模块实现对智能车的控制。
2 智能车路径规划功能的设计与实现
2.1 路径规划详细设计
路径规划包括自动循迹和读RFID电子标签两部分。
首先,智能车根据磁导航传感器三个触点的值来决定是否偏离轨道,是需要左转、右转还是直行。左转时就是执行调速程序让右侧前、后轮加速,右转时就是执行调速程序让左侧前、后轮加速,使智能车始终保持在路面的中间行驶而不会偏离轨道。具体的自动循迹方案如表1所示。
表1 自动循迹表
实现的核心部分代码如下:
for(i=0;i<=3;i ++) //三个触发点监测
{if(Trigger[i]==LED_ON)//根据点的触发情况计算调整参数
{value|=(1<
//将磁导航触发分为几种触发情况,1点触发,2点触发,3点触发
if(value==0x05) //两边触发中间不触发情况
{if(signed==3) n=3;//右转
else if(signed==1) n=1; //左转}
else if((value==0x07)&&(signed==0)) n=2; //直行模式中的全触发默认直行
else if((value==0x07)&&(signed==1)) n=1;//左转模式中的全触发默认左转
else if((value==0x07)&&(signed==3)) n=3;//右转模式中的全触发默认右转
else if((value==0x06)&&(signed==0)) n=2;//直行模式中的2点触发默认直行
else if((value==0x06)&&(signed==1)) n=1;//左转模式中的2点触发默认左转
else if((value==0x03)&&(signed==0)) n=2;//直行模式中的2点触发默认直行
else if((value==0x03)&&(signed==3)) n=3;//右转模式中的2点触发默认右转
else if((value==0x04) n=1;//第一个点触发,左转
else if(value==0x01) n=3;//第三个点触发,右转
其次,当智能车扫描到RFID电子标签时,读到RFID标签的内容,根据其内容,按照事先安排的路径行驶。
具体路径规划的函数包含了险情提醒、出入停车场检测、辅助直线点、辅助左转右转点、减速带标志检测等RFID标签,当智能车扫描到RFID电子标签时,首先判断是否到达避险模块和停车场模块,然后判断是否到达特殊标签位置匹配RFID电子标签,如果扫描到特殊RFID电子标签,也就是当匹配到关键点的地址坐标时,就根据路径编码和路径编码有效位数决定智能车接下来将要走的路线。实现方法是将32位路径编码分成每两位进行判断,若路径编码为00,表示右转;为01,表示左转;为1X,表示直行。
路径编码和路径有效位数是决定智能车路径的最重要的因素。规划智能车的路径根据是否与上位机通信分为两种情况:当智能车与上位机不通信时,智能车的路径完全是由路径编码决定;当智能车与上位机通信时,智能车的路径就由上位机发送指令数据到智能车来决定智能车接下来要走的路径。智能车实现路径规划的流程如图2所示。
2.2 智能车与上位机通信模块详细设计
智能车与上位机通信分为两种情况:一种是智能车上报信息给上位机;另一种是上位机发送指令给智能车命令字,如表2所示。这两种情况的信息都是以数据帧格式发送,数据帧中包含启动命令字0xFFFE、目标节点地址、自身节点地址、发送命令、数据信息、字节数和校验和。发送数据函数就是打开串口发送数据到缓冲区,先判断发送缓冲队列头有没有新接收的数据帧,然后判断接收到的数据帧是否处理,如果没有处理就打开串口发送数据,否则就将发送缓冲队列指针后移,插入要发送的数据。
图2 路径规划流程
命令字命令解释获取的内容0X11获取车辆信息命令第1个字节:车辆ID第2个字节:车辆类型,0:公交车 1:私家车0X12给智能车发运行命令第1个字节:运动指令00:前进(结合路径编码实现)01:停止02:加速03:减速04:入库(进入车库时使用)05:出库(从停车位到停车场出口时使用)
3 实验测试
3.1 路径规划测试
首先测试智能车在磁条上能否沿磁条运行,将磁条铺设在地面上,智能车可以沿磁条运行,如图3所示。其次,测试智能车按照路径编码运行,测试结果如表3所示。
图3 智能车沿磁条运行
路径编码智能车路线路径编码有效位数0X92FFF0000X1001 0010 1111 1111 1111 0000 0000 0000直行,左转,右转,直行,直行,直行,直行,直行,直行,直行,右转,右转,右转,右转,右转,右转0X200X900A2F000X1001 0000 0000 1010 0010 1111 0000 0000直行,左转,右转,右转,右转,右转,直行,直行,右转,直行,直行,直行,右转,右转,右转,右转0X160X6FFFF0000X0110 1111 1111 1111 1111 0000 0000 0000左转,直行,直行,直行,直行,直行,直行,直行,直行,直行,右转,右转,右转,右转,右转,右转0X10
3.2 避障功能测试
对智能车的避障功能进行测试,智能车扫描到障碍物后停止,后退并绕过障碍物继续前行。测试结果如图4所示。
图4 智能车绕开障碍物
3.3 智能车与上位机通信模块测试
智能车与上位机进行通信,对上位机发送指令给智能车和智能车上报信息给上位机两方面进行测试。
(1)上位机发送指令给智能车,如果智能车能够按照指令运行,说明上位机发送指令成功,否则说明智能车没有发送成功。经测试之后,智能车能够按照上位机指令执行相应的动作。
(2)智能车主动上报信息给上位机,如果上位机没有显示出智能车位置,说明智能车信息未上报成功。经测试之后,智能车能够上报自己的信息给上位机,上位机可以实时显示小车位置,如图5所示。
图5 上位机显示出智能车位置
4 结束语
文中设计了一种以STM32为主控制器的智能车控制系统,主要完成智能车路径规划、智能车碰撞检测和Zigbee通信三大功能模块的设计与实现。测试结果表明,该系统能够完成按照规划的路径行驶,能够通过ZigBee完成与上位机接收和发送数据并且能避开障碍物行驶。作为一项具有广泛应用前景的技术,未来智能车将在科技、工商业、军事以及人们的生活中发挥越来越重要的作用。