NMEA协议详解

2023-05-16

  1. 什么是NMEA协议

  • NMEA协议的定义和作用

NMEA协议是用于在全球定位系统(GPS)和其他导航设备和设备之间交换信息的标准协议。 NMEA协议定义了一组消息格式,这些消息可以传输有关GPS设备和传感器的信息,如位置、速度、时间和方位角。

NMEA协议中定义了多个消息类型,包括GGA、RMC、VTG、GSA等。这些消息包含在ASCII文本中,并以特定的起始字符$或!开头,以回车和换行符号\r\n结尾。消息中的数据字段用逗号分隔。

由于NMEA协议是一种标准协议,因此几乎所有GPS设备和接收器都支持该协议,并且它通常被用于与其他设备和计算机进行通信。对于需要使用GPS数据的应用程序和设备,NMEA协议提供了一种简单且易于实现的方法,以获取有关位置和导航的实时信息。

  • NMEA协议的历史和版本
  1. NMEA消息类型

  • 常见的NMEA消息类型

这些是NMEA协议中定义的消息类型的标识符,用于在GPS接收器和其他设备之间传递信息。每个标识符代表了一个不同的消息类型,例如:

GGA:Global Positioning System Fix Data

GLL:Geographic Position - Latitude/Longitude

GSA:GNSS DOP and Active Satellites

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

这些标识符和相关的消息内容可以用于解析和处理GPS接收器返回的数据。

  • 每种消息类型的含义和格式
  1. GGA

Global Positioning System Fix Data (GGA)是NMEA协议中定义的一种消息类型,它提供了全球定位系统(GPS)定位设备的位置、时间、GPS定位质量指示器以及卫星接收器状态等信息。GGA消息包含了GPS定位数据的基本信息,例如:

  • 定位时间(UTC时间)

  • 纬度和经度

  • 定位质量指示器(0-无效定位,1-单点定位,2-差分定位,3-浮动解,4-固定解,5-估算(手动输入))

  • 使用卫星的数量

  • HDOP(水平精度因子)

  • 海拔高度(单位是米)

  • 大地水准面高度(单位是米)

GGA消息通常被用于在位置服务应用程序中获取和显示GPS定位数据。

  1. GLL

Geographic Position - Latitude/Longitude (GLL)是NMEA协议中定义的一种消息类型,它提供了GPS定位设备的位置信息,以纬度和经度的形式进行描述。GLL消息包含以下信息:

  • 当前位置的纬度和经度

  • 定位时间(UTC时间)

  • 定位状态指示器(A-数据有效,V-无效)

GLL消息通常用于在地图上显示当前位置,并且可以被用于其他定位应用程序中,例如导航系统和地图应用程序。

  1. GSA

GNSS DOP and Active Satellites (GSA)是NMEA协议中定义的一种消息类型,它提供了有关卫星接收器状态和当前卫星系统的可见性的信息。GSA消息包含以下信息:

  • 定位模式:自动选择2D/3D模式,2D模式,3D模式

  • 定位模式下使用的卫星编号(最多12个),包括当前使用的卫星编号、信噪比(SNR)以及位置分布导致的几何因素(DOP)

  • PDOP(位置几何精度因子)

  • HDOP(水平几何精度因子)

  • VDOP(垂直几何精度因子)

GSA消息可以提供当前卫星系统的可见性信息,以及GPS定位的精度指示器,例如水平精度因子(HDOP)和垂直精度因子(VDOP),这些信息可以帮助用户更好地理解和利用卫星接收器。

  1. GST

GNSS Pseudorange Error Statistics (GST)是NMEA协议中定义的一种消息类型,它提供了有关卫星信号的时间和空间误差统计信息。GST消息包含以下信息:

  • 当前时间和卫星接收器的状态

  • 误差统计数据,包括标准差、协方差和相关性数据

  • 表示误差统计数据类型的标识符,例如,由于时间误差引起的误差、多径误差和信号时间偏移引起的误差等

GST消息提供了有关卫星信号误差的统计信息,这些误差通常是由于信号传播过程中的多种因素引起的,例如大气层、天线的多径效应和接收器时钟偏差等。这些误差统计数据可以帮助用户更好地理解和利用GNSS测量的精度和可靠性。

  1. GSV

GNSS Satellites in View (GSV)是NMEA协议中定义的一种消息类型,它提供了当前接收器可见卫星的信息。GSV消息包含以下信息:

  • 当前接收器的状态,例如,定位模式和当前位置的坐标

  • 可见卫星的数量

  • 每颗可见卫星的详细信息,包括卫星编号、卫星高度角、卫星方位角和信噪比等

GSV消息通常用于提供有关GNSS系统的可视性和可用性的信息。通过解析GSV消息,用户可以了解当前接收器所处的位置和朝向,以及可见卫星的数量和信号质量等信息。这些信息对于精确定位和导航非常重要,因为它们可以帮助用户确定最佳的卫星组合来计算位置和速度。

  1. RMC

Recommended Minimum Specific GNSS Data (RMC)是NMEA协议中定义的一种消息类型,它提供了基本的GNSS定位数据。RMC消息包含以下信息:

  • 当前接收器的状态,例如,定位模式和当前位置的坐标

  • 当前时间和日期

  • 当前速度和航向

  • 当前磁偏角和磁偏角方向

  • 当前模式指示器,例如,自主定位或差分定位

RMC消息是GNSS定位数据的基本要素之一。通过解析RMC消息,用户可以了解当前接收器的状态、位置、时间和速度等信息。这些信息对于许多应用非常重要,例如导航、地图绘制、航海和军事应用等。

  1. VTG/COG

Course Over Ground (COG) and Ground Speed (GS)是NMEA协议中定义的一种消息类型,通常包含在RMC消息中。COG和GS提供了有关当前GNSS接收器的航向和地速的信息。

COG表示航向,是一个方向角度,指示了接收器在地面上的运动方向。该角度基于真北方向(而不是磁北)以度为单位计算,并在0至359度之间。

GS表示地速,是当前接收器的速度,通常以节为单位计算。它是通过将GNSS接收器的位置信息进行微小时间间隔的差分计算得到的,因此在短时间内可能会有一些抖动。为了得到更加准确的地速信息,通常需要对GS进行滤波或者融合。

COG和GS对于许多应用非常重要,例如船舶和航空器的导航,以及车辆的行驶方向和速度控制。

  1. ZDA

Time and Date是NMEA协议中定义的一种消息类型,通常包含在RMC和ZDA消息中。它提供了有关当前时间和日期的信息。

在RMC消息中,时间信息以“时分秒.毫秒”的格式表示,以协调世界时(UTC)为准。在ZDA消息中,时间信息以“时分秒”格式表示,同样以UTC为准。

日期信息通常包含在ZDA消息中,并以“日月年”格式表示,即日、月、年,用于确定日期和时间。

时间和日期信息在许多应用中都非常重要,例如记录和同步数据、轨迹重建、时间戳记和日志记录等。

  • 示例数据
  1. GGA
GGA: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

这是一个 GGA 消息的示例数据,包含以下字段:

  • $GPGGA:消息ID

  • 123519:UTC 时间,12:35:19

  • 4807.038:纬度,48度07.038分

  • N:纬度半球,北半球

  • 01131.000:经度,011度31.000分

  • E:经度半球,东经

  • 1:GPS 信号质量指示器,0=无效,1=有效定位

  • 08:使用卫星数量,从00到12

  • 0.9:水平精度因子

  • 545.4:天线离海平面的高度,单位为米

  • M:高度单位,米

  • 46.9:大地水准面和 WGS84 椭球面之间的高度差

  • M:高度单位,米

  • 空格:差分 GPS 数据龄期

  • 空格:差分参考基站 ID,从0000到1023

  • *47:校验和

如果需要解析这个消息,需要将数据根据逗号进行分割,然后根据字段的定义解析出每个字段的含义和对应的值。例如,可以将上面的数据解析成以下形式:

  • 消息ID:$GPGGA

  • UTC 时间:12:35:19

  • 纬度:48.1173(度)

  • 纬度半球:N

  • 经度:11.5167(度)

  • 经度半球:E

  • GPS 信号质量指示器:1

  • 使用卫星数量:8

  • 水平精度因子:0.9

  • 天线离海平面的高度:545.4(米)

  • 大地水准面和 WGS84 椭球面之间的高度差:46.9(米)

  • 差分 GPS 数据龄期:空格

  • 差分参考基站 ID:空格

  • 校验和:*47

  1. GLL
GLL: $GPGLL,3723.2475,N,12158.3416,W,161229.487,A,*2C

NMEA 0183协议中的GLL消息包含经度和纬度信息以及定位状态。下面是数据的解析:

  • $GPGLL: 消息ID,表示是GLL消息。

  • 3723.2475,N: 纬度信息,单位为度,分和小数部分。本例中表示北纬37度23.2475分。

  • 12158.3416,W: 经度信息,单位为度,分和小数部分。本例中表示西经121度58.3416分。

  • 161229.487: UTC时间,格式为时分秒。本例中表示16时12分29.487秒。

  • A: 定位状态,A表示定位有效,V表示无效。

  • *2C: 校验码。

因此,该条GLL消息表示在UTC时间16:12:29.487时,位置在北纬37度23.2475分、西经121度58.3416分,并且定位有效。

  1. GSA
GSA: $GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39

以下是对$GPGSA数据的解析:

  • $GPGSA:语句头

  • A: 选择2D或者3D定位。 A=自动2D/3D; M=手动2D/3D。

  • 3: 当前定位模式。 1=未定位; 2=2D定位; 3=3D定位。

  • 04,05,,09,12,,,24: 用于定位的卫星编号,最多可以有12个。前两个数字代表第1个卫星,后两个数字代表第2个卫星,以此类推。如果有未用到的卫星编号,则用逗号分隔。

  • 2.5: HDOP(水平精度因子)。

  • 1.3: VDOP(垂直精度因子)。

  • 2.1: TDOP(时间精度因子)。

  • *39: 校验和。

因此,该数据表示目前的定位模式为3D定位,使用了4颗卫星,HDOP为2.5,VDOP为1.3,TDOP为2.1。

  1. GST
GST: $GPGST,082349.00,1.2,0.8,0.7,33.3,0.0,0.0,1.6*6D

对于GST语句,它提供了有关GPS接收机计算的位置精度和误差估计的信息,其字段含义如下:

  • Sentence ID: $GPGST

  • UTC Time: 082349.00,UTC时间,格式为hhmmss.ss

  • RMS value of the standard deviation of the range inputs to the navigation process: 1.2,测距输入的标准偏差RMS,单位为米

  • Standard deviation of semi-major axis of error ellipse: 0.8,半长轴误差椭圆的标准偏差,单位为米

  • Standard deviation of semi-minor axis of error ellipse: 0.7,半短轴误差椭圆的标准偏差,单位为米

  • Orientation of semi-major axis of error ellipse (true north degrees): 33.3,半长轴误差椭圆的朝向,以真北方向为基准,单位为度

  • Standard deviation of latitude error: 0.0,纬度误差的标准偏差,单位为米

  • Standard deviation of longitude error: 0.0,经度误差的标准偏差,单位为米

  • Standard deviation of altitude error: 1.6,高度误差的标准偏差,单位为米

  • Checksum: *6D,校验和

以上是GST语句的字段含义及其数据解析。

  1. GSV
GSV: $GPGSV,3,1,10,01,40,172,45,02,35,256,41,03,25,308,46,04,18,276,42*77

对于GSV消息,数据解析通常需要结合多个连续的GSV消息进行,以获取所有可见卫星的数据。以下是GSV消息中各字段的含义:

  • $GPGSV:消息ID

  • 3:可见卫星总数

  • 1:当前GSV消息的序号

  • 10:当前GSV消息的卫星数量

  • 01:卫星PRN号码

  • 40:卫星仰角(度)

  • 172:卫星方位角(度)

  • 45:信噪比(dB)

在此示例中,该GSV消息为第一条消息,共有3条消息。该消息中包含10颗可见卫星的信息。第一颗卫星的PRN号为01,仰角为40度,方位角为172度,信噪比为45dB。

需要注意的是,GSV消息中的卫星数量是不固定的,因此解析时需要根据实际情况确定。如果消息中包含的卫星数量少于当前消息的卫星数量,则需要通过其他GSV消息获取更多卫星的数据。

  1. RMC
RMC: $GPRMC,083559.00,A,3723.2475,N,12158.3416,W,000.0,360.0,191204,,,A*43

RMC (Recommended Minimum Navigation Information)提供了有关位置、速度和时间的信息,是最常用的NMEA协议之一。以下是该数据的解析:

  • Sentence Identifier (语句标识符):$GPRMC

  • UTC时间:083559.00

  • 定位状态:A(有效定位)/V(无效定位)

  • 纬度:3723.2475

  • 纬度方向:N(北)/S(南)

  • 经度:12158.3416

  • 经度方向:W(西)/E(东)

  • 地面速率(单位:节):000.0

  • 地面航向:360.0

  • 日期:191204

  • 磁偏角:空白(该字段已被弃用)

  • 磁偏角方向:空白(该字段已被弃用)

  • 模式指示:A(自主定位)/D(差分定位)/E(估算定位)/N(数据无效)

请注意,RMC数据没有包括位置的水平或垂直精度估计。

  1. VTG/COG
VTG: $GPVTG,360.0,T,348.7,M,000.0,N,000.0,K*43

这是一条VTG类型的NMEA语句,包含了地面速度和航向信息。具体解释如下:

  • $GPVTG: VTG语句的头部标识

  • 360.0,T: 真北方向上的航向,以度为单位

  • 348.7,M: 磁北方向上的航向,以度为单位

  • 000.0,N: 地面速度,以节为单位

  • 000.0,K: 地面速度,以公里/小时为单位

  • *43: 校验码

因此,这条语句表明当前的航向为360度真北,348.7度磁北,地面速度为0节(即静止不动)。

  1. ZDA
ZDA: $GPZDA,201530.00,04,07,2002,00,00*60

字段

含义

1

本地时间(时分秒),格式为HHMMSS.SS

2

本地日期,格式为DDMMYYYY

3

本地时间与UTC时间的小时差值,取值范围为0-13,前导零不足两位

4

本地时间与UTC时间的分钟差值,取值范围为0-59,前导零不足两位

以示例数据为例,$GPZDA,201530.00,04,07,2002,00,00*60,其解析结果如下:

  • 本地时间为20:15:30.00

  • 本地日期为2002年7月4日

  • 本地时间与UTC时间的小时差值为4

  • 本地时间与UTC时间的分钟差值为0

注意,ZDA协议中的本地时间与日期并不是GNSS接收器的时间与日期,而是接收器所在地的时间与日期。

  1. NMEA消息解析

  • NME消息解析步骤

解析NMEA消息可以通过以下步骤实现:

  1. 从串口或文件中读取NMEA消息。

  1. 判断消息是否符合NMEA协议规范。NMEA消息必须以'$'开头,并以'\r\n'或'\n'结尾。

  1. 解析消息中的各个字段。以逗号为分隔符,按照协议规定的格式和顺序解析每个字段,可以使用字符串分割函数或正则表达式来实现。

  1. 根据消息类型和字段内容,获取所需的数据。根据协议规范,不同类型的消息包含不同的字段,因此解析过程需要根据消息类型来获取所需的字段数据。

  1. 对数据进行处理和转换。例如,将纬度和经度从度分格式转换为十进制格式,将速度和方向从节和度转换为公里/小时和弧度等。

  1. 将解析后的数据用于应用程序中。解析后的NMEA数据可以用于导航、地图显示、航行控制、轨迹记录等应用。

需要注意的是,NMEA消息格式相对简单,但是由于消息中包含的数据类型繁多,解析过程需要考虑各种异常情况和数据转换问题,因此需要仔细处理和测试。

  • 示例程序一
#include <stdio.h>
#include <string.h>

typedef struct {
    float latitude;
    float longitude;
    int fix;
    int num_satellites;
    float hdop;
    float altitude;
} gga_data;

gga_data parse_gga(char* gga_message) {
    gga_data data;
    memset(&data, 0, sizeof(data));

    char* token;
    int i = 0;

    token = strtok(gga_message, ",");
    while (token != NULL) {
        switch (i) {
            case 2:
                data.latitude = atof(token);
                break;
            case 3:
                if (strcmp(token, "S") == 0) {
                    data.latitude = -data.latitude;
                }
                break;
            case 4:
                data.longitude = atof(token);
                break;
            case 5:
                if (strcmp(token, "W") == 0) {
                    data.longitude = -data.longitude;
                }
                break;
            case 6:
                data.fix = atoi(token);
                break;
            case 7:
                data.num_satellites = atoi(token);
                break;
            case 8:
                data.hdop = atof(token);
                break;
            case 9:
                data.altitude = atof(token);
                break;
        }
        token = strtok(NULL, ",");
        i++;
    }

    return data;
}

int main() {
    char* gga_message = "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47";

    gga_data data = parse_gga(gga_message);

    printf("Latitude: %f\n", data.latitude);
    printf("Longitude: %f\n", data.longitude);
    printf("Fix: %d\n", data.fix);
    printf("Number of Satellites: %d\n", data.num_satellites);
    printf("HDOP: %f\n", data.hdop);
    printf("Altitude: %f\n", data.altitude);

    return 0;
}

在这个程序中,parse_gga 函数用于解析 GGA 消息,并返回 gga_data 结构体,其中包含解析出的数据。main 函数仅仅是一个示例,用于解析一个 GGA 消息,并将解析出的数据打印到控制台上。

注意:这只是一个简单的例子,并没有考虑所有可能的输入情况和错误处理。实际上,要编写一个真正健壮的 NMEA 解析程序需要考虑很多因素,并且需要进行详细的测试。

  • 示例程序二

以下是一个使用minmea库解析NMEA消息的C语言代码示例:

#include <stdio.h>
#include <stdlib.h>
#include "minmea.h"

int main(int argc, char **argv)
{
    const char *nmea_sentence = "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47";
    enum minmea_sentence_id sentence_id = minmea_sentence_id(nmea_sentence, false);
    if (sentence_id == MINMEA_INVALID) {
        printf("Invalid sentence\n");
        return 1;
    }

    switch (sentence_id) {
        case MINMEA_SENTENCE_GGA: {
            struct minmea_sentence_gga frame;
            if (minmea_parse_gga(&frame, nmea_sentence)) {
                printf("Latitude: %f, Longitude: %f, Altitude: %f meters above sea level\n",
                       minmea_tocoord(&frame.latitude),
                       minmea_tocoord(&frame.longitude),
                       minmea_tofloat(&frame.altitude));
            } else {
                printf("Failed to parse GGA sentence\n");
            }
        } break;

        case MINMEA_SENTENCE_RMC: {
            struct minmea_sentence_rmc frame;
            if (minmea_parse_rmc(&frame, nmea_sentence)) {
                printf("Course: %f, Speed: %f knots\n",
                       minmea_tofloat(&frame.course),
                       minmea_tofloat(&frame.speed));
            } else {
                printf("Failed to parse RMC sentence\n");
            }
        } break;

        default:
            printf("Unsupported sentence type: %d\n", sentence_id);
            break;
    }

    return 0;
}

这个示例使用minmea库中的两个函数,minmea_sentence_id和minmea_parse_xxx,来解析NMEA消息。minmea_sentence_id函数根据消息类型返回枚举值minmea_sentence_id,minmea_parse_xxx函数根据消息类型解析对应的结构体。

该示例中使用的是GGA和RMC消息类型,对应的结构体分别是minmea_sentence_gga和minmea_sentence_rmc,示例代码中分别打印了解析结果。

需要注意的是,示例代码中的nmea_sentence是硬编码的一个NMEA消息字符串,实际使用时应该从串口或文件等数据源中获取原始NMEA数据,然后再解析。

  1. NMEA消息生成

  • 如何生成符合NMEA协议的消息

要生成符合NMEA协议的消息,需要按照NMEA协议的规范来构建数据格式。下面是一些常见的构建步骤:

  1. 选择消息类型:首先,需要确定要生成的消息类型,例如GGA、RMC等。

  1. 构建数据内容:根据协议规范,构建相应的数据内容,比如位置、速度、时间等。

  1. 计算校验和:将$和*之间的字符进行异或运算,得到一个校验和。校验和必须是两个十六进制字符,因此需要将计算结果转换成十六进制格式。

  1. 添加语句起始符号和结束符号:NMEA消息需要以$符号开头,紧随其后的是消息内容和一个校验和,最后以*符号结尾。

下面是一个构建符合GGA协议的消息的示例:

  1. 选择消息类型:GGA

  1. 构建数据内容:

  • UTC时间:123519.00

  • 纬度:4807.038,N

  • 经度:01131.000,E

  • 定位状态:1

  • 使用卫星数量:08

  • HDOP:0.9

  • 海拔高度:545.4,M

  • 大地水准面高度:46.9,M

  1. 计算校验和:对"$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*XX"这部分内容进行异或运算,得到一个校验和值,比如XX。

  1. 添加语句起始符号和结束符号:$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*XX

最终生成的消息就是$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*XX。

  • 示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

char *format_gga_message(double latitude, double longitude, double altitude, int fix_quality, int num_satellites) {
    char *message = (char *) malloc(128 * sizeof(char));  // 分配消息缓存
    memset(message, 0, 128);

    time_t t = time(NULL);  // 获取当前时间
    struct tm *tm = gmtime(&t);  // 转换为UTC时间
    int hour = tm->tm_hour;
    int minute = tm->tm_min;
    int second = tm->tm_sec;

    // 将纬度和经度转换为度分格式
    int lat_degree = (int) latitude;
    double lat_minute = (latitude - lat_degree) * 60.0;
    int lon_degree = (int) longitude;
    double lon_minute = (longitude - lon_degree) * 60.0;

    // 生成消息字符串
    sprintf(message, "$GPGGA,%02d%02d%02d,%.2f,%c,%02d%.5f,%c,%d,%02d,%05.2f,%f,M,0.0,M,,*",
            hour, minute, second, latitude, latitude >= 0 ? 'N' : 'S', lon_degree, lon_minute, longitude >= 0 ? 'E' : 'W',
            fix_quality, num_satellites, altitude, 0.0);

    // 计算校验和
    int len = strlen(message);
    char checksum = 0;
    for (int i = 1; i < len; i++) {
        checksum ^= message[i];
    }
    sprintf(message + len, "%02X", checksum);  // 添加校验和

    return message;
}

int main() {
    double latitude = 39.903;
    double longitude = 116.397;
    double altitude = 50.0;
    int fix_quality = 1;
    int num_satellites = 8;

    char *message = format_gga_message(latitude, longitude, altitude, fix_quality, num_satellites);
    printf("Generated NMEA message: %s\n", message);
    free(message);  // 释放消息缓存

    return 0;
}

这个示例代码可以生成一个符合NMEA协议的GGA消息,其中包含了当前时间、纬度、经度、海拔高度、定位质量和卫星数量等信息。由于NMEA消息是字符串形式的,因此需要使用字符串格式化函数sprintf()生成消息字符串,并计算校验和。最后将生成的消息字符串打印出来,即可用于与GPS接收器进行通信。

  1. NMEA协议在实际应用中的应用

  • NMEA协议在GPS定位中的应用

NMEA协议在GPS定位中的应用主要体现在数据通信和协议解析两个方面。

在数据通信方面,GPS接收器通常使用NMEA协议来输出定位数据,包括位置、速度、方向等信息。通过NMEA协议,GPS接收器可以将这些信息输出到其他设备或计算机上,以实现位置追踪、导航、地图显示等应用。

在协议解析方面,NMEA协议规定了一系列数据格式和语法,GPS接收器可以将接收到的NMEA消息进行解析,从而得到GPS信号中所包含的位置、速度、时间等信息。这些信息可以用于计算行驶距离、导航、轨迹记录等应用。

除了GPS,NMEA协议还被广泛应用于其他导航系统,如北斗、伽利略等。在这些系统中,NMEA协议同样被用于数据通信和协议解析。

  • NMEA协议在船舶和飞机导航中的应用

NMEA协议不仅在GPS定位中有应用,而且在船舶和飞机导航中也有广泛的应用。在船舶导航中,NMEA协议可以用于传输船舶位置、速度、航向等信息,帮助船员进行导航和安全控制。在飞机导航中,NMEA协议可以用于传输飞机位置、高度、速度、航向等信息,帮助飞行员进行导航和飞行控制。

例如,NMEA协议中的RMC消息可以提供当前位置、速度和航向信息,这对于船舶和飞机导航非常有用。另外,船舶和飞机还可以使用NMEA协议中的其他消息,如GGA、VTG和GLL等。NMEA协议的应用不仅局限于GPS导航,还可以用于GLONASS、Galileo和其他导航系统的定位和导航。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NMEA协议详解 的相关文章

随机推荐