现在的位置: 首页 > 综合 > 正文

GPS设计说明

2013年10月21日 ⁄ 综合 ⁄ 共 4189字 ⁄ 字号 评论关闭
 

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

1.1  GPS原理

GPS即全球定位系统Global Positioning System)是美国从本世纪70年代开始研制,历时20年,耗资200亿美元,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。经近10年我国测绘等部门的使用表明,GPS以全天候、高精度、 自动化、高效益等显著特点,赢得广大测绘工作者的信赖,并成功地应用于大地测量、工程测量、航空摄影测量、运载工具导航和管制、地壳运动监测、工程变形监测、资源勘察、动力学等多种学科,从而给测绘领域带来一场深刻的技术革命。

全球定位系统(Global Positioning System)是美国第二代卫星导航系统。是在子午仪卫星导航系统的基础上发展起来的,它采纳了子午仪系统的成功经验。和子午仪系统一样,全球定位系统由空间部分、地面监控部分和用户接收机三大部分组成。
  按目前的方案,全球定位系统的空间部分使用24颗高度约2.02万千米的卫星组成卫星星座。21+3颗卫星均为近圆形轨道,运行周期约为11小时58分,分布在六个轨道面上(每轨道面四颗),轨道倾角为55度。卫星的分布使得在全球的任何地方,任何时间都可观测到四颗以上的卫星,并能保持良好定位解算精度的几何图形(DOP)。这就提供了在时间上连续的全球导航能力。

  地面监控部分包括四个监控站、一个上行注入站和一个主控站。监控站设有GPS用户接收机、原子钟、收集当地气象数据的传感器和进行数据初步处理的计算机。监控站的主要任务是取得卫星观测数据并将这些数据传送至主控站。主控站设在范登堡空军基地。它对地面监控部实行全面控制。主控站主要任务是收集各监控站对GPS卫星的全部观测数据,利用这些数据计算每颗GPS卫星的轨道和卫星钟改正值。上行注入站也设在范登堡空军基地。它的任务主要是在每颗卫星运行至上空时把这类导航数据及主控站的指令注入到卫星。这种注入对每颗GPS卫星每天进行一次,并在卫星离开注入站作用范围之前进行最后的注入。
  全球定位系统具有性能好、精度高、应用广的特点,是迄今最好的导航定位系统。随着全球定位系统的不断改进,硬、软件的不断完善,应用领域正在不断地开拓,目前已遍及国民经济各种部门,并开始逐步深入人们的日常生活。

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

上述四个方程式中待测点坐标x y z Vto为未知参数,其中di=cti (i=1234)

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

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

  cGPS信号的传播速度(即光速)。
  四个方程式中各个参数意义如下:
    xyz 为待测点坐标的空间直角坐标。
    xi yi zi (i=1234) 分别为卫星1、卫星2、卫星3、卫星4t时刻的空间直角坐标,可由卫星导航电文求得。

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

Vto为接收机的钟差。

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

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

1.2  GPS的误差

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

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

卫星时钟误差:0-1.5

卫星轨道误差:1-5

电离层引入的误差:0-30

大气层引入的误差:0-30

接收机本身的噪音:0-10

多路反射:0-1

总定位误差:大约28

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

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

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

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

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

1.3  PDAGPS接收机的连接和处理流程

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

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

1.3.2端口设置

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

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

1.3.3 工作流程

1.4  PDAGPS接收机的通讯方法

PDAGPS通讯主要以串口的方式完成,虽然现在对于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;

       DCB dcb;//建立设备描述表

       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;

int intLength;

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

      

       if(!Status)

       {

              if(GetLastError() == ERROR_IO_PENDING)

              {

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

               return intLength;

              }

              return 0;

       }

       return intLength;

1.5  PDAGPS接收机的通讯协议

无论哪一个厂商的GPS接收机均提供对标准GPS通讯协议NMEA 0183

抱歉!评论已关闭.