GPS串口报文NMEA格式,Python解析L76-gps数据流

Posted Mark_md

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPS串口报文NMEA格式,Python解析L76-gps数据流相关的知识,希望对你有一定的参考价值。

NMEA是现在GNSS(Global Navigation Satellite System)导航设备用作输出的统一标准,它有几种不同的格式,每种都是独立相关的ACSII字节流,使用,隔开。常用的格式有 GGA、GLL、GSA、GSV、RMC、VTG、ZDA、GST

  • 下面内容大多来源于L76产品手册,可能与标准NMEA有些许出入。
    移远L76-GNSS定位模组产品页

  • Python解析GPS数据流主要依赖这几个开源库:
    pynmea2
    micropyGPS - 用于微型嵌入式microPython

  • 另外GPS的数据流没有必要全部解析,往往只需要其中一组便可满足需求。所以完全可以通过字节匹配去简单处理单组报文,而不使用开源库。我个人最常用的是RMC,单组报文即包含:经纬度UTC时间UTC日期速度和航向 等消息。


L76-GNSS 模组的一组典型输出:(静止状态,速度为0)

$GNGGA,093100.000,3151.10397,N,11707.63497,E,1,11,2.6,214.7,M,-5.0,M,,*50
$GNGLL,3151.10397,N,11707.63497,E,093100.000,A,A*49
$GNGSA,A,3,02,05,12,20,25,,,,,,,,3.9,2.6,2.9,1*35
$GNGSA,A,3,10,13,28,33,38,41,,,,,,,3.9,2.6,2.9,4*36
$GPGSV,3,1,10,02,60,349,39,05,38,247,41,06,49,057,27,12,30,263,31,0*65
$GPGSV,3,2,10,13,,,24,17,17,143,,19,39,141,29,20,21,248,39,0*5F
$GPGSV,3,3,10,25,15,299,44,195,,,26,0*6C
$BDGSV,3,1,09,05,,,35,10,37,218,28,13,52,318,41,27,,,36,0*72
$BDGSV,3,2,09,28,48,323,46,33,73,210,33,38,61,342,42,40,,,37,0*42
$BDGSV,3,3,09,41,20,218,40,0*45
$GNRMC,093100.000,A,3151.10397,N,11707.63497,E,0.00,0.00,280521,,,A,V*08
$GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
$GNZDA,093100.000,28,05,2021,00,00*4D
$GPTXT,01,01,01,ANTENNA OK*35

GGA(用于输出GNSS 定位数据)

$GNGGA,093100.000,3151.10397,N,11707.63497,E,1,11,2.6,214.7,M,-5.0,M,,*50

$xxGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,*<15>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> UTC 时间,格式为hhmmss.ss。hh - 小时;mm - 分钟;ss.ss - 秒。
<2> 纬度,格式为ddmm.mmmm。dd - 度;mm.mmmm - 分。
<3> 北纬或南纬指示:N - 北纬;S - 南纬。
<4> 经度,格式为dddmm.mmmm。ddd - 度;mm.mmmm - 分。
<5> 东经或西经指示:E - 东经;W - 西经。
<6> 定位状态标识:0 - 无效;1 - 单点定位;2 - 差分定位。
<7> 参与定位的卫星数量。
<8> 水平精度因子,0.00 ~ 99.99,不定位时值为99.99。
<9> 椭球高,固定输出1 位小数。(天线离海平面的高度)
<10> 椭球高单位,固定填M。指单位米。
<11> 海平面分离度,固定输出1 位小数。(大地水准面高度)
<12> 海平面分离度单位,固定填M。指单位米。
<13> 差分校正时延,单位为秒;非差分定位时为空。
<14> 差分参考基站ID;非差分定位时为空。
<15> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


GLL(用于输出地理位置的经度/纬度数据)

$GNGLL,3151.10397,N,11707.63497,E,093100.000,A,A*49

$xxGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*<8>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> 纬度,格式为ddmm.mmmm。dd - 度;mm.mmmm - 分。
<2> 北纬或南纬指示:N - 北纬;S - 南纬。
<3> 经度,格式为dddmm.mmmm。ddd - 度;mm.mmmm - 分。
<4> 东经或西经指示:E - 东经;W - 西经。
<5> UTC 时间,格式为hhmmss.ss。hh - 小时;mm - 分钟;ss.ss - 秒。
<6> 位置有效标识:V - 无效;A - 有效。
<7> 定位系统模式标识:N - 未定位;A - 单点定位;D - 差分定位。
<8> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


GSA(用于输出GNSS 精度因子与有效卫星信息)

$GNGSA,A,3,02,05,12,20,25,,,,,,,,3.9,2.6,2.9,1*35

$xxGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>*<8>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> 定位模式指定状态:M - 手动指定2D 或3D 定位;A - 自动切换2D 或3D 定位。
<2> 定位模式:1 - 未定位;2 - 2D 定位;3 - 3D 定位。
<3> sv1 ~ sv12。参与定位的卫星号:参与定位的卫星不足12 颗时不足的区域填空,多于12 颗只输出前12 颗卫星;GPS 卫星号为01 ~ 32;BD2 卫星号为01 ~ 37(BD2 PRN 号)。
<4> 位置精度因子,0.00 ~ 99.99,不定位时值为99.99。
<5> 水平精度因子,0.00 ~ 99.99,不定位时值为99.99。
<6> 垂向精度因子,0.00 ~ 99.99,不定位时值为99.99。
<7> NMEA 协议定义的GNSS 系统ID:1 - GPS 系统ID;4 - BD2 系统ID。
<8> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


GSV(用于输出可见GNSS 卫星的信息)

$GPGSV,3,1,10,02,60,349,39,05,38,247,41,06,49,057,27,12,30,263,31,0*65
$GPGSV,3,2,10,13,,,24,17,17,143,,19,39,141,29,20,21,248,39,0*5F
$GPGSV,3,3,10,25,15,299,44,195,,,26,0*6C
$BDGSV,3,1,09,05,,,35,10,37,218,28,13,52,318,41,27,,,36,0*72
$BDGSV,3,2,09,28,48,323,46,33,73,210,33,38,61,342,42,40,,,37,0*42
$BDGSV,3,3,09,41,20,218,40,0*45

$xxGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>*<9>
xx :GP - GPS 系统单独定位;GB - BD2 系统单独定位;(系统标识每条GSV 消息只包含4 颗卫星的信息)
<1> GSV 消息总数,最小值为1。
<2> 当前卫星系统GSV 消息的编号,最小值为1。
<3> 当前系统可见卫星的总数。
<4> 第1 ~ 第4 颗卫星的卫星号:GPS 卫星号为01 ~ 32;BD2 卫星号为01 ~ 37(BD2 PRN 号)。
<5> 第1 ~ 第4 颗卫星的仰角(0 ~ 90 度),固定输出2 位,不足2 位前面补零。
<6> 第1 ~ 第4 颗卫星的方位角(0 ~ 359 度),固定输出3 位,不足3 位前面补零。
<7> 第1 ~ 第4 颗卫星的载噪比(0 ~ 99dBHz),固定输出2 位,不足两位前面补零。未跟踪的卫星填空。
<8> NMEA 协议定义的信号ID(固定输出0)。
<9> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


RMC(用于输出推荐的最少数据)

$GNRMC,093100.000,A,3151.10397,N,11707.63497,E,0.00,0.00,280521,,,A,V*08

$xxRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>*<14>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> UTC 时间,格式为hhmmss.ss。hh - 小时;mm - 分钟;ss.ss - 秒。
<2> 位置有效标识:V - 无效;A - 有效。
<3> 纬度,格式为ddmm.mmmm。dd - 度;mm.mmmm - 分。
<4> 北纬或南纬指示:N - 北纬;S - 南纬。
<5> 经度,格式为dddmm.mmmm。ddd - 度;mm.mmmm - 分。
<6> 东经或西经指示:E - 东经;W - 西经。
<7> 地面速率,单位为节,固定输出3 位小数。
<8> 地面航向,单位为度,从北向起顺时针计算。
<9> UTC 日期,格式为ddmmyy:dd - 日;mm - 月;yy - 年。
<10> 磁偏角,固定填空。
<11> 磁偏角方向,固定填空。
<12> 定位模式标识:N - 未定位;A - 单点定位;D - 差分定位。
<13> 导航状态标志,固定输出’V’。V - 设备不提供导航状态信息。
<14> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


VTG(用于输出航迹向和地速)

$GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23

$xxVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*<10>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> 以真北为参考基准的地面航向(0.000 ~ 359.999 度)。
<2> 航向标志,固定填T。
<3> 以磁北为参考基准的地面航向(0.000 ~ 359.999 度)。
<4> 航向标志,固定填M。
<5> 地面速率,单位为节。
<6> 速率单位,固定填N。
<7> 地面速率,单位为km/h。
<8> 速率单位,固定填K。
<9> 定位模式标识:N - 未定位;A - 单点定位;D - 差分定位。
<10> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


ZDA(用于输出日期和时间)

$GNZDA,093100.000,28,05,2021,00,00*4D

$xxZDA,<1>,<2>,<3>,<4>,<5>,<6>*<7>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> UTC 时间,格式为hhmmss.ss。hh - 小时;mm - 分钟;ss.ss - 秒。
<2> UTC 日,两位数字,01 ~ 31。
<3> UTC 月,两位数字,01 ~ 12。
<4> UTC 年,四位数字。
<5> 本地时区的小时(固定输出00)。
<6> 本地时区的分钟(固定输出00)。
<7> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。


GST(用于输出GNSS 伪距误差统计数据)

$xxGST,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>*<9>
xx :GP - GPS 系统单独定位;BD - BD2 系统单独定位;GN - GPS 与BD2 系统混合定位。
<1> UTC 时间,格式为hhmmss.ss。hh - 小时;mm - 分钟;ss.ss - 秒。
<2> 伪距误差的均方差,单位为米,最大值为3750000。
<3> 误差椭圆的半长轴,单位为米,固定填空。
<4> 误差椭圆的半短轴,单位为米,固定填空。
<5> 误差椭圆的半长轴指向,单位为度,从正北起顺时针,固定填空。
<6> 纬度方向的误差均方差,单位为米。
<7> 经度方向的误差均方差,单位为米。
<8> 高度方向的误差均方差,单位为米。
<9> 校验和;本条语句从’$‘到’*'之间的所有字符进行异或得到的16 进制数。

以上是关于GPS串口报文NMEA格式,Python解析L76-gps数据流的主要内容,如果未能解决你的问题,请参考以下文章

高通平台开发系列讲解(GPS篇)NMEA数据包解析

高通平台开发系列讲解(GPS篇)NMEA数据包解析

GPS NMEA协议,0183 定位数据格式 双模定位:GNXXX GPS+BD 完整版

GPS(NMEA)数据解析

NMEA-0183协议解析

GPS格式标准