从NMEA0183到GNSS定位数据获取(一)原理篇

作者:良知犹存

转载授权以及围观:欢迎添加微信公众号:Conscience_Remains

总述

    GPS我们都知道,一种用来全球定位的系统,后来俄罗斯推出了格洛纳斯定位系统,中国推出了北斗定位,欧盟有伽利略,印度与日本也有有发展。所以后来把覆盖全球的自主地利空间定位的卫星系统成为GNSS。

    现在卫星定位那么热,那么作为一个嵌入式人怎么获取这些数据为我们所用呢?下面就听作者一一道来。

 

通常GNSS定位的功能有:

 

精确定时:广泛应用在天文台、通信系统基站、电视台中 

工程施工:道路、桥梁、隧道的施工中大量采用GPS设备进行工程测量 

勘探测绘:野外勘探及城区规划中都有用到 

导航: 

    武器导航:精确制导导弹、巡航导弹 

    车辆导航:车辆调度、监控系统 

    船舶导航:远洋导航、港口/内河引水 

    飞机导航:航线导航、进场着陆控制 

    星际导航:卫星轨道定位 

    个人导航:个人旅游及野外探险 

定位:

    车辆防盗系统 

    手机,PDA,PPC等通信移动设备防盗,电子地图,定位系统 

    儿童及特殊人群的防走失系统 

精准农业:

    农机具导航、自动驾驶,土地高精度平整 

提供时间数据:用于给电信基站、电视发射站等提供精确同步时钟源

维基百科

 

从上面可知GNSS的功能相当丰富,那么作为一个嵌入式开发者怎么获得这些数据呢?

 

一、寻找合适模块

 

 

当然大家可以用各种渠道找到合适的模块,对于嵌入式端我们要选择哪种呢?我推荐了一下本篇所实际应用的模块——中移物联网的M6313模块,GSM与GNSS二合一模块(改天我介绍一下它的GSM功能)。

使用也比较方便,利用SOC的串口连接就可以

 

二、NMEA-0183协议

模块选好了,SOC也连接完毕,配置好模块,连接好GPS天线,这个时候GNSS模块的串口开始向SOC按照一定频率发送数据。并且猛的一看,我们可能看不懂,例如M6313的示例格式如下:

AT+QGNSSC=1 // 开启 GNSS 功能

OK

AT+QGNSSRD?

+QGNSSRD: 



$GNRMC,032220.291,V,,,,,0.00,0.00,140716,,,N*5D

$GNVTG,0.00,T,,M,0.00,N,0.00,K,N*2C

$GNGGA,032220.291,,,,,0,0,,,M,,M,,*5D

$GPGSA,A,1,,,,,,,,,,,,,,,*1E

$BDGSA,A,1,,,,,,,,,,,,,,,*0F

$GPGSV,2,1,07,23,,,31,08,,,49,30,,,33,16,,,45*7E

$GPGSV,2,2,07,07,,,44,27,,,49,26,,,43*72

$BDGSV,1,1,03,10,,,47,04,,,40,07,,,48*62

$GNGLL,,,,,032220.291,V,N*6F



OK

除去模块的回应的数据,中间那些数据是什么,我们分辨不清,这时候就要请NMEA-0183协议出场了。

 

NMEA-0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services )标准协议。

 

由于美国GPS推出的时间很早,所以很多GNSS的标准都是依托美国一些协会制定好的标准。

 

上面看到的诸如$GNRMC打头数据每一个都代表不同的信息:

 

序号

命令

说明

1

$*GGA

卫星定位信息

2

$*GSA

卫星PRN数据

3

$*GSV

可视卫星信息

4

$*RMC

推荐定位信息

5

$*VTG

地面速度信息

6

$*GLL

地理定位信息

7

$*GPZDA

UTC时间和日期

注:* 美国的GPS标准中*代表GP,现在由于其他国家的定位系统,所以扩展到其他字符例如:

标识符含义
BDBDS,北斗二代卫星系统
GPGPS
GLGLONASS
GAGalileo
GNGNSS,全球导航卫星系统

 

协议帧总说明:

 

该协议采用ASCII码,其串行通信默认参数为:M6313的波特率默认为115200bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。

帧格式形如:$aaccc ,ddd ,ddd ,...... ,ddd*hh<CR><LF>

1、“$”——帧命令起始位

2、aaccc——地址域,前两位为识别符,后三位为语句名

3、ddd...ddd——数据

4、“*”——校验和前缀

5、hhh——校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到校验和后,在转换16进制格式的ASCII字符。)

6、<CR><LF>——CR(Carriage  Return)+ LF (Line Feed)帧结束,回车换行。

 

 

1.Global Positioning Positioning Positioning Positioning System Fix Data(GGA)GPS 定位信息 

 

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

 

范例数据:

 

$GPGGA,065545.789,2109.9551,N,12023.4047,E,1,9,0.85,18.1,M,-2.2,M,8.0,,*5E 

 

名称示例单位字节位置
消息 ID$GPGGAGGA 
UTC065545.789hhmmss.sss<1>
纬度2109.9551ddmm.mmmm<2>
N/S 指示NN=北, S=南<3>
经度12023.4047dddmm.mmmm<4>
E/W 指示EW=西, E=东<5>
定位指示10:未定位
1:SPS 模式,定位有效
2:差分, SPS 模式,定位有效
3:PPS 模式,定位有效
<6>
星数目9范围 0 到 12<7>
HDOP0.85水平精度(0.5~99.9)<8>
MSL 幅度
(海拔)
18.1米(-9999.9~99999.9)<9>

 

单位M 
大地-2.2<10>
单位M- 
差分时间8.0<11>
差分 ID0000 <12>
校验和*5E  
<CR><LF>消息结束  

 

2.GPS DOP and Active Satellites Satellites Satellites Satellites(GSA)当前卫星信息 

$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh 

 

范例数据:

 

$GPGSA,A,3,10,24,12,32,25,21,15,20,31,,,,1.25,0.85,0.91*04

名称示例单位描述
消息 ID$GPGSAGSA 
模式 1AM=手动, 强制在 2D 或 3D 模

A=自动
 
模式 231:定位无效
2:2D 定位
3:3D 定位
 
卫星使用10通道 1 
卫星使用24通道 2 
卫星使用12通道 3 
卫星使用32通道 4 
卫星使用25通道 5 
卫星使用21通道 6 
卫星使用15通道 7 
卫星使用20通道 8 
,,,,,,,,,,,,
卫星使用通道 12  
PDOP1.25位置精度 
HDOP0.85水平精度 
VDOP0.91垂直精度 
校验和*04  
<CR><LF>消息结束  

 


3. GPS Satellites Satellites Satellites Satellites in View(GSV)可见卫星信息 

$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh

 

范例数据:

 

$GPGSV,3,1,12,14,75,001,31,32,67,111,38,31,57,331,33,26,47,221,20*73

名称示例单位描述
消息 ID$GPGSVGSV 
消息数目3范围 1 到 3 
消息编号1范围 1 到 3 
卫星数目12  
卫星 ID14范围 1 到 32 
仰角75最大 90°
方位角001范围 0 到 359°
信噪比31dBHz范围 0 到 99,没有跟踪时为
卫星 ID32范围 1 到 32 
仰角67最大 90°
方位角111范围 0 到 359°
信噪比38dBHz范围 0 到 99,没有跟踪时为
卫星 ID31范围 1 到 32 
仰角57最大 90°
方位角331范围 0 到 359°
信噪比33dBHz范围 0 到 99,没有跟踪时为
卫星 ID26范围 1 到 32 
仰角47最大 90°
方位角221范围 0 到 359°
信噪比20dBHz范围 0 到 99,没有跟踪时为
校验和*73  
<CR><LF>消息结束  

 

 

4. Recommended Recommended Recommended Recommended Minimum Minimum Minimum Minimum Specific Specific Specific Specific GPS/TRANSIT GPS/TRANSIT GPS/TRANSIT GPS/TRANSIT Data(RMC)推荐定位信息

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

 

范例数据:

 

$GPRMC,100646.000,A,3109.9704,N,12123.4219,E,0.257,335.62,291216,,,A*59

名称示例单位描述
消息 ID$GPRMCRMC 
UTC100646.000hhmmss.ss 
状态AA=数据有效;V=数据无效 
纬度2109.9704ddmm.mmmm 
N/S 指示NN=北, S=南 
经度11123.4219dddmm.mmmm 
E/W 指示EW=西, E= 
地面速度0.257Knot(节) 
方位335.62 
日期291216ddmmyy 
磁 量-  
校验和*59  
<CR><LF>消息结束  

 

 

5. Track Made Good and Ground Speed(VTG)地面速度信息$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

 

范例数据:

 

$GPVTG,335.62,T,,M,0.257,N,0.477,K,A*38

 

名称示例单位描述
消息 ID$GPVTGVTG 
方位335.62 
参考TTrue 
方位335.62 
参考MMagnetic 
速度0.257Knot 
单位N  
速度0.477公里/小时 
单位K公里/小时 
校验和*10  
<CR><LF>消息结束  

 

 

 这就是我分享的第一篇NMEA-0183到GNSS数据的文章,里面数据是实践过的,下一篇分享代码实现。如果大家有什么更好的思路,欢迎分享交流哈。

 

 

更多分享,扫码关注我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御林你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值