GNSS定位系列(3)——NMEA与RTCM协议

目录

一、GNSS标准协议介绍

GNSS标准协议是用于不同GNSS系统之间数据传输和互操作的规范,旨在实现全球定位服务的兼容性和统一性。不同的GNSS系统,如GPS、GLONASS、Galileo、北斗等,通常使用不同的协议来传输定位数据。这些协议不仅定义了如何使用卫星信号,还定义了与接收机之间的通信方式、信号格式、测量数据的格式以及测量误差等。

二、NMEA-0183协议

2.1 NMEA协议来源

NMEA(The National Marine Electronics Association)协议是为了在不同的GPS导航设备中建立统一的RTCM(海事无线电技术委员会)标准,通过一个统一格式的数据标准,以解决与任意一台GPS的接口问题,它最初是由美国国家海洋电子协会(NMEA—The NationalMarine Electronics Association)制定的。

NMEA协议有0180、0182和0183这3种,0183可以认为是前两种的升级,也是目前使用最为广泛的一种。

2.2 NMEA协议格式

2.2.1 NMEA协议结构

NMEA协议采用ASCII文本格式,传输各种定位信息(如经度、纬度、高度、速度、时间等)

NMEA消息以 $ 开头,紧接着是消息类型、数据、校验和,*,校验和,最后以回车换行符(\r\n,不可见)结束。

NMEA消息GPGGA的帧结构

NMEA消息的基本结构为:$[SentenceType],[Data]*[Checksum][\r\n]

  • $:每条NMEA消息以美元符号开头。
  • [SentenceType]:消息类型标识符,由多个字母构成,字母由信源类型与消息类型组成。
  • [Data]:实际的数据字段,字段之间以逗号分隔。
  • [*]:星号后面跟着的部分是校验和。
  • [Checksum]:校验和是通过对消息中的所有字符(不包括$和*)进行异或运算得到的。
  • [\r\n]:\r\n 为终止符(不可见),所有的语句必须以来结束,也就是 ASCII 字符的“回车<CR>”(十六进制的 0D)和“换行<LF>”(十六进制的 0A)。

注意:NMEA 0183协议的规范使用回车换行符(\r\n)用于标识消息的结束,以便接收设备能够正确解析和识别消息的边界。

GNSS设备通常采用串口通信,如RS232或TTL传输NMEA协议。若使用串口调试助手查看NMEA消息时,\r\n会默认变成换行符,不可见。

2.2.2 消息类型标识符对照表

信源类型对照表如下:

序号 标识符 发送器(来源)
1 GP 全球定位系统 (GPS)
2 BD 北斗导航卫星系统 (COMPASS)
3 GN 全球导航卫星系统
4 GL GLONASS系统
5 GA 伽利略系统
6 CC 计算机系统
7 CF 自定义信息

消息类型对照表如下:

序号 消息类型 描述 备注 缩写解释
1 GGA 全球定位系统固定数据 提供时间、位置、卫星数量等 Global Positioning System Fix Data
2 RMC 推荐最小特定GNSS数据 包含航向、速度和日期等信息 Recommended Minimum Specific GNSS Data
3 GSV 可见卫星信息 提供卫星的高度、方位角等 GNSS Satellites in View
4 VTG 速度和航向 航向和地面速度信息 Course Over Ground and Ground Speed
5 ZDA UTC时间和日期 包含UTC时间和日期信息 Time and Date (UTC)
6 GSA 卫星状态 表示用于定位的卫星状态 GNSS DOP and Active Satellites
7 GST GNSS卫星状态报告 提供定位精度评估 GNSS Pseudorange Error Statistics
8 GNS GNSS固定数据 提供多种GNSS系统的定位信息 GNSS Fix Data
9 GRM 路径和里程信息 用于记录行驶的距离和时间 Distance and Heading
10 GBS GNSS接收机导航状态报告 提供定位精度的信息 GNSS Satellite Status
11 GNGNS GNSS固定数据(用于北斗和GPS) 多种GNSS系统的数据 GNSS Fix Data (including BeiDou and GPS)
12 GPBOD 航向信息(航向和偏航角) 提供航向和偏航角的数据 Bearing Origin to Destination
13 GPBWC 路径信息(带有航向和曲率) 航向和路径数据 Bearing and Distance to Waypoint
14 GPMRC 推荐最小特定GNSS数据(其他版本) 其他版本的RMC数据 Recommended Minimum Specific GNSS Data (Alternate Version)

最常见的NMEA语句有GGA、RMC、GSA、GSV等,分别用于不同类型的定位数据,如定位结果、定位精度、卫星状态等。

2.2.3 典型消息类型举例

(1)GPGGA

消息格式:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh\r\n

各字段描述如下:

<1> UTC 时间,hhmmss.ss(时分秒)格式,24小时制
<2> 纬度 ddmm.mmmm(度分)格式(前面的 0 也将被传输),mmmm实际小数点可能不止四位
<3> 纬度半球 N(北纬)或 S(南纬)
<4> 经度 dddmm.mmmm(度分)格式(前面的 0 也将被传输),mmmm实际小数点可能不止四位
<5> 经度半球 E(东经)或 W(西经)
<6> GPS 状态:0=未定位,1=非差分定位,2=差分定位,4=固定解,5=浮动解,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的 0 也将被传输)
<8> HDOP 水平精度因子(0.5~99.9),实际小数点后可能不止一位
<9> 海拔高度(-9999.9~99999.9),实际小数点后可能不止一位
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站 ID 号 0000~1023(前面的 0 也将被传输,如果不是差分定位将为空)

举例:$GPGGA,123456.13,3742.360,N,12203.459,W,1,08,0.9,545.4,M,46.9,M,,*47\r\n

其中M代表 单位(米),由于不是差分,所以ID为空。

(2)GPGSA

消息格式:$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>\r\n

各字段描述如下:

<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(求和校验)

举例:$GPGSA,A,3,04,05,06,07,08,09,10,11,12,,,,,,2.5,3.0,2.0*39\r\n

(3)GPGSV

消息格式:$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8>\r\n

各字段描述如下:

<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数,00 至 12。
<4> 卫星编号, 01 至 32。
<5> 卫星仰角, 00 至 90 度。
<6> 卫星方位角, 000 至 359 度。实际值。
<7> 讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
<8> Checksum(检查位)
注意:第 <4>,<5>,<6>,<7> 项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。

举例(随手填的值):
$GPGSV,3,1,12,01,40,154,44,02,39,059,44,03,40,060,43,*7E\r\n
$GPGSV,3,2,12,04,40,154,64,05,59,059,44,06,40,060,43,*7E\r\n
$GPGSV,3,3,12,07,40,154,94,08,69,059,44,09,40,060,43,*7E\r\n

(4)GPRMC

消息格式:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh\r\n

各字段描述如下:

<1> UTC 时间,格式 hhmmss.ssss,代表时分秒.毫秒
<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.0 版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
最后两个字节是校验和

注意:

如果字段 4 的值等于 N,则字段 3 的值等于 ddmm.mmmmmm
如果字段 4 的值等于 S,则字段 3 的值等于 -ddmm.mmmmmm
如果字段 6 的值等于 E,则字段 5 的值等于 ddmm.mmmmmm
如果字段 6 的值等于 W,则字段 5 的值等于 -ddmm.mmmmmm
十进制北纬度数 = dd + mm.mmmmmm/60
十进制南纬度数 = -(dd + mm.mmmmmm/60)
十进制东经度数 = ddd + mm.mmmmmm/60
十进制西经度数 = -(ddd + mm.mmmmmm/60)

举例:GPRMC,123456.00,A,3742.360,N,12203.459,W,0.0,0.0,150515,000.0,E*6A\r\n

(5)GPVTG

消息格式:$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh\r\n

各字段描述如下:

<1> 以真北为参考基准的地面航向(000~359 度,前面的 0 也将被传输)
<2> 以磁北为参考基准的地面航向(000~359 度,前面的 0 也将被传输)
<3> 地面速率(000.0~999.9 节,前面的 0 也将被传输)
<4> 地面速率(0000.0~1851.8 公里/小时,前面的0也将被传输)
<5> 模式指示(仅 NMEA 0183 3.0 版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

举例:GPVTG,054.7,T,,M,000.5,N,001.0,K*48\r\n

三、RTCM协议

RTCM SC-104是一种通信协议,用于从无线电接收器等辅助源向GPS 接收器发送差分 GPS (D-GPS)。该标准以创建它的海事无线电技术委员会(Radio Technical Commission for Maritime services,RTCM) 的特别委员会 SC104 命名。该格式没有限定D-GPS消息的来源。该通信协议如今已应用于各种系统,如长波海事广播、通信卫星广播和互联网分发。

3.1 RTCM 1.x版本

该协议的第一个版本于 1990 年发布,它基于 GPS 卫星使用的 30 位长数据包,称为“帧”。每条消息都以标准化的长度为两个帧的头部开始,紧跟着一个或多个数据帧。这些帧的设计类似于 GPS,可以很容易地集成到 GPS 接收器中,但缺点是信道效率低,限制了在给定时间内可以发送的消息数量。

最初的 SC-104 于 1985 年作为初始版本发布,但从未被广泛采用。它被非常相似的第 2 版所取代。

3.2 RTCM 2.x 介绍

3.2.1 RTCM 2.x 发展历史

RTCM 第 2 版于 1990 年 1 月发布,随后于 2001 年 8 月更新至 2.3 版
RTCM 2.0:只有D-GPS,没有RTK数据
RTCM 2.1:完整继承RTCM 2.0,同时为RTK和carrier phase data增加了新的消息
RTCM 2.2:增加了对GLONASS的支持和消息类型31-36

**1992 **年的2.1版本该小组开会考虑使用相位比较 GPS (RTK) 的用户的意见,该 GPS 产生的精度约为1厘米。

1994 年,新的消息类型被添加进来,标准版本更新为为版本 2.1,包括用于原始伪距测量的消息类型18 和消息类型19,和作为校正的消息类型20和消息类型21。新的消息类型9提供了消息类型1和消息类型2 的替代,并成为最广泛使用的格式之一

1997 年的** 2.2 版增加了 消息类型31 到 消息类型37以支持GLONASS** ,消息类型31和 消息类型32 相当于 GPS 的 1 型和 2 型。

该协议最后的更新是 2001 年2.3版本,添加了更多信息,例如 消息类型23 中的天线 ID 和描述、消息类型24中天线的高度,以及与Loran-C和无线电信标一起使用的其他几个字段。

3.2.2 RTCM 2.x 帧结构

RTCM第2版提出“字”的概念,通过多个“字”串联形成较长的消息,称为“帧”。一个“字”由固定长度的30位比特(bit)组成,其中包含效载荷位是24位,校验位是6位。

所有字都使用与 GPS 信号相同的算法——以基于汉明码的6 位“奇偶校验”码结尾,其余24 位用于数据传输。该格式特意模仿实际 GPS 消息的格式。24 位有效负载中的数据被提取为单独的数据,然后编码为本地传输的 6 位数据字符串,具有前导 1 起始位和尾随 0 停止位,以形成适合在ASCII上使用的单个8位值。数据以最高有效位格式编码,而不是类似于ASCII 的最低有效位,因此需要进行额外处理才能在接收后将其恢复为原始格式。

所有帧都以标准的两个“字”(共60位)开始。

第一个“字”是 8 位“前导码”,始终是 01100110。接下来的6位编码消息类型,从 0 到 63。其后是一个 10 位的站 ID,最后是6位的校验位。

第2个“字”以 13 位版本的 z-count(GPS 中的时间单位)开头,3 位序列号以确保帧无序到达时可以进行排序,5 位长度它计算帧中的总字数,3位“站健康”代码,其中 111 表示站工作不正常,最后是6位的校验位。

3.3 RTCM 3.x 介绍

3.3.1 RTCM 3.x 发展历史

2003 年,标准的第 3 版引入了一种全新的消息格式,它使用可变长度格式来提高效率,从而增加可能的消息类型的数量,最初的 RTCM版本3.0定义了 13 种消息类型,RTCM第3版是 RTCM标准当前版本,该协议也还在处于不断更新中。

遵照标准流程,标准的命名发生了变化,3.1 版成为RTCM 标准 10403.1 。截至2021年5月20日 ,最新版本是 3.3 或 RTSM Standard 10403.3,修正 1 和 2。

3.3.2 RTCM 3.x 帧结构

由于版本 2 的固定宽度的数据包和显著的纠错开销,版本 2 从传输方面并不是很有效,虽然这对于大多数 D-GPS 应用场景来说不是问题,但对于消息负载相对较高的RTK来说这是一个糟糕的问题。

RTCM 3.x 消息帧d的格式以8位的前导码开始,然后是6位保留区域,然后是10位消息长度,最多允许1024字节的数据。每条消息都可以携带私有定义的标头和数据,紧跟在标头之后,然后用 CRC 收尾。

帧头 保留位 报文长度 数据位(可变长度) CRC校验
8 bit 6 bit 10 bit 0-1023 bytes 24 bit

与 RTCM版本2.3 相比,RTCM版本3使用可变长度消息格式和单个24 位循环冗余校验(CRC),而不是固定长度30 位字使用 6 位奇偶校验。数据传输的有效性的提升是显著的,特别是在 RTK 的情况下:RTCM版本3的RTK的校正集通常是版本2长度的一半。

3.3.3 RTCM 3.x典型数据示例

RTCM 3.x典型数据如下:

D3 00 7C 43 20 00 33 BA 30 02 00 20 04 25 08 88 00 00 00 00 20 20 00 80 69 B6 F9 51 31 39 19 1D 11 5A AA 85 B2 2B 98 DD 01 A2 61 5C C3 0A CC C4 05 31 0C 54 32 88 6C 09 CD 83 AF 04 34 08 EA 11 43 09 5E 16 3C 0A 36 A0 28 D6 80 96 7D 0B 8B D0 2E 3B A0 90 08 82 40 E7 FF 8E D3 FE 46 30 E7 D5 43 9E CE 0E 7D 0B E5 12 0F 94 52 2E EE EE EE EE EE EE C0 00 A5 27 AD 7B 19 2C 6E 85 9D 99 40 D2 2C B1

二进制数据解释:

  • 帧头(8 bits):11010011 (0xD3)
  • 保留(6 bits): 000000
  • 报文长度(10 bits):00 0111 1100 (124字节)
  • 数据位(可变长度,此帧为124字节)
    43 20 00 33 BA 30 02 00 20 04 25 08 88 00 00 00 00 20 20 00 80 69 B6 F9 51 31 39 19 1D 11 5A AA 85 B2 2B 98 DD 01 A2 61 5C C3 0A CC C4 05 31 0C 54 32 88 6C 09 CD 83 AF 04 34 08 EA 11 43 09 5E 16 3C 0A 36 A0 28 D6 80 96 7D 0B 8B D0 2E 3B A0 90 08 82 40 E7 FF 8E D3 FE 46 30 E7 D5 43 9E CE 0E 7D 0B E5 12 0F 94 52 2E EE EE EE EE EE EE C0 00 A5 27 AD 7B 19 2C 6E 85 9D 99 40
  • CRC校验(24 bits):D2 2C B1

参考博客

  1. 北斗/全球卫星导航系统(GNSS)接收机导航定位数据输出格式 :http://www.beidou.gov.cn/zt/bdbz/201712/W020171226815455356867.pdf
  2. GPS NMEA 0183协议规格说明:https://www.cnblogs.com/bluestorm/p/17807688.html
  3. GNSS定位协议:https://blog.csdn.net/songkai320/article/details/53856918
  4. RTCM SC-104:https://zh.wikipedia.org/wiki/RTCM_SC-104
  5. RTCM协议解析:https://blog.csdn.net/m0_48012049/article/details/117925085
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容