Parse UDD data

Example of parsing data of the OPVT and OPVT2AHR data formats

Last Updated: September 2023

In today’s digitized landscape, understanding how to parse data efficiently is crucial for many applications. Among the myriad data formats, the OPVT and OPVT2AHR stand out as unique entities, often necessitating specialized treatment for accurate interpretation. This article sheds light on these particular formats, providing an illustrative example of how to handle and decode the intricate structures embedded within them. Whether you’re a seasoned data analyst or a curious beginner, this introduction aims to pave the way for a deeper exploration into the nuances of OPVT and OPVT2AHR data parsing.

Example of parsing data of the OPVT and OPVT2AHR data formats
Fig.1 The INS byte structure

All commands and messages start with the header AA 55. Therefore, the customer can distinguish between them by looking for this header. Below is a screenshot of the data received from the device after the INS OPVT command was sent:

Example of parsing data of the OPVT and OPVT2AHR data formats
Fig. 2 OPVT data format message

1 – Response to the INS OPVT Command

2 – The end of the Initial Alignment Block – see Table 6.86 of the INS ICD

3 – The end of the first INS OPVT Packet – see Section 6.2.1 of the INS ICD

4 – The end of the second INS OPVT Packet

5 – The end of the third INS OPVT Packet

Example of Parsing of the third INS OPVT Packet

Message:

AA 55 01 52 62 00

9F 8C 12 00 1D 00 03 00 00 00 FF FF F8 FF 06 00

CC 07 EB F4 CD FA BA EF 00 00 78 09 02 01 BC AB

55 17 44 40 BC D1 2B 3A 00 00 FF FF FF FF 00 00

00 00 00 00 00 00 BC AB 55 17 44 40 BC D1 2B 3A

00 00 02 00 00 00 5E 73 00 00 00 00 A7 48 B1 18

01 0C 20 00 00 4A C3 12 3A 00 00 00 52 1D

AA 55 – Header 

01 – Message type(uint8)

52 – Message identifier (uint8) (code of the INS OPVT output format)

62 00 – Message length(uint16). 62 00 Hex little endian -> 00 62 – Hex little endian converted to Hex big endian -> 98 – Hex big endian converted to decimal -> total 98 bytes in the packet (does not include AA 55)

9F 8C – Heading (uint16). 9F 8C – Hex little endian -> 8C 9F – Hex little endian converted to Hex big endian -> 35999 – Hex big endian converted to decimal ->   35999/100 apply scale factor (see table 6.5) ->  359.99 deg  

This approach of parsing data applies to the rest of the message.

12 00 – Pitch(int16). 12 00 -> 00 12 -> 18/100=0.18 deg 

1D 00 – Roll(int16). 1D 00 -> 00 1D ->29/100=0.29deg

 

GyroX/Y/Z parameters apply scale factor KG, and for AccX/Y/Z parameters apply scale factor KA. Send the following command to read KG and KA scale factors from the INS:

AA 55 00 00 08 00 B1 7A 33 01

Answer to the command and parsing:

AA 55 01 B1 0D 00 7A 06 32 00 05 D0 07 4D 02

AA 55 – Header ()

01 – Message type(uint8)

B1 – Message identifier (uint8)

0D – Message length(uint8)

7A – Parameter code (uint8)

06 IMU Gyro range(uint8). 450 deg/sec (See table 6.97 of the INS ICD)

32 00 – Scale factor for gyro data (uint8) . 32 00-> 00 32 -> 50

05 – IMU accelerometer range (uint8). 15 g (See table 6.97 of the INS ICD)

D0 07 – Scale factor for accelerometer data(uint16). D0 07->07 D0-> 2000

4D 02 – Checksum(uint16) – the sum of all bytes except AA 55.

 

03 00 – GyroX(int16). 03 00 -> 00 03 -> 3/50= 0.06 deg/s 

00 00 – GyroY(int16). 00 00 -> 00 00 -> 0 deg/s 

FF FF – GyroZ(int16). FF FF  -> FF FF -> -1/50= -0.02 deg/s 

F8 FF – AccX(int16). FF F8 -> FF F8 -> -8/2000=-0.004 g

06 00 – AccY(int16). 06 00  -> 00 06 -> 6/2000= 0.003 g 

CC 07 – AccZ(int16). CC 07  -> 07 CC ->1996/2000 = 0.998 g 

EB F4 – MagX(int16). EB F4-> F4 EB -> -2837*10= -28370 nT 

CD FA – MagY(int16). CD FA  -> FA CD-> -1331*10= -13310 nT 

BA EF – MagZ(int16). BA EF  -> EF BA -> -4166*10= -41660 nT 

00 00  USW(uint16). See section 6.10 of the INS ICD for details. Note the non-zero value of the USW indicates the warning or the issue with the device.

78 09 – Vinp(uint16). 78 09  -> 09 78-> 2424/100 =24.24 VDC  

02 01 – Temper(int16). 02 01 -> 01 02 -> 259/10= 25.8 °C

BC AB 55 17 – Latitude(int32).  BC AB 55 17 -> 17 55 AB BC -> 391494827/1.0e7= 39.1494827 deg

44 40 BC D1 –  Longitude(int32). 44 40 BC D1 -> D1 BC 40 44 -> -776191932/1.0e7=-77.6191932 deg 

2B 3A 00 00 – Altitude(int32). 2B 3A 00 00 -> 00 00 3A 2B -> 14891/100= 148.91 m

FF FF FF FF – East Speed(int32). FF FF FF FF->FF FF FF FF-> -1/100 = -0.01 m/s 

00 00 00 00 – North Speed(int32). 00 00 00 00 -> 0m/s 

00 00 00 00 – Vertical Speed(int32). 00 00 00 00 -> 0m/s 

BC AB 55 17 – Latitude GNSS(int32). -> 17 55 AB BC-> 391494827/1.0e7= 39.1494827 deg

44 40 BC D1 – Longitude GNSS(int32). -> D1 BC 40 44 -> -776191932/1.0e7=-77.6191932  deg

2B 3A 00 00 – Altitude GNSS (int32). -> 00 00 3A 2B -> 14891/100= 148.91 m

02 00 00 00 – Horizontal speed GNSS(int32). 02 00 00 00-> 00 00 00 02 -> 2/100= 0.02 m/s 

5E 73 – Track over ground GNSS(uint16). 5E 73 -> 73 5E-> 29534/100= 295.34 deg 

00 00 00 00 – Vertical speed GNSS(int32).  00 00 00 00 -> 0m/s 

A7 48 B1 18 – ms_gps(uint32). A7 48 B1 18 -> 18 B1 48 A7-> 414271655 ms

01 – GNSS_info1(uint8).  01 -> 1 

0C – GNSS_info2(uint8). oC  -> 12 

20 – #solnSVs(uint8). 20 -> 32 

00 – Latency ms_pos(uint8). 0 -> 0 ms 

00 – Latency ms_vel()(uint8). 0 -> 0 ms

4A C3 – P_bar(uint16). 4A C3 -> C3 4A -> 49994*2= 99988 Pa

12 3A 00 00 –   H_bar(int32). 12 3A 00 00 -> 00 00 3A 12 -> 14866/100= 148.66 m

00 – New GPS(uint8).  0 -> 0 

52 1D – Checksum(uint16) – the sum of all bytes except AA 55.

Below is a screenshot of the data received from the device after the INS OPVT2AHR command was sent:

Example of parsing data of the OPVT and OPVT2AHR data formats
Fig. 3 OPVT2AHR data format message

1 – Response to the INS OPVT2AHR Command

2 – The end of the Initial Alignment Block – see Table 6.86 of the INS ICD

3 – The end of the first INS OPVT2AHR Packet – see Section 6.2.5 of the INS ICD

4 – The end of the second INS OPVT2AHR Packet

5 – The end of the third INS OPVT2AHR Packet

Example of Parsing of the second INS OPVT Packet

Message:

AA 55 01 58 87 00 00 00 11 00 1F 00 E0 1A 00 00

11 01 00 00 12 FE FF FF 4D ED FF FF 41 0D 00 00

63 3B 0F 00 D8 F6 EB F8 CF EE 00 00 78 09 0E 01

4F 2B 77 1D 09 00 00 00 99 21 89 ED ED FF FF FF

C4 4A 02 00 00 00 00 00 FF FF FF FF 00 00 00 00

4F 2B 77 1D 09 00 00 00 99 21 89 ED ED FF FF FF

C4 4A 02 00 01 00 00 00 7D 49 00 00 00 00 E4 EF

BE 17 01 0C 1E 00 00 64 00 00 00 00 B0 FF B0 FF

FF C3 A5 3A 00 00 00 D6 2D

AA 55 – Header 

01 – message type(uint8)

58 – message identifier(uint8) (code of the INS OPVT2AHR output format)

87 00 – message length(uint16). 87 00 – Hex little endian -> 00 87 – Hex little endian converted to Hex big endian -> 135 – Hex big endian converted to decimal -> total 135 bytes in the packet (does not include AA 55)

00 00 Heading(uint16). 0 deg

11 00 Pitch(int16). 11 00 – Hex little endian -> 00 11 – Hex little endian converted to Hex big endian ->17 – Hex big endian converted to decimal -> 17/100 – apply scale factor (see table 6.13)=0.17 deg

This approach of parsing data applies to the rest of the message.

1F 00  Roll(int16). 1F 00 -> 00 1F-> 31/100=0.31 deg

E0 1A 00 00 GyroX(int32).E0 1A 00 00 -> 00 00 1A E0 -> 6880/1.0e5= 0.0688 dps 

11 01 00 00 GyroY(int32). 11 01 00 00 -> 00 00 01 11 -> 273/1.0e5= 0.00273 dps 

12 FE FF FF GyroZ(int32). 12 FE FF FF -> FF FF FE 12 -> -494/1.0e5= -0.00494 dps 

4D ED FF FF Acc X(int32). 4D ED FF FF -> FF FF ED 4D -> -4787/1.0e6=-0.004787 g 

41 0D 00 00 Acc Y(int32). 41 0D 00 00 -> 00 00 0D 41-> 3393/1.0e6=0.003393 g  

63 3B 0F 00 Acc Z(int32). 63 3B 0F 00 -> 00 0F 3B 63-> 998227/1.0e6= 0.998227 g 

D8 F6 MagX(int16). D8 F6 -> F6 D8 -> -2344*10=-23440 nT  

EB F8 MagY(int16). EB F8 -> F8 EB -> -1813*10=-18130 nT 

CF EE MagZ(int16). CF EE -> EE CF -> -4401*10=-44010 nT  

00 00  USW(uint16). See section 6.10 of the INS ICD for detailes. Note the non-zero value of the USW indicates the warning or the issue with the device.

78 09 – Vinp(). 78 09 -> 09 78 -> 2424/100 =24.24 VDC

0E 01 – Temper(). 0E 01 -> 01 0E -> 270/10 = 27 °C

4F 2B 77 1D 09 00 00 00 – Latitude(int64). 4F 2B 77 1D 09 00 00 00 ->  00 00 00 09 1D 77 2B 4F =39149054799/1.0e9= 39.149054799deg

99 21 89 ED ED FF FF FF – Longitude(int64). 99 21 89 ED ED FF FF FF -> FF FF FF ED ED 89 21 99 = -77619191399/1.0e9= -77.619191399 deg

C4 4A 02 00 – Altitude(int32). C4 4A 02 00 -> 00 02 4A C4 – 150212/1000= 150.212 m 

00 00 00 00 East speed(int32). 0 m/s 

FF FF FF FF –  North speed(int32). FF FF FF FF -> FF FF FF FF -> -1/100 = -0.01 m/s 

00 00 00 00 –  Vertical speed(int32).  0 m/s 

4F 2B 77 1D 09 00 00 00 – LatitudeGNSS(int64). 4F 2B 77 1D 09 00 00 00 -> 00 00 00 09 1D 77 2B 4F =39149054799/1.0e9= 39.149054799 deg

99 21 89 ED ED FF FF FF – LongitudeGNSS(int64). 99 21 89 ED ED FF FF FF -> FF FF FF ED ED 89 21 99 = -77619191399/1.0e9= -77.619191399 deg

C4 4A 02 00 – AltitudeGNSS(int32).C4 4A 02 00 -> 00 02 4A C4 – 150212/1000= 15.0212 m 

01 00 00 00 –  Horizontal speed GNSS(int32). 01 00 00 00 -> 00 00 00 01 -> 1/100= 0.01 m/s

7D 49 –  Track over ground GNSS(uint32). 7D 49 -> 49 7D -> 18813/100= 188.13 deg 

00 00 00 00 –  Vertical speed GNSS(int32).   0 m/s

E4 EF BE 17 ms_gps(uint32). E4 EF BE 17 -> 17 BE EF E4 -> 398389220 ms 

01 – GNSS_info1(uint8). 01 -> 1 

0C –  GNSS_info2(uint8). 0C -> 12 

1E – soInSVs(uint8). 1E -> 30  

00 00 – V_latency(uint16). 0 s 

64 – Angles position type(uint8). 64 -> 100

00 00 – Heading GNSS(uint16). 0 deg

00 00 – Latency ms_head(int16). 0 ms 

B0 FF – Latency ms_pos(int16). B0 FF -> FF B0 -> -80 ms 

B0 FF – Latency ms_vel(int16). B0 FF -> FF B0 -> -80 ms 

FF C3 – P_bar(uint16). FF C3 -> C3 FF -> 50175*2= 100350 Pa 

A5 3A 00 00 – H_bar(int32). A5 3A 00 00 -> 00 00 3A A5 -> 15013/100=150.13 m 

00 – New GPS(uint8). 0 

D6 2D – Checksum(uint16)

For any additional questions, please email support@inertiallabs.com

Website maintenance has been scheduled for Sunday, April 2 from 7 am to 9 pm EDT.
The resource may be unavailable at this time. Please accept our apologies for any inconvenience.