zoukankan      html  css  js  c++  java
  • GPS NEMA 0183协议

    一、 NMEA0183标准语句(GPS常用语句)
    $GPGGA
    例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
    字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息
    字段1:UTC 时间,hhmmss.sss,时分秒格式
    字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
    字段3:纬度N(北纬)或S(南纬)
    字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
    字段5:经度E(东经)或W(西经)
    字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
    字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
    字段8:HDOP水平精度因子(0.5 - 99.9)
    字段9:海拔高度(-9999.9 - 99999.9)
    字段10:地球椭球面相对大地水准面的高度
    字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
    字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
    字段13:校验值

    $GPGLL
    例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
    字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息
    字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
    字段2:纬度N(北纬)或S(南纬)
    字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0)
    字段4:经度E(东经)或W(西经)
    字段5:UTC时间,hhmmss.sss格式
    字段6:状态,A=定位,V=未定位
    字段7:校验值

    $GPGSA
    例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
    字段0:$GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息
    字段1:定位模式,A=自动2D/3D,M=手动2D/3D
    字段2:定位类型,1=未定位,2=2D定位,3=3D定位
    字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
    字段15:PDOP综合位置精度因子(0.5 - 99.9)
    字段16:HDOP水平精度因子(0.5 - 99.9)
    字段17:VDOP垂直精度因子(0.5 - 99.9)
    字段18:校验值

    $GPGSV
    例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
    字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息
    字段1:本次GSV语句的总数目(1 - 3)
    字段2:本条GSV语句是本次GSV语句的第几条(1 - 3)
    字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0)
    字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
    字段5:卫星仰角(00 - 90)度(前导位数不足则补0)
    字段6:卫星方位角(00 - 359)度(前导位数不足则补0)
    字段7:信噪比(00-99)dbHz
    字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
    字段9:卫星仰角(00 - 90)度(前导位数不足则补0)
    字段10:卫星方位角(00 - 359)度(前导位数不足则补0)
    字段11:信噪比(00-99)dbHz
    字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
    字段13:卫星仰角(00 - 90)度(前导位数不足则补0)
    字段14:卫星方位角(00 - 359)度(前导位数不足则补0)
    字段15:信噪比(00-99)dbHz
    字段16:校验值


    $GPRMC
    例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
    字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
    字段1:UTC时间,hhmmss.sss格式
    字段2:状态,A=定位,V=未定位
    字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
    字段4:纬度N(北纬)或S(南纬)
    字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
    字段6:经度E(东经)或W(西经)
    字段7:速度,节,Knots
    字段8:方位角,度
    字段9:UTC日期,DDMMYY格式
    字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
    字段11:磁偏角方向,E=东W=西
    字段16:校验值

    $GPVTG
    例:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F
    字段0:$GPVTG,语句ID,表明该语句为Track Made Good and Ground Speed(VTG)地面速度信息
    字段1:运动角度,000 - 359,(前导位数不足则补0)
    字段2:T=真北参照系
    字段3:运动角度,000 - 359,(前导位数不足则补0)
    字段4:M=磁北参照系
    字段5:水平运动速度(0.00)(前导位数不足则补0)
    字段6:N=节,Knots
    字段7:水平运动速度(0.00)(前导位数不足则补0)
    字段8:K=公里/时,km/h
    字段9:校验值

    Data and time (ZDA) 时间和日期信息
    $GPZDA,<1>,<2>,<3>,<4>,<5>*hh<CR><LF>
    <1> UTC时间,hhmmss(时分秒)格式
    <2> UTC日期,日
    <3> UTC日期,月
    <4> UTC日期,年<5>时区

    Datum (DTM) 大地坐标系信息
    $GPDTM,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>*hh<CR><LF>
    <1>本地坐标系代码 W84
    <2>坐标系子代码 空
    <3>纬度偏移量
    <4>纬度半球N(北半球)或S(南半球)
    <5>经度偏移量
    <6>经度半球E(东经)或W(西经)
    <7>高度偏移量
    <8>坐标系代码 W84

     

    二、 GARMIN定义的语句
    1、 Estimated Error Information(PGRME)估计误差信息
    $PGRME,<1>,M,<2>,M,<3>,M*hh<CR><LF>
    <1> HPE(水平估计误差),0.0~999.9米
    <2> VPE(垂直估计误差),0.0~999.9米
    <3> EPE(位置估计误差),0.0~999.9米
    2、 GPS Fix Data Sentence(PGRMF)GPS定位信息
    $PGRMF,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>*hh<CR><LF

    >
    <1> GPS周数(0~1023)
    <2> GPS秒数(0~604799)
    <3> UTC日期,ddmmyy(日月年)格式
    <4> UTC时间,hhmmss(时分秒)格式
    <5> GPS跳秒数
    <6> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
    <7> 纬度半球N(北半球)或S(南半球)
    <8> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
    <9> 经度半球E(东经)或W(西经)
    <10> 模式,M=手动,A=自动
    <11> 定位类型,0=没有定位,1=2D定位,2=3D定位
    <12> 地面速率(0~1851公里/小时)
    <13> 地面航向(000~359度,以真北为参考基准)
    <14> PDOP位置精度因子(0~9,四舍五入取整)
    <15> TDOP时间精度因子(0~9,四舍五入取整)
    3、 Map Datum(PGRMM)坐标系统信息
    $PGRMM,<1>*hh<CR><LF>
    <1> 当前使用的坐标系名称(数据长度可变,如“WGS 84”)
    注:该信息在与MapSource进行实时连接的时候使用。
    4、 Sensor Status Information(PGRMT)工作状态信息
    $PGRMT,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*hh<CR><LF>
    <1> 产品型号和软件版本(数据长度可变,如“GPS 15L/15H VER 2.05”)
    <2> ROM校验测试,P=通过,F=失败
    <3> 接收机不连续故障,P=通过,F=失败
    <4> 存储的数据,R=保持,L=丢失
    <5> 时钟的信息,R=保持,L=丢失
    <6> 振荡器不连续漂移,P=通过,F=检测到过度漂移
    <7> 数据不连续采集,C=正在采集,如果没有采集则为空
    <8> GPS接收机温度,单位为摄氏度
    <9> GPS接收机配置数据,R=保持,L=丢失
    注:本语句每分钟发送一次,与所选择的波特率无关。
    5、 3D velocity Information(PGRMV)三维速度信息
    $PGRMV,<1>,<2>,<3>*hh<CR><LF>
    <1> 东向速度,514.4~514.4米/秒
    <2> 北向速度,514.4~514.4米/秒
    <3> 上向速度,999.9~9999.9米/秒
    6、 DGPS Beacon Information(PGRMB)信标差分信息
    $PGRMB,<1>,<2>,<3>,<4>,<5>,K,<6>,<7>,<8>*hh<CR><LF>
    <1> 信标站频率(0.0,283.5~325.0kHz,间隔为0.5kHz)
    <2> 信标比特率(0,25,50,100或200bps)
    <3> SNR信标信号信噪比(0~31)
    <4> 信标数据质量(0~100)
    <5> 与信标站的距离,单位为公里
    <6> 信标接收机的通讯状态,0=检查接线,1=无信号,2=正在调谐,3=正在接收,4=正在扫描
    <7> 差分源,R=RTCM,W=WAAS,N=非差分定位
    <8> 差分状态,A=自动,W=仅为WAAS,R=仅为RTCM,N=不接收差分信号

    三、TEXT文本格式说明:

        区域描述:              长度:    注释:
        ----------------------- ------- ------------------------
        句头起始符                   始终为 '@'
        ----------------------- ------- ------------------------
       /年                           UTC年的最后两位数字
    | ----------------------- ------- ------------------------
    | 月                           UTC月, "01".."12"
    T | ----------------------- ------- ------------------------
    i | 日                           UTC日, "01".."31"
    m | ----------------------- ------- ------------------------
    e | 时                           UTC时, "00".."23"
    | ----------------------- ------- ------------------------
    | 分                           UTC分, "00".."59"
    | ----------------------- ------- ------------------------
       \秒                           UTC秒, "00".."59"
        ----------------------- ------- ------------------------
       /纬度半球                     'N' 或 'S'
    | ----------------------- ------- ------------------------
    | 纬度坐标                     WGS84坐标系统,坐标格式ddmmmmm,
                                    在第4位数字后省略了一个小数点。
    | ----------------------- ------- ------------------------
    | 经度半球                     'E' 或 'W'
    | ----------------------- ------- ------------------------
    | 经度坐标                     WGS84坐标系统,坐标格式dddmmmmm,
    P |                                 在第5位数字后省略了一个小数点。
    o | ----------------------- ------- ------------------------
    s | 定位状态                     'd' 2维差分定位
    i |                                 'D' 3维差分定位
    t |                                 'g' 2维定位
    i |                                 'G' 3维定位
    o |                                 'S' 模拟状态
    n |                                 '_' 无效
    | ----------------------- ------- ------------------------
    | 水平定位误差                 单位为“米”
    | ----------------------- ------- ------------------------
    | 高度符号                     '+' 或 '-'
    | ----------------------- ------- ------------------------
       \高度                         海拔高,单位为“米”
        ----------------------- ------- ------------------------
       /东/西速度方向               'E' 或 'W'
    | ----------------------- ------- ------------------------
    | 东/西速度                    单位是“米/秒”,在第三位后省略了一个小数点,
                                    ("1234" = 123.4 m/s)
    V | ----------------------- ------- ------------------------
    e | 南/北速度方向               'S' 或 'N'
    l |
    o | ----------------------- ------- ------------------------
    c | 南/北速度                   单位是“米/秒”,在第三位后省略了一个小数点,
    i |                                 ("1234" = 123.4 m/s)
    t | ----------------------- ------- ------------------------
    y | 垂直速度方向                 'U' (上) 或 'D' (下)
    | ----------------------- ------- ------------------------
    | 垂直速度                     单位是“米/秒”,在第二位后省略了一个小数点,
                                     ("1234" = 12.34 m/s)
        ----------------------- ------- ------------------------
        句尾结束符                    回车, '0x0D', 和换行'0x0A'
     
     

     

    实际使用中在软件中需要实现的常用功能

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

    读取当前坐标
    使用报文:Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息

    读取速度
    使用报文:Track Made Good and Ground Speed(VTG)地面速度信息

    读取方向
    使用报文:Track Made Good and Ground Speed(VTG)地面速度信息
    --注:速度和方向的计算这块,有一点需要注意,就是GPS接收机并非简单的将两次坐标相减进行计算,而是采用的多普勒效应进行处理,所以在实际应用中,速度和方向的计算会稍后一点延迟,因为信号是1秒接收一次,而且方向的计算还要根据前几秒的方向进行加权平均。

    读取卫星数及状态
    使用报文:GPS Satellites in View(GSV)可见卫星信息
               GPS DOP and Active Satellites(GSA)当前卫星信息
     


    GPS的误差
     

    有很多种因素会影响到GPS的准确率,以下是一个GPS误差引入简表:
    卫星时钟误差:0-1.5米
    卫星轨道误差:1-5米
    电离层引入的误差:0-30米
    大气层引入的误差:0-30米
    接收机本身的噪音:0-10米
    多路反射:0-1米
    总定位误差:大约28米

    上述的简表,并不表示一定会存在这么大的误差,这是给出的最好及最差的范围,当然最好情况不能同时发生,最差的情况也不能同时发生。
    实际在卫星的导航电文中,已经包含了大气层的修正参数,能够消除50%到70%的误差,而且这两年出的GPS的误差大致范围是10米或以内。
    在现有情况下,民用级单台GPS接收机要想达到1m以内的精度是不可能实现的,原因除GPS本身精度外,还包括地图、定位点测绘、嵌入式设备的运行速度等,所以过度追求定位精度对于民用产品来说已无实际的意义。
     


    GPS的漂移
     

    漂移是GPS导航时需要处理的问题之一,漂移主要有两个方面,第一,速度过快,以至于GPS的响应时间短于当前运行速度,出现漂移;第二,在高大建筑密集或天气情况不好的地方,因为GPS信号经过多次的折、反射,造成信号误差,出现漂移。

    解决GPS漂移主要从两方面入手:
    一、主系统的设计主要减少在近距离内对GPS信号的干扰。
    二、软件处理。软件处理主要集中在导航软件处完成,导航软件会将坐标定位在道路之内,如果GPS接收到的信号超出道路的半径范围将自动过滤这个数据,并根据上次的速度及方向推算出当前点的位置。

    对于静态漂移,也有建议做软件判断:
    1.检测到的状态为静止时,强制速度为0;
    2.速度为0时,强制方向为0;
    3.数据中的速度值为0时,就不去更新地图上的经纬度;
    4.通过比较上次定位数据的经纬度差的绝对值(同时包括时间)再来判定是否有慢速移动;

    另外有些GPS模块(UBLOX)可设置静止模式、行走模式、汽车模式、海上模式、飞行模式,通过设置这些参数来解决漂移问题。
     

  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/xidongs/p/1948689.html
Copyright © 2011-2022 走看看