刘博,杨斌
(西南交通大学 信息科学与技术学院,成都610031)
随着人们生活水平不断提高,私家车越来越多地走进了平常百姓家。这样就引发了一个严重的社会问题,车辆被盗的情况越来越多,在这个趋势下车载定位监控系统越来越得到广大车主关注。车载定位监控系统可以时时刻刻保护车辆的财产安全。这种车辆安防系统将会是汽车租赁公司、汽车厂商保护车辆安全的合理解决方案。
中国版BeagleBone Black(BBB)是英蓓特科技有限公司推出的一款基于AM3359处理器的开源开发套件。处理器集成了4 GHz的ARM Cortex-A8内核,并提供了丰富的外设接口。中国版BBB的扩展接口包括网口、USB Host、USB OTG、TF卡接口、串口、JTAG 接口(默认不焊)、HDMI D Type接口、e MMC、ADC、I2C、SPI、PWM 和LCD屏接口。通用接口包括4组通用输入输出接口(GPIO),每一组GPIO模组提供32个专用的通用接口输入输出引脚,因此通用的GPIO有128个引脚。可编程实时单元和工业通信子系统(PRU-ICSS)包含了两个32位RISC内核(可编程实时单元,即PRUs)、存储器、终端控制器,以及能够支持更多周边接口和协议的内部外设。图1为BeagleBone Black开发板。
图1 BeagleBone Black开发板
图2为SIM908开发板。SIM908是一款集成GPS导航技术的四频GSM/GPRS 模 块。模块结构紧凑,将GPRS和GPS整合在SMT封装里。开发板拥有一个GSM控制串口和GPS控制串口。GSM控制串口可以控制开发板工作状态,开启相应的功能,GPS控制串口功能为读取GPS数据。SIM908开发板可以实现GPS定位和GPRS数据的传输。
整个系统共分为3个部分,如图3所示。第一部分为车载监控终端,由SIM908和BBB开发板构成,SIM908负责GPS数据的采集,并通过GPRS数据传输功能发送GPS数据,BBB开发板负责GPS数据处理和SIM908工作状态的控制。第二部分为移动基站,负责数据的转发交互。第三部分为系统的PC操作上位机,显示车辆位置信息。
图3 系统硬件架构图
系统软件构建如图4所示。
图4 系统软件构建图
2.2.1 基于QT实现上位机
在PC操作上位机,有两个Qt Web Kit控件分别用来显示Google地图和Baidu地图、一个IP地址输入对话框、当前GPS信息显示栏等。窗口界面的设计比较简单,在这里主要介绍数据的处理和内部的信号机制。在QT编程中应用最广泛的应该是信号、槽。信号顾名思义,就是一种声明消息,当按钮等触发事件发生的时候,监听的特定槽函数就可以运行,对指定的数据操作进行处理。
在本系统中SIGNAL readyRead()是TCP通信中特定的信号,它的意义就是当前的数据已经准备妥当,可以进行读取,这个时候就可以触发槽函数void readdata()对网络传输来的数据进行读取。同样,系统中声明了很多槽函数和信号触发,SIGNAL connected()是指当TCP通信建立成功后触发connectfinished()函数,告诉用户连接成功。当连接成功后就开始对获取的GPS进行解析,然后通过QT的QtWeb Kit与JavaScript的交互分别在Google和Baidu地图上描点显示,并在旁边的GPS数据栏中显示当前GPS数据信息。
2.2.2 GPS数据解析原理
GPS数据格式如下:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息。
字段1:UTC时间,hhmmss.sss,时分秒格式。
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)。
字段3:纬度N(北纬)或S(南纬)。
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)。
字段5:经度E(东经)或 W(西经)。
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算。
字段7:正在使用的卫星数量(00~12)(前导位数不足则补0)。
字段8:HDOP水平精度因子(0.5~99.9)。
字段9:海拔高度(-9999.9~99999.9)。
字段10:地球椭球面相对大地水准面的高度。
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)。
字段12:差分站ID号0000~1023(前导位数不足则补0,如果不是差分定位将为空)。
字段13:校验值。
程序设计中,首先应用字符串查找函数对GPGGA字段进行查找,然后分别对其进行相应处理,处理过程中会运用数据的相互转换。比如string和double,应用string库函数atof进行相应的转换。当数据处理结束之后,就可以应用GPS数据进行地图定位。
2.2.3 在线地图加载
QWeb View类提供了一个可以展现和编辑网页文档的widget。QWeb View是Qt Web Kit网页浏览模块的一个主要widget组件,可以用它来展现互联网网页。Qt Designer中创建的一个QWeb View,可以使用QWeb View的load()方法来加载一个网站,如load(QUrl("googlemap.html"))同其他所有QT的widget一样,需要调用show()方法才会显示出QWeb View。QWeb View除了用load方法设定网页路径外,也可以使用set Html方法加载html格式的网页,如set Url(QUrl("baidumap.html"))。网页文件加载之后,开启QWeb View的JS功能,这样就可以实现与网页文件进行JS交互应用了。
2.2.4 QtWebKit与JavaScript交互实现地图定位
QT与JavaScript互调是通过QWebFrame的两个函数来实现的:add ToJavaScript Window Object()将 QObject对象传给JS,这样JS就能调用QObject的public slots函数。QT通过evaluateJavaScript()直接调用JS中的函数,QWeb Kit与JavaScript交互原理图如图5所示。当GPS数据被解析之后通过如下的函数进行交互:
其中BaiDu_Mark()为网页中的JavaScript功能函数,如下所示:
图5 QtWeb Kit与JavaScript交互原理图
2.3.1 BBB串口驱动和设备树的实现
Device Tree是一种描述硬件的数据结构,起源于OpenFirmware(OF)。在Linux 2.6中,ARM架构的硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用Device Tree后,许多硬件的细节可以直接通过它传递给Linux,而不需要在kernel中进行大量的冗余编码。device tree有3种格式:一个是方便阅读的源文件*.dts(device tree source),另两个是经过编译送给系统使用的文件*.dtb(device tree blob)和*.dtbo(device tree blob overlay)。BBB上有UART1~UART5共5个可用的UART串口,配置*.dts源文件。在/lib/firmware目 录 中 创 建 设 备 树 源 文 件/lib/firmware/BBUART1-00A0.dts。以UART1为例:
P9.24和P9.26分别用作txd和rxd引脚。编译*.dts文件:dtc-I dts-O dtb-@ BB-UART1-00A0.dts> BBUART1-00A0.dtbo
加载dtbo文件BeagleBone Black中用cape manager软 件 管 理 所 有 的 cape,目 录 是/sys/devices/bone_capemgr.8/。这个目录内有一个叫做slots的文件,是capemgr软件的对外接口。加载cape:
echo BB-UART1>/sys/devices/bone_capemgr.8/slots
slot是“插槽”的意思,要插上一个cape,就要向这个“插槽”里“插入”(echo)相应的设备,echo的含义是“向标准设备输出”。同样也可以在程序中调用system终端命令挂载device tree来启动UART1:system("echo BB-UART1>$SLOTS")
通过以上的配置我们就可以方便地使用串口了。
2.3.2 GPS数据采集线程
GPS数据采集线程就是所谓的生产者,它主要的工作是不间断地对GPS数据进行采集,然后通知数据发送线程将打包好的数据发送。
在GPS采集线程中应用了Linux的特色功能异步I/O,Linux异步I/O是Linux2.6版本内核的一个标准特性,异步I/O背后的基本思想是允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成。稍后在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。在一个CPU密集型的应用中,需要预先知道这些数据的位置,所以预先发起异步I/O读请求。等到真正需要用到这些数据的时候,再等待异步I/O完成。使用了异步I/O,在发起I/O请求到实际使用数据这段时间内,CPU还可以继续做其他事情。这样就可以很好地应用CPU的资源,让应用程序更加合理有效地运行。串口数据准备好后,GPS数据采集线程就可以将准备好的GPS数据放入事先申请的队列中,并发送信号给发送线程,告知采集成功。
2.3.3 GPS数据发送线程
SIM908模块的GPRS发送模式一共有两个,分别是非透传模式和透传模式,其中非透传模式具有支持多连接的功能。但是在编程处理时选择了透传模式,透传模式下在设置生效、连接好网络端之后,就可以直接传输数据了。如“AT+CIPMODE=1”设置透传模式,“AT+CIPSTART="TCP","119.129.252.148",8080”建 立 TCP/IP连接或UDP,透传模式下建立好连接后就可以直接发送数据,无需发送指令即可相互发送数据。
GPS数据发送线程就是所谓的消费者,它主要负责将准备好的GPS数据发送到监控系统的终端,当GPS数据发送线程接到GPS数据采集线程的信号后,就会访问内存,将内存队列中的数据通过Socket套接字发送到客户端,然后发送一个信号给GPS数据采集线程,告之已经成功发送,可以再次采集数据。
当远程监控终端程序开启的时候,首先将GPS数据进行解析,然后在地图上描点。监控端地图定位如图6所示,图中的左半部分为百度地图的定位显示,右半部分为谷歌地图的定位显示,用两个地图进行对比,从而获得更加合理的定位显示。监控端卫星定位图示如图7所示,地图中标定的位置为西南交通大学0号实验楼。
本系统使用GPRS作为GPS车辆综合监控调度管理系统的无线传输手段,具有费用低、无需线缆施工及安全可靠、维护方便的特点,是一种经济可行、技术成熟的系统构建方案。通过实际检验,系统工作稳定,能够较精确地完成车辆监控,操作简单方便。
图7 监控端卫星定位图示
[1]李延兴.GPS技术研究新进展[M].天津:天津科学技术出版社,2009.
[2]邓中卫.GPS技术、应用与市场[M].北京:航空工业出版社,2012.
[3]钱天爵.GPS接收机使用与维修[M].北京:北京海潮出版社,2013.
[4]王广运.GPS精密测地系统原理[M].北京:测绘出版社,2007.
[5]王解先.GPS精密定轨定位[M].上海:同济大学出版社,2007.
[6]钱天爵,瞿学林.GPS全球定位系统及其应用[M].北京:北京海潮出版社,2007.
[7]洪大永.GPS全球定位系统技术及其应用[M].厦门:厦门大学出版社,2008.
[8]日本测地学会.GPS人造卫星精密定位系统[M].北京:地震出版社,2010.
[9]魏子卿.GPS卫星测轨网研究[M].北京:北京星球地图出版社,2012.