1 引言
车载电子设备在技术水平上的不断提高已经成为现代汽车发展的重要标志之一,而车载导航设备是其中重要组成部分。它要将数据通讯系统,影音娱乐系统,定位系统,电子控制系统实时显示出来,让用户得到充分的驾驶信息,以ARM 及嵌入式操作系统为技术核心,为车辆驾驶者提供安全行驶所必需的路况、地理信息的车载导航系统目前正在全世界得到越来越广泛的应用,大大提高了用户驾驶体验与车辆运行的安全性。
但目前市场上的车载导航系统多使用 WinCE 作为操作系统,不仅软件使用价格昂贵,而且对硬件要求较高,运行速度偏慢。本文提出并设计了一种基于GPS 和GPRS,使用嵌入式32 位处理器和嵌入式Linux 的车载导航系统。该系统采用S3C2440A:32 位ARM920T内核处理器,外部扩展GPS 接收模块及GPRS 通讯模块,显示部分采用SAMSUNG 4.3 寸480×272 分辨率宽屏TFT 真彩液晶。底层采用嵌入式Linux 操作系统,具有源码开放、易移植、模块化、资源丰富的优势。图形用户界面(GUI)采用Qt/Embedded 软件进行开发。本文着重从 GPS 与GPRS 数据接收与发送, 嵌入式Linux 总体架构,多线程技术在Qt中应用等方面进行论述。
2 系统总体结构及软件开发平台
系统整体结构如图1 所示,本系统采用SAMSUNG 公司的S3C2440A嵌入式处理器,标称工作频率:400MHz;CPU 内置STN/CSTN/TFT LCD 控制器,支持1024ⅹ768 分辨率以下的各种液晶;以太网控制器;1 通道5 线制串口,2 通道3 线制串口,CAN 接口,SPI接口,RTC实时时钟等;通过RS232 外接GPS接收仪及GPRS模块; 系统外扩64NB SDRAM,用于操作系统内存空间,存放动态数据和运行程序; 系统外扩64MB Flash 空间,用于存放Linux 内核,文件系统,应用程序和用户数据。
图1 系统结构
系统软件基于嵌入式Linux 操作系统,并选择Qt/Embedded 作为图形用户界面(GUI)开发环境。Qt 是Trolltech 公司推出的跨平台的应用程序框架,Qt/Embedded 是Qt 面向嵌入式应用的版本,一次编写,随处编译。 Qt 特有的信号/槽(singal /slot)机制,加强了对象间通信的灵活性;通过裁剪去掉无关模块可以调整库文件的大小,适合嵌入式系统使用;在QT 中支持OpenGL 接口和矢量图形格式SVG. 能充分满足导航系统绘图需要。系统从GPS实时获取车辆位置(包括经纬度与时间等)和运行信息(包括车速与方向等),在电子地图上显示相关导航信息,用户通过触摸屏操作,提供地图漫游、地图查询和道路信息管理等功能。
3 GPS/GPRS 系统的组成原理及构成
(1) GPS 定位基本原理
GPS 的定位原理实质上就是测量学的空间测距定位,利用在平均20200km 高度均匀分布在6 个轨道的24 颗卫星,发射测距信号码和载波,用户通过接收机接收这些信号测量卫星至接收机之距,通过一系列方程演算,便可知地面定位坐标。用户测得的到卫星的距离称为“伪距”,它不是用户到卫星的真正距离,其中还包括卫星时钟的偏差,用户时钟的偏差信号,传播延迟引起的测距误差等,因此在至少收到三颗卫星后,即可计算出平面坐标(经纬度)值,收到四颗则可在计算出方程值,这就是GPS 的基本定位原理。
图 2 GPS 定位原理图
程式中各个参数意义如下:
x,y,z 为待测点坐标的空间直角坐标。x i 、y i 、z i (i=1, 2, 3, 4)分别为4 颗卫星在t 时刻的空间直角坐标,可由卫星导航电文求得。Vti (i=1, 2, 3, 4)分别为4 颗卫星的卫星钟的钟差,由卫星星历提供。Vt0为接收机的钟差。由以上方程即可解算出待测点的坐标 x,y,z 和接收机的钟差Vt0。
(2) GPRS 网络结构及传输原理
GPRS 是在原有的GSM 网络中增加了两个节点:SGSN(Serving GPRS SupportNode,服务GPRS 节点)和GGSN(Gateway GPRS SupportNode,网关GPRS 节点),SGSN 的主要作用就是记录车辆的当前位置信息,并在车辆和GGSN 之间完成移动分组数据的发送和接收,GGSN 主要是起网关作用,它可以和许多不同的数据网络连接。GGSN 提供了GPRS 网络与Internet 的接口,而SGSN 负责联系移动终端和GGSN,应此,一个完整的GPRS 通讯过程就是车载终端发出的数据先传至BSS(Base Station System 基站系统),经由GPRS 网络传至GGSN,通过GGSN 接入Internet,在Internet 上依靠TCP 协议传给上位机,终端接收数据的流程则与此相反,GPRS 数据收发在网络层使用TCP/IP 协议。
4 系统软件的设计与实现
(1) 系统软件结构
主要由以下模块组成:用户界面显示模块、GPRS 通讯模块、GPS 定位模块、地图匹配模块、路径规划模块、电子地图模块、底层通讯模块等。
图3 系统软件结构总体框图
用户界面显示模块:用户与车载导航系统交互的平台,通过调用其它模块起到信息交互的作用;GPRS 通讯模块:将用户驾驶信息及车况信息实时传送至远程监控端,不仅起到记录车况的作用,而且还能防盗;GPS 定位模块:实时接收卫星定位数据,包括经纬度,时间,海拔,即时速度等;地图匹配模块:根据GPS 定位获得的数据,与系统中存储的地图信息进行匹配,获得车辆周围的地理信息,为用户提供参照;路径规划模块:用户输入起始坐标和终点坐标,系统自动计算最近道路,从而起到车辆导航的作用;底层通讯模块:通过CAN 总线及232 总线,获取车辆各种信息,从而在用户显示界面上显示出来。
(2) Linux 在S3C2440 上的移植
嵌入式 Linux 管理整个导航系统的硬件设备并对所有程序进行调度,是软件系统的核心。由于Linux 是面向PC 机的操作系统,将其用于嵌入式领域,需要进行移植,它一般包括启动加载代码(Bootloader)的移植、内核移植、驱动程序的编写、文件系统的构建等。将 U-boot 源代码在ADS 环境下进行编译,将编译成功的二进制代码烧写到开发板所带Flash 上,然后在上电启动。Bootloader 首先完成硬件设备的初始化,然后设置Linux 内核的启动参数,最后调用Liuux 内核,直接跳转到Linux 内核的第一条指令处。从 Linux 的方式看待设备可区分为3 种基本设备类型:字符设备,块设备,或者网络设备。车载导航系统设备驱动程序由以下三个部分组成:
(1)自动配置和初始化子程序。初始化子程序首先运行,负责检测硬件设备是否存在和能否正常运行;
(2)中断服务子程序。由嵌入式Liuux 系统来接收硬件中断,再通过系统来调用中断服务子程序;
(3)服务于I/O 请求的子程序。对I/O 设备进行存取。将编写好的设备驱动编译到内核中,在系统启动时和内核一起启动。
文件系统构成了 Linux 系统上所有数据的基础。经过比较,系统设计时决定使用Cramfs文件系统,当访问文件时,Cramfs 文件系统自动的将要访问的文件解压到RAM 中,会尽可能给实际执行的应用程序保留RAM 空间,而且可以为运行时解压缩挪出额外的CPU 周期。使用mkcramfs 命令生成cramfs 镜像文件,再将其下载到系统中去,Linux 启动时自动加载根文件系统,完成系统的启动。
(3)多线程技术在Qt 中的应用
在具有图形用户界面的 Qt 应用程序中,主线程由GUI 线程充当,它同时拥有一个或多个非GUI 线程作为工作线程来处理其它耗时操作,例如不断更新的车辆方向、速度,地图的匹配等。这样,即使在负载很重的情况下,应用程序也可以保证图形用户界面的响应。依赖 Qt 提供的多线程技术,使得该导航系统中的多数据交互成为可能,GUI 线程在调用了exec()函数后,要么等待一个事件,要么处理一个事件,每一个线程都可以有自己的事件循环,如图4所示,起始线程通过QcoreApplication::exec()启动事件循环,其他非GUI 线程通过Qthread::exec()启动各自的事件循环。
图 4 Qt 线程事件模型
5 结论
本文作者的创新点:
(1)将嵌入式Liuux 操作系统用于车载导航系统,是对传统的车辆导航系统的重大改进,成本大幅降低,同时利用Linux 系统的多线程技术,可以解决系统中多个任务并行处理的问题,保障了系统的稳定性、可靠性,提高了系统的运行速度。
(2)显示系统采用Qt/Embeded 软件进行用户显示界面设计,一次编写,随处编译,方便移植到各种不同的平台,只需重新编译即可,使用开源版节约大量软件授权费用,这些都是传统WinCE 程序所不能比拟的。
(3)目前本系统已经装载在车上试运行,实践证明本系统能实时显示车辆当前运行状况,快速响应用户操作,为驾驶者提供良好的导航信息。
相关文章