DIY编程器网

标题: 基于GPS的公交车自动报站系统的设计 [打印本页]

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

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(一个线程的结束)等。

4 系统总体设计及调试

4.1 系统总体设计

系统的软件部分主要是GPS数据的解析和报站子程序的设计。目前军用GPS接收机的定位精度已经达到1 m,但是民用GPS定位系统定位精度只有10 m~20 m,而实际的公交车报站的精度只要在150 m范围内就可以,所以本次设计中的站点范围为100 m,完全可以达到设计的要求。如果是中小城市的话可以将定位的精度进行适当的调整。
由于GPS采集信号的周期是每1 s采一次,而实际上公交车站点之间的距离较远,且报站的时间需提前一点,1 s进行一次数据对比比较麻烦,每隔5 s进行一次数据对比就可以了,所以程序中将数据对比的周期改成了5 s一次。公交车上还可以采用车轮计速的方法,每次车轮转够一定的圈数就进行一次数据比对,这样可以防止公交车到站停车后继续执行报站程序。

采集到的信号状态为“A”时,执行相应的报站程序,但是有时候会出现信号不好的情况,这时就要提醒司机临时将自动报站改成原来的手动报站,以防止乘客下错站。

系统的软件流程图如图2所示。

  
GPS公交自动报站系统包含硬件和软件两部分。硬件以ARM9S3c2410x处理器为核心, 配置存储器、I/O设备、通信模块等必要的外设;软件以嵌入式Linux操作系统为核心,提供应用编程接口API。嵌入式系统中,软件和硬件紧密配合,协调工作,共同完成系统预定的功能。自动报站的硬件原理图如图3所示。

  
系统软件部分在Linux操作系统中用C语言编程实现,将各模块的程序整合到一起,配置好开发环境,进入GPS的目录,用vi命令将代码进行编辑,然后编译、在minicom下运行,就可以看到结果是否正确。

4.2 系统调试

检查跳线:确定试验平台扩展槽上方JP1102/JP1103跳线位于2、3之间,跳线位为EXPORT;确定GPS/GPRS模块的JP201/JP202跳线位于模块外侧GPS端。

接入设备:关闭2410-S平台,将GPS天线连接到GPS/GPRS模块上,天线接收端置放在能良好接收室外信号的地方,将模块插入2410-S扩展插槽。

然后运行程序,即可得到实验结果。
本研究根据公交车报站的实际需要,设计并实现了基于GPS的公交车自动报站系统。该系统利用嵌入式实验设备实现了公交车的自动报站,具有性能高、能耗低、体积小、播报准确的特点,便于在实际运行的公交车上使用;采用先进的卫星定位技术与语音播放技术相结合的方式,彻底改变了传统公交车语音报站器由司机手控的方式,进站、出站自动播报站名及服务用语,准确、及时,完全不需要人工介入。实验结果表明,该系统可以用于GPS信号的采集和自动报站,但采集到的数据与真实值之间有一定的误差,并且有时由于树木、高楼的遮挡会导致有些路段接收GPS信号效果不佳。因此,采用数学方法(差分技术)消除数据间的误差,利用其他辅助定位系统与GPS 定位相结合进行定位来提高定位数据的精度,将是下一步研究的主要方向。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2