NMEA Parser

The NMEA Parser is available here: https://www.unrealengine.com/marketplace/nmea-parser 

Introduction to NMEA message format

The NMEA message was originally developped by the National Marine Electronics Association (NMEA). They provided a specification that defines the interface between various pieces of marine electronic equipment. GPS receiver communication is defined within this specification. Most computer programs that provide real time position information understand and expect data to be in NMEA format. This data includes the complete PVT (position, velocity, time) solution computed by the GPS receiver. The idea of NMEA is to send a line of data called a sentence that is totally self contained and independent from other sentences. There are standard sentences for each device category and there is also the ability to define proprietary sentences for use by the individual company. All of the standard sentences have a two letter prefix that defines the device that uses that sentence type. (For gps receivers the prefix is GP.) which is followed by a three letter sequence that defines the sentence contents.

For instance, the most common NMEA message for GPS, is the GPGGA message. It is formatted this way:

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

Parsing this data and extracting the relevant information from the strings is fastidious. This is why we developed the NMEA Parser to take this kind of strings as input, and produce UObject that can be manipulated directly in the Unreal Engine blueprints.

For instance, we provide directly this GGA message to the NMEA Parser, and we get in return a UGgaSentence object with convenient properties like Latitude which contains the decimal latitude.

More details about the NMEA format can be found here.

Parsing NMEA messages using the NMEA parser (the simple way)

Parsing NMEA sentences using the NMEA Parser is really easy. We just have to follow these steps:

This works but it requires us to know what kind of sentence we are expecting. We could use a switch on the sentence ID but it wouldn’t be really convenient. So to overcome this we can use the listeners.

We may also note that if the sentence is not correctly formatted (for instance, a bad number of fields, a wrong ID, etc.), the result will be an empty sentence object, i a sentence object with only default values.

Parsing NMEA messages using the NMEA parser (the best way)

The first step is the same, we start by constructing an NMEA sentence parser. But then, we add a GGA Listener. The function connected to this event (Print String in the given example) will be called every time that the NMEA sentence parser will parse a GGA sentence. The main benefit here is that we know that the parameter passed to the event is of type GGA sentence, so we don’t have to downcast the object.

Eventually we can remove the listener after, to prevent further calls.

Also note that the listener must be added before a call to Parse.