GPS串⼝报⽂NMEA格式,Python解析L76-gps数据流
NMEA是现在GNSS(Global Navigation Satellite System)导航设备⽤作输出的统⼀标准,它有⼏种不同的格式,每种都是独⽴相关的ACSII字节流,使⽤,隔开。常⽤的格式有 GGA、GLL、GSA、GSV、RMC、VTG、ZDA、GST。
下⾯内容⼤多来源于L76产品⼿册,可能与标准NMEA有些许出⼊。
Python解析GPS数据流主要依赖这⼏个开源库:
另外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> 纬度,格式为。dd - 度;mm.mmmm - 分。
<3> 北纬或南纬指⽰:N - 北纬;S - 南纬。
<4> 经度,格式为。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> 纬度,格式为。dd - 度;mm.mmmm - 分。
<2> 北纬或南纬指⽰:N - 北纬;S - 南纬。
<3> 经度,格式为。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> 纬度,格式为。dd - 度;mm.mmmm - 分。
<4> 北纬或南纬指⽰:N - 北纬;S - 南纬。
<5> 经度,格式为。ddd - 度;mm.mmmm - 分。
<6> 东经或西经指⽰:E - 东经;W - 西经。
<7> 地⾯速率,单位为节,固定输出3 位⼩数。
<8> 地⾯航向,单位为度,从北向起顺时针计算。
<9> UTC ⽇期,格式为ddmmyy:dd - ⽇;mm - ⽉;yy - 年。
python怎么读取串口数据<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 进制数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论