基于北斗II/GPS车载定位终端的研究与实现
2017-07-14凌涛
凌涛
摘要:为了减少车辆对于单一导航系统的依赖性,对北斗/GPS组成的双模导航系统进行了研究。主要做了以下工作:首先,是根据双模导航终端的需求建立了嵌入式硬件和软件平台。硬件平台包括对系统中各模块的连接与系统的搭建,通过了解接收模块的电气特性进行相应设计,实现硬件电路部分的搭建。软件平台里搭建Android开发环境;二是通过研究分析北斗二号和GPS的数据传输协议以及.Android系统的串口通信技术,针对北斗/GPS双模模块数据传输特点,完成数据的接收与解析模块的设计、实现。提出的设计方案和解决方案均已得到实验验证,该系统的研制有助于很好地推动我国北斗导航的民用化。
关键词:北斗;GPS;双模导航;Android
国内城镇化进程加快,城镇道路建设日新月异,机动车数量增幅明显,为及时掌握路况信息,缓解交通拥挤压力以及解决各国汽车高速发展带来的诸多问题,车载导航系统已成为了首要方案。卫星技术实现导航则是目前世界上广泛采用的车载导航技术。卫星导航系统由于拥有其独特的使用价值,可以为用户提供定位、导航和授时服务,且精度高,受自然条件影响小等特点,被世界各国广泛应用于军民领域。目前世界上较为著名的是美国的GPS、欧盟的Galileo及俄罗斯的Glonass。我国虽然起步较晚,但发展迅速,北斗二代作为我国自主研发的卫星导航系统,经过最近几年发展已经逐渐成熟。北斗二代定位原理与GPS等一样,均采用了单向测距三维导航。目前北斗导航系统也分为民用和军用两种版本。民用版本精度是10米,军用版本精度是5-6米,测速精度是0.2m/s,授时精度50ns。
目前国内市场上的导航系统大多为单一定位模式,本文设计的是一种可以同时接收两种卫星导航系统的信号,通过将两种信号组合进行定位,从而减少对单一导航系统的依赖性。
1定位系统的总体设计
1.1系统设计方案
本文设计思路是利用Android系统在Cortex-A8微处理器平台上开发,集成车载导航系统所需的各功能模块,并编写配套的硬件驱动,利用北斗/GPS双模导航模块接收定位数据,通过串口接口把定位数据传递到系统内部,在系统内部将处理过的数据通过终端实现定位功能。可以减少单星导航情况下可能会出现的信号衰减等情况。图1为硬件平台框图。
1.2硬件模块
本文设计的车载导航定位系统采用三星公司的S5PV210芯片作为主处理器,这是一款基于Cortex-A8处理器,运行主频1GHz,拥有512M DDR2 SDRAM及1GB SLC NAND Flash。外接7英寸的显示屏,便于人工操作。北斗/GPS双模导航模块采用了和芯星通科技(北京)有限公司的UM220芯片,通过RS-232接口与系统相连。该UM220芯片具有集成度高,功耗低,价格低等特点,比较适合现阶段应用在导航系统中。
2软件设计流程
随着Android系统的普及化,现在大部分人对该系统都操作熟练,本文所设计系统也定位在Android系统之上,便于操作,亦方便日后对系统进行完善增加其他功能。所以该系统首先搭建Android开发平台,然后在平台内对数据进行相应的解析处理。数据的处理是按照信号的接收一处理的这一流程来进行整体设计的。
2.1Android开发环境的搭建
由于嵌入式系统是针对具体应用,嵌入式设备资源不足以支撑软件开发的资源,所以需要用到交叉开发模式。所以需要安装交叉编译器,在此基础知识之上再制作根文件系统和An-droid应用环境搭建。环境搭建好以后就可以对Android源码进行相应的编译并对开发环境进行搭建。搭建好以后即可以对整个系统进行软件实现。
2.2北斗/GPS模块
本文选用的北斗/GPS接收模块也是遵循着NMEA-0183v3.0制造的,只是为了北斗信号的接收,增加了一些北斗二号协议。由美国国家海洋电子协会(National Marine ElectronicsAssociation)为海用电子设备制定的NEMA-0183协议,目前已经成为了GPS导航设备统一的RTCM(Radio Technical Commis-sion for Maritime services)标准协议。
该协议采用ASCII码,帧格式形如:Saaccc,fff,fff…,fff*hh
由于NEMA-0183协议里的数据帧,大致划分起来就是帧头、数据及帧尾三大部分,故我们在进行数据处理时,一般可以通过帧头先行进行判断。
2.3定位系统移植
由于北斗/GPS双模系统的工作原理与Android源码提供的GPS模拟器定位模式基本一致,所以我们参考Android的源码来对北斗/GPS接收模块进行移植工作。
在这里,所要解决的是Android的驱動部分与HAL(硬件抽象层)两个部分的源码进行修改。由于这里采用的北斗/GPS接收模块是采用串口通信,而Android源码内本身也提供了串口驱动,所以这个部分无需做过多修改,只要使串口通信模式与北斗/GPS接收模块保持一致即可。然而对于HAL层的实现则比较繁琐,这也是Android系统自身的特点所在。
2.4北斗/GPS实现
系统中所用的双模信号接收模块,其自身是输出NEMA数据,接口实现较易,直接将其与串口对接,系统即可直接处理数据。在Android系统中,串口的对接,通常是直接设置串口,本系统当中将串口设置为/dev/serial3。
Android系统中的HAL层,主要包括对串口设备的初始化,接收到的卫星数据大都在此处进行解析等工作。由于Android系统中默认是GPS,而系统增加了对北斗信号的处理,所以在这里要进行一些修改,使Android也能解析北斗信号。
接下來是建gps.c
这里首先是需要初始化,然后对接收到NEMA数据,采用“获取一解析一上报”的解析方式。在GpsInterface.init的实现中,完成对北斗/GPS接收模块的初始化。接下来打开接收模块,系统确认模块以及正常工作。初始化工作完成后,通常会启动一个polling线程,用来循环监听接收模块上状态的变化,判断是否发送控制命令或是产生了NEMA的数据信息。Gpsln-terrace里的开始和停止命令此时将控制这个线程的进行与停止。如果接收模块产生了NEMA数据后,立即对数据进行解析,然后把数据存放到GpsLocation中,将解析过后的数据通过GpsCallbacks上报给上层应用。
北斗/GPS接收模块采用的是NMEA-0813标准,接收到的“GNGGA”、“GNGLL”、“GNGSA”、“GPGSV”、“BDGSV”、“GN-RMC”这几种语句内,真正用到的是GNRMC。“GPGSV”、“BDGSV”是可视卫星数量,如若进行单独导航时,则也相对关键。所以在这里,将重点对这三组数据进行解析。
首先是对“GPGSV”、“BDGSV”这两组解析。下面给出关键部分代码。
3系统测试运行
为验证本文导航系统数据处理的正确性和有效性,这里采用串口工具,将其采集到的双模导航的数据显示出来,以便观察和分析数据。图2展示了系统接收到的双模数据信息。
图3是双模导航系统进行工作所得到的经纬度。在实验中测得的坐标为,纬度:北纬31,5328056,经度:东经117.1833574,与实际坐标基本相符。通过以上测试表面,双模导航数据处理程序能够正常运行,准确接收并且解析北斗/GPS所获得的导航数据,且数据完整。
另外对系统进行三种模式定位所需时间进行了粗略记录。如表1所示。
4测试结果分析
通过上述测试,该终端基本可以达到预定的设计要求,系统实现了两种卫星定位信号的收能力。终端使用电子地图的情况下,初步达到了车载导航定位系统所应有的基本功能。
在本次测试中,由于导航终端所处位置建筑密度较大,受周边建筑影响。定位时,仅有两颗北斗二号卫星(如图4所示),但由于同时有至少4颗的GPS卫星存在,所以依然未影响定位,且定位较为准确。由此可以看出双模导航的优越性,以往单模卫星定位时,在受外部环境的影响下会由于定位卫星数量不足,而导致无法定位。在本系统里,恰恰由于是采用了双模定位,可见双模导航系统可以大大减少空间的“盲区”,增加了车载导航的实用性与便捷性。等到北斗二号在2020年正式投人使用时,将显著提高当前导航终端的定位精度和实用性。
本文研究的定位终端系统的实验结果达到设计预期。通过提取北斗/GPS双模导航模块接收到的卫星数据进行解析,得以实现具有双重卫星接收状态的车载导航终端。特别是在GPS搜星效果不佳的情况下,加入了北斗信号后,大大提高了定位速度,从而保证了用户在使用该终端时,可以在任何时间、空间都可以接收到卫星定位服务,使用户行车得到最大的保障。