GPS车载导航系统的设计
汽车gps导航系统施文灶;王平
【摘 要】GPS车载导航系统融合了车辆、交通、计算机、通信、系统科学等领域的相关技术,逐渐成为交通导航的重要工具。本设计以处理器为S3C6410A的开发板作为开发平台,采用Linux作为嵌入式操作系统,选用GPS模块GR-87采集GPS数据,对GPS车载导航系统的方案进行论证,介绍了GPS数据的获取、电子地图的生成和显示。以福建师范大学校园为实测环境,实现实时定位、动态路径规划等功能。%GPS car navigation system which combined relatedifleds such as vehicles, transportation, computer, communication and systems science has gradually become an important tool for trafifc navigation. The design uses development board based on S3C6410A pro-cessor as a development platform, adopts Linux as an embedded operating system, selects GPS module GR-87 to collect GPS data. It dem-onstrated the design program for GPS car navigation system, GPS data acquisition, generation and display of the electronic map. This design uses Fujian Normal University as the measured environment, and achieves the function of real-time positioning and dynamic path planing.
【期刊名称】《软件》
【年(卷),期】2014(000)004
【总页数】5页(P32-36)
【关键词】GPS;导航;Linux;电子地图
【作 者】施文灶;王平
【作者单位】福建师范大学光电与信息工程学院,福建 福州 350117;福建师范大学光电与信息工程学院,福建 福州 350117
【正文语种】中 文
【中图分类】TP24
本文著录格式:[1]施文灶,王平. GPS车载导航系统的设计[J].软件,2014,35(4):32-36
1.1 系统功能
目前关于GPS/GIS的研究已成为一个热点主题,并得到迅猛的发展,地图数据公司崛起,导航软件推陈出新,往嵌入式发展的趋势已经很明显[1]。市面上的导航仪大部分都是使用WinCE系统,界面美观,支持很多PPC版的导航软件,但是WinCE不开源且运行时占用的资源较多,对于嵌入式开发不利。采用linux作为系统内核,可以更好地支持了研究人员的开发,同时也支持大量的开源软件,满足用户的各种需求[2]。虽然目前Linux平台下的开源导航软件很少,但是支持GPS的工具却有很多,像GPSdriver,Universal Maps Downloader等,这些开源软件给研发者提供了便捷的开发途径。同时QT4作为linux的开发利器,这几年发展迅猛,已超越MFC,仅次于java。综合上述信息,本文介绍一种基于GPS的车载导航系统的设计,使用linux内核+QT4,并用Universal Maps Downloader工具制作嵌入式电子地图,构建了一个集GPS信息显示、地图显示、最短路径显示为一体的完整系统。
(1)定位功能
GPS通过接收卫星信号,可以准确定出其所在的位置,位置误差小于10米。利用GPS模块,在地图上实时显示车辆当前的位置。
(2)地图导航功能
用户可以直接在地图上点出目的地,通过最短路径算法计算最短路径,并在地图上显示,从而实现导航。
1.2 方案论证
导航终端设备要求界面美观、功耗低、易于操作。系统应有彩触摸屏;低功耗、高速度的处理芯片;带有嵌入式操作系统;GPS信息接收模块;SD卡用以存放编译好的文件。系统结构框图如图1所示:
1.2.1 控制模块设计方案
方案1:采用凌阳公司的16位单片机,它是16位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点,用于语音处理和识别等领域,满足GPS模块功能的需要。但由于本系统需要彩人机交互界面,对处理速度要求较高,故不采用。
方案2: 采用samsung的S3C2440。S3C2440采用ARM9内核,实现了MMU、ARBA、BUS 和HARVARD的高速缓冲体系结构。它是一块高性能、低功耗的嵌入式芯片,并且可
植入操作系统。在个人PDA领域应用较广。植入操作系统后,用户在GUI编程方面具有很大优势。它内置AD/DA,便于扩展语音模块[3]。故选用此芯片为主控芯片。
1.2.2 显示模块设计方案
方案1:采用LCD显示。液晶显示屏(LCD)具有轻薄短小、低耗电量。但不能实现触摸功能,故不采用。
方案2:采用TFT显示。TFT屏幕带有四线式电阻触摸膜,能实现触摸功能,便于实现用户操作,故采用。
1.2.3 电子地图设计方案
方案1:使用谷歌地图API 或百度地图API函数接口,实现地图浏览器显示功能,实现方法简单,界面简洁,但是需要网络支持,不能离线浏览地图,不利于嵌入式手持设备上应用,故不采用。
方案2:下载地图图片在QT Graphics View 架构中添加,实现平移和缩放等显示功能。界
面质量高,显示效率高[4]。无缝拼接显示图片有效地降低了内存,提高了系统效率,故采用。
1.3 总体方案确定
系统的硬件平台采用友善之臂的mini2440开发板,mini2440体积小,便于携带;接口丰富,易于扩展;功耗低,便于长时间户外导航。本系统硬件设计的关键是GPS导航模块。
对比市面上的GPS模块,本系统采用GR-87,该模块采用SiRF第三代高灵敏度、低耗电量芯片StarIII,遵守GPS—NMEA0183协议,具备快速定位及追踪20颗卫星的能力,体积仅24×24×2.7mm,带屏蔽外壳芯片内建200,000个卫星追踪运算器,大幅提高搜寻及运算卫星讯号能力[5]。内建WASS/EGNOS解调器。低耗电量, 具备有省电模式(Trickle-Power)功能,以及在设定的时间才启动的定时定位(Push–to–Fix)功能。
3.1 获取GPS信息
目的:打开与GPS连接的串口,从GPS模块获得经纬度信息,并存放在buffer中。
从串口读入数据的方法如下[6]:
(1)linux中的串口设备文件存放于/dev目录下,其中串口一,串口二对应设备名依次为“/dev/ttyS0”、“/dev/ttyS1”。在linux下操作串口与操作文件相同。
(2)在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现:
(3)在配置完串口的相关属性后,打开串口进行读写操作了。其使用方式与文件操作一样,区别在于串口是一个终端设备[7]。
打开串口使用以下语句:
恢复串口的状态为阻塞状态,用于等待串口数据的读入。使用fcntl函数:
串口的读写与普通文件一样,使用read,write函数:
3.2 电子地图生成方法
(1)利用网页版Google Map获得我们所需要的地图的一组对角
点击右上角“地图实验室”,将经纬度提示工具启用,然后指定地图需要点按住shift就会显示经纬度。
(2)利用Universal Maps Downloader 6.63软件截取地图
在框中输入地图左上角和右下角的经纬度(本系统以福建师范大学旗山校区地图作为设计对象)下载地图,如图2所示,其 中 Left longitude=26.0402, Top Latitude=119.2017, Right longitude=26.0206, Bottom Latitude 119.2213。
(3)获得地图上路口点的坐标信息
下载到地图之后,用mapviewer打开地图,鼠标所指的地方会自动显示以地图左上角为原点的地图坐标,记录下所有路口点坐标,并且记录下每一个路口所能到达的其他所有路口。
3.3 窗口设计
这一部分主要定义了Gps_Widget类,该类继承了 QWidget父类[8]。这一部分的目的是界
面显示时启动定时器,每隔5秒更新,重新获得GPS信息,同时转换图像坐标和经纬度坐标,显示当前位置。同时,在该类中,使用了界面按钮和下拉框,以便执行对应操作。
首先,获得来自GPS模块信息后,从中提取需要的有用信息(本设计中仅需要经纬度信息)。定时器每5秒触发一次函数读取经纬度信息,这样可以实时跟踪车辆位置,并显示在地图上。
//判断选择下拉框中那一项,并映射该项对应目的点,显示目的点、路径和行车里程
Gps_Widget::~Gps_Widget()
//析构函数,收尾工作,停止所有定时器,取消界面
图5为对上述函数之间的连接关系图。
3.4 地图显示
定义了ImageWidget类,该类继承了 QWidget父类[9]。这一部分的目的是显示地图,捕获点击事件,将点击位置作为目的点,计算最佳路径并显示。
图6为对上述函数之间的连接关系图。
以下分析计算当前定位点到目的地的最短路径过程,并记录下具体路径以及路径长。
(1)首先在程序中地图路口点的存储方式用不含权值的临界链表[11]:
这段代码中,i是一个QList的遍历器,它的作用是遍历mapGraph中的所有点[12]。并且分别到离ptLoc(定位点)和ptDst(目的地)最近的路口点,并分别用ptBeg 和ptEnd 表示。其中,(pt - ptLoc).manhattanlength() 表示pt指向ptLoc点向量的模长。
(3)运用Dijkstra算法计算出ptBeg 到ptEnd的最短路径:
遍历mapGraphde 所有点
刷新 w和npt相邻点的Dist值
发布评论