微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于GPS的公交车自动报站系统的设计

基于GPS的公交车自动报站系统的设计

时间:03-06 来源:电子技术应用 点击:

目前城市公交系统飞速发展,且已基本都是无人售票,报站也由原来的售票员报站改为由司机手动控制报站。但是由于公交司机既要开车,又要兼顾手动按键报站,所以时常出现误报、漏报等现象,不能满足公交系统的要求;另外,由于司机开车时为报站分散精力,也对公交的安全运行埋下了隐患。应用自动报站系统即可以节省员工开支,增强公司效益,又可以利用报站器播报标准的普通话站名,使各城市更利于交流和发展。

GPS卫星定位语音报站系统具有定位精度高、语音自动播报等特点。目前市场上已有基于GPS的公交车自动报站系统的试用,但这些系统都是基于各种单片机为处理芯片的。

车载设备安装于公交车上,其工作环境比较恶劣,因此对设备的结构也有一定的要求,本系统采用工作稳定可靠、抗干扰能力强的ARM9处理器。嵌入式系统固化于存储器中,其可靠性高、成本低、体积小、功耗低。鉴于此,本研究设计了一种基于GPS的嵌入式公交车自动报站系统,可以实现公交车到达站点后的实时报站,预报下一站的信息,播放语音、视频等信息,结合LCD进行报站显示,让乘客可以更方便地了解周边信息,也可以降低司机的劳动强度。

1 GPS技术概述

全球定位系统GPS(Global Positioning System)是美国从20世纪70年代开始研制,历时20年,耗资200亿美元,具有海、陆、空全方位实时三维导航与定位能力的新一代高精度卫星导航与定位系统。GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。假设t时刻在地面待测点上安置GPS接收机,可以测定GPS信号到达接收机的时间?驻t,再加上接收机所接收到的卫星星历等其他数据可以确定以下4个方程式,如图 1 所示。



2 GPS通信的NMEA0183协议

通常GPS模块支持两种格式:二进制消息格式和NMEA-0183 ASCII消息格式。前者的通信协议为9 600 b/s、无校验、8 bit数据位、1 bit停止位;后者的通信协议为4 800 b/s、无校验、8 bit数据位、1 bit停止位。由于NMEA-0183 ASCII格式直观、易于识别及应用, 因此本设备采用ASCII格式。目前GPS厂商遵循NMEA0183协议提供串行通信接口,串行通信参数为:波特率=4 800 b/s,数据位=8 bit,停止位=1 bit,无奇偶校验。

GPS与系统通信时,通过串口发送数据。系统接收到的GPS数据主要由帧头、帧尾和帧内数据组成。根据数据帧的不同, 帧头也不相同, 主要有 GPGGA、 GPGSA、GPGSV以及 GPRMC等。各类数据帧分别包含了不同的信息。
由于帧内各数据段由逗号分割, 因此在处理缓存数据时通过搜寻ASCII 码" "来判断是否是帧头。在对帧头的类别进行识别后, 再通过对所经历逗号个数的计数判断出当前正在处理的是哪一种定位导航参数, 并做出相应处理。
如果与卫星的通信正常,则可以接收到的数据格式如下:

GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E

数据说明如下:

GPRMC:代表 GPS 推荐的最短数据;204700:UTC_TIME 24h制的标准时间,按照h/min/s的格式;
A:A或者V,A表示数据"OK",V表示一个警告;
3403.868:LAT纬度值,精确到小数点前4位,后3位;
N:LAT_DIR N表示北纬,S表示南纬;
11709.432:LON经度值,精确到小数点前5位,后3位;
W:LON_DIR W表示西经,E表示东经;
下面是一个接收不到卫星信号的例子:
GPRMC,204149,V,…,170698,*3A

3 报站系统模块设计

3.1 GPS数据解析模块

在接收进程receive中收到"\n"之后,表示收到一条完整的信息。在gps_parse子程序中实现GPRMC格式数据的解析,show_gps子程序中实现数据的显示。

从GPS原始采集的数据可以解析出年月日、时间、状态、纬度经度以及高度等信息,然后可以通过GPS的报站程序,按照设定的格式,只要条件满足就执行报站程序及数据的显示。

3.2 串口通信的设计

打开串口:打开串口是通过标准的文件打开函数来实现的。

串口设置:最基本的设置串口包括波特率设置、校验位和停止位设置。串口的设置主要是设置struct termios结构体的各成员值,关于该结构体的定义可以查看/arm2410s/kernel-2410s/include/asm/termios.h文件。

读写串口:设置好串口之后,读写串口很容易,把串口当作文件读写就可以了。

读取串口数据:使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl,或者select等操作。

关闭串口:关闭串口就是关闭文件。

3.3 语音报站的设计

语音报站是基于GPS的自动报站系统的核心部分,只有实现了语音报站,整个系统才算完成。实验箱中的音频驱动程序和视频驱动程序都是一个独立的程序,要想在GPS的自动报站程序中使用音频驱动程序实现语音报站,就必须用一个函数来实现程序的调用。System函数就有这样的功能。System函数已经被收录在标准C库中,可以直接调用。

语音报站程序主要是通过system函数调用音频驱动程序来实现的。如果采集信号的状态为"A",就可以进行数据的对比,如果在站点范围内就用system函数调用一段语音,如果出了站点范围就调用另外一段语音。站点具体的经度和纬度可以用数组来定义,这样可以方便修改,也更加直观、简单。站点的范围通过一个方框限定,经度和纬度在站点的100 m范围内。站点的范围也可以用一个圆来限定,即到站点的距离小于d的范围,两个站点间的距离可以用公式计算。

3.4 多线程的应用

多线程程序作为一种多任务、并发的工作方式,有以下的优点:(1)提高应用程序响应;(2)使多CPU系统更加有效;(3)改善程序结构。LIBC中的pthread库提供了大量的API函数,为用户编写应用程序提供支持。在本程序的代码中大量使用了线程函数,如pthread_create(线程创建函数)、pthread_join(等待一个线程的结束)pthread_exit(一个线程的结束)等。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top