[转]GPS数据解析 NMEA

NMEA-0183协议有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等:

GPGSV:可见卫星信息
GPGLL:地理定位信息
GPRMC:推荐最小定位信息
GPVTG:地面速度信息
GPGGA:GPS定位信息
GPGSA:当前卫星信息
 以下是我采集到的数据

rostopic  echo /nmea_sentence
---
header: 
  seq: 2578
  stamp: 
    secs: 1531905192
    nsecs: 966650009
  frame_id: "/gps"
sentence: "$GBGSV,4,4,15,414,33,231,29,417,14,170,,419,,,37*5C"
---
header: 
  seq: 2579
  stamp: 
    secs: 1531905192
    nsecs: 966876983
  frame_id: "/gps"
sentence: "$GNGLL,3158.56222,N,11845.20414,E,091313.00,A,D*7F"
---
header: 
  seq: 2580
  stamp: 
    secs: 1531905193
    nsecs: 957395076
  frame_id: "/gps"
sentence: "$GNRMC,091314.00,A,3158.56220,N,11845.20414,E,0.013,,180718,,,D*66"
---
header: 
  seq: 2581
  stamp: 
    secs: 1531905193
    nsecs: 958137989
  frame_id: "/gps"
sentence: "$GNVTG,,T,,M,0.013,N,0.024,K,D*3C"
---
header: 
  seq: 2582
  stamp: 
    secs: 1531905193
    nsecs: 959363937
  frame_id: "/gps"
sentence: "$GNGGA,091314.00,3158.56220,N,11845.20414,E,2,12,0.76,76.7,M,2.3,M,,0000*4C"
---
header: 
  seq: 2583
  stamp: 
    secs: 1531905193
    nsecs: 960422992
  frame_id: "/gps"
sentence: "$GNGSA,A,3,19,13,17,06,09,05,12,42,50,25,,,1.75,0.76,1.57*1C"
---
header: 
  seq: 2584
  stamp: 
    secs: 1531905193
    nsecs: 961462020
  frame_id: "/gps"
sentence: "$GNGSA,A,3,401,404,414,409,411,412,406,,,,,,1.75,0.76,1.57*25"
---
header: 
  seq: 2585
  stamp: 
    secs: 1531905193
    nsecs: 962698936
  frame_id: "/gps"
sentence: "$GPGSV,4,1,13,05,54,263,47,06,47,070,47,07,01,097,32,09,27,050,38*74"
---
header: 
  seq: 2586
  stamp: 
    secs: 1531905193
    nsecs: 964178085
  frame_id: "/gps"
sentence: "$GPGSV,4,2,13,12,25,253,38,13,13,186,44,17,20,149,50,19,43,149,44*77"
---
header: 
  seq: 2587
  stamp: 
    secs: 1531905193
    nsecs: 965635061
  frame_id: "/gps"
sentence: "$GPGSV,4,3,13,23,01,035,,25,14,296,31,29,03,322,35,42,43,137,39*74"
---
header: 
  seq: 2588
  stamp: 
    secs: 1531905193
    nsecs: 966245889
  frame_id: "/gps"
sentence: "$GPGSV,4,4,13,50,43,137,38*47"
---
header: 
  seq: 2589
  stamp: 
    secs: 1531905193
    nsecs: 967303037
  frame_id: "/gps"
sentence: "$GBGSV,4,1,15,401,45,144,38,402,39,234,,403,52,195,,404,32,121,42*65"
---
header: 
  seq: 2590
  stamp: 
    secs: 1531905193
    nsecs: 968329906
  frame_id: "/gps"
sentence: "$GBGSV,4,2,15,405,18,254,,406,55,184,29,408,68,038,,409,32,197,32*6D"
---
header: 
  seq: 2591
  stamp: 
    secs: 1531905193
    nsecs: 969372034
  frame_id: "/gps"
sentence: "$GBGSV,4,3,15,410,07,212,22,411,58,322,21,412,62,134,24,413,63,343,24*60"
---
header: 
  seq: 2592
  stamp: 
    secs: 1531905193
    nsecs: 970164060
  frame_id: "/gps"
sentence: "$GBGSV,4,4,15,414,33,231,29,417,14,170,,419,,,37*5C"
---
header: 
  seq: 2593
  stamp: 
    secs: 1531905193
    nsecs: 970952033
  frame_id: "/gps"
sentence: "$GNGLL,3158.56220,N,11845.20414,E,091314.00,A,D*7A"



header: 
  seq: 540
  stamp: 
    secs: 1531905047
    nsecs: 950938940
  frame_id: "/gps"
sentence: "$GNGSA,A,3,401,404,414,409,411,412,,,,,,,1.64,0.80,1.43*1B"
---
header: 
  seq: 541
  stamp: 
    secs: 1531905047
    nsecs: 952070951
  frame_id: "/gps"
sentence: "$GPGSV,4,1,13,05,54,261,37,06,48,068,47,07,00,098,15,09,27,051,38*7D"
---
header: 
  seq: 542
  stamp: 
    secs: 1531905047
    nsecs: 953118085
  frame_id: "/gps"
sentence: "$GPGSV,4,2,13,12,26,254,15,13,13,186,42,17,21,148,51,19,44,149,45*7D"
---
header: 
  seq: 543
  stamp: 
    secs: 1531905047
    nsecs: 954057931
  frame_id: "/gps"
sentence: "$GPGSV,4,3,13,23,02,035,39,25,14,297,33,29,,,36,42,43,137,38*4C"
---
header: 
  seq: 544
  stamp: 
    secs: 1531905047
    nsecs: 954607963
  frame_id: "/gps"
sentence: "$GPGSV,4,4,13,50,43,137,40*48"
---
header: 
  seq: 545
  stamp: 
    secs: 1531905047
    nsecs: 955605983
  frame_id: "/gps"
sentence: "$GBGSV,4,1,15,401,46,144,37,402,39,234,,403,52,195,,404,32,121,42*69"
---
header: 
  seq: 546
  stamp: 
    secs: 1531905047
    nsecs: 956624031
  frame_id: "/gps"
sentence: "$GBGSV,4,2,15,405,18,254,,406,54,184,25,408,68,037,,409,32,197,28*64"
---
header: 
  seq: 547
  stamp: 
    secs: 1531905047
    nsecs: 957636117
  frame_id: "/gps"
sentence: "$GBGSV,4,3,15,410,08,212,,411,57,322,30,412,63,132,33,413,62,342,*67"
---
header: 
  seq: 548
  stamp: 
    secs: 1531905047
    nsecs: 958431005
  frame_id: "/gps"
sentence: "$GBGSV,4,4,15,414,32,230,26,417,14,170,,419,,,45*56"
---
header: 
  seq: 549
  stamp: 
    secs: 1531905047
    nsecs: 959296941
  frame_id: "/gps"
sentence: "$GNGLL,3158.56210,N,11845.20434,E,091049.00,A,D*70"
---

 

   GPS数据格式

a.GPS固定数据输出语句($GPGGA)

这是一帧GPS定位的主要数据,也是使用最广的数据。

$GPGGA 语句包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,水平精确度,海拔高度,高度单位,大地水准面高度,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记(用回车符<CR>和换行符<LF>),分别用14个逗号进行分隔。该数据帧的结构及各字段释义如下:

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>

$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据);

<1>  UTC时间,格式为hhmmss.sss;

<2>  纬度,格式为ddmm.mmmm(第一位是零也将传送);

<3>  纬度半球,N或S(北纬或南纬)

<4>  经度,格式为dddmm.mmmm(第一位零也将传送);

<5>  经度半球,E或W(东经或西经)

<6>  定位质量指示,0=定位无效,1=定位有效;

<7>  使用卫星数量,从00到12(第一个零也将传送)

<8>  水平精确度,0.5到99.9

<9>  天线离海平面的高度,-9999.9到9999.9米

M    指单位米

<10> 大地水准面高度,-9999.9到9999.9米

M    指单位米

<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量

<12>  差分参考基站标号,从0000到1023(首位0也将传送)。

*    语句结束标志符

xx    从$开始到*之间的所有ASCII码的异或校验和

<CR>   回车

<LF>   换行

b.可视卫星状态输出语句($GPGSV)     

例2:$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*78   

标准格式:   $GPGSV,(1),(2),(3),(4),(5),(6),(7),…(4),(5),(6),(7)*hh(CR)(LF)   

各部分含义为:   

(1)总的GSV语句电文数;2;

(2)当前GSV语句号:1;   

(3)可视卫星总数:08;   

(4)卫星号:06;   

(5)仰角(00~90度):33度;   

(6)方位角(000~359度):240度;   

(7)信噪比(00~99dB):45dB(后面依次为第10,16,17号卫星的信息);   

*总和校验域;  

hh 总和校验数:78;   

(CR)(LF)回车,换行。   

注:每条语句最多包括四颗卫星的信息,每颗卫星的信息有四个数据项,即:  

(4)-卫星号,(5)-仰角,(6)-方位角,(7)-信噪比。

c.当前卫星信息($GSA)

$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>

<1>模式 :M = 手动, A = 自动。

<2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。

<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。

<4> PDOP位置精度因子(0.5~99.9)

<5> HDOP水平精度因子(0.5~99.9)

<6> VDOP垂直精度因子(0.5~99.9)

<7> Checksum.(检查位).

d.推荐定位信息(RMC)

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC时间,hhmmss(时分秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

e.地面速度信息(VTG)

$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

<1> 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)

<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

<3> 地面速率(000.0~999.9节,前面的0也将被传输)

<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

 

以下是本人截取到的数据中的一部分:

GPRMC解析 表示推荐使用的最小GPS数据

$GPRMC  起始标识

102220.00  UTC 时间 北京时间需要再加8小时,所以应该是18:22:20。

A 表示有效定位,如果是V就表示无效定位。

3111.90722 纬度,北纬31.119072度。

N 表示北半球,如果是S则表示南半球。

12137.51645 经度,东经121.3751645度。

E 表示东经,如果是W则表示西经。

0.000 地面速度为0。

空数据 表示方位角。

130108 UTC日期,表示2008年1月13日。

空数据 表示磁北

空数据 表示磁北方向

A  表示GPS锁定

*7F 表示校验和

 

GPGLL解析 表示经纬度定位数据

$GPGLL  起始标识

3111.90722 纬度,北纬31.119072度。

N  表示北半球,如果是S则表示南半球。

12137.51645  经度,东经121.3751645度。

E 表示东经,如果是W则表示西经。

102219.00  UTC 时间 北京时间需要再加8小时,所以应该是18:22:19。

A 表示有效定位,如果是V就表示无效定位。

A  表示GPS锁定

*7F 表示校验和

 

GPGSV解析 表示观测到的GPS卫星的数据

$GPGSV  起始标识

2         观测数据的行数,这里是2,因此有两行$GPGSV开头的数据。

1         观测数据的行数索引,本行为第一行。

08  观测到的卫星个数。

02  卫星编号。

34  海拔,34度。

133 方位角,133度。

37  SNR(信噪比),37dBHz。

26,78,242,46 这是卫星编号为26的卫星数据,格式同上。

06,32,275,45 这是卫星编号为06的卫星数据,格式同上。

15,68,237,43 这是卫星编号为15的卫星数据,格式同上。

*72  表示校验和

 

 

GPGSA解析 表示DOP(精度衰减因子)以及观测到的卫星编号

$GPGSA  起始标识。

A  表示自动2D/3D锁定,如果为M表示手动锁定。

3  锁定状态,表示3D锁定,如果为1表示无锁定,为2表示2D锁定。

02,26,06,15,29,21,24,,,,,, 这段为观测到的卫星编号。

2.37  表示位置DOP。

1.60  表示水平DOP。

1.75  表示垂直DOP。

 

 

GPGGA解析 表示锁定的数据

$GPGGA  起始标识

102219.00   UTC 时间 北京时间需要再加8小时,所以应该是18:22:19。

3111.90722 纬度,北纬31.119072度。

N  表示北半球,如果是S则表示南半球。

12137.51645  经度,东经121.3751645度。

E 表示东经,如果是W则表示西经。

1  表示GPS锁定(2D/3D)。

07 表示被使用的卫星个数。

1.60  表示水平DOP。

11.1  海拔高度,11.1米。

M  单位米。

8.4 大地水平面高度,8.4米。

M  单位米。

空数据 表示Age of Differential Corrections,DGPS使用的参数。

*51表示校验和。

 

$GPVTG,,T,,M,0.000,N,0.000,K,A*23

GPVTG解析 表示速度及方位角

$GPVTG 起始标识

空数据  表示方位角

T  表示真北

空数据  表示方位角

M  表示磁北

0.000  表示速度

N  表示速度单位,节。

0.000 表示速度

K  表示速度单位,千米每小时

A  表示GPS 锁定

*23  表示校验和

参考网址:

http://blog.csdn.net/lusehu/article/details/6412075

http://blog.csdn.net/zhandoushi1982/article/details/7947682

https://blog.csdn.net/u011196227/article/details/39051419

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F103版本可以通过串口接收GPS模块发送的NMEA协议数据,然后进行解析NMEA协议是一种常用的GPS数据格式,包含了位置、速度、时间等信息。解析NMEA协议数据需要先将数据按照逗号分隔,然后根据协议规定的字段解析出相应的数据。例如,$GPRMC协议中包含了UTC时间、经度、纬度、速度等信息,可以通过解析该协议来获取这些数据解析完成后,可以将数据存储到内存中或者通过其他方式进行处理和显示。 ### 回答2: 在使用STM32F103版本GPS解析NMEA协议数据时,需要先了解NMEA协议的结构。NMEA协议是用于GPS定位的标准协议,它的结构包含了数据类型标识符、数据字段和校验码。其中数据字段包括时间、日期、经度、纬度、海拔高度等信息,而校验码是用于校验数据的完整性和准确性。在解析NMEA协议数据时,首先需要对接收到的数据进行分析和提取,进而将数据化为可表示的数据类型,如结构体或数组。 基于STM32F103版本进行GPS解析时,可以使用串口通信进行数据传输。可以通过串口中断程序获取数据,并在中断处理函数中对数据进行分析和处理。在程序的实现过程中,可以先设置一个缓存区用于存储串口中断处理函数接收到的数据,当接收到的数据中包含了完整的NMEA协议数据后,再进行解析和提取。 对于NMEA协议中的数据字段,需要对每个字段进行解析提取,例如通过解析语句$GPRMC中的时间和位置信息,可以得到当前时间和地理位置,而解析语句$GPGGA,可以得到卫星数量、海拔高度、信噪比等信息。另外,在获取到NMEA协议数据后,还需要对数据进行校验,以确保数据的正确性。校验可以通过校验码计算来实现,常用的校验方式是异或校验法,即将数据中所有字节进行异或运算得到一个校验码。 在实现GPS解析时,还需要考虑到系统对处理能力的要求。由于NMEA协议数据频繁更新,对系统的处理能力有一定的要求,因此可以通过优化代码逻辑结构,减小耗时的操作,提升系统性能。同时,还需要注意程序的健壮性,对异常情况进行防范和处理,以保证程序的稳定性和可靠性。 综上所述,STM32F103版本的GPS解析NMEA协议数据,需要先对协议结构进行了解,然后通过串口通信进行数据传输,并使用串口中断程序进行数据处理,在实现过程中,需要考虑到系统的处理能力和程序的健壮性。 ### 回答3: STM32F103系列是一款高性能、低功耗、32位Cortex-M3内核处理器的微控制器,广泛应用于各种嵌入式系统设计。随着GPS技术的广泛应用,STM32F103版本的GPS解析NMEA协议数据变得越来越重要,下面我将详细介绍STM32F103版本GPS解析NMEA协议数据的方法。 NMEA协议是一种用于GPS接收器和计算机之间的信息交换协议,它定义了一系列用于传输GPS数据数据格式和协议。NMEA协议的数据格式通常为ASCII码格式,不同的数据字段通过逗号分隔。 STM32F103版本的GPS解析NMEA协议数据需要完成以下几个步骤: 1.配置串口 GPS模块一般通过串口与MCU进行通信,因此需要首先配置STM32F103的串口,使其能够接收GPS模块发送的数据。 2.接收数据 在串口配置完成后,MCU需要不断接收GPS模块发送的数据,可以通过中断方式或轮询方式进行。 3.解析数据 MCU接收到GPS模块发送的NMEA协议数据后,需要解析出其中需要的数据字段。例如,获取GPS模块发送的经纬度信息,可以从数据解析出GPRMC数据的经度和纬度字段。 4.处理数据 解析出需要的数据后,还需要进行一些数据处理,例如将经纬度数据换为十进制表示,计算定位的海拔高度等。 5.输出数据 最后,MCU需要将处理后的数据输出到显示器、SD卡或其他设备中,以便用户实时查看或后续处理。 总之,STM32F103版本GPS解析NMEA协议数据需要进行串口配置、数据接收、数据解析数据处理和数据输出等多个步骤,需要仔细调试和测试,才能确保正确解析和输出GPS数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值