应玉明
(金华职业技术学院,浙江金华 321017)
随着城市交通堵塞问题日益严重,城市轨道交通就成为国内外解决交通堵塞问题的有效途径。为了提高城市轨道交通中车载定位的精度和可靠度,各种车载GPS 导航系统应运而生。目前的全球定位系统有我国自主研制的北斗导航系统,俄罗斯的GLONASS 系统,欧洲的伽利略系统和美国的GPS 系统。由于美国的GPS 系统发展比较早,技术比较成熟,可靠性高,误差小,在嵌入式领域,使用也较为普遍。
使用MINIGUI 开发的导航系统在市面上比较少见。MINIGUI 是由北京飞漫软件技术有限公司开发的、国内为数不多的国际知名自由软件之一,于1998年底由魏永明先生主持和开发,经历十几年的应用,已经非常成熟和稳定,并在许多实际产品或项目中得到了广泛的应用,包括数字机顶盒、电力、通讯、医疗、工控等领域,它还可以运行在多个Linux 操作平台之上,如uCliunx 、Vxworks、uC/OS-II、OSE 等,也可以运行在Windows操作系统之上。
本系统采用ARM平台,使用MINIGUI进行嵌入式图形开发,实现GPS 导航。系统能方便查询当前行驶的经度、纬度、行驶速度、当前时间及相关报警信息等。
图1 所示为本系统结构图,它由ARM 开发板、显示模块、电源模块和GPS 模块组成。GPS模块主要由串口通信、GPS 数据处理、读取数据、存入数据、数据提取、数据处理等组成。
1.2.1 串口通信
图1 系统结构图
本系统采用的是RS-232异步通信串口,主要解决了计算机经串口连接通信设备(主要是Modem),以串行二进制比特位流的形式与外界进行数据交换的问题,核心是数据终端设备DTE(计算机)与数据通信设备DCE(Modem)之间的接口问题,总共设计了14种接口类型,能提供全双工的通信方式。
1.2.2 GPS数据处理
采用CC50-BG联星公司的芯片,该芯片提供了多种格式的数据,这些不同格式的数据中包含了经纬度、时间、速度、日期、海拔高度、偏转角度、信噪比、接受状态灯信息等。采用解码的是GPRMC格式的数据。解码GPS数据分为几个过程:读取数据、存入数据、提取数据、处理数据、保存数据、清空缓存。
1.2.2.1 读取数据
系统通过串口采集的数据,利用read(fd,buffer,1)函数,从缓存中读取一个字节的数据;读取的数据有些缓慢,便于同时完成一条数据的存入,每一段数据是以“$”开头,以“ ”结尾。
1.2.2.2 存入数据
利用strcat(dest,buffer)函数把每次读到的一个字节的数据进行拼接起来,直到遇到“ ”结束。
1.2.2.3 数据提取
读取一条完整数据后,通过调用strncmp(dest,array,6)函数比较是否为所需数据,其中array数据存放提取格式数据($GPRMC)。若是,则跳到该格式数据处理函数进行处理;若不是,则清空dest缓存里的数据,进行下一次的数据存储。
1.2.2.4 处理数据
当确定该数据是所需数据时,通过strlen函数计算出dest 数据长度,再把数据一个个送入到处理函数,这里定义了一个SectionID 变量,统计逗号个数,因为每段数据都是以逗号结束的,当统计到第一个逗号的时候开始处理第一段的数据内容,把数据按需要的长度存入到定义的结构体中,并且在每次处理结束加上’ ’,形成完整的一段字符数据。实现部分代码如下:
1.2.2.5 保存数据
每次处理后的数据需保存到定义好的结构体中,GPS_DATA 保存处理经度、纬度、方向、海拔高度、行驶速度、定位状态(查看是否定位成功)以及未处理的国际标准时间(UTC)等,时间日期需进行二次处理,GPS_DATE 保存处理好的时间,年、月、日、时、分、秒等信息,具体定义如下:
1.2.2.6 清空缓存
把处理结束的dest 缓存中的数据,通过bzero(dest,sizeof(dest))函数清除,以便提取下一次的数据。
当接收到的数据在界面上显示的同时,经度纬度需要取出和数据库里面的数据进行比对,首先查询是否是所要到达的区域,如果是要到达的区域,作出相应的提示音。
MINIGUI 提供了众多的位图操作函数,这里选择BMP格式的图片。要显示地理图片,首先要把该图片加载到应用程序的工作目录下;然后MINIGUI应用程序使用LoadBitmapFromFile函数读取BMP 文件的数据,使用FillBoxWithBitmap 函数将BMP图片输出到液晶屏显示;最后使用Unload-Bitmap 函数清楚已加载的位图资源。实现部分代码如下:
SQLite 是D.Richard Hipp 于2000 年开发出来的一个自容纳、可嵌入式、零配置数据引擎的小型C 库。它支持多数SQL92 标准,可以在主要的操作系统上运行,支持C/C++、Java、PHP等大多数计算机语言。SQLite 的版权允许无限制的应用,不用支付任何使用和授权费用,它比MySql免费更彻底,已经成为了最受欢迎的开源软件之一。目前大部分手机平台都采用SQLite 作为数据库,如谷歌的Android系统、苹果的IOS系统手机平台等。基于本系统采用的是MINIGUI 编程,它最大的特点在于采用C 来编写代码,而SQLite 的底层也是C语言编写的。
MINIGUI 提供给SQLite 的C 的一组API 接 口函数,通过调用这组API 便可以实现链接。对话框窗口过程函数MSG_INITDIALOG 消息处理里面调用SQLite的相关数据。
由于轨道交通只能在固定的轨道上运行,不同于社会其他车辆的运行线路,针对这个特点,本系统事先将所有线路上的每个关键节点对应的GPS 坐标位置按线路及点位置索引存放在SQLite的某个表中,该表信息可扩展,如可加上位置点的地名、站点、周围建筑等等相关信息。由于GPS数据存在一定的精度漂移,综合分析线路数据可以修正GPS数据。系统采用三级缩放模式,由车载设备上的按钮进行放大、缩小切换。第一级全屏显示所有线路及当前位置;第二级放大显示所有线路的所有站点,当前位置为屏幕中心;第三级放大显示所有线路的道岔、信号机信息,当前位置为屏幕中心。地图采用位图或切片组合方式显示。由每一级地图左上角、右下角GPS坐标和像素坐标值,可以推导出给定GPS坐标点对应的屏幕坐标。基于以上原理,事先将线路及环境信息画出,然后将采集的GPS点实现动态位置标注,同时将当前位置置于屏幕中心。将地面传送的道岔、信号机、信标等设备状态也显示在地图上,从而实现车载导航、预警、信息的显示。本系统能够实现前后车位置距离预警、前方信号机道岔预警、前方站点距离及预计到达时间提示,运行线路回放等功能。
本文深入探讨了MINIGUI 和SQLite 数据库在车载导航系统中的应用以及地图数据的使用,方法简单实用,思路清晰,在实际的应用过程中可以根据自己的需求来进行改动。本系统已经在厂矿铁路、有轨电车领域都有成功案例。开发本系统,需要搭建PC 和ARM 开发板的环境,由于通过MINIGUI的官网下载的Winows版本功能有所裁剪,所以建议读者安装Linux版本,不过配置比较麻烦,在网上有很多安装手册。
[1]王欣欣,蒋念平.基于ARM⑩的嵌入式系统导航仪的设计与开发[J].微计算机信息,2012,28(-9):150-151.
[2]北京飞漫技术有限公司.MINIGUI 编程指南[Z].2004.
[3]北京飞漫技术有限公司.MINIGUI 用户手册[Z].2007.
[4]张斌,罗桂娥.MINIGUI 连接SQLite 数据库的编程实现[J].微计算机信息,2008,24(9):138-140.