王丽侠
(唐山学院 智能与信息工程学院,河北 唐山 063000)
无人驾驶智能车也叫无人车,是指在车内没有驾驶员的情况下,通过无线遥控或者自身程序来控制汽车的行驶状态和路径线路等状态参数,从而实现无人驾驶[1]。无人车具有广泛的应用前景,它在智能交通系统上的应用是最典型的,不仅能适应天气的变化,还能减少交通事故的发生。无人车在军事上也具有重要作用,例如它可以在危险的核武器和生物化学污染过的地区进行巡逻和侦查,提高搜索的精确度,提高办事的效率。在农业上,无人车可以用来进行精细作业。因此,无人车的研发显得十分的必要和迫切。
目前,在无人车的路径导航方面取得了巨大的研究进展。如麻省理工学院的无人车研发团队在运动规划系统中引入RRT算法,以提高其避障能力[2];西安交通大学的马亮博士针对无人驾驶车辆的运动规划问题,提出了一种变形RRT算法[3];文献[4]提出了一种基于地图匹配的宏观定位和基于环境感知的微观定位相结合的综合定位方法,该方法实现了车辆在局部地图中的全局精确定位。
本设计将基于全球定位系统GPS和百度地图API进行无人车控制系统的设计,通过无线串口模块使监控站与无人车进行信息交互,从而实现对无人车的导航控制。
无人车导航控制系统分为无人车导航终端和监控站两部分。无人车导航终端以STM32F407为控制核心,并通过双串口分别与无线传输模块和GPS模块连接,由此搭建无人车底层硬件平台,无人车通过433 MHz的无线收发模块与上位机监控平台进行数据的无线传输。监控站运行于普通用户配置的PC机,由C#语言编程实现,监控站软件人机界面通过加载百度地图的方式,将无人车的路径信息进行实时显示与跟踪,并进行路线规划与控制。
无人车总体设计框图如图1所示。
图1 无人车总体设计框图
本设计使用的无人车导航终端由STM32F407单片机模块、L298N电机驱动模块、无线串口模块和GPS模块四部分组成。L298N电机驱动模块可以提高电机的运转速速,从而带动整个智能车的行驶。单片机STM32F407通过串口1连接无线传输模块,用来和监控站进行数据传输;串口2连接GPS模块,用来获取定位信息,以进一步上传给监控站进行显示。监控站通过无线传输模块发送控制指令信息给无人车,使无人车按规定路线行驶。
在无人车的设计中,STM32F407单片机通过GPIOB的PB1和PB2引脚控制左电机,通过PB3和PB4引脚控制右电机。当PBout(1)、PBout(2)、PBout(3)、PBout(4)均输出为10,01或00时,对应无人车前进、后退或停止;当PBout(1)、PBout(2)、PBout(3)、PBout(4)输出为1001时,无人车右转;当PBout(1)、PBout(2)、PBout(3)、PBout(4)输出为0110时,无人车左转。
无线串口模块为成都亿佰特公司生产的E31-TTL-50,这是一款基于AX5043射频芯片的直插型无线串口模块,半双工,使用433 MHz默认工作频率,它具有抗干扰能力超强、编码效率高、可加密等特点。设计中,无线模块采用方式0,M0和M1,均接地,其RXD和TXD分别连接STM32F407单片机的UART1的PA9和PA10。
本设计GPS模块采用U-BLOX系列中的NEO-6M芯片,考虑到无源陶瓷天线在室内的定位速度较慢,而有源天线定位速度较快,所以将GPS模块配合有源天线来使用,以快速获取定位信息。模块默认波特率为9 600[5]。其中,模块的TXD发送引脚和RXD接收引脚分别与STM32单片机UART2的PA3(UART2_RXD)和PA2(UART2_TXD)连接。模块通过固定的帧格式传递GPS定位信息,通过编程实现无人车的位置信息的获取。
2.2.1 无人车行驶设计
在行驶设计中,定义了控制电机的4个引脚,并编写了5个函数,分别为前进、后退、左转、右转和中止函数,来控制无人车。当无人车接收到监控站发送的指令后,先对指令进行识别,判断发送的是哪种控制信息,调用相应函数。无人车行驶设计的流程图如图2所示。
2.2.2 GPS定位设计
从监控站实时观察无人车的位置,首先需要通过GPS模块来获取无人车的位置信息。GPS开始定位后,先把位置信息通过串口2发送给单片机,单片机收到后,再通过串口1发送给监控站。监控站收到无人车的经纬度坐标后,在百度地图上显示其位置。
图2 无人车行驶设计流程图
GPS数据传送的流程图如图3所示。
图3 GPS数据传送流程图
监控站软件设计基于Visual Studio 2013平台,使用C#语言和JavaScript脚本语言编程,结合百度地图API二次开发来实现。
在Visual Studio 2013中使用SerialPort控件来进行串口通信,流程图如图4所示。
图4 串口通信流程图
监控站软件运行后,自动调用GetPortNames()函数,将已连接的端口号显示在Combobox的下拉列表中,工作人员匹配端口号,设置波特率、数据位、停止位和校验位信息,设置正确后,监控站和无人车即可进行通信,从而控制无人车行驶及进行路径信息的显示。
将百度地图嵌入监控站界面,既可以显示出无人车的当前位置,也可以对无人车行驶路线进行规划。要想实现这个功能需要借助.NET下的WebBrowser控件。
在监控站窗体中从工具箱中拖入WebBrowser控件,用来加载百度地图API的本地网页文件,进而显示百度地图。此时必须在Ground窗体From中添加一个Load事件,并加入以下代码:
private void Ground_Load(object sender,EventArgs e)
{string str_url=Application.StartupPath+"BMap.htm";
Uri url=new Uri(str_url);
webBrowser1.Url=url;
webBrowser1.ObjectForScripting=this;
}
Form窗体的Load事件的实现:当打开监控站的界面时,自动与百度地图的服务器建立连接,将地图显示在界面中。百度地图调用流程图如图5所示。
加载地图后,基于百度地图的二次开发可实现路线规划和路线显示的扩展功能。路线规划即为在导航软件中将无人车的路线绘制出来,提取出经纬度信息及速度信息,通过无线串口模块发送给无人车,使无人车按照既定路线行驶;路线显示即无人车将路线发送到导航软件中并显示到地图上,使操作者对无人车的行驶轨迹有所了解,从而能够判断其运行情况。
图5 百度地图调用流程图
监控站界面运行后,设置串口通信的相关参数,打开串口,准备收发数据。无人车将行驶过程中的位置信息以经纬度的形式实时上报,并显示在百度地图中。同时,通过界面控制无人车的行驶路线,实现跟踪、定位的功能,如图6所示。界面右侧加载百度地图,地图中红色线为规划路线,路线的经纬度信息以列表形式显示在地图左侧,点击发送按钮即可发送至无人车;蓝色线为实际行驶路线,可通过生成经纬度查看其经纬度列表;同时界面还可以显示行驶速度及当前位置坐标等。
图6 无人车导航系统监控站运行界面
本文完成了无人车导航终端硬件和软件设计及监控站软件设计。经实验测试,监控站导航界面交互性良好,且与无人车的信息交互稳定、可靠,实时性强,系统拓展性良好,具有一定的实用价值。