ANavS® Binary Solution Output Format

The sensor fusion solution provides two different output-streams for the position, attitude, velocity and many more states of solution and quality of solution.
By default it’s possible to configure the hardware to write to a file and/or to broadcast the solution per TCP on a customizable port (standardt-port: 6001). To stream the solution per WLAN or Ethernet, you need additionally to the defined port-number the IP-adress of your MSRTK Module, which is by default 192.168.42.1 (in case you are connected with WLAN-AP “ANavS_MSRTK_AP”).

The ANavS® sensor fusion framework provides two different protocols for the solution output, the standardized NMEA-Format and the proprietary binary protocol. In the following, the ANavS® binary protocol is described.

ANavS® Binary Protocol

The Binary Protocol is defined as follows:

Structure:

Synch-Char-1

Synch-Char-2

Class

ID

Length

Payload

Checksum A

Checksum B

Bytes:

1 Byte

1 Byte

1 Byte

1 Byte

2 Byte

Length-Byte

1 Byte

1 Byte

The endianness of Length and the following Payload is little endian. The payload is of Length. The checksum is calculated with the 8-Bit Fletcher algorithm over Class, ID, Length and Payload with modulo 256. The ANavS® binary protocol message can be identified by Sync Char 1 = 0xB5 (dec 181), Sync Char 2 = 0x62 (dec 98), Class = 0x02 (dec 2) and Id = 0xE0 (dec 224). In the following, the type double has 8 bytes. If a variable in the Payload is given in the NED frame, the variable has three components (hence 3 times the data type, e.g. 3*double), where the components are north, east and down. This also holds for the body frame, which is the fixed frame of the rover, and where the components are given in x, y and z.

The Payload is given as:

Size

Scaling

Name

Unit

Description

uint8

–

id

–

Identifier of the system/the ANavS Position and Attitude Determination (PAD) solution.

uint16

–

resCode

–

Result code bitfield, which keeps
the system status and information.

uint16

–

week

–

Week number of the current epoch.

double

–

tow

s

Time of Week of the current epoch.

uint16

–

weekInit

–

Week number of the epoch when the
system was started.

double

–

towInit

s

Time of Week of the epoch when the
system was started.

int16

–

–

–

Reserved

double

–

lat

deg

Latitude.

double

–

lon

deg

Longitude.

double

–

height

m

Height

double

–

ECEF-X

m

X-position in ECEF-coordinate frame

double

–

ECEF-Y

m

Y-position in ECEF-coordinate frame

double

ECEF-Z

m

Z-position in ECEF-coordinate frame

3*double

–

b

m

Baseline in NED frame spanned by the position given by lat, lon and height, and by the position of the reference station.

3*double

–

bStdDev

m

Standard deviation of the baseline.

3*double

–

vel

m/s

Velocity in NED frame.

3*double

–

velStdDev

m/s

Standard deviation of the velocity.

3*double

–

acc

m/s²

Acceleration in body frame.

3*double

–

accStdDev

m/s²

Standard deviation of the acceleration.

3*double

–

att

deg

Attitude/Euler angles (heading, pitch, roll).

3*double

–

attStdDev

deg

Standard deviation of the attitude.

double

–

accuracy

m

Estimated accuracy of the baseline.

double

–

–

–

Reserved.

5*double

–

timingInfo

s

First double: Elapsed time GNSS;
Second double: Elapsed time IMU;
Third double: Elapsed time Baro;
Fourth double: Elapsed time Odometry

5*double

–

–

–

Reserved

double

–

gnssReception

–

Scalar, which indicates the GNSS signal reception. The value is between 0 and 20, where 20 is the best, i.e. very good conditions.

uint8

–

numSats

–

Number of satellites.

Loop

uint8

–

gnssId

–

Identifier of the GNSS (GPS = 1, SBAS = 2, GLONASS = 4, Galileo = 8).

uint8

–

svId

–

Identifier of the satellite (“PRN”)

double

–

elev

deg

Elevation angle of the satellite.

double

–

azim

deg

Azimuth angle of the satellite.

uint8

–

numRcv

–

Number of GNSS receivers.

Loop

uint8

–

rcvId

–

Identifier of the receiver (unqiue within this system).

char[11]

–

serial

–

Serial number of the receiver (unique).

bool

–

isRefStation

–

Is true, if this receiver is a reference
station (stationary).

uint16

–

week

–

Week number of the current epoch for this receiver. If the following tow is NaN, the weeknumber is not valid!

double

–

tow

s

Time of week of the current epoch for this receiver. Can be NaN, if there are no measurements at this epoch (e.g. commonly for reference station).

double

–

lat

deg

Latitude of this receiver. Only given if the receiver is a reference station, otherwise it is NaN.

double

–

lon

deg

Longitude of this receiver. Only given if the receiver is a reference station, otherwise it is NaN.

double

–

height

m

Height of this receiver. Only given if the receiver is a reference station, otherwise it is NaN.

Tropospheric zenith delay (first double) and its standard deviation (latter double). Currently not in use (Bit 9 is always 0).

Bit 10

2*double

–

Accuracy

m

Accuracy of the baseline (first double) and its standard deviation (latter double). Currently not in use (Bit 10 is always 0).

Bit 11-17

7*double

–

Reserved

–

–

uint8

–

numPhase

–

Number of phase measurements.

Loop

uint8

–

gnssId

–

Identifier of the GNSS.

uint8

–

svId

–

Identifier of the satellite.

uint8

–

freq

–

Frequency band (currently that is 1 (L1)).

Bit 18

2*double

–

ambiguities

cycles

Double difference ambiguities and std. dev.

Bit 19

2*double

–

phaseMp

m

Phase multipath and std. dev.

Bit 20

2*double

–

phaseRes

m

Phase residuals and std. dev.

uint8

–

numCode

–

Number of code measurements.

Loop

uint8

–

gnssId

–

Identifier of the GNSS.

uint8

–

svId

–

Identifier of the satellite.

uint8

–

freq

–

Frequency band (currently that is 1 (L1)).

Bit 21

2*double

–

codeMp

m

First double is code multipath, second its standard deviation.

Bit 22

2*double

–

codeRes

m

First double is code residual, second its standard deviation.

uint8

–

numDoppler

–

Number of Doppler measurements.

Loop

uint8

–

gnssId

–

Identifier of the GNSS.

uint8

–

svId

–

Identifier of the satellite.

uint8

–

freq

–

Frequency band (currently that is 1 (L1)).

Bit 23

2*double

–

doRes

Hz

First double is Doppler residual, second is its standard deviation.

The payload contains loops and conditions. The number of loop iterations and the conditions depends on other payload data. For example, the number of satellites determines, how often the following color-coded data is repeated. For numSats = 2 and p being a pointer to numSats, the following data is given as

Address

Type

Name

p+1

uint8

gnssId1

p+2

uint8

svId1

p+3

double

elev1

p+11

double

azim1

p+19

uint8

gnssId2

p+20

uint8

svId2

p+21

double

elev2

p+29

double

azim2

p+37

uint8

numRcv

For numSats = 0, no satellite position data is transmitted and the next variable would be numRcv. If a condition is fulfilled the following color-coded data is transmitted. For example, if isActive is true, then at least the variables numPhase, numCode and numDoppler are transmitted. If isActive is false, then the end of the UBX message is reached. The bitfield params is also a condition, whose bits determine, whether the following data is transmitted.
Example: Let p being a pointer to isActive with isActive = true, Bit 0 of params is false and Bit 1 is true. Then, p+1 points to the receiver clock error clkErr and not to the absolute position absPos since Bit 0 is false.