在 GNSS 导航、车载定位、无人机测绘等领域, NMEA 报文堪称设备互通的 “通用密码”。几乎所有 GNSS 厂商的设备,都默认支持这一协议标准。
但 NMEA 究竟是什么?为何它领域如此重要?让我们一同探究。
一、什么是NMEA
NMEA标准由美国海洋电子协会(National Marine Electronics Association)制定,最初在航海领域的电子设备(如导航仪、声纳系统)中统一通信格式,方便数据交流,后来随着GPS的发展,作为一种现成标准逐渐被GPS设备的厂商使用。
NMEA协议是用于在GNSS和其他导航设备和设备之间交换信息的标准协议。NMEA协议具备通用性与传递性、用于在导航设备和其他设备之间传输位置、时间、速度等相关信息,由于NMEA协议是一种标准协议,因此几乎所有GNSS设备和接收器都支持该协议,并且它通常被用于GNSS接收机与其他设备和计算机进行通信。NMEA最早是在海事行业应用,但随着GNSS技术发展,车辆导航系统与卫星定位系统的集成非常常见,许多汽车内置了GPS接收器,它们可以接收到类似NMEA的数据。这些数据被解析后,就可以在车载屏幕上显示实时的位置、路线指引等信息。所以,尽管NMEA起源于海事领域,但其标准化和易于理解的通信方式使其在汽车、无人机等行业中也找到了应用空间。
NMEA的名称来自于其定义组织——美国国家海洋电子协会(NMEA,National Marine Electronics Association),它是一个非营利组织,成立于1964年,NMEA的主要目标是促进航海和水运行业的电子设备标准化,特别是通过制定数据交换格式和通信协议来确保兼容性和互操作性。
NMEA分为NMEA 0183和NMEA 2000两个版本,后者兼容CAN总线通信,更为复杂。NMEA 0183协议采用基于ASCII码的文本格式,定义多种语句。NMEA 0183 定义了统一的报文语法和语义,任何GNSS接收设备厂商(u-blox、Quectel、MediaTek、Trimble等)生产的接收机,都能输出相同结构的 $GPGGA、$GPRMC 等语句,使得不同的上位机(如串口助手、导航软件、地图引擎)不必做额外适配。

二、NMEA有什么用
NMEA协议的主要作用包括:
1.实现设备之间的数据交换
NMEA协议定义了设备之间通信的数据格式和规则,使得不同类型的设备可以相互交换位置、速度、航向等信息。
2.支持导航和航海功能PP(混合GNSS)
通过NMEA协议,GNSS接收机、罗盘、深度表等设备可以共享位置、航向等数据,从而支持导航和航海功能。
3.提高设备互操作性
由于NMEA协议是一个通用标准,各种制造商生产的符合该标准的设备可以更容易地进行连接和交互,提高了设备之间的互操作性和兼容性。
NMEA协议具有通用性、简单易用、广泛应用、支持多种设备和良好的互操作性等优势:
● 通用性和标准化:NMEA协议是一个通用的标准,被广泛应用于海洋电子设备之间的通信。这意味着符合NMEA协议的设备可以轻松地进行连接和交互,无论其制造商是谁。
● 简单易用:NMEA协议定义了一套简单的数据格式和规则,使得设备之间的通信变得简单明了。这使得开发和维护符合NMEA协议的设备变得更加容易。
● 广泛应用:NMEA协议被广泛应用。无论是船只、车辆、无人机,都可以通过NMEA协议实现设备之间的数据交换和通信。
● 支持多种设备:NMEA协议不仅支持GNS接收机,还支持罗盘、自动驾驶仪等多种设备。这使得各种设备可以共享信息,从而提高航海与驾驶的安全性和效率。
● 良好的互操作性:由于NMEA协议是一个通用标准,各种符合该标准的设备可以更容易地进行连接和交互。这提高了设备之间的互操作性和兼容性,使得用户可以更加灵活地配置设备。
三、NMEA报文的规则
常见的NMEA协议版本包括:
● NMEA 0183:这是最早的NMEA协议版本,定义了一套串行数据格式和语法规则,用于GNSS接收机、自动驾驶仪、深度表等设备之间的通信。
● NMEA 2000:这是一种更现代化的NMEA协议版本,基于控制器区域网络(CAN)总线,提供了更高的数据传输速率和更多的设备连接能力。NMEA 2000协议通常用于网络通信和数据交换。
目前最常见的版本是NMEA 0183,以ASCII字符为基础,在串行通信接口(如RS-232或RS-422)上进行数据传输。
NMEA 0183 Message是基于NMEA标准的一种数据格式,用于在GNSS定位设备与其他电子设备间交换信息。
每个NMEA报文由特定的标识符(Preamble)、信息代码(Sentence Type)和详细数据组成,通常以美元符号($)开头,后续是一组五位或者六位的数据标识符,然后是一串数字和字母,最后以星号(*)结束,如果数据长度超过16个字符,剩余部分则用两个十六进制数字替换,分别代表剩余字节的数量。
报文的一般结构
● Preamble(首句):$字符,表明接下来的信息遵循NMEA规范
● Sentence Identifier(句柄标识符):前五/六个字符,通常是描述数据类型的代码,比如”GGA”代表全球定位系统(GNSS)定位信息。我们针对定位导航信息的几个句柄做梳理:
● 前两位代表定位所用系统与星座:
– BD:BDS
– GP:GPS
– GL:GLONASS
– GA:Galileo
– GN:GNSS, 多星联合定位
● 后三位代表消息类型,常见消息类型有:
– GGA: Global Positioning System Fix Data(卫星定位信息)
– GLL: Geographic Position-Latitude/Longitude(地理位置信息-纬度/经度)
– GSA: GNSS DOP and Active Satellites(卫星PRN数据)
– GST: GNSS Pseudorange Error Statistics(卫星伪距误差统计)
– GSV: GNSS Satellites in View(可视卫星信息)
– RMC: Recommended Minimum Specific GNSS Data(推荐定位信息)
– VTG: Course Over Ground and Ground Speed(地面速度信息)
– ZDA: Time and Date(时间与日期)
● Data fields(数据字段):后面跟着一串由逗号分隔的数据字段,每个字段可能包含不同的信息,如坐标、时间、速度等。
● Checksum(校验和):最后两个字符,通常是计算出来的校验码,用于验证数据的准确性。
NMEA 0183标准的默认波特率是4800波特。
四、NMEA常见语句解读
NMEA报文通常为ASCII字符串,每条报文为一行,以回车换行符(CRLF)结尾。一条NMEA语句基本格式如下:

●Talker ID: 2字符的星座标识符。具体包含GP(GPS)、GB(BeiDou)、GA(Galileo)、GL(GLONASS)、GN(GNSS,多星座组合导航);
● Message type: 3字符的NMEA语句的类型,包含GGA、RMC、VTG、GSV、GSA等语句;
● Data: 特定类型的语句对应的数据;
● Checksum: 2字符的校验和。校验方式为$之后,*之前的所有字符(不含$,*)逐字节进行异或操作,将得到的字节以两个16进制字符进行表示。
在NMEA语句中,$号为语句开始,*号为语句结束,后跟校验和、CRLF换行符,然后一条语句结束。NMEA语句数量繁多,常用的NMEA语句及其格式列举如下。
1.GGA语句
GGA语句包含了详细的定位信息,包括定位时间、定位经度、定位纬度、定位正高、参与定位的卫星数量等信息。GGA语句格式为:

其中,xx表示2字符的星座标识符。以上述GGA语句为例,下列表格中详细分析了该语句的每个字段代表的含义。

2.RMC语句
RMC语句主要用于移动中的物体定位或导航,包含了基本的定位信息(但不包括高度)以及速度信息、航向信息。RMC语句格式为:

其中,xx表示2字符的星座标识符。以上述RMC语句为例,下列表格中详细分析了该语句的每个字段代表的含义。

3.VTG语句
VTG语句包含了物体的参照系、航向、速度等信息。VTG语句为导航系统提供连续、简洁、实时的运动信息,是RMC语句的核心补充。
VTG语句格式为:

其中,xx表示2字符的星座标识符。以上述VTG语句为例,下列表格中详细分析了该语句的每个字段代表的含义。

4.GSV语句
GSV语句包含可见卫星的相关信息。GSV语句格式为:

其中,xx表示2字符的星座标识符。以上述GSV语句为例,下列表格中详细分析了该语句的每个字段代表的含义。

若有更多卫星,会连续输出多句:

某一批次的NMEA报文会完整输出该批次中所有的GSV语句。
GSV语句用于分析卫星分布、分析信号质量,在接收机的上位机软件中经常基于GSV语句进行图表分析。
● 查看接收机当前“可见”的卫星总数;
● 判断卫星分布情况(仰角、方位角);
● 检查信号质量(SNR),评估天线状态;
● 用于绘制天空图(Sky Plot);
● 可与GSA语句结合判断哪些卫星用于解算定位。
5.GSA语句
GSA语句包含使用定位的卫星相关信息。GSA语句格式为:

其中,xx表示2字符的星座标识符。以上述GSA语句为例,下列表格中详细分析了该语句的每个字段代表的含义。

End
从航海到车载、无人机,NMEA 凭标准化报文成为 GNSS 设备互通的核心协议。
读懂 GGA/RMC/GSV 等语句,就能轻松搞定设备调试与数据解析,这份干货手册,工程师赶紧码住!