目录
一、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消息的基本结构为:$[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
参考博客
- 北斗/全球卫星导航系统(GNSS)接收机导航定位数据输出格式 :http://www.beidou.gov.cn/zt/bdbz/201712/W020171226815455356867.pdf
- GPS NMEA 0183协议规格说明:https://www.cnblogs.com/bluestorm/p/17807688.html
- GNSS定位协议:https://blog.csdn.net/songkai320/article/details/53856918
- RTCM SC-104:https://zh.wikipedia.org/wiki/RTCM_SC-104
- RTCM协议解析:https://blog.csdn.net/m0_48012049/article/details/117925085