DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 870|回复: 0
打印 上一主题 下一主题

[GPS] 基于ARM9与WindowsCE的车辆GPS定位信息采集系统

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 18:47:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                    ???? GPS可提供连续、高精度、实时的时间基准、三维位置、三维速度、整周模糊度等数据,具有性能好、精度高的特点,因而广泛应用于GPS载波相位测姿、精确制导、SINS/GPS组合导航、嵌入式车辆导航监控等军事与民用领域。而嵌入式系统以其低功耗、小体积、高稳定性和便携等优势,在GPS的应用中占据重要的位置。本文研究基于ARM920T内核的嵌入式微处理器S3C2440和WindowsCE 5.0(简称WindowsCE)的某型军车GPS定位信息的采集与处理。
  1 系统硬/软件平台概述
  车辆GPS定位信息采集系统的硬件平台结构如图1所示。




  2 定位信息数据格式
  GPS的输出数据遵循NMEA-0183协议标准,即美海军的电子设备标准。根据NMEA-0183协议,获取GPS定位信息,必须将串行口的波特率设置为4800b/s,数据位设置为8 bit,停止位设置为1 bit,校验为设置为无。该协议定义了GPS接收机输出的标准信息,最常用、兼容性最广的语句格式包括:$GPRMC、$GPGGA、$GPGSV、$GPGSA、$GPGLL等。应用到的GPS数据格式包括$GPRMC、$GPGGA、$GPGSV三种。其中,用$GPRMC语句获取时间、经纬度、速度、年月日信息,用$GPGSV语句获取海拔高度信息,用$GPGSV语句获取可见卫星数信息及卫星的方位角和仰角信息,用以获取卫星的视图。各语句的数据段的含义,参考NMEA-0183协议标准。
  3 GPS定位信息采集和处理的软件实现
  本系统的软件开发在可视化开发工具Embedded VisualC++(简称EVC)中,采用MFC编程技术实现。
  3.1 GPS数据处理状态转换
  GPS与ARM之间用RS232串口方式进行通信,串口对象负责接收数据,并把接收到的数据放置到串口缓冲区。GPS对象按照协议结构负责处理串口对象接收到的数据。图3为GPS数据处理之间的状态转换示意图。GPS数据处理状态共包括4个状态:开始状态、数据帧头状态、GPS数据正文状态和校验状态。




  图4中,m_strRecDisp为一个CString变量,用于表示接收数据的字符串,该程序流程中,用到两个最重要的函数即:字符(串)查找函数和字符串截取函数。
  1)字符(串)查找函数 该函数CString∷Find()用于从一个已有的字符串当中查找与目标字符(串)相匹配的首次出现的一个单字符或一个子字符串。一个重要的函数原型为:int Find(TCHAR ch,int nStart)cONst:其中,ch为要查找的目标字符,nStart为开始查找位置。
  2)字符串截取函数 该函数CString∷Mid()用于截取一个字符,也可从一个具体位置开始截取一个子字符串,返回值即为字符或字符串常量。函数原型为:Mid(int nFirst,intnCount)const;其中nFirst为字符串开始截取的位置,nCount为截取字符数目。
  3.3 GPS数据帧的处理
  截取出一个完整的数据帧后,将数据帧赋值给CString变量data,data再将其字符内容渊源不断的送给缓冲pBuffer,解压缩数据帧后,进入到如图5所示的GPS数据帧处理流程。在处理GPS时间数据时,因为北京位于东八区,UTC时间与北京时间相差8 h,得到UTC时间后,如果要得到标准的北京时间,应在此时间的基础上,加上8 h。




  显然,若卫星P与观测点之间的距离为r,E为任意可见卫星P的仰角,B为卫星的方位角,则P的三维坐标为(X,Y,Z)满足:




  3.5 串口接收的实现
  完成GPS定位信息的采集,需要实现的串口主要的API函数包括:
  1)打开串口函数。原型为Open(LPT OpenPort(LPCTSTRPort,int BaudRate,int DataBits,int StopBits,int Parity)。其中,Port代表串口名,如COMl等,BaudRate为波特率,DataBits为数据位;StopBits为停止位,Parity为奇偶校验。
  2)关闭串口函数。该函数在程序操作串口发生错误时使用,用于关闭该串口。实现的主要方法是:先判断串口操作句柄hComm的值是否为INVALID_HANDLE_VALUE,如果是,则调用SetCommMask(),将上述代码段中的EV_RXCHAR改为0,然后清除缓冲区,再利用CloseHandle函数关闭串行口操作句柄。
  3)添加打开串口单击事件代码,通过创建一个串口接收线程和显示线程来实现。
  4)串口接收线程CommRecvTread()与回调函数OnCommRecv()。串口接收线程为一个无限循环,它不断查询串口接收线程退出事件m_Exit-ThreadEvent。如果退出事件有效,则该循环结束退出。如果调用读串口函数查询得知接收到数据,则调用串口接收成功回调函数0nCommRecv()。
  4 实验数据及分析
  设置好串口参数后,打开串口COMl,既可获取实验数据。图7为在某型军车上一次实测的数据。实测数据界面拍摄的时间为2009年11月10日晚上9点45分,地点为某训练场。数据在静止的状态下测得。该定位显示的数据包括“原始数据”和解析后“经纬度、时间、海拔”等信息。通过分析图7(a)界面的数据发现,$GPGSV语句有两条,而在“星数”对应的Edit框中显示的定位所用卫星数为8,由于每一条GPGSV最多能显示4颗卫星的信息,故$GPGSV语句为两条。这说明星数与$GPGSV语句数是吻合的。而获取有效的GPS定位信息,至少需要4颗定位卫星。这也说明此次数据是有效的定位数据。




  该界面显示的经纬度信息分别为N:38°3.6788’,E:114°29.1765’;其中,N代表北纬,E代表东经。而用GoolgeEarth软件查阅数据可知,石家庄军械学院南门的精确经度/纬度信息为:北纬38°3.1650’,东经114°29.0046’,军械学院西门的精确经度/纬度信息为:北纬38°3.394O’,东经114°28.5432’。通过与二者的经纬度信息比对发现,界面实时显示的精度和纬度信息非常精确。通过实时比对标准的北京时间,说明时间和日期信息显示也完全正确。
  速度信息在静止情况下测得,故理想的速度为0 k/s。而实际测得数据分别为0.060 00 k/s,前文已论述,1 k/s换算成标准的速度信息约0.514 444 m/s,故测得的速度误差分别约为O.030 867 m/s。可以看出,测量的速度误差相对而言是很小的。
  界面显示的海拔信息为:68.800 00 m。而通过石家庄市规划局提供的资料可知:石家庄市区二环路内地势西北高,海拔高度为81.5 m,东南低,海拔高度为64.3 m。测得的海拔高度还是存在微小的误差。这可能跟接收的GPS信号的漂移有关。从图7(b)部分的卫星视图可以看出,卫星与观测点的方位关系能清晰的表示,而且卫星的编号也能实时显示,从上到下依次分别为:23、17、3、4、19、20、32、11。
  5 结论
  GPS定位为单点定位,用一台接收机观测卫星,独立定出观测点在WGS-84(地心坐标)中的绝对位置。系统以ARM9为嵌入式微处理器,以WindowsCE为嵌入式操作系统,通过串行口实现GPS接收机与ARM之间的通信,构建了某型军车的GPS定位信息采集系统。实验表明:该系统能实时显示精度较高、持久有效的GPS定位数据,具有重要的实用价值和参考意义。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-27 22:10 , 耗时 0.087531 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表