Whether you are a data analyst, software developer, or IT professional, understanding how to effectively configure, check, and parse User Defined Data (UDD) output format is essential for maintaining the integrity and utility of the data you work with. This article will serve as a comprehensive guide to navigating the intricacies of the UDD format.
We will begin by exploring the configuration process, detailing the steps and considerations necessary to set up a UDD-compliant system. This will include an overview of the tools and environments best suited for handling UDD files. Following that, we will delve into the methods for checking UDD data, which is a critical step to validate the structure and content against the defined schema, ensuring that the data adheres to the expected format before it is processed or consumed by downstream systems.
Lastly, parse UDD data is where the practicality of this format truly comes to life. Parsing transforms raw data into a structured and usable form, enabling applications to manipulate and analyze the data effectively. We will examine the parsing techniques and provide insights into best practices for extracting information from UDD data formats effectively.
UDD is an output format where the user can choose desirable INS data for output. Table 6.30 of the INS ICD shows the full list of data that a user can choose. Table 6.31 of the INS ICD gives a detailed description of each data type.
The article provides information about configuring, checking, and parsing the INS UDD data format. The byte structure for all messages and commands to/from the INS corresponds to Table 6.2 of the INS ICD.
To set the necessary data types for the UDD output, the User_Def_Data_config command (code 0x96 in the “Payload” field) should be sent, followed by the message with the block of parameters whose byte structure corresponds to Table 6.2, where the payload is shown in Table 6.80. This message should be sent without pause after sending the User_Def_Data_config command.
Below is an example of the User_Def_Data_config command and the message with the block of parameters used in the article:
AA 55 00 00 07 00 96 9D 00 – UDD_config command
AA 55 00 00 13 00 0C 04 08 21 23 11 12 50 52 53 54 37 41 53 02 – the message with the block of parameters listed in Table 6.80.
In this article we chose the following data to output:
04 – UTC
08 – Orientation angles HR
21 – Gyro data HR
23 – Accelerometer data HR
11 – Position HR
12 – Velocities
50 – Supply voltage
52 – Temperature
53 – Unit status word (USW)
54 – INS solution status
37 – Full satellites info
41 – New GPS
The INS calculates the check sum of the received message with parameters and returns it for checking. Additionally, the INS checks the correctness of the list of data types. The byte structure of the INS answer corresponds to Table 6.2, where the payload is shown in Table 6.81.
The answer to the UDD_config command and the message with the block of parameters:
AA 55 01 96 0E 00 53 02 00 00 00 C8 00 00 C2 01
The Get_User_Def_Data_struct command (code 0x97 in the “Payload” field) can be sent from the host computer to check the “User Defined Data” structure set by the previous user. In answer to this command, the INS sends out the message with information shown in Table 6.80. This message has the byte structure shown in Table 6.2.
AA 55 00 00 07 00 97 9E 00 – Get_User_Def_Data_struct command.
Answer to the Get_User_Def_Data_struct command:
AA 55 01 00 13 00 0C 04 08 21 23 11 12 50 52 53 54 37 41 54 02
Below is a screenshot of the data received from the device after the INS UDD command was sent:
1 – Response to the INS UDD Command
2 – The end of the Initial Alignment Block – see Table 6.86 of the INS ICD
3 – The end of the first INS UDD Packet – see Section 6.2.12 of the INS ICD
4 – The end of the second INS UDD Packet
5 – The end of the third INS UDD Packet
Example of Parsing of the second INS UDD Packet
Message:
AA 55 01 95 70 00 0C 04 08 21 23 11
12 50 52 53 54 37 41 13 0F 06 91 03 0A 05 E7 07
3F 7E 05 00 B1 00 00 00 47 01 00 00 67 08 00 00
CC FF FF FF A3 07 00 00 58 EA FF FF 9E 0D 00 00
05 2B 0F 00 44 14 77 1D 09 00 00 00 1C 25 89 ED
ED FF FF FF 99 4A 02 00 00 00 00 00 00 00 00 00
00 00 00 00 77 09 07 01 00 00 03 1F 1F 00 00 00
00 B4 00 00 BE 18
AA 55 – Header
01 – Message type (uint8)
95 – Message identifier (uint8) (code of the INS OPVT output format)
70 00 – Message length(uint16). 70 00 Hex little endian -> 00 70 – Hex little endian converted to Hex big endian -> 112 – Hex big endian converted to decimal -> total 112 bytes in the packet (does not include AA 55)
This approach of parsing data applies to the rest of the message.
0C – Number of data packages(uint8). 0С -> 12 -> total 12 data packages in the message
04 – UTC(uint8)
08 – Orientation angles HR(uint8)
21 – Gyro data HR(uint8)
23 – Accelerometer data HR(uint8)
11 – Position HR(uint8)
12 – Velocities(uint8)
50 – Supply voltage(uint8)
52 – Temperature(uint8)
53 – Unit status word (USW)(uint8)
54 – INS solution status(uint8)
37 – Full satellites info(uint8)
41 – New GPS
13 0F 06 91 03 0A 05 E7 07 – UTC package:
13 – UTC hours(uint8). 13 -> 19
0F – UTC minutes(uint8). 0F -> 15
06 – UTC seconds(uint8). 06 -> 6
91 03 – UTC decimal seconds(uint16).91 03 -> 03 91 -> 913
0A – UTC month(uint8). 0A -> 10
05 – UTC day(uint8). 05 -> 5
E7 07 – UTC year(uint16). E7 07 -> 07 E7 -> 2023
3F 7E 05 00 B1 00 00 00 47 01 00 00 – Orientation angles HR:
3F 7E 05 00 – Heading(uint32). 3F 7E 05 00 – Hex little endian -> 00 05 7E 3F – Hex little endian converted to Hex big endian -> 359999 – Hex big endian converted to decimal -> 359999 /1000 – apply scale factor (see table 6.31)=359.999 deg
This approach of parsing data applies to the rest of the message.
B1 00 00 00 – Pitch(int32). B1 00 00 00 -> 00 00 00 B1 -> 177 -> 177/1000 = 0.177 deg
47 01 00 00 – Roll(int32). 47 01 00 00 -> 00 00 01 47-> 327/1000 = 0.327 deg
67 08 00 00 CC FF FF FF A3 07 00 00 – Gyro data HR package:
67 08 00 00 – Gyro X(int32). 67 08 00 00 -> 00 00 08 67 -> 2151/1.0e5= 0.02151 dps
CC FF FF FF – Gyro Y(int32). CC FF FF FF -> FF FF FF CC-> -52/1.0e5= -0.00052 dps
A3 07 00 00 – Gyro Z(int32). A3 07 00 00 -> 00 00 07 A3 -> 1955/1.0e5= 0.01955 dps
58 EA FF FF 9E 0D 00 00 05 2B 0F 00 – Accelerometer data HR package:
58 EA FF FF – Acc X(int32). 58 EA FF FF -> FF FF EA 58 -> -5544/1.0e6=-0.005544 g
9E 0D 00 00 – Acc Y(int32). 9E 0D 00 00 -> 00 00 0D 9E-> 3486/1.0e6=0.003486 g
05 2B 0F 00 – Acc Z(int32). 05 2B 0F 00 -> 00 0F 2B 05-> 994053/1.0e6= 0.994053 g
44 14 77 1D 09 00 00 00 1C 25 89 ED ED FF FF FF 99 4A 02 00 – Position HR package:
44 14 77 1D 09 00 00 00 – Latitude(int64). 44 11 77 1D 09 00 00 00 -> 00 00 00 09 1D 77 14 44 =39149048900/1.0e9= 39.149048900deg
1C 25 89 ED ED FF FF FF – Longitude(int64). 1C 25 89 ED ED FF FF FF -> FF FF FF ED ED 89 25 1C = -77619190500/1.0e9= -77.619190500 deg
99 4A 02 00 – Altitude(int32). 99 4A 02 00 -> 00 02 4A 99 -> 150169/1000= 150.169 m
00 00 00 00 00 00 00 00 00 00 00 00 – Velocities package:
00 00 00 00 – East speed(int32). 0 m/s
00 00 00 00 – North speed(int32). 0 m/s
00 00 00 00 – Vertical speed(int32). 0 m/s
77 09 – Supply voltage(uint8). 77 09 -> 09 77 -> 2423/100 =24.23 VDC
07 01 – Temperature(int8). 07 01 -> 01 07 -> 263/10 = 26,3 °C
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.
03 – INS solution status(uint8). See section 6.16 of the INS ICD for details.
1F 1F 00 00 00 00 B4 00 – Full satellites info package–:
1F – #SVs(uint8). 1F -> 31
1F – #SolnSVs(uint8). 1F -> 31
00 – #SolnL1SVs(uint8). 0
00 – #SolnMultiSVs(uint8). 0
00 –Galileo and BeiDou signal-used mask (see Table 6.21)(uint8).
00 – GPS and GLONASS signal-used mask (see Table 6.20)(uint8).
B4 – GPS time status (see Table 6.25)(uint8). B4 -> 180 – Time is fine set and is being steered
00 – Extended solution status (Table 6.19)(uint8).
00 – New GPS(uint8). 0
BE 18 – Checksum(uint16)