Android GNSS 模块分析(五)NMEA 协议

        紧接着上一篇《Android GNSS 模块分析(四)HAL 层》,本篇简述下导航硬件设备与卫星导航系统之间的通信协议。

        

NMEA 协议

简介:

        NMEA(National Marine Electronics Association ),是美国国家海洋电子协会的简称。它是一套定义接收机输出的标准信息,有几种不同的格式,每种都是独立相关的ASCII格式,逗点隔开数据流,数据流长度从30-100字符不等,传输速率基通常是每秒传输。

        NMEA实际上已成为所有的GPS接收机和最通用的数据输出格式!也可以称为 NMEA 0183协议,现常用的版本有 V3.01 和 V4.11。其中定义语句非常多,常用的有$GGA、$GSA、$GSV、$RMC、$VTG、$GGL等。

        如今的卫星导航系统比较丰富,那么针对不同的卫星导航系统,NMEA采用语句前缀区分导航系统数据。在通用语句中加上所使用定位系统前缀:GPS导航 NMEA语句前缀是“GP”;北斗导航 NMEA语句前缀是“BD”/”GB“;GLONASS导航 NMEA语句前缀是“GL”;Galileo导航 NMEA语句前缀是”GA“,多导航系统混合定位 NEMA语句前缀是”GN“。

GNSS TalkerID(NMEA V3.01) TalkerID(NMEA V4.11)
GPS GP GP
北斗 BD GB
GLONASS GL GL
Galileo GA GA
混合定位 GN GN

        下面对 NMEA 协议中常用语句做简单解析,后续可以自行根据格式分析数据。下面以GPS NMEA语句为例:

1、GSA 类型数据

解析 GSA 类型数据,GSA 数据是当前卫星信息
​
格式:$GPGSA,Smode,PS,{SVID},PDOP,HDOP,VDOP*CS <CR> <LF>
$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF>
​
示例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
​
含义:数据标志,模式切换方式,定位状态标志,{当前卫星信息,用于定位的卫星编号},位置精度因子,水平精度因子,垂直精度因子,校验值(前面值的异或)
<1>模式,M=手动 A=自动  <2>定位类型 1=没有定位 2=2D定位 3=3D定位 <3>PRN码,伪随机噪声码 正在用于解算位置的卫星号[01,32] <4>PDOP位置精度因子(0.5,99.9) 卫星分布的空间几何强度因子,一般卫星分布越好时,PDOP值越小,一般小于3为比较理想的状态
<5>HDOP水平精度因子(0.5,99.9) <6>VDOP垂直精度因子(0.5,99.9)

2、RMC 类型数据

解析 RMC 类型数据 RMC数据是推荐定位信息
​
格式:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
​
示例:$GPRMC,,V,,,,,,,,,,N*53
​
含义:数据标志,UTC时间【时分秒格式】,定位状态【A:有效定位 V:无效定位】,纬度【度分格式】,纬度半球,经度【度分格式】,经度半球,地面速率【速率值是海里/小时,单位是节,1海里=1.84公里】,
地面航向【单位为度,指的是偏离真北的角度】,UTC日期【日月年格式】,磁偏角【0~180度】,磁偏角方向【E:东 W:西】,模式指示【A:自主定位 D:差分定位 E:估算定位 N:无效数据】

3、ZDA 类型数据

解析 ZDA 类型数据 ZDA类型数据是时间与日志信息
​
格式 $GPZDA,UTCtime,Day,Month,Year,Ltzh,Ltzn*CS<CR><LF>
​
含义:数据标志,UTC时间,日,月,年,本时区小时,本时区分钟,*校验和$到*之间所有字符的异或

4、VTG 类型数据

解析 VTG 类型数据 VTG类型数据是对地速度和对地航向信息
​
格式 $GPVTG,Cogt,T,Cogm,M,Sog,N,kph,K,mode*CS<CR><LF>
​
示例:$GPVTG,,T,,M,,N,,K,N*2C
​
含义:数据标志,对地正北航向【单位为度】,真北指示【固定为T】,对地磁北航向【单位为度】,磁北指示【固定为M】,对地速度【单位为节】,速度单位节【固定为N】,对地速度【单位为千米每小时】,速度单位【千米每小时固定为K】,定位模式标志,校验和$到*之间所有字符的异或

5、GSV 类型数据

解析 GSV 类型数据 GSV类型数据是可见卫星
​
格式 $GPGSV,NumMsg,MsgNo,NumSv{SVID,ele,az,cn0}*CS<CR><LF>
​
含义:数据标志,GSV语句总数【每条GSV语句最多可以输出4颗可见卫星信息】,当前GSV语句编号,可见卫星总数,{依次为 卫星编号,仰角(0~90°),方位角(0~359°),信噪比(0~99 dB-Hz)},校验和$到*之间所有字符的异或

6、GSV 类型数据

解析 GSV 类型数据 GSV类型数据是可见卫星
​
格式 $GPGSV,NumMsg,MsgNo,NumSv{SVID,ele,az,cn0}*CS<CR><LF>
​
含义:数据标志,GSV语句总数【每条GSV语句最多可以输出4颗可见卫星信息】,当前GSV语句编号,可见卫星总数,{依次为 卫星编号,仰角(0~90°),方位角(0~359°),信噪比(0~99 dB-Hz)},校验和$到*之间所有字符的异或

7、GST 类型数据

解析 GST 类型数据, GST 数据表示 卫星伪距统计 【用卫星发播的伪随机码与接收机复制码的相关技术,测定测站到卫星之间的、含有时钟误差和大气层折射延迟的距离的技术和方法】
​
格式:$GPGST,HHMMSS.SS,A.A,B.B,C.C,D.D,E.E,F.F,G.G *CC<CR><LF>
​
数据标志,UTC时间(时分秒格式),A.A用于导航计算的伪距标准偏差的平方根值,B.B椭球体长半轴标准偏差(单位为米),C.C椭球体短半轴标准偏差(单位为米),D.D椭球体长半轴方位(单位为度),E.E标准纬度偏差(单位为米) F.F标准经度偏差(单位为米),G.G标准高度偏差(单位为米),*CC校验和,<CR><LF>结束符

        无论是 Android原生GNSS框架,又或者是自研导航模块框架,其本质是基于导航芯片硬件数据的分析。数据来源肯定是基于芯片与卫星之间的通信,而NMEA就是两者之间通信的规则。无论是GNSS框架还是自研导航框架,都是去获取并解析这些数据并提供给上层的过程!

        以上就是本篇对于 NMEA 协议的简要分析!

        如果文中有错,烦请告知作者,必当有则改之,无则加勉。在此,小弟先行告谢!

上一篇:Android GNSS 模块分析(四)HAL 层

猜你喜欢

转载自blog.csdn.net/Yang_Mao_Shan/article/details/128206996