GPS设计说明.docx

上传人:b****5 文档编号:8065005 上传时间:2023-01-28 格式:DOCX 页数:14 大小:118.76KB
下载 相关 举报
GPS设计说明.docx_第1页
第1页 / 共14页
GPS设计说明.docx_第2页
第2页 / 共14页
GPS设计说明.docx_第3页
第3页 / 共14页
GPS设计说明.docx_第4页
第4页 / 共14页
GPS设计说明.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

GPS设计说明.docx

《GPS设计说明.docx》由会员分享,可在线阅读,更多相关《GPS设计说明.docx(14页珍藏版)》请在冰豆网上搜索。

GPS设计说明.docx

GPS设计说明

GPS设计说明

GPS模块设计,与其说我们是在处理GPS信号,不如说我们在处理GPS接收机传过来的信号更准确一些,因为GPS接收机接收GPS卫星信号后,会经过一系列的算法来计算当前的经纬度、减少误差、减少漂移等工作,然后才会把计算后的结果传给我们,因些我们只需要根据协议来处理GPS接收机给我们的数据就可以了,下面将以两节来介绍GPS的基本原理,以后的小节来介绍软件开发时如何处理GPS接收机传过来的信号。

1.1 GPS原理

GPS即全球定位系统(GlobalPositioningSystem)是美国从本世纪70年代开始研制,历时20年,耗资200亿美元,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。

经近10年我国测绘等部门的使用表明,GPS以全天候、高精度、自动化、高效益等显著特点,赢得广大测绘工作者的信赖,并成功地应用于大地测量、工程测量、航空摄影测量、运载工具导航和管制、地壳运动监测、工程变形监测、资源勘察、动力学等多种学科,从而给测绘领域带来一场深刻的技术革命。

全球定位系统(GlobalPositioningSystem)是美国第二代卫星导航系统。

是在子午仪卫星导航系统的基础上发展起来的,它采纳了子午仪系统的成功经验。

和子午仪系统一样,全球定位系统由空间部分、地面监控部分和用户接收机三大部分组成。

  按目前的方案,全球定位系统的空间部分使用24颗高度约2.02万千米的卫星组成卫星星座。

21+3颗卫星均为近圆形轨道,运行周期约为11小时58分,分布在六个轨道面上(每轨道面四颗),轨道倾角为55度。

卫星的分布使得在全球的任何地方,任何时间都可观测到四颗以上的卫星,并能保持良好定位解算精度的几何图形(DOP)。

这就提供了在时间上连续的全球导航能力。

  地面监控部分包括四个监控站、一个上行注入站和一个主控站。

监控站设有GPS用户接收机、原子钟、收集当地气象数据的传感器和进行数据初步处理的计算机。

监控站的主要任务是取得卫星观测数据并将这些数据传送至主控站。

主控站设在范登堡空军基地。

它对地面监控部实行全面控制。

主控站主要任务是收集各监控站对GPS卫星的全部观测数据,利用这些数据计算每颗GPS卫星的轨道和卫星钟改正值。

上行注入站也设在范登堡空军基地。

它的任务主要是在每颗卫星运行至上空时把这类导航数据及主控站的指令注入到卫星。

这种注入对每颗GPS卫星每天进行一次,并在卫星离开注入站作用范围之前进行最后的注入。

  全球定位系统具有性能好、精度高、应用广的特点,是迄今最好的导航定位系统。

随着全球定位系统的不断改进,硬、软件的不断完善,应用领域正在不断地开拓,目前已遍及国民经济各种部门,并开始逐步深入人们的日常生活。

GPS的基本定位原理是:

卫星不间断地发送自身的星历参数和时间信息,接收机到这些信息后,经过计算求出接收机的三维位置,三维方向以及运动速度和时间信息。

上述四个方程式中待测点坐标x、y、z和Vto为未知参数,其中di=c△ti(i=1、2、3、4)。

di(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4到接收机之间的距离。

△ti(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的信号到达接收机所经历的时间。

 c为GPS信号的传播速度(即光速)。

 四个方程式中各个参数意义如下:

   x、y、z为待测点坐标的空间直角坐标。

   xi、yi、zi(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4在t时刻的空间直角坐标,可由卫星导航电文求得。

   Vti(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的卫星钟的钟差,由卫星星历提供。

Vto为接收机的钟差。

  由以上四个方程即可解算出待测点的坐标x、y、z和接收机的钟差Vto。

上述的计算方式,大家不要有心理上的障碍,因为我们接触不到这些,这些均是接收机来处理的,接收机处理后,通过NMEA0183协议将计算结果传输给我们。

1.2 GPS的误差

有很多种因素会影响到GPS的准确率:

以下是一个GPS误差引入简表:

卫星时钟误差:

0-1.5米

卫星轨道误差:

1-5米

电离层引入的误差:

0-30米

大气层引入的误差:

0-30米

接收机本身的噪音:

0-10米

多路反射:

0-1米

总定位误差:

大约28米

上述的简表,并不表示一定会存在这么大的误差,这是给出的最好及最差的范围,当然最好情况不能同时发生,最差的情况也不能同时发生。

而且在卫星的导航电文中,已经包含了大气层的修正参数,能够消除50%到70%的误差。

而且这两年出的GPS(我指的是著名厂商的各种手持机)的误差的大致范围是10米,现在GARMIN和MAGELLAN手持机的标称精度是7米(在95%的情况下)。

但对我们在应用软件开发时,不需要考虑如何来降低精度,因为我们是从GPS接收机处接收的数据,这个数据已经经过接收机的处理,已经达到最好的精度,如果需要考虑,那就在项目开始前考虑一下选择哪个厂商的接收机就可以了。

另外,在现有情况下,单台GPS接收机要想达到1m以内的精度是不可能实现的,原因除GPS本身精度外,还包括地图、定位点测绘、嵌入式设备的运行速度等,而且过度追求定位精度并无实际的意义。

1.3 PDA与GPS接收机的连接和处理流程

1.3.1PDA与接收机连接示意图:

PDA与GPS接收机是单向通讯,也就是说PDA只被动接收传输过来的数据,不需要向GPS接收机发送数据。

1.3.2端口设置

基于WindowsMobile5.0系统的移动设备,提供了对GPS接收机的连接设置,可以将硬件连接端口映射为软件的COM口,也就是说,无论硬件连接的是哪一类端口,对应用程序来说均可以按串口的工作方式进行读取,设置程序的界面如下图:

正常情况下,传输的波特率为4800BPS,但这个还要留意硬件厂商所提供的参数。

1.3.3工作流程

1.4 PDA与GPS接收机的通讯方法

PDA与GPS通讯主要以串口的方式完成,虽然现在对于PDA来说GPS模块有多种硬件接口可选(如红外、CF、蓝牙等),但最后在处理时,均会被映射为串口的方式进行读取。

因此,对GPS数据的接收和处理,主要是完成对串口的打开、设置及读取。

下面的代码是eVC下对串口的操作方式的DEMO(具体的用法请参看eVC帮助或MSDN):

1.4.1打开串口

eVC采用如下代码打开串口中:

      m_hCom=CreateFile(_T(“COM8:

”),

                          GENERIC_READ|GENERIC_WRITE,

                                   0,

                                   NULL,

                                   OPEN_EXISTING,

                                   FILE_ATTRIBUTE_NORMAL,

                                   NULL);

      if(m_hCom==INVALID_HANDLE_VALUE)

      {

             dwError=GetLastError();

             AfxMessageBox(_T("串口打开错误,%d!

"),dwError);

      }

1.4.2配置串口

   //设置串口接收和发送缓冲大小

      SetupComm(m_hCom,2048,2048);

   //设置事件

   SetCommMask(m_hCom,0);

   //设置超时时间

      TimeOuts.ReadIntervalTimeout=1000;

      TimeOuts.ReadTotalTimeoutMultiplier=500;

      TimeOuts.ReadTotalTimeoutConstant=5000;

      TimeOuts.WriteTotalTimeoutMultiplier=500;

      TimeOuts.WriteTotalTimeoutConstant=5000;

      DCBdcb;//建立设备描述表

      GetCommState(m_hCom,&dcb);//取当前设备描述

 

      //硬件流控制设置

      dcb.fOutxCtsFlow=FALSE;

      dcb.fRtsControl=FALSE;

 

      //XON/XOFF流控制设置

      dcb.fInX=dcb.fOutX=FALSE;

 

      dcb.fBinary=TRUE;

      dcb.BaudRate=9600;//9600;//数据传输速率

      dcb.ByteSize=8;

      dcb.Parity=NOPARITY;

      dcb.StopBits=ONESTOPBIT;

      //设置串口属性

      SetCommState(m_hCom,&dcb);

1.4.3读取数据

BYTE*byteBuff;

intintLength;

      Status=ReadFile(m_hCom,byteBuff,intLength,&intLength,&m_osRead);

      

      if(!

Status)

      {

             if(GetLastError()==ERROR_IO_PENDING)

             {

                    WaitForSingleObject(m_osRead.hEvent,INFINITE);//5000);

             returnintLength;

             }

             return0;

      }

      returnintLength;

1.5 PDA与GPS接收机的通讯协议

无论哪一个厂商的GPS接收机均提供对标准GPS通讯协议NMEA0183的支持,因此我对所有GPS数据读取,实际上是对NMEA0183协议的解释,当然个别厂商也会提供自己的通讯协议,但这个不在考虑之列,因为NMEA0183对每一个厂商来说,还是首选。

1.5.1协议描述

NMEA0183协议是美国国家海洋电子协会(NationaIMarineElectronlcsAssociation)制定的GPS接口协议标准。

NMEA0183定义了若干代表不同含义的语句,每个语句实际上是一个ASCII码串。

这种码直观,易于识别和应用。

在试验中,不需要了解NMEA0183通信协议的全部信息,仅需要从中挑选出需要的那部分定位数据,其余的信息忽略掉。

一个完整的NEMA0183语句是从起始符“$GPGGA”到终止符“”为止的一段字符串。

需要掌握的信息是经纬度、经纬度方向、GPS定位状态和接收信号的时间。

所以当接收到这样一个完整的NEMA0183语句时,提取有用信息的方法是:

先判定起始符$GPGGA的位置,从起始符开始读人数据,再通过异或校验后的语句中寻找字符“,”,然后截取前后两个“,”之间的字符(串)获得所关心的数据,并以回车符为一个CPS语句的终止符,得到一个完整的GPS信号。

在提取出的GPS语句中,找寻经纬度所在的逗号位置,读出经纬度坐标,再将经纬度坐标进行度数的转换。

因为地图的坐标是以度数为标准的。

1.5.2常用报文解释

1、GlobalPositioningSystemFixData(GGA)GPS定位信息

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh

<1>UTC时间,hhmmss(时分秒)格式

<2>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<3>纬度半球N(北半球)或S(南半球)

<4>经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<5>经度半球E(东经)或W(西经)

<6>GPS状态:

0=未定位,1=非差分定位,2=差分定位,6=正在估算

<7>正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)

<8>HDOP水平精度因子(0.5~99.9)

<9>海拔高度(-9999.9~99999.9)

<10>地球椭球面相对大地水准面的高度

<11>差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)

<12>差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)

 

2、GPSDOPandActiveSatellites(GSA)当前卫星信息

$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh

<1>模式,M=手动,A=自动

<2>定位类型,1=没有定位,2=2D定位,3=3D定位

<3>PRN码(伪随机噪声码),正在用于解算位置的卫星号(01~32,前面的0也将被传输)。

<4>PDOP位置精度因子(0.5~99.9)

<5>HDOP水平精度因子(0.5~99.9)

<6>VDOP垂直精度因子(0.5~99.9)

 

3、GPSSatellitesinView(GSV)可见卫星信息

$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh

<1>GSV语句的总数

<2>本句GSV的编号

<3>可见卫星的总数(00~12,前面的0也将被传输)

<4>PRN码(伪随机噪声码)(01~32,前面的0也将被传输)

<5>卫星仰角(00~90度,前面的0也将被传输)

<6>卫星方位角(000~359度,前面的0也将被传输)

<7>信噪比(00~99dB,没有跟踪到卫星时为空,前面的0也将被传输)

注:

<4>,<5>,<6>,<7>信息将按照每颗卫星进行循环显示,每条GSV语句最多可以显示4颗卫星的信息。

其他卫星信息将在下一序列的NMEA0183语句中输出。

 

4、RecommendedMinimumSpecificGPS/TRANSITData(RMC)推荐定位信息

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1>UTC时间,hhmmss(时分秒)格式

<2>定位状态,A=有效定位,V=无效定位

<3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4>纬度半球N(北半球)或S(南半球)

<5>经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6>经度半球E(东经)或W(西经)

<7>地面速率(000.0~999.9节,前面的0也将被传输)

<8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9>UTC日期,ddmmyy(日月年)格式

<10>磁偏角(000.0~180.0度,前面的0也将被传输)

<11>磁偏角方向,E(东)或W(西)

<12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

 

5、TrackMadeGoodandGroundSpeed(VTG)地面速度信息

$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

<1>以真北为参考基准的地面航向(000~359度,前面的0也将被传输)

<2>以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

<3>地面速率(000.0~999.9节,前面的0也将被传输)

<4>地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

<5>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

 

6、GeographicPosition(GLL)定位地理信息

$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh

<1>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<2>纬度半球N(北半球)或S(南半球)

<3>经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<4>经度半球E(东经)或W(西经)

<5>UTC时间,hhmmss(时分秒)格式

<6>定位状态,A=有效定位,V=无效定位

<7>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

1.6 在软件中需要实现功能

在目前手持项目中,正常的定位或导航系统,基本主要完成如下的功能:

1.6.1读取当前坐标

使用报文:

RecommendedMinimumSpecificGPS/TRANSITData(RMC)推荐定位信息

1.6.2读取速度

使用报文:

TrackMadeGoodandGroundSpeed(VTG)地面速度信息

1.6.3读取方向

使用报文:

TrackMadeGoodandGroundSpeed(VTG)地面速度信息

注:

速度和方向的计算这块,有一点需要注意,就是GPS接收机并非简单的将两次坐标相减进行计算,而是采用的多普勒效应进行处理,所以在实际应用中,速度和方向的计算会稍后一点延迟,因为信号是1秒接收一次,而且方向的计算还要根据前几秒的方向进行加权平均。

1.6.4读取卫星数及状态

使用报文:

GPSSatellitesinView(GSV)可见卫星信息

              GPSDOPandActiveSatellites(GSA)当前卫星信息

1.7 伪代码

下面的代码讲解了从一个协议中提取数据的过程,主要是针对$GPRMC协议进行处理,下面代码假设数据已经从串口读取到Data[i]数据内,DataLength是数据长度。

CstringstrFrame;

for(inti=0;i

{

      if(Data[i]=='$')//帧头,SectionID为逗号计数器

        SectionID=0;

      if(SectionID==0&&strFrame.GetLength()<5)

      {

             strFrame=strFrame+Data[i];//将帧头字符进行保存

      }

      if(Data[i]==10)

      {//帧尾

             strFrame=_T("");

      }

      if(strFrame==_T("$GPRMC"))

      {

             if(Data[i]==',')//逗号计数

                    SectionID++;

             else

             {

                    switch(SectionID)

                    {

                    case1:

//提取出时间

                           m_sTime+=Data[i];

                           break;

                    case2:

//判断数据是否可信(当GPS天线能接收到有3颗GPS卫星时为A,可信)

                           if(Data[i]=='A')

                                  GPSParam[m_nNumber].m_bValid=true;

                           break;

                    case3:

//提取出纬度

                           m_sPositionY+=Data[i];

                           break;

                    case5:

//提取出经度

                           m_sPositionX+=Data[i];

                           break;

                    case9:

//提取出日期

                           m_sDate+=Data[i];

                           break;

                    default:

                           break;

                    }

             }

      }

}

1.8 其它需要解决的问题

1.8.1坐标转换

GIS中的坐标系定义是GIS系统的基础,正确定义GIS系统的坐标系非常重要。

GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐标系,首先必须弄清地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念及它们之间的关系。

 

基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。

我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,1978年采用国际大地测量协会推荐的1975地球椭球体建立了我国新的大地坐标系--西安80坐标系,目前大地测量基本上仍以北京54坐标系作为参照,北京54与西安80坐标之间的转换可查阅国家测绘局公布的对照表。

WGS1984基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心,目前GPS测量数据多以WGS1984为基准。

 

上述3个椭球体参数如下:

 

椭球体与基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1