• Cehui8.com 测绘地理信息领域专业门户
  • 首页 > 3S专题 > GNSS

    GPS设计说明

    2013-07-07 11:02:04 来源: 测绘网
    聊聊

     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=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时刻的空间直角坐标,可由卫星导航电文求得。

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

    Vto为接收机的钟差。

       由以上四个方程即可解算出待测点的坐标x、y、z 和接收机的钟差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米,现在GARMIN和MAGELLAN手持机的标称精度是7米(在95%的情况下)。
    但对我们在应用软件开发时,不需要考虑如何来降低精度,因为我们是从GPS接收机处接收的数据,这个数据已经经过接收机的处理,已经达到最好的精度,如果需要考虑,那就在项目开始前考虑一下选择哪个厂商的接收机就可以了。
    另外,在现有情况下,单台GPS接收机要想达到1m以内的精度是不可能实现的,原因除GPS本身精度外,还包括地图、定位点测绘、嵌入式设备的运行速度等,而且过度追求定位精度并无实际的意义。
    1.3  PDA与GPS接收机的连接和处理流程
    1.3.1PDA与接收机连接示意图:
    PDA与GPS接收机是单向通讯,也就是说PDA只被动接收传输过来的数据,不需要向GPS接收机发送数据。

    1.3.2端口设置
    基于Windows Mobile 5.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.ReadTotalTimeoutC**tant = 5000;
           TimeOuts.WriteTotalTimeoutMultiplier= 500;
           TimeOuts.WriteTotalTimeoutC**tant = 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  PDA与GPS接收机的通讯协议
    无论哪一个厂商的GPS接收机均提供对标准GPS通讯协议NMEA 0183的支持,因此我对所有GPS数据读取,实际上是对NMEA 0183协议的解释,当然个别厂商也会提供自己的通讯协议,但这个不在考虑之列,因为NMEA 0183对每一个厂商来说,还是首选。
    1.5.1协议描述
    NMEA0183协议是美国国家海洋电子协会(NationaIMarine Electronlcs Association)制定的GPS接口协议标准。NMEA0183定义了若干代表不同含义的语句,每个语句实际上是一个ASCII码串。这种码直观,易于识别和应用。在试验中,不需要了解NMEA0183通信协议的全部信息,仅需要从中挑选出需要的那部分定位数据,其余的信息忽略掉。
    一个完整的NEMA0183语句是从起始符“$GPGGA”到终止符“”为止的一段字符串。需要掌握的信息是经纬度、经纬度方向、GPS定位状态和接收信号的时间。所以当接收到这样一个完整的NEMA0183语句时,提取有用信息的方法是:先判定起始符$GPGGA的位置,从起始符开始读人数据,再通过异或校验后的语句中寻找字符“,”,然后截取前后两个“,”之间的字符(串)获得所关心的数据,并以回车符为一个CPS语句的终止符,得到一个完整的GPS信号。在提取出的GPS语句中,找寻经纬度所在的逗号位置,读出经纬度坐标,再将经纬度坐标进行度数的转换。因为地图的坐标是以度数为标准的。

      声明①:文章部分内容来源互联网,如有侵权请联系删除,邮箱 cehui8@qq.com

      声明②:中测网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。

      加群提示:我们创建了全国32个省份的地方测绘群,旨在打造本地测绘同行交流圈,有需要请联系管理员测小量(微信 cexiaoliang)进群,一人最多只能进入一个省份群,中介人员勿扰

    返回顶部