NMEA0183(from " National Marine Electronics Association”) is a standard that defines a text protocol for the communication of maritime (usually navigation) equipment (or equipment used on trains) with each other. It became especially popular due to the spread of GPS receivers using this standard.

General view of strings in NMEA 0183

  • the symbol "$" or "!" (hex 24 or hex 21)
  • 5-letter message ID. The first two letters are the identifier of the message source, the next three letters are the identifier of the message format, according to the NMEA 0183 protocol of a certain version.
  • a list of data (letters, numbers, and dots) separated by commas. If any data is missing inside lines, commas are still put (for example, ","). Some fields in the end lines may not be present at all.
  • symbol "*".
  • eight-bit XOR sum of all characters (including "," and "^") in the string between "$" and "*" converted to two ASCII characters in upper case for the hexadecimal representation of a byte (0-9, A-F).
  • (hex 0D, hex 0A).

Maximum message length is limited to 82 characters (NMEA 0183 rev 3.0)

The standard describes more than 250 NMEA sequence identifiers. The standard specifies baud rates of 4800 baud. (For baud rates of 38400 and above, there is an extended NMEA-0183-HS standard).

The standard allows you to add your own sequence identifiers, which is often used by manufacturers to transfer additional information about the operation of the device.

RMC string (special example)

$GPRMC,hhmmss.sss,A,GGMM.MM,P,gggmm.mm,J,v.v, b.b, ddmmyy, x.x, n,m*hh

Fields meaning:

  • "GP" - source identifier; in the example given, this is GPS, "GL" - GLONASS, "GA" - Galileo, "GN" - GLONASS + GPS, etc.
  • "RMC" - "Recommended Minimum sentence C"
  • "hhmmss.sss" - UTC location fixing time: "hh" - hours, "mm" - minutes, "ss.sss" - seconds. The length of the fractional part of seconds varies. Leading zeros are not omitted.
  • "A" - status: "A" - data is valid, "V" - invalid.
  • "GGMM.MM" - latitude. 2 digits of degrees ("GG"), 2 digits of whole minutes, period and fractional part minutes of variable length. Leading zeros are not omitted.
  • "P" - "N" for north latitude or "S" for south latitude.
  • "ggmm.mm" - longitude. 3 digits of degrees ("ggg"), 2 digits of whole minutes, a period and a fractional part of minutes of variable length. Leading zeros are not omitted.
  • "J" - "E" for East or "W" for West.
  • "v.v" - the horizontal component of the speed over the ground in knots. Floating point number. Integer and fractional parts of variable length.
  • "b.b" - ground angle (velocity direction) in degrees. Floating point number. Integer and fractional parts of variable length. A value of 0 corresponds to moving north, 90 to east, 180 to south, 270 to west.
  • "ddmmyy" - date: day of the month, month, last 2 digits of the year (leading zeros are required).
  • "x.x" is the magnetic declination in degrees (often missing), calculated from some model. Floating point number. Integer and fractional parts of variable length.
  • "n" - the direction of the magnetic declination: to obtain the magnetic heading, the magnetic declination must be "E" - subtract, "W" - add to the true heading.
  • "m" - mode indicator: "A" - autonomous, "D" - differential, "E" - approximation, "N" - unreliable data (often missing, this field including the comma is missing in older versions of NMEA).
  • "hh" - checksum.
  • - byte is 0x0D.
  • - byte is 0x0A.

RMC string examples

Example 1

$GPRMC,125504.049,A,5542.2389,N,03741.6063,E,0.06,25.82,200906,*17

Fields meaning:

  • 12 hours 55 minutes 4.049 seconds UTC
  • "A" - reliable
  • latitude 55° 42.2389", north
  • longitude 37° 41.6063", east
  • speed 0.06 knots

Description of the NMEA protocol. Implementation in Garmin and GlobalSat receivers

Introduction

The National Marine Electronics Association (NMEA) has developed a specific protocol to maintain the compatibility of marine navigation equipment various manufacturers. This NMEA protocol describes not only data received from GPS receivers, but also measurements from sonars, radars, electronic compasses, barometers and other navigation devices used on ships.

Most communication interface portable GPS receivers are implemented in accordance with this specification. Most navigation programs that provide real-time data display support and “understand” the NMEA protocol. This data contains the complete navigation measurements of the GPS receiver - position, speed and time. All NMEA messages consist of a sequential set of data separated by commas. Each individual message is independent of the others and is completely "complete". The NMEA message includes a header, a set of data represented by ASCII characters, and a "checksum" field for verifying the validity of the transmitted information.

The header of standard NMEA messages consists of 5 characters, the first two of which define the type of message, and the remaining three - its name. For example, all GPS NMEA messages are prefixed with "GP". Messages that are not described in the NMEA specification, but are implemented in GPS receivers in accordance with general rules, are prefixed with a "P" followed by three characters unique to each company. For example, Garmin's "native" NMEA messages are prefixed with "PGRM", Magellan is prefixed with "PMGN"
Each NMEA message starts with "$", ends with "n" ("line feed") and cannot be longer than 80 characters. All data is contained in one line and separated from each other by commas. The information is presented as ASCII text and does not require special decoding. If the data does not fit into the allocated 80 characters, then it is "split" into several NMEA messages.

This format allows you to not limit the accuracy and number of characters in individual data fields. For example, the fractional part of the coordinate value can be represented by 3 or 4 decimal places, but this should not affect the operation in any way. software, which extracts the required data from the message by field number. At the end of each NMEA message is a checksum field separated from the data by a "*". It can optionally be used to check the integrity and validity of each received message.

The NMEA protocol supports not only outgoing but also incoming messages, which, for example, can be used to update or add route waypoints. These messages must be in strict compliance with NMEA format, otherwise they will be simply ignored by the GPS receiver. It should be noted that not all navigation programs and receiver models support this mode, since they use proprietary protocols from manufacturers - Garmin, Magellan, etc. to load points and routes.

Since its inception, the NMEA protocol has undergone several modifications related to the addition of new fields and messages. current version supported by most receivers is version 2.3, although the description has already been published new version 3.0. The complete specification of NMEA messages is not freely available and cannot be officially downloaded in electronic form, its individual sections, general description NMEA protocol and the most popular messages can be found on the Internet. Official NMEA documentation can be purchased at www.nmea.org.

list of messages

The NMEA protocol describes a large list of different messages, of which two dozen messages can be distinguished that are actively used in navigation equipment. Due to the great popularity and simple data presentation, the NMEA protocol has found application not only in marine equipment, but also in geodetic, domestic and aviation GPS receivers.

  • AAM - Arriving at Waypoint
  • ALM - Almanac Data
  • APA - Autopilot data "A"
  • APB - Autopilot data "B"
  • BOD - Bearing to destination
  • DTM - Used datum
  • GGA - Fixed Solution Information
  • GLL - Latitude and longitude data
  • GSA - General Satellite Information
  • GSV - Detailed Satellite Information
  • MSK - Handover to Base Receiver
  • MSS - Base receiver status
  • RMA - Loran Recommended Dataset
  • RMB - Recommended GPS navigation data set
  • RMC - Recommended Minimum GPS Data Set
  • RTE - Routing Information
  • VTG - Motion and Velocity Vector
  • WCV - Speed ​​data near waypoint
  • WPL - Waypoint Data
  • XTC - Track Off Error
  • XTE - Measured Track Departure Error
  • ZTG - UTC time and remaining time until arrival at destination
  • ZDA - Date and time.

Some of the NMEA messages may contain the same data fields, or may contain the entire data of other, smaller NMEA messages.

ContentNMEA messages

GGA - fixed solution information.
The most popular and most used NMEA message with information about the current fixed solution - horizontal coordinates, altitude value, number of satellites in use and type of solution.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,*47
where:

  • GGA - Header
  • 123519 -UTC time 12:35:19
  • 4807.038, N - Latitude, 48 degrees 7.038 minutes north latitude
  • 01131.000, E - Longitude, 11 degrees 31.000 minutes East
  • 1 - type solution, StandAlone solution
    • 0 - no solution,
    • 1-standalone,
    • 2-DGPS,
    • 3-PPS,
    • 4 - fixed RTK,
    • 5 - not fixed RTK,
    • 6 - use of these inertial systems,
    • 7 - manual mode,
    • 8 - simulation mode
  • 08 - number of used satellites
  • 0.9 - geometric factor, HDOP
  • 545.4, M - height above sea level in meters
  • 46.9, M - height of the geoid above the WGS 84 ellipsoid
  • [empty field] - time elapsed since the last DGPS correction was received. Filled in when DGPS mode is activated
  • [empty field] - identification number base station. Filled in when DGPS mode is activated.

GSA- general information about satellites.
This NMEA message contains a list of the satellites used in the position calculation and the values ​​of the DOPs geometric factors that determine the accuracy of the position calculation. The DOP parameters are determined by the geometric arrangement of the satellites in the sky. The better the satellites are "distributed" in the sky, the lower the DOP and the better the position accuracy. Minimum value PDOP (= 1) corresponds to a situation where one satellite is directly above the user, and the other 3 are evenly distributed around at the horizon level. The PDOP value is calculated as the square root of the sum of the squares of HDOP and VDOP.

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

  • GSA - header
  • A - type of choice between 2D and 3D solutions, Automatic (A-auto, M-manual)
  • 3 - solution type, 3D solution (1 - no solution, 2 - 2D solution, 3 - 3D solution)
  • 04,05… - PRN codes used in satellite position calculation (12 fields)
  • 2.5 - spatial geometric factor, PDOP
  • 1.3 - horizontal geometric factor, HDOP
  • 2.1 - vertical geometric factor, VDOP

GSV - Detailed Satellite Information
This NMEA message contains detailed information for all satellites tracked by the GPS navigator. Based on the limitation of 80 characters, data for only 4 satellites can be transmitted as part of one NMEA message. Accordingly, 3 GSV messages are required for 12 satellites.
The SNR (Signal to Noise Ration) field contains the levels of navigation signals received from satellites. Theoretically, its value can vary from 0 to 99 and is measured in dB. In fact, the signal level lies in the range of 25 ... 35 dB. It is worth noting here that this parameter is not absolute and is not suitable for comparing the sensitivity of receivers of different models and manufacturers. GPS navigators can use different algorithms for calculating the received signal level, which leads to different results with the same degree of sensitivity of the receivers.
For each visible GPS satellite, a set of information is transmitted, including signal strength, elevation, and azimuth of the satellite. The number of these "sets" is determined by the total number of visible satellites, the value of which is transmitted in a separate field.

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75
where:

  • GSV - header
  • 2 - number of GSV messages in a packet
  • 1 - message number in the batch (from 1 to 3)
  • 08 - number of visible satellites
  • 01 - satellite number
  • 40 - elevation angle, in degrees
  • 083 - azimuth in degrees
  • 46 - SNR, signal level

RMC - recommended minimum set GPS data
This NMEA message contains the entire set of so-called "PVT" data. "PVT" is a common abbreviation for "position, velocity, time" (position, speed, time).

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

  • RMC - title
  • 123419 - UTC time, 12:34:59
  • A - status (A - active, V - ignore)
  • 4807.038,N - Latitude, 48 degrees 07.038 minutes north latitude
  • 01131.000,E - Longitude, 11 degrees 31.000 minutes East
  • 022.4 - Speed, in knots
  • 084.4 - Direction of movement, in degrees
  • 230394 - Date March 23, 1994
  • 003.1,W - Magnetic variations

GLL - latitude and longitude data

NMEA message with the value of the coordinates of latitude and longitude, and the time when this solution was calculated.

$GPGLL,4916.45,N,12311.12,W,225444,A,*31

  • GLL - header
  • 4916.46,N - latitude, 49 degrees 16.45 minutes north latitude
  • 12311.12 W-longitude, 123 degrees 11.12 minutes west
  • 225444 - Fix time in UTC time scale, 22:54:44

AT OD - Azimuth to destination
This NMEA message indicates the bearing to the destination in navigation mode.

$GPBOD,045.,T,023.,M,DEST,START*01

  • BOD - header
  • 045.,T - true direction to the point
  • 023.,M - magnetic direction to the point
  • DEST - identification number end point
  • START - identification number of the starting point

$GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20

  • RMB - header
  • A - Data type, (A - active, V - ignore)
  • 0.66,L - deviation from the track. The parameter is defined in nautical miles. (L-left, R-right)
  • 003 - identification number of the starting point
  • 004 - endpoint identification number
  • 4917.24,N - end point latitude value, 49 degrees 17.24 minutes north latitude
  • 12309.57,W - longitude value of the end point, 123 degrees 09.57 minutes west
  • 001.3 - distance to the point, in nautical miles
  • 052.5 - direction to the point
  • 000.5 - speed, in knots
  • V - arrival information (A - arrival, V - point not yet reached)

RTE - Routing Information

The NMEA RTE message lists the waypoints on the active route. There are two types of RTE messages. In the first case, all waypoints are displayed. In the second, only a list of the remaining points that have yet to be visited while moving along the route. Considering that the NMEA protocol has a restriction that the length of the message should not exceed 80 characters, the RTE message can consist of several lines.

$GPRTE,2,1,c,0,W3IWI,DRIVWY,32CEDR,32-29,32BKLD,32-I95,32-US1,BW-32,BW-198*69

  • RTE - header
  • 2 - total number of messages to display the full list of data
  • 1 - message number from the general list
  • c - RTE message type (c - full list waypoints, w - list of waypoints yet to be visited)
  • 0 - route identifier
  • W3IWI,DRIVWY,.. - list of waypoints

Garmin Features

Garmin receivers support most NMEA messages containing GPS measurements, coordinates and time - GGA, GLL, GSA, GSV, RMC. As well as navigation messages - RMB, BOD

To display these messages, you need to change the interface from “Garmin” to “NMEA” in the receiver settings and possibly set the desired speed. The same speed must be set in the navigation program in the settings of the serial port to which the navigator is connected.

Unfortunately, receivers with a USB port do not support the NMEA protocol, limiting its settings to the Garmin protocol only.

To display information coming into the serial port of the computer, you can use the terminal Windows program, or one of the navigation programs that support this feature.

Below is a list of Garmin eMap receiver NMEA messages that are contained within the same epoch.

$GPRMC,135412,A,5522.8973,N,03710.1401,E,0.0,0.0,190507,9.3,E,A*1F

$GPRMB,A,,A,A*0B

$GPGGA,135412,5522.8973,N,03710.1401,E,1,04,5.4,205.2,M,15.8,M,*4A

$GPGSA,A,3,08,13,23,25,5.7,5.4,1.0*3C

$GPGSV,3,1,11,02,15,267,00,03,11,085,45,04,05,236,00,08,39,233,00*77

$GPGSV,3,2,11,10,32,308,00,13,63,109,43,16,17,037,00,23,31,111,38*77

$GPGSV,3,3,11,24,09,343,00,25,66,077,44,27,69,229.00*46

$GPGLL,5522.8973,N,03710.1401,E,135412,A,A*43

$GPBOD,T,M,*47

$PGRME,19.1,M,15.2,M,25.3,M*15

$ PGRMZ,673, f.3*19

$ PGRMM, WGS 84*06

In addition to the standard NMEA messages, Garmin receivers implement their own set of messages, each containing a "GRM" prefix in the header, an "M" or "Z" identifier identifying the data type, and a single character for the name.

PGRME - Position Error Estimation

$PGRME,15.0,M,45.0,M,25.0,M*1C

  • 15.0,M - estimate of the horizontal positioning error, in meters
  • 45.0,M - vertical error estimate, in meters
  • 25.0,M - equivalent spherical positioning error

PGRMZ - height measurements

$PGRMZ,93,f,3*21

  • 93,f - height value, in pounds
  • 3 - position measurement conditions (2 - height, user defined, 3 - height calculated by GPS)

PGRMM - current datum

$PGRMM,NAD27 Canada*2F

  • NAD27 Canada - the name of the current horizontal datum

PeculiaritiesSirf

Sirf GPS chips are used in various navigation GPS equipment, ranging from conventional boards, ending with portable and automotive GPS navigators. But unlike navigators, they only support NMEA messages related to GPS measurements, position and time calculation - GGA, GLL, GSA, GSV, RMC, VTG, ZDA.

"Sirf" also supports several "incoming" NMEA messages for configuration and setting various parameters. In addition, "Sirf" implements its own binary protocol, which allows you to change much more settings. These 5 "incoming" NMEA messages start with the $PSFR prefix, according to the rules. All messages contain a fixed set of data and end with the character "n" (line feed)

To configure the "Sirf" parameters, use special program Sirftech. NMEA message settings are configured in a separate menu item.

$GPGGA,100643.000,5522.9036,N,03710.1282,E,1.07,1.6,209.9,M,14.9,M,0000*52

$GPGSA,A,3,31,01,23,20,11,30,14,2.1,1.6,1.4*35

$GPGSV,3,1,12,20,84,187,41,01,49,067,46,23,46,238,45,31,45,073,50*7B

$GPGSV,3,2,12,11,25,194,34,13,16,240,04,15,319,30,17,14,273,21*7A

$GPGSV,3,3,12,30,10,026,33,14,05,063,22,05,04,009,25,25,03,195,*7F

$GPRMC,100643.000,A,5522.9036,N,03710.1282,E,0.16,119.11,200507,*0D

As can be seen from the above example, the "factory" settings contain fewer NMEA messages compared to the Garmin settings. If necessary, this set can be extended by setting the period in the missing NMEA messages.

$GPGGA,100833.000,5522.9076,N,03710.1270,E,1.07,1.3,222.4,M,14.9,M,0000*53

$GPGLL,5522.9076,N,03710.1270,E,100833.000,A*34

$GPGSA,A,3,31,01,23,20,11,30,17,2.1,1.3,1.6*31

$GPGSV,3,1,12,20,84,180,43,01,49,067,47,23,47,238,45,31,45,072,49*77

$GPGSV,3,2,12,11,24,193,26,13,16,240,26,04,15,319,24,17,13,273,31*78

$GPGSV,3,3,12,30,10,025,26,14,04,064,22,25,04,195,05,04,008,21*7C

$GPRMC,100833.000,A,5522.9076,N,03710.1270,E,0.18,4.86,200507,*00

$GPVTG,4.86,T,M,0.18,N,0.3,K*60

$GPZDA,100834.000,20.05.2007,*5A

PSFR100, PSFR102 - serial port configuration

NMEA message number 100 is used to set port A, message 102 - port B. Message 100 has an additional field that allows you to switch the interface to the binary Sirf protocol.

Accordingly, in the binary protocol there is a command that switches the port back to the NMEA format. Before switching to a binary protocol, you need to understand if a program that will later allow you to restore the NMEA protocol.

$PSRF100.0.9600.8.1.0*0C

$PSRF102.9600.8.1.0*3C

  • PSRF100 - header
  • 0 - parameter indicating in which mode the protocol was changed (0-Sirf, 1-NMEA)
  • 9600 - port speed (4800, 9600, 19200, 38400)
  • 8 - data bits (7, 8)
  • 1 - stop bits (0,1)
  • 0 - paired (0 - no, 1-odd, 2-even)

PSFR101, PSFR104 - receiver parameters initialization

NMEA messages numbered 101 and 104 are intended to initialize parameters for GPS reception. Defining these parameters can speed up the acquisition time of GPS satellites. Message 101 sets the current coordinates in XYZ format, message 104 - in BLH (longitude, latitude) format.

$PSRF101,-2686700,-4304200.3851624.95000.497260.921.12.3*22

$PSRF104.37.3875111,-121.97232.0.95000.237759.922.12.3*3A

  • PSRF101 - header
  • 37.3875111 - latitude in degrees
  • -121.97232 - longitude in degrees
  • 0 - height, in meters
  • 95000 - clock shift
  • 237759 - GPS time, in seconds
  • 922 - GPS week number
  • 12 - number of channels
  • 3 - type of data initialization (1 - hot start, 2 - warm start, 3 - data initialization, 4 - cold start with complete data clearing, 8 - cold start with factory settings restored)

PSFR103 - generation configuration NMEA messages

This NMEA message allows you to set or query the generation period for each "outgoing" NMEA message.

$PSRF103.05.00.01.01*20

  • PSRF103 - header
  • 05 - message title
    • 00-GGA
    • 01-GLL
    • 02-GSA
    • 04-RMS
    • 05-VTG
  • 00 - mode (0 - period setting, 1 - request)
  • 01 - period, in seconds (0-255)
  • 01 - presence of a checksum (0 - yes, 1 - no)

Experiment results

Under normal satellite visibility conditions, the Garmin eMap receiver outputs the following set of NMEA messages:

$GPRMC,104644,A,5522.8965,N,03710.1389,E,0.0,0.0,200507,9.3,E,A*16

$GPRMB,A,,A,A*0B

$GPGGA,104644,5522.8965,N,03710.1389,E, 1 ,07 ,1.2,186.6,M,15.8,M,*44

$GPGSA,A,3,01,04,13,16,20,23,31,2.1,1.2,1.7*35

$GPGSV,3,1, 10 ,01,34,070,48,04,28,311,40,11,10,190,00,13,32,249,41*7E

$GPGSV,3,2, 10 ,16,11,111,40,20,68,142,50,23,64,247,49,25,21,196,00*70

$GPGSV,3,3, 10 .30.05.012.00.31.36.055.52*7D

$GPGLL,5522.8965,N,03710.1389,E,104644,A,A*40

$GPBOD,T,M,*47

$PGRME, 6.0 ,M,7.7,M,9.8,M*29

$PGRMZ,612,f,3*1E

$PGRM,WGS 84*06

$GPRTE,1,1,c,*37

From the analysis of the messages, it can be seen that at the moment the receiver is tracking 10 (GSV) satellites, of which 7 (GGA) are used in position calculation. The horizontal positioning error is 6 meters (RME) and the solution type indicator is 1 (GGA)

If you create conditions under which GPS signal will not be accepted, then the GGA messages will contain "empty" fields, and the decision type indicator will take the value 0 (GGA)

$GPGGA, 0 ,00,M,M,*66

$GPGSA,A,1,,*1E

In "normal" mode, the RMB and BOD messages contain empty fields. Once the Waypoint "Road" was selected as the final destination, these fields were "populated" with data. As follows from the analysis of the message, the distance to the point is 1.620 miles, the movement azimuth is 6.3 degrees (BOD). In this case, the azimuth of BOD and RMB messages differs by 0.1 degrees.

$GPRMB,A,0.00,R,Road ,5524.501,N,03710.445,E, 1.620 ,6.4 ,V,A*59

$GPBOD, 6.3 ,T,357.0,M,Road,*74

After the Home route was selected for navigation, a list of all route waypoints was displayed in the RTE message list. And in the RMB message - identification numbers starting and ending (next) points of the route.

$GPRTE,1,1,c,HOME,SLOBODA,IERUSALIM,INSTITUT*01

$GPRMB,A,9.99,R,SLOBOD,IERUSAL,5555.237,N,03649.976,E,34.346,340.6,V,A*1F

Conclusion

In most cases, the user does not need, and is not interested to know what data and in what fields are transmitted. Most navigation programs "parse" NMEA message data and present it in a user-friendly form - graphs, diagrams, tables, etc.

Of particular interest are NMEA messages for users who would like to study GPS data, calculate an estimate of the received measurements, or analyze the behavior of navigation receivers in various conditions. There are a number of programs with which you can solve these problems.

H But still, for deep analysis of GPS data, the NMEA format is not intended, since it does not contain the so-called "raw" measurements - pseudo-ranges, phases, Doppler. Each manufacturer of navigation equipment has its own "open" or "closed" protocol that outputs this information.

NMEA is a simple and understandable format that allows not only to exchange data between GPS receivers and navigation programs, but also gives users some idea of ​​the principles of operation of satellite navigation equipment

I had a need to test an application that uses GNSS data over the NMEA protocol. It was due to the fact that I was working on a project for an aircraft navigation program, testing in the air is naturally expensive, driving a car with a GNSS receiver on the ground is not particularly convenient, so I wanted to have NMEA protocol data on a virtual parallel port from supposedly moving equipment. At first I was looking for different software, I thought I would find something suitable, but most of them are paid and the data emulation control is not very convenient, although they emulate almost all the parameters of the NMEA standard. But I needed something simple emulating coordinates, speed, in principle, nothing more, and I needed a fairly convenient and logical control. So I had to write an application of this kind in C#.

Fly_nmea


NMEA ("National Marine Electronics Association") - the full name is "NMEA 0183" - a text protocol for the communication of marine (usually navigational) equipment with each other.
The data is transmitted in the form of offers. The proposal format is as follows:
$AAAA[,<данные>]*hh , where:
$ - sentence start character (code 24h);
AAAAA - Five-character address (name) of the offer;
[, <данные>] - list of data fields separated by commas (code 2Сh);
* - sign of the checksum (code 2Ah);
hh - checksum.

Suggestion example:
GGA - GPS Positioning Data
Time, place and data related to the observation.
$GPGGA,hhmmss.sss,llll.ll,a,yyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxx*hh

I needed to emulate four lines:

  • GLL - Location Coordinates
  • GSV- Visible satellites
  • RMC - Recommended Minimum Data Set for GPS and GLONASS
  • GSA - Accuracy degradation factor used for navigation satellites
Emulation is organized in the following order:
  • we set the initial coordinates in the WGS-84 system
  • then we switch to a flat projection, for example, Mercator (I used a ready-made C# library for coordinate transformation)
  • knowing the flat coordinates x, y, h, we implement the physics of the aircraft's motion in terms of variable parameters through GUI such as: roll, pitch, speed
  • convert flat coordinates to B, L, H coordinates of the WGS-84 system
  • we form a packet of messages of the NMEA standard from the required four lines
  • send them to the virtual parallel port
Fly_nmea+Android Sensor
For more convenient testing, I also set up data reception from Android sensors(angles of inclination). Android sends two strings like this over UDP:
  • "Angle:\t236.04152\t-1.0\t-3.0"
  • "acc:\t-0.46309182\t-0.14982383\t-10.56939"
On the emulation application, I accept them and, based on the angles of inclination, change the parameters:
  • Pitch
In the emulation application, you can switch from control via the program interface to Android Sensor.
Fly_nmea connection
To emulate COM ports, the Virtual Serial Ports Emulator is also useful, you will need to configure the connection of two virtual COM ports, for example: COM1<->COM6, and the Fly_nmea program will send data to COM6, and on COM1, a program using the NMEA protocol will pick it up.

Conclusion

In general, I spent more time searching for such software, and not finding that I would be completely satisfied, I wrote it myself faster. In addition to the project I was working on, I also managed to quite successfully connect the emulator to programs that understand the NMEA protocol, such as: 2Gis and SAS planet.



FlyNMEA and android sensor(project for transmitting data from sensors via UDP)

NMEA0183– text communication protocol used in GPS receiver modules. This standard was created for the communication of maritime navigational equipment. The protocol provides for the transmission of text commands and messages using ASCII characters. Thus, to receive messages, it is enough to use serial interface UART, while all messages can be transmitted directly to a computer using a COM port for this, but not forgetting the need to convert signal levels.

The GPS module transmits messages in different formats containing a different set of data: latitude and longitude, speed, heading, time, number of satellites, etc. Messages are transmitted sequentially and are divided into several types, the format of each type of message contains strictly defined information in its fields. Let's take a closer look at the general structure of the messages that the GPS module issues.

$ - every message starts with this character

Followed by an identifier of 5 text characters. The first two letters indicate the type of navigation system, for example "GP" - GPS or " GL" - Glonass etc. The next 3 characters are the message format identifier, which completely defines the content of the subsequent transmitted data. For example "RMC"- this is the recommended minimum data, which contains information about time and date, latitude and longitude, speed, heading and magnetic deviation in degrees (may be missing). Or G.S.A., satellite data will be transmitted here. The structure of the main types of messages will be discussed below.

Then follows «,» - a comma, after which the body of the message immediately follows with various data, which are separated from each other by the same comma. If the transmitted number is not an integer, then the separator between the integer and fractional parts is a dot «.» .

The end of the message body is indicated by the symbol «*» . This is followed by a checksum of all characters contained between "$" and "*", that is, the entire body of the message, including the data itself and the identifiers at the beginning of the message. The checksum is calculated as XOR (exclusive OR) of all ASCII hexadecimal codes of the message characters.

And at the very end of each message, line feed characters must follow

Consider the purpose and structure various types messages.

RMC– recommended minimum navigation data. The message contains the minimum required amount of information. These are data on latitude and longitude, date and time, speed. For many tasks, more is not needed, for example, in the module Quectel L50 I turned off the transmission of all other types of messages, since I absolutely do not need information about satellites and the level of their signals. And the reception of excessive information requires the complication of the program for processing this data. The message structure is:

$GPRMC, hhmmss.sss,A,ddmm.mmmm,N,ddmm. mmmm , E,v.v,c. c, ddmmyyyy,x.x,n,m*hh

This message contains the following data:

  • GPRMCsatellite system GPS, RMC Message ID
  • hhmmss.sss– time (Greenwich Mean Time), where hh – hours, mm – minutes, ss.sss – seconds
  • A- the data is correct or V- the data is invalid. Symbol A in the message will be when the satellite reception is strong enough to calculate the position data. Symbol V will be when the receiver does not see the satellites or when the number of satellites found is not enough to reliably calculate the coordinates. For example, if you turn on the GPS module somewhere in a panel house and away from the windows, you will most likely see the symbol V in the received message.
  • ddmm.mmmm- latitude, degrees and minutes
  • N or S- north or south. The hemisphere you are in. If you are in Australia it will show S. In Yekaterinburg, my GPS module gives out N.
  • ddmm.mmmm- longitude, degrees and minutes
  • E or W- western or eastern hemisphere
  • v.v- speed in knots
  • c. c– heading over ground in degrees. When moving due north, it will be 0 degrees.
  • ddmmyyyy- the date
  • x.x– magnetic declination
  • n is the direction of the magnetic declination. I can't explain anything about these last two parameters. For example my module GPS Quectel L50 when receiving in the apartment on the window, this data did not show at all, I just missed it.
  • m– navigation mode: N- invalid data A- autonomous, D– differential

Here is an example RMC message:

$GPRMC,105954.000,A,3150.6731,N,11711.9399,E,0.00,96.10,250313,A*53

  • GMT 10h 59m 54sec
  • A- the data is correct
  • Latitude 31 degrees and 50.6371 minutes
  • N– northern
  • Longitude 117 degrees 11.9399 minutes
  • E– eastern
  • Speed 0.00 knots
  • Well 96.1 degrees
  • the date March 25, 2013
  • Data about magnetic declination missing
  • Mode - autonomous
  • Checksum of message characters 0x053

Here it is necessary to note one nuance. The latitude and longitude data contains a fractional part of the minutes, which does not correspond to the number of "seconds" at all, since it is a decimal fraction. Those programs for working with GPS, which I have tried, show the coordinates on the map accurately. But if you enter these numbers in the search bar google maps, then the location on the map will turn out to be several kilometers from the actual one. When entering the received coordinates in this case, it is necessary to divide the fractional part of latitude and longitude by 60 to convert these numbers into "seconds". When connecting the Quectel L50 module for the first time and entering the received latitude and longitude coordinates into the line Google search maps, I got the position on the map with a significant error, the map showed a place somewhere in the Uralmash area.

Here are some more message types used in this protocol:

  • VTG- true heading and ground speed
  • GGA- last position fix data
  • GSA- data about active satellites
  • GSV- data on visible satellites, their position and numbers, as well as signal strength
  • GLL- latitude, longitude and time data
  • ZDA- time and date data

I did not analyze in detail what each message consists of, a link to a document describing the protocol is given at the end of the article. A particular type of GPS module may not transmit all of the data listed. You can disable or enable the transmission of various types of data, as well as set the period for issuing them. To configure the module, there are special commands that begin with an identifier $PSRFxxx, where xxx specifies the type and format of the command, just like in outgoing messages.

For example, the command $PSRF100.0.9600.8.1.0*0C sets the exchange protocol and configures the serial port parameters.

  • $PSRF100 - SIRF native protocol command identifier
  • 0 – binary protocol SIRF, 1 - NMEA protocol
  • 9600 – bps speed
  • 8 data bit
  • 1 stop bit
  • 0 - parity check disabled

Team $PSRF103.00.00.02.01*26 configures output parameters for various types of module messages:

  • $PSRF103– SIRF native protocol command identifier
  • then after the comma there are two digits that determine the type of custom message: 00 - GGA
    01-GLL
    02-GSA
    03-GSV
    04-RMC
    05-VTG
  • the next two digits set the order in which messages are issued, for example: 00 - periodically
    01 - on request
  • the following numbers set the reporting period in seconds: 00 = Off (messages are disabled)
    1-255 - interval between messages of this type in seconds
  • then enable/disable transmission of the checksum in the NMEA message transmitted by the module: 00 – transmission of the checksum is disabled
    01 - checksum is transmitted
  • after the “*” character, as in the outgoing NMEA message, a checksum and line feed characters are transmitted.

That's all I wanted to briefly describe the NMEA 0183 protocol and the commands to control the module on the SIRF chipset. A more detailed explanation of all these messages and commands is given, for example, in the description of the Quectel L50 module protocol, which can be downloaded from the link below.

Description of the NMEA protocol.

Implementation in Garmin and GlobalSat receivers

Introduction

The National Marine Electronics Association (NMEA) has developed a protocol to maintain interoperability between marine navigation equipment from different manufacturers. This NMEA protocol describes not only data received from GPS receivers, but also measurements from sonars, radars, electronic compasses, barometers, and other navigation devices used on ships. The data exchange interface of most portable GPS receivers is implemented in accordance with the NMEA specification. Most navigation programs that provide real-time data display support and “understand” the NMEA protocol. This data contains the complete navigation measurements of the GPS receiver - position, speed and time. All NMEA messages consist of a sequential set of data separated by commas. Each individual message is independent of the others and is completely "complete". The NMEA message includes a header, a set of data represented by ASCII characters, and a "checksum" field for verifying the validity of the transmitted information. The header of standard NMEA messages consists of 5 characters, of which the first two define the type of message, and the remaining three - its name. For example, all GPS NMEA messages are prefixed with "GP". Messages that are not described in the NMEA specification, but are implemented in GPS receivers according to common rules, are prefixed with a "P" followed by three characters unique to each company. For example, Garmin's "proprietary" NMEA messages are prefixed with "PGRM", Magellan is prefixed with "PMGN". Each NMEA message starts with "$", ends with "\n" ("line feed") and cannot be longer than 80 characters. All data is contained in one line and separated from each other by commas. The information is presented as ASCII text and does not require special decoding. If the data does not fit into the allocated 80 characters, then it is "split" into several NMEA messages. This format allows you to not limit the accuracy and number of characters in individual data fields. For example, the fractional part of the coordinate value can be represented by 3 or 4 decimal places, but this should not affect the operation of the software that extracts the necessary data from the message by field number. At the end of each NMEA message is a checksum field separated from the data by a "*". It can optionally be used to check the integrity and validity of each received message. The NMEA protocol supports not only outgoing but also incoming messages, which, for example, can be used to update or add route waypoints. These messages must be formed in strict accordance with the NMEA format, otherwise, they will simply be ignored by the GPS receiver. It should be noted that not all navigation programs and receiver models support this mode, since they use proprietary protocols from manufacturers such as Garmin, Magellan, etc. to load points and routes. Since its inception, the NMEA protocol has undergone several modifications related to the addition of new fields and messages. The current version supported by most receivers is version 2.3, although a new version 3.0 has already been published. The complete specification of NMEA messages is not freely available and cannot be officially downloaded in electronic form. Its individual sections, a general description of the NMEA protocol and the most popular messages can be found on the Internet. You can officially purchase NMEA documentation at http://www.nmea.org/ .

list of messages

The NMEA protocol describes a large list of different messages, of which two dozen messages can be distinguished that are actively used in navigation equipment. Due to the great popularity and simple data presentation, the NMEA protocol has found application not only in marine equipment, but also in geodetic, domestic and aviation GPS receivers.

    AAM - Arrival at Waypoint

    ALM - Almanac Data

    APA - Autopilot Data "A"

    APB - Autopilot data "B"

    BOD - Bearing to destination

    DTM - Used datum

    GGA - Fixed Solution Information

    GLL - Latitude and longitude data

    GSA - General Satellite Information

    GSV - Detailed Satellite Information

    MSK - Handover to Base Receiver

    MSS - Base Receiver Status

    RTE - Routing Information VTG - Motion and Velocity Vector

    WCV - Speed ​​data near waypoint

    WPL - Waypoint Data

    XTC - Track Off Error

    XTE - Measured Track Departure Error

    ZTG - UTC time and remaining time until arrival at the destination

    ZDA - Date and time.

Some of the NMEA messages may contain the same data fields, or may contain the entire data of other, smaller NMEA messages.

GGA - fixed solution information.

The most popular and most used NMEA message with information about the current fixed solution - horizontal coordinates, altitude value, number of satellites in use and type of solution.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,*47

GGA - NMEA Header

123519 –UTC time 12:35:19

4807.038, N - Latitude, 48 degrees 7.038 minutes north latitude

01131.000, E - Longitude, 11 degrees 31.000 minutes East

1 - type solution, StandAlone solution

08 - number of used satellites

0.9 - geometric factor, HDOP

545.4, M - height above sea level in meters

46.9, M is the height of the geoid above the WGS 84 ellipsoid

[empty field] – time elapsed since the last DGPS correction was received. Filled in when DGPS mode is activated

[empty field] – base station identification number. Filled in when DGPS mode is activated.

GSA - general information about satellites.

This NMEA message contains a list of the satellites used in the position calculation and the values ​​of the DOPs geometric factors that determine the accuracy of the position calculation. The DOP parameters are determined by the geometric arrangement of the satellites in the sky. The better the satellites are "distributed" in the sky, the lower the DOP and the better the position accuracy. The minimum value of PDOP (= 1) corresponds to the situation when one satellite is directly above the user, and the other 3 are evenly distributed around at the horizon level. The PDOP value is calculated as the square root of the sum of the squares of HDOP and VDOP.

$GPGSA,A,3,04,05,09,12,24,2.5,1.3,2.1*39

    GSA - NMEA header

    A - type of choice between 2D and 3D solutions, Automatic (A-auto, M-manual)

    3 – solution type, 3D solution (1 – no solution, 2 – 2D solution, 3 – 3D solution)

    04,05… - PRN codes used in satellite position calculation (12 fields)

    2.5 - spatial geometric factor, PDOP

    1.3 - horizontal geometric factor, HDOP

    2.1 - vertical geometric factor, VDOP

GSV - Detailed Satellite Information

This NMEA message contains detailed information for all satellites tracked by the GPS navigator. Based on the limitation of 80 characters, data for only 4 satellites can be transmitted as part of one NMEA message. Accordingly, 3 GSV messages are required for 12 satellites. The SNR (Signal to Noise Ration) field contains the levels of navigation signals received from satellites. Theoretically, its value can vary from 0 to 99 and is measured in dB. In fact, the signal level lies in the range of 25 ... 35 dB. It is worth noting here that this parameter is not absolute and is not suitable for comparing the sensitivity of receivers of different models and manufacturers. GPS navigators can use different algorithms for calculating the received signal level, which leads to different results with the same degree of sensitivity of the receivers. For each visible GPS satellite, a set of information is transmitted, including signal strength, elevation, and azimuth of the satellite. The number of these "sets" is determined by the total number of visible satellites, the value of which is transmitted in a separate field.

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75

    GSV - NMEA header

    2 - number of GSV messages in a packet

    1 – message number in the packet (from 1 to 3)

    08 - number of visible satellites

    01 - satellite number

    40 - elevation angle, in degrees

    083 - azimuth in degrees

    46 - SNR, signal level

This NMEA message contains the entire set of so-called "PVT" data. "PVT" is a common abbreviation for "position, velocity, time" (position, speed, time).

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

    RMC - NMEA header

    123419 - UTC time, 12:34:59

    A - status (A-active, V-ignore)

    4807.038,N - Latitude, 48 degrees 07.038 minutes north latitude

    01131.000,E - Longitude, 11 degrees 31.000 minutes East

    022.4 - Speed, in knots

    003.1,W - Magnetic variations

GLL - latitude and longitude data

NMEA message with the value of the coordinates of latitude and longitude, and the time when this solution was calculated.

$GPGLL,4916.45,N,12311.12,W,225444,A,*31

    GLL - NMEA header

    4916.46,N - latitude, 49 degrees 16.45 minutes north latitude

    12311.12 W-longitude, 123 degrees 11.12 minutes west

    225444 - Fix time in UTC time scale, 22:54:44

BOD - Azimuth to destination

This NMEA message indicates the bearing to the destination in navigation mode.

$GPBOD,045.,T,023.,M,DEST,START*01

    BOD - NMEA header

    045.,T – true direction to the point

    023.,M – magnetic direction to the point

    DEST - endpoint identification number

    START - identification number of the starting point

$GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20

    RMB - NMEA header

    A - Data type, (A - active, V - ignore)

    0.66,L - deviation from the track. The parameter is defined in nautical miles. (L-left, R-right)

    003 - identification number of the starting point

    004 - endpoint identification number

    4917.24,N is the latitude value of the end point, 49 degrees 17.24 minutes north latitude

    12309.57,W is the longitude value of the end point, 123 degrees 09.57 minutes west

    001.3 – distance to the point, in nautical miles

    000.5 - speed, in knots

    V - arrival information (A - arrival, V - point not yet reached)

RTE - Routing Information

The NMEA RTE message lists the waypoints on the active route. There are two types of RTE messages. In the first case, all waypoints are displayed. In the second, only a list of the remaining points that have yet to be visited while moving along the route. Considering that the NMEA protocol has a restriction that the length of the message should not exceed 80 characters, the RTE message can consist of several lines.

$GPRTE,2,1,c,0,W3IWI,DRIVWY,32CEDR,32-29,32BKLD,32-I95,32-US1,BW-32,BW-198*69

    RTE - NMEA header

    2 - total number of messages to display the full list of data

    1 – message number from the general list

    с – type of RTE message (с – complete list of waypoints, w – list of waypoints to be visited)

    0 - route ID

    W3IWI,DRIVWY,.. - list of waypoints

Garmin Features

Garmin receivers support most NMEA messages containing GPS measurements, coordinates and time - GGA, GLL, GSA, GSV, RMC. As well as navigation messages - RMB, BOD

To display these messages, you need to change the interface from “Garmin” to “NMEA” in the receiver settings and possibly set the desired speed. The same speed must be set in the navigation program in the settings of the serial port to which the navigator is connected.

Unfortunately, receivers with a USB port do not support the NMEA protocol, limiting its settings to the Garmin protocol only.

To display information coming to the serial port of the computer, you can use the Windows terminal program, or one of the navigation programs that support this feature.

Below is a list of Garmin eMap receiver NMEA messages that are contained within the same epoch.

$GPRMC,135412,A,5522.8973,N,03710.1401,E,0.0,0.0,190507,9.3,E,A*1F

$GPRMB,A,,A,A*0B

$GPGGA,135412,5522.8973,N,03710.1401,E,1,04,5.4,205.2,M,15.8,M,*4A

$GPGSA,A,3,08,13,23,25,5.7,5.4,1.0*3C

$GPGSV,3,1,11,02,15,267,00,03,11,085,45,04,05,236,00,08,39,233,00*77

$GPGSV,3,2,11,10,32,308,00,13,63,109,43,16,17,037,00,23,31,111,38*77

$GPGSV,3,3,11,24,09,343,00,25,66,077,44,27,69,229.00*46

$GPGLL,5522.8973,N,03710.1401,E,135412,A,A*43

$GPBOD,T,M,*47

$PGRME,19.1,M,15.2,M,25.3,M*15

$ PGRMZ,673, f,3*19

$ PGRMM, WGS 84*06

In addition to the standard NMEA messages, Garmin receivers implement their own set of messages, each containing a "GRM" prefix in the header, an "M" or "Z" identifier identifying the data type, and a single character for the name.

PGRME - Position Error Estimation

$PGRME,15.0,M,45.0,M,25.0,M*1C

    15.0,M - estimate of the horizontal positioning error, in meters

    45.0,M - vertical error estimate, in meters

    25.0,M - equivalent spherical positioning error

PGRMZ - altitude measurements

$PGRMZ,93,f,3*21

    93.f is the height value, in pounds

    3 - position measurement conditions (2 - height defined by the user,

    3 - height calculated by GPS)

PGRMM - current datum

$PGRMM,NAD27 Canada*2F

    NAD27 Canada is the name of the current horizontal datum

Sirf Features

Sirf GPS chips are used in various GPS navigation equipment, ranging from conventional boards to portable and car GPS navigators. But unlike navigators, they only support NMEA messages related to GPS measurements, position and time calculation - GGA, GLL, GSA, GSV, RMC, VTG, ZDA.

"Sirf" also supports several "incoming" NMEA messages for configuration and setting various parameters. In addition, "Sirf" implements its own binary protocol, which allows you to change much more settings. These 5 "incoming" NMEA messages start with the $PSFR prefix, according to the rules. All messages contain a fixed set of data and end with "\n" (line feed)

To configure the "Sirf" parameters, a special program "SirfTech" is used. NMEA message settings are configured in a separate menu item.

$GPGGA,100643.000,5522.9036,N,03710.1282,E,1.07,1.6,209.9,M,14.9,M,0000*52

$GPGSA,A,3,31,01,23,20,11,30,14,2.1,1.6,1.4*35

$GPGSV,3,1,12,20,84,187,41,01,49,067,46,23,46,238,45,31,45,073,50*7B

$GPGSV,3,2,12,11,25,194,34,13,16,240,04,15,319,30,17,14,273,21*7A

$GPGSV,3,3,12,30,10,026,33,14,05,063,22,05,04,009,25,25,03,195,*7F

$GPRMC,100643.000,A,5522.9036,N,03710.1282,E,0.16,119.11,200507,*0D

As can be seen from the above example, the "factory" settings contain fewer NMEA messages compared to the Garmin settings. If necessary, this set can be extended by setting the period in the missing NMEA messages.

$GPGGA,100833.000,5522.9076,N,03710.1270,E,1.07,1.3,222.4,M,14.9,M,0000*53

$GPGLL,5522.9076,N,03710.1270,E,100833.000,A*34

$GPGSA,A,3,31,01,23,20,11,30,17,2.1,1.3,1.6*31

$GPGSV,3,1,12,20,84,180,43,01,49,067,47,23,47,238,45,31,45,072,49*77

$GPGSV,3,2,12,11,24,193,26,13,16,240,26,04,15,319,24,17,13,273,31*78

$GPGSV,3,3,12,30,10,025,26,14,04,064,22,25,04,195,05,04,008,21*7C

$GPRMC,100833.000,A,5522.9076,N,03710.1270,E,0.18,4.86,200507,*00

$GPVTG,4.86,T,M,0.18,N,0.3,K*60

$GPZDA,100834.000,20.05.2007,*5A

PSFR100, PSFR102 - serial port configuration

NMEA message number 100 is used to set port A, message 102 - port B. Message 100 has an additional field that allows you to switch the interface to the binary Sirf protocol.

Accordingly, in the binary protocol there is a command that switches the port back to the NMEA format. Before switching to a binary protocol, you need to understand if a program that will later allow you to restore the NMEA protocol.

$PSRF100.0.9600.8.1.0*0C

$PSRF102.9600.8.1.0*3C

    PSRF100 - NMEA header

    0 - parameter indicating in which mode the protocol was changed (0-Sirf, 1-NMEA)

    9600 - port speed (4800, 9600, 19200, 38400)

    8 - data bits (7, 8)

    1 - stop bits (0,1)

    0 - pairing (0 - no, 1-odd, 2-even)

PSFR101, PSFR104 - initialization of receiver parameters

NMEA messages numbered 101 and 104 are intended to initialize the parameters intended for GPS reception. Defining these parameters can speed up the acquisition time of GPS satellites. Message 101 sets the current coordinates in XYZ format, message 104 - in BLH (longitude, latitude) format.

$PSRF101,-2686700,-4304200.3851624.95000.497260.921.12.3*22

$PSRF104.37.3875111,-121.97232.0.95000.237759.922.12.3*3A

    PSRF101 - NMEA header

    37.3875111 - latitude in degrees

    121.97232 - longitude in degrees

    0 - height, in meters

    95000 - clock shift

    237759 - GPS time, in seconds

    922 - GPS week number

    12 - number of channels

    3 – type of data initialization (1 – hot start, 2 – warm start, 3 – data initialization, 4 – cold start with complete data clearing, 8 – cold start with restoration of factory settings)

PSFR103 - NMEA message generation configuration

This NMEA message allows you to set or query the generation period for each "outgoing" NMEA message.

$PSRF103.05.00.01.01*20

    PSRF103 - NMEA header

    05 - message title

    01 - period, in seconds (0-255)

    01 – presence of a checksum (0- yes, 1 - no)

Experiment results

Under normal satellite visibility conditions, the Garmin eMap receiver outputs the following set of NMEA messages:

$GPRMC,104644,A,5522.8965,N,03710.1389,E,0.0,0.0,200507,9.3,E,A*16

$GPRMB,A,,A,A*0B

$GPGGA,104644,5522.8965,N,03710.1389,E,1,07,1.2,186.6,M,15.8,M,*44

$GPGSA,A,3,01,04,13,16,20,23,31,2.1,1.2,1.7*35

$GPGSV,3,1,10,01,34,070,48,04,28,311,40,11,10,190,00,13,32,249,41*7E

$GPGSV,3,2,10,16,11,111,40,20,68,142,50,23,64,247,49,25,21,196.00*70

$GPGSV,3,3,10,30,05,012,00,31,36,055,52*7D

$GPGLL,5522.8965,N,03710.1389,E,104644,A,A*40

$GPBOD,T,M,*47

$PGRME,6.0,M,7.7,M,9.8,M*29

$PGRMZ,612,f,3*1E

$PGRM,WGS 84*06

$GPRTE,1,1,c,*37

From the analysis of the messages, it can be seen that at the moment the receiver is tracking 10 (GSV) satellites, of which 7 (GGA) are used in position calculation. The horizontal position error is 6 meters (RME) and the solution type indicator is 1 (GGA)

If you create conditions under which the GPS signal will not be received, then the GGA messages will contain "empty" fields, and the solution type indicator will take the value 0 (GGA)

$GPGGA,0.00,M,M,*66

$GPGSA,A,1,,*1E

In "normal" mode, RMB and BOD messages contain empty fields. Once the Waypoint "Road" was selected as the final destination, these fields were "populated" with data. As follows from the analysis of the message, the distance to the point is 1.620 miles, the movement azimuth is 6.3 degrees (BOD). In this case, the azimuth of BOD and RMB messages differs by 0.1 degrees.

$GPRMB,A,0.00,R,Road,5524.501,N,03710.445,E,1.620,6.4,V,A*59

$GPBOD,6.3,T,357.0,M,Road,*74

After the Home route was selected for navigation, a list of all route waypoints was displayed in the RTE message list. And in the RMB message - the identification numbers of the starting and ending (next) points of the route.

$GPRTE,1,1,c,HOME,SLOBODA,IERUSALIM,INSTITUT*01

$GPRMB,A,9.99,R,SLOBOD,IERUSAL,5555.237,N,03649.976,E,34.346,340.6,V,A*1F

Conclusion

In most cases, the user does not need, and is not interested to know what data and in what fields are transmitted. Most navigation programs "parse" the NMEA message data and present it in a user-friendly form - graphs, charts, tables, etc.

Of particular interest are NMEA messages for users who would like to study GPS data, calculate an estimate of the received measurements, or analyze the behavior of navigation receivers in various conditions. There are a number of programs with which you can solve these problems.

But still, for deep analysis of GPS data, the NMEA format is not intended, since it does not contain the so-called "raw" measurements - pseudorange, phase, doppler. Each manufacturer of navigation equipment has its own "open" or "closed" protocol that outputs this information.

NMEA is a simple and understandable format that not only allows the exchange of data between GPS receivers and navigation programs, but also gives users some idea of ​​​​the principles of operation of satellite navigation equipment.

Attention!

As source material used article from the site " GPS portal"