PVA File
The PVA binary format is directly supported by Waypoint’s inertial processing engines. It is used to store external coordinate updates. Two types of update are supported: absolute (CUPTs) and relative position updates. Each PVA file can only have a single update type. Absolute CUPTs provide updates in geographic frame, whereas relative position updates provide the translation vector between two epochs in the ENU or body frame.
If you have any questions, contact NovAtel Support at support.novatel@hexagon.com.
File Header
This header appears once at the start of the file. The position reference location defaults to IMU.
Field |
Variable Name |
Type |
Description |
Bytes |
---|---|---|---|---|
1 |
szHdr[12] |
char |
Must be "$PVABIN\r\n\0" |
12 |
2 |
usFileVersion |
uint16_t |
File version, set to 1 |
2 |
3 |
usHdrSize |
uint16_t |
Size of file header, set to 3848 bytes |
2 |
4 |
usFileType |
uint16_t |
File type, set to 1 |
2 |
5 |
usVersion[3] |
uint16_t |
Version numbers of creating program [major, minor, build] |
6 |
6 |
szProgramName[32] |
char |
Name of program that created file |
32 |
7 |
ulNumRec |
uint32_t |
Number of records (set to 0 for auto-detect) |
4 |
8 |
usRecSize |
uint16_t |
Size of each record, set to 232 bytes |
2 |
9 |
usReserved1[6] |
uint8_t |
Reserved (set to 0) |
6 |
10 |
usPosSys |
uint16_t |
Position coordinate system GEOGRAPHIC=0 (for absolute updates) ENU=2 (for relative updates) BODY=3 (for relative updates) |
2 |
11 |
usReserved2[6] |
uint8_t |
Reserved (set to 0) |
6 |
12 |
usOffsetAvail |
uint16_t |
Must be set to 1 |
2 |
13 |
usReserved3[3770] |
uint8_t |
Reserved (set to 0) |
3770 |
Total size = 3848 bytes
If the position reference location is not the IMU, shift the location from sensor to IMU by adding the PVA_LEVER user command to the project:
-
PVA_LEVER = [ON/OFF] [x] [y] [z] (in meters)
-
The offsets are body-frame lever arm values.
-
Input Data Record
This record repeats for every PVA data record.
Field |
Variable Name |
Type |
Description |
Bytes |
|
---|---|---|---|---|---|
Absolute Update |
Relative Update |
||||
1 |
dUpdateTime |
double |
TOW (s) |
TOW (s), end of update |
8 |
2 |
dRelStartTime |
double |
Set to 0 |
Start of update in TOW (s) |
8 |
3 |
usUpdateWeek |
uint16_t |
GPS week number |
End of update week number |
2 |
4 |
usRelStartWeek |
uint16_t |
Set to 0 |
Start of update week number |
2 |
5 |
uUpdate |
uint32_t |
Update flag/type, refer to Update Bit Definitions |
4 |
|
6 |
szID[16] |
char |
Optional event 'ID', max 15 characters, NULL to terminate string |
16 |
|
7 |
usCheck |
uint16_t |
Must be 0xC0DE, used as internal check for file validity |
2 |
|
8 |
usReserved1[6] |
uint8_t |
Reserved (set to 0) |
6 |
|
9 |
dPos[3] |
double |
Geographic coordinate [deg] |
Delta in East, North, Up [m] (if header usPosSys==ENU) Delta in X, Y, Z [m] (if header usPosSys==BODY) |
24 |
10 |
usReserved2[36] |
uint8_t |
Reserved (set to 0) |
36 |
|
11 |
fPosSD[3] |
float |
SD values for position in East, North, Up direction (m) |
12 |
|
12 |
usReserved3[24] |
uint8_t |
Reserved (set to 0) |
24 |
|
13 |
sCCUpperDiag[9] |
int16_t |
Optional, set to 0 if unknown Off-diagonal correlation coefficients * sCCUpperDiag[0] = pxpy sCCUpperDiag[1] = pxpz sCCUpperDiag[8] = pypz |
18 |
|
14 |
usReserved4[70] |
uint8_t |
Reserved (set to 0) |
70 |
Total size = 232 bytes
* The off-diagonal correlation coefficients are defined as:
cc = cov[i][j] / (sd_i * sd_j) scale to a signed 16-bit integer using the scale factor 65536.0
cc_int = (int) cc_float * 65536.0, so it will be [-1, 1] after scaling
Update Bit Definitions
Use the update bit definitions to define the update flag/type.
Name |
Hex Value |
Description |
---|---|---|
PVA_UPDATE_NONE |
0 |
No update |
PVA_UPDATE_POS |
1 |
Absolute position update |
PVA_UPDATE_RELATIVE |
8 |
Relative position update |