Message Reference
The SPRINT-Nav provides two methods for streaming output data:
- Using the API (non-guaranteed latency).
- Using the following proprietary Sonardyne navigation messages (for time-critical, low latency vehicle control).
This section defines output messages as implemented on SPRINT-Nav U. For additional message definitions, see the product manual.
Sonardyne Simple Binary Protocol
The Simple Binary Protocol provides a generic wrapper to output messages.
| Data field | LSB/(fixed value) | Range | Data type | Size(Bytes) | Notes |
|---|---|---|---|---|---|
| Header | (0xAA 0xBF) | 0 to 255 | UINT8 | 2 | Header to denote the start of the packet |
| Version | (0) | 0 to 255 | UINT8 | 1 | Version of protocol |
| ID | (0) | 0 to 65535 | UINT16 | 2 | Message ID (HNAV = 0), see Note 1 |
| Size | - | 0 - 4096 | - | 2 | Size of data field in bytes, see note 2 |
| Counter | - | 0 to 255 | - | 1 | Counter per message, increments before rolling over to 0. Allows detection of out of order receipt. |
| Spare | - | - | - | 2 | Not Used |
| Payload | - | - | - | - | Message data (e.g. HNAV) |
| CRC | - | - | UINT16 | 2 | CRC-16/X-25. Covers all bytes before and including data bytes. |
Notes
- Each output message has its own message ID, the message ID of HNAV is 0
- Each output message has a fixed size, the HNAV is 55 bytes
HNAV
The Hybrid Navigation (HNAV) message includes all information required for the majority of vehicle guidance, control, and navigation applications. It utilises scaled fields to reduce size to allow for effective transmission on both Serial and Ethernet. All fields will be initialised to 0. Once a field has been assigned a value, it will retain that value until updated - unless specified otherwise in the definition below. The status bits should be used to determine when data is old/stale. The HNAV requires the Simple Binary Protocol to successfully decode the message. All data is transmitted LSB first.
A C++ HNAV Decoder is available on Sonardyne's Github.
Definition
Simple Binary Protocol ID = 0
Size = 55 bytes
| Data field | LSB/(fixed value) | Range | Data type | Size(Bytes) | Data Source (See Notes) | Notes |
|---|---|---|---|---|---|---|
| Version | 0 | 0 to 255 | UINT8 | 1 | Navigation Algorithm | Version of message |
| Time of Validity (UTC) | 10-6 seconds | - | UINT64 | 8 | Always Available | |
| Latitude | 2-31×90 deg | +/- 90 deg | INT32 | 4 | Navigation Algorithm | |
| Longitude | 2-31×180 deg | +/- 180 deg | INT32 | 4 | Navigation Algorithm | |
| Depth | 1mm | +/- 12,000m | INT32 | 4 | Navigation Algorithm & Sensor | Depth at vehicle CRP, depth from pressure sensor during alignment |
| Altitude | 0.01m | 0 to 600m | UINT16 | 2 | DVL | Altitude is referenced from SPRINT-Nav’s DVL reference point to the seabed and is the mean of all valid beams (not compensated for CRP measurements or pitch and roll). |
| Roll | 0.0055 deg | +/- 180 deg | INT16 | 2 | Navigation Algorithm | Available within 60s of startup |
| Pitch | 0.0055 deg | +/- 90 deg | INT16 | 2 | Navigation Algorithm | Available within 60s of startup |
| Heading | 0.0055 deg | 0 to 360 deg | UINT16 | 2 | Navigation Algorithm | Available within 60s of startup |
| Fwd Velocity | 1mm/s | +/-30m/s | INT16 | 2 | Navigation algorithm | Sourced from DVL during alignment, Hybrid velocities when in Hybrid mode |
| Stbd Velocity | 1mm/s | +/-30m/s | INT16 | 2 | Navigation algorithm | Sourced from DVL during alignment, Hybrid velocities when in Hybrid mode |
| Dwn Velocity | 1mm/s | +/-30m/s | INT16 | 2 | Navigation algorithm | Sourced from DVL during alignment, Hybrid velocities when in Hybrid mode |
| Fwd Ang Rate | 0.011 deg/s | +/-300deg/s | INT16 | 2 | Navigation Algorithm | |
| Stbd Ang Rate | 0.011 deg/s | +/-300deg/s | INT16 | 2 | Navigation Algorithm | |
| Dwn Ang Rate | 0.011 deg/s | +/-300deg/s | INT16 | 2 | Navigation Algorithm | |
| Sound Velocity | 0.03m/s | 1375 to 1900 m/s | UINT16 | 2 | Calculated or Read | As currently in use by the system |
| Temperature | 0.01°C | +/- 100°C | INT16 | 2 | Temperature sensor | Sensor |
| Position Quality | - | - | FLOAT32 | 4 | Navigation Algorithm | 2D Quality (CEP50) |
| Heading Quality | 0.005° | 0 to 180 deg | UINT16 | 2 | Navigation algorithm | Set to 180 during alignment |
| Velocity Quality | 1mm/s | 0 to 30 m/s | UINT16 | 2 | Navigation algorithm | 2D Quality, in vessel frame and based on DVL error velocity when in sensor mode |
| Status | - | - | - | - | See Status table |
Bit Fields
| Status Bit | Field name | Notes/Bit Set |
|---|---|---|
| 0 | System Error | No error reported by system = 0 System Error reported = 1 |
| 1 | Mode | Alignment mode = 0 Navigation mode = 1 |
| 2 | Heading | valid = 0 Invalid = 1 |
| 3 | Altitude | valid = 0 Invalid = 1 |
| 4 | Velocity | valid = 0 Invalid = 1 |
| 5 | Depth | valid = 0 Invalid = 1 |
| 6 | Sound Velocity | valid = 0 Invalid = 1 |
| 7 | Temperature | valid = 0 Invalid = 1 |
| 8 | Spare | Not Used |
| 9 | Position | valid = 0 Invalid = 1 |
| 10 | UTC Time | valid = 0 Invalid = 1 |
| 11 | Spare | Not Used |
| 12 | Spare | Not Used |
| 13 | Spare | Not Used |
| 14 | Spare | Not Used |
| 15 | Spare | Not Used |
Notes on HNAV Bit fields:
Navigation and Hybrid Mode:
- The terms Navigation mode and Hybrid mode are used interchangeably in Sonardyne documentation and refer to the operation of the system once initial system startup and alignment are complete.
Invalid or old:
- HNAV bit field for Altitude will be flagged as invalid (1) if data is invalid or if it is old. These data items are derived purely from the DVL sensor, which will often be configured to a slower update than the HNAV message, therefore the majority of Altitude flags will be marked as invalid.
Status fields:
- Status fields indicate whether data (and associated quality metrics) are suitable for use e.g. as an input to a vehicle control system.
XLHNAV
The Extra Large Hybrid Navigation (XLHNAV) message includes all information required for the majority of vehicle guidance, control, and navigation applications.
It has been designed to use native types that allow the full precision used internally to be output.
Integer fields will be initialised to 0 and floating point fields will be initialised to NaN (Not a Number).
Once a field has been assigned a value, it will retain that value until updated - unless specified otherwise in the definition below.
Single or logically grouped data values have a corresponding timestamp; this can be used from one message to the next to determine when data has been updated.
The XLHNAV requires the Simple Binary Protocol to successfully decode the message.
All data is transmitted LSB first.
Definition
Simple Binary Protocol ID = 1
Size = 595 bytes
| Data Field | Units | Expected Range | Data Source (see notes) | Data Type | Size(bytes) | Notes |
|---|---|---|---|---|---|---|
| Version | N/A | 0 to 255 | N/A | UINT8 | 1 | Currently version is 0 |
| Time of Validity (UTC time) | s | - | N/A | Double | 8 | Relative to 1st Jan 1970 |
| Time of Validity (Instrument time) | s | - | N/A | Double | 8 | |
| UTC Time Source | N/A | Enum | Time System | UINT16 | 2 | Last Used. (0 = None, 1 = ZDA, 2=ZDA+1PPS, 3=1PPS, 4=NTP) |
| UTC Time Sync Quality | s | - | Time System | Float | 4 | |
| Time sync age | s | Time System | Double | 8 | Time since last update applied | |
| Latitude | degs | +/- 90deg | Navigation Algorithm | Double | 8 | |
| Longitude | degs | +/- 180deg | Navigation Algorithm | Double | 8 | |
| Depth | m | Navigation Algorithm | Double | 8 | ||
| Orientation w | Navigation Algorithm | Double | 8 | Quaternion, available within 60s of startup | ||
| Orientation x | Navigation Algorithm | Double | 8 | Quaternion, available within 60s of startup | ||
| Orientation y | Navigation Algorithm | Double | 8 | Quaternion, available within 60s of startup | ||
| Orientation z | Navigation Algorithm | Double | 8 | Quaternion, available within 60s of startup | ||
| Velocity - Vehicle Forward | m/s | Navigation Algorithm | Double | 8 | Sourced from and valid at DVL during alignment | |
| Velocity - Vehicle Starboard | m/s | Navigation Algorithm | Double | 8 | Sourced from and valid at DVL during alignment | |
| Velocity - Vehicle Down | m/s | Navigation Algorithm | Double | 8 | Sourced from and valid at DVL during alignment | |
| Angular Rates - Vehicle Forward | deg/s | Navigation Algorithm | Double | 8 | ||
| Angular Rates - Vehicle Starboard | deg/s | Navigation Algorithm | Double | 8 | ||
| Angular Rates - Vehicle Down | deg/s | Navigation Algorithm | Double | 8 | ||
| Acceleration - Vehicle Forward | m/s/s | Navigation Algorithm | Double | 8 | Valid at IMU measurement point, compensated for gravity | |
| Acceleration - Vehicle Starboard | m/s/s | Navigation Algorithm | Double | 8 | Valid at IMU measurement point compensated for gravity | |
| Acceleration - Vehicle Down | m/s/s | Navigation Algorithm | Double | 8 | Valid at IMU measurement point compensated for gravity | |
| Position Quality (1DRMS) | m | - | Navigation Algorithm | Float | 4 | 2-D |
| Position Quality Error Ellipse Major Axis | m | Navigation Algorithm | Float | 4 | ||
| Position Quality Error Ellipse Minor Axis | m | Navigation Algorithm | Float | 4 | ||
| Position Quality Error Ellipse direction | deg | Navigation Algorithm | Float | 4 | ||
| Depth Quality (std. dev). | m | Navigation Algorithm | Float | 4 | ||
| 2D Velocity Quality (1DRMS) | m/s | Navigation Algorithm | Float | 4 | ||
| 2D Velocity Error Ellipse Major Axis | m/s | Navigation Algorithm | Float | 4 | ||
| 2D Velocity Error Ellipse Minor Axis | m/s | Navigation Algorithm | Float | 4 | ||
| 2D Velocity Error Ellipse Direction | deg | Navigation Algorithm | Float | 4 | ||
| Vertical Velocity Std Dev. | m/s | Navigation Algorithm | Float | 4 | ||
| Heading Quality (std dev) | deg | Navigation Algorithm | Float | 4 | ||
| Heave | m | Navigation Algorithm | Float | 4 | Valid at vehicle CRP not affected by any configured remote point | |
| IMU Bias Stability - Gyro X | Navigation Algorithm | Float | 4 | Mahalanobis distance on bias state update | ||
| IMU Bias Stability - Gyro Y | Navigation Algorithm | Float | 4 | |||
| IMU Bias Stability - Gyro Z | Navigation Algorithm | Float | 4 | |||
| IMU Bias Stability - Accel X | Navigation Algorithm | Float | 4 | |||
| IMU Bias Stability - Accel Y | Navigation Algorithm | Float | 4 | |||
| IMU Bias Stability - Accel Z | Navigation Algorithm | Float | 4 | |||
| Mode Status | n/a | Enum | Navigation Algorithm | UINT16 | 2 | 0 : Awaiting Position, 1 : Aligning, 2: : Navigating |
| DVL Beam 1 TOV (Instrument time) | s | DVL | Double | 8 | Beam number using Sonardyne Beam number convention (note different from PD4) (see manual) | |
| DVL Beam 1 Slant Range | m | DVL | Float | 4 | Compensated for SV Note: Beam angles need to be taken into account and vary on different products (see manual) | |
| DVL Beam 1 XC | DVL | Float | 4 | Cross Correlation is a measure of similarity between the expected and received signal. Excellent values are >90, good values >60 and acceptable values >40 | ||
| DVL Beam 2 TOV (Instrument time) | s | DVL | Double | 8 | ||
| DVL Beam 2 Slant Range | m | DVL | Float | 4 | ||
| DVL Beam 2 XC | DVL | Float | 4 | Cross Correlation is a measure of similarity between the expected and received signal. Excellent values are >90, good values >60 and acceptable values >40 | ||
| DVL Beam 3 TOV (Instrument time) | s | DVL | Double | 8 | ||
| DVL Beam 3 Slant Range | m | DVL | Float | 4 | ||
| DVL Beam 3 XC | DVL | Float | 4 | Cross Correlation is a measure of similarity between the expected and received signal. Excellent values are >90, good values >60 and acceptable values >40 | ||
| DVL Beam 4 TOV (Instrument time) | s | DVL | Double | 8 | ||
| DVL Beam 4 Slant Range | m | DVL | Float | 4 | ||
| DVL Beam 4 XC | DVL | Float | 4 | Cross Correlation is a measure of similarity between the expected and received signal. Excellent values are >90, good values >60 and acceptable values >40 | ||
| Altitude TOV (Instrument time) | s | DVL | Double | 8 | ||
| Altitude | m | DVL | Float | 4 | Mean of valid beams. Valid at DVL. Altitude only considered valid if the DVL observation has passed pre-filter (e.g. observation has / is being presented suitable for use in INS algorithm). | |
| Sound Velocity TOV (Instrument Time) | s | System | Double | 8 | ||
| Sound Velocity | m/s | System | Float | 4 | Sound speed source as configured by the system | |
| Water Temperature TOV (Instrument Time) | s | System | Double | 8 | ||
| Water Temperature | degC | System | Float | 4 | Best available sensor | |
| Error Status | System | UINT32 | 4 | Bit 1: System Error, Bit 2: System Warning, Bit 3-32: Unused | ||
| Aiding Status TOV (Instrument Time) | s | Navigation Algorithm | Double | 8 | Time the follow aiding status data was valid for. | |
| DVL: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| DVL: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| DVL: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| DVL: Normalised Residual | m/s | Navigation Algorithm | Float | 4 | Averaged normalised velocity residual for all accepted DVL observations in the last Kalman filter cycle | |
| DVL: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all DVL observations in the last Kalman filter cycle | ||
| GNSS: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| GNSS: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| GNSS: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| GNSS: Normalised Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised position residual for all accepted GNSS observations in the last Kalman filter cycle | |
| GNSS: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all GNSS observations in the last Kalman filter cycle | ||
| USBL: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| USBL: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| USBL: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| USBL: Normalised Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised position residual for all accepted USBL observations in the last Kalman filter cycle | |
| USBL: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all USBL observations in the last Kalman filter cycle | ||
| XPOS: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| XPOS: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| XPOS: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| XPOS: Normalised Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised position residual for all accepted XPOS observations in the last Kalman filter cycle | |
| XPOS: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all XPOS observations in the last Kalman filter cycle | ||
| XVEL: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| XVEL: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| XVEL: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| XVEL: Normalised Residual | m/s | Navigation Algorithm | Float | 4 | Averaged normalised velocity residual for all accepted XVEL observations in the last Kalman filter cycle | |
| XVEL: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all XVEL observations in the last Kalman filter cycle | ||
| Depth: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | Kalman filter cycle runs at 1Hz | ||
| Depth: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| Depth: Last Observation TOV (Instrument time) | s | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | |
| Depth: Normalised Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised depth residual for all accepted Depth observations in the last Kalman filter cycle | |
| Depth: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all DEPTH observations in the last Kalman filter cycle | ||
| LBL1: Beacon Address | Navigation Algorithm | UINT16 | 2 | LBL1-5 ordered by # of ranges | ||
| LBL1: SLAM Status | Enum | Navigation Algorithm | UINT16 | 2 | 0: Off, 1: Depth SLAM, 2: 2-D SLAM, 3: 3-D SLAM | |
| LBL1: Number of range observations in the last 60s | Navigation Algorithm | UINT16 | 2 | |||
| LBL1: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL1: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL1: Last Observation TOV (Instrument time) | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | ||
| LBL1: Range Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised residual for all accepted LBL1 range observations in the last Kalman filter cycle | |
| LBL1: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all LBL1 range observations in the last Kalman filter cycle | ||
| LBL2: Beacon Address | Navigation Algorithm | UINT16 | 2 | LBL1-5 ordered by # of ranges | ||
| LBL2: SLAM Status | Enum | Navigation Algorithm | UINT16 | 2 | 0: Off, 1: Depth SLAM, 2: 2-D SLAM, 3: 3-D SLAM | |
| LBL2: Number of range observations in the last 60s | Navigation Algorithm | UINT16 | 2 | |||
| LBL2: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL2: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL2: Last Observation TOV (Instrument time) | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | ||
| LBL2: Range Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised residual for all accepted LBL2 range observations in the last Kalman filter cycle | |
| LBL2: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all LBL2 range observations in the last Kalman filter cycle | ||
| LBL3: Beacon Address | Navigation Algorithm | UINT16 | 2 | LBL1-5 ordered by # of ranges | ||
| LBL3: SLAM Status | Enum | Navigation Algorithm | UINT16 | 2 | 0: Off, 1: Depth SLAM, 2: 2-D SLAM, 3: 3-D SLAM | |
| LBL3: Number of range observations in the last 60s | Navigation Algorithm | UINT16 | 2 | |||
| LBL3: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL3: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL3: Last Observation TOV (Instrument time) | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | ||
| LBL3: Range Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised residual for all accepted LBL3 range observations in the last Kalman filter cycle | |
| LBL3: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all LBL3 range observations in the last Kalman filter cycle | ||
| LBL4: Beacon Address | Navigation Algorithm | UINT16 | 2 | LBL1-5 ordered by # of ranges | ||
| LBL4: SLAM Status | Enum | Navigation Algorithm | UINT16 | 2 | 0: Off, 1: Depth SLAM, 2: 2-D SLAM, 3: 3-D SLAM | |
| LBL4: Number of range observations in the last 60s | Navigation Algorithm | UINT16 | 2 | |||
| LBL4: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL4: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL4: Last Observation TOV (Instrument time) | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | ||
| LBL4: Range Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised residual for all accepted LBL4 range observations in the last Kalman filter cycle | |
| LBL4: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all LBL4 range observations in the last Kalman filter cycle | ||
| LBL5: Beacon Address | Navigation Algorithm | UINT16 | 2 | LBL1-5 ordered by # of ranges | ||
| LBL5: SLAM Status | Enum | Navigation Algorithm | UINT16 | 2 | 0: Off, 1: Depth SLAM, 2: 2-D SLAM, 3: 3-D SLAM | |
| LBL5: Number of range observations in the last 60s | Navigation Algorithm | UINT16 | 2 | |||
| LBL5: Number of observations accepted in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL5: Number of observations rejected in last Kalman filter cycle | Navigation Algorithm | UINT16 | 2 | |||
| LBL5: Last Observation TOV (Instrument time) | Navigation Algorithm | Double | 8 | Last observation accepted by INS since start or most recent reset | ||
| LBL5: Range Residual | m | Navigation Algorithm | Float | 4 | Averaged normalised residual for all accepted LBL5 range observations in the last Kalman filter cycle | |
| LBL5: Status Mask | Navigation Algorithm | UINT32 | 4 | OR'd rejection status bits for all LBL5 range observations in the last Kalman filter cycle |
Notes
Data Source
The following provides an overview of the different data sources identified in the table above. Where a note in the table above is available, this supersedes anything in these notes if there is a conflict.
Time System: The time system maintains the relationship between Instrument Time (time since start up) and UTC based on the user configuration. The time system is available and providing status from power on and is not impacted by any resets.
DVL: These data items are derived purely from the DVL sensor, the data parameters will be updated on each DVL observation, which depending on user configuration is either set at a requested frequency or set to use an external trigger.
System: These data items are collated at a system level for use within this and other messages.
Navigation Algorithm: These data items are available when the device has entered Hybrid Mode. If a fallback option is available from a secondary source (e.g. Pressure sensor for Depth), values may be provided when not in Navigation mode. Not all data will be available from the navigation algorithm immediately after a hard reset.
LBL Range Aiding
XLHNAV can accomodate information from up to 5 aiding LBL beacons. Information from the 5 beacons which have provided the most observations in the last 60 seconds will be shown.
Status Masks
The table below details the status masks for each sensor. Any blank field can be considered not used.
| Bit Number | DVL | GNSS | USBL | XPOS | XVEL | Depth | LBL |
|---|---|---|---|---|---|---|---|
| 1 | Zero Range | Rate of change | Rate of change | Rate of change | Rate of change | Missing beacon info | |
| 2 | Zero Velocity | Quality | Quality | Quality | Time | Signal To Noise | |
| 3 | Time Delta | Time | Time | Time | Invalid data | Signal Level | |
| 4 | Velocity Change | Message Format | Too few observations | ||||
| 5 | Invalid Status | Beacon ID | Range exceeds min & max | ||||
| 6 | Janus Error | Predicted Range error | |||||
| 7 | All Beams Invalid | Correlation Score Limit exceeded | |||||
| 8 | Range rate | ||||||
| 9 | Acoustic | ||||||
| 10 | |||||||
| 11 | |||||||
| 12 | |||||||
| 13 | |||||||
| 14 | |||||||
| 15 | |||||||
| 16 | |||||||
| 17 | Disabled | Disabled | Disabled | Disabled | Disabled | Disabled | |
| 18 | Sigma rejection | Sigma rejection | Sigma rejection | Sigma rejection | Sigma rejection | sigma rejection | |
| 19 | Time out | Time out | Time out | Time out | Time out | Integrity | |
| 20 | Navigation uncertainty too high | Time out | |||||
| 21 | Fix position rejected | ||||||
| 22 | |||||||
| 23 | |||||||
| 24 | |||||||
| 25 | |||||||
| 26 | |||||||
| 27 | |||||||
| 28 | |||||||
| 29 | |||||||
| 30 | |||||||
| 31 | |||||||
| 32 | Misc | Misc | Misc | Misc | Misc | Misc | Misc |
LNAV & LNAVUTC
The Long Navigation (LNAV) message is a generic navigation output from the SPRINT-Nav, populated by data from the Hybrid mode. All fields will be initialised to 0. Once a field has been assigned a value, it will retain that value until updated. The status bits should be used to determine when data is old/stale.
LNAV requires the Multiplex Protocol to seperate LNAV binary messages and is transmitted LSB first.
A Python LNAV Decoder is available on Sonardyne's Github
Definition
- LNAV Multiplex Message ID (MID) = 224
- LNAVUTC Multiplex Message ID (MID) = 232
Size = 97 bytes (99 bytes if COBS encoded)
| Byte # (from 0) | Field Name | Units | Data Source | Data Type | Notes |
|---|---|---|---|---|---|
| 1–2 | DLE STX | 0x10 0x02 | N/A | — | See Multiplex Protocol |
| 3–4 | ID | 0x10 0xE0 | N/A | — | See Multiplex Protocol |
| 5–10 | Time Tag | 10⁻⁶ s (LNAV) / 10⁻⁵ s (LNAVUTC) | System | Uint48 | LNAV is instrument time base (since power up), UTC for LNAVUTC (seconds since 1st Jan 1970, 0.01ms resolution |
| 11–14 | Latitude | 2⁻³¹ × 90 deg | Navigation Algorithm | Int32 | Latitude is north positive 0.5cm resolution, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 15–18 | Longitude | 2⁻³¹ × 180 deg | Navigation Algorithm | Int32 | Longitude is east positive, 1cm resolution at equator, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 19–22 | Depth | 10⁻³ m | Navigation Algorithm | Int32 | Depth below sea level, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Positive down. |
| 23–24 | Altitude | 10⁻² m | Navigation Algorithm | Uint16 | Height above seabed, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Altitude is calculated from the last received DVL message: valid beam ranges are averaged while accounting for their direction relative to DVL down. Vehicle roll/pitch and non-zero DVL mounting angles are not compensated for. |
| 25–26 | Roll | 2⁻¹⁵ × 180 deg | Navigation Algorithm | Int16 | Roll is the angle between the starboard axis and horizontal. Roll is positive when the starboard axis points below the horizontal (starboard down). Populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 27–28 | Pitch | 2⁻¹⁵ × 180 deg | Navigation Algorithm | Int16 | Pitch is the angle between the forward axis and horizontal. Pitch is positive when the forward axis is pointed above the horizontal (bow up). Populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 29–30 | Heading | 2⁻¹⁵ × 180 deg | Navigation Algorithm | Uint16 | Heading is the angle between North and the projection of the forward axis onto the horizontal, measured about the down direction (i.e. as seen from above). Populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 31–32 | vN | 10⁻³ m/s | Navigation Algorithm | Int16 | Vehicle North velocity, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 33–34 | vE | 10⁻³ m/s | Navigation Algorithm | Int16 | Vehicle East velocity, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 35–36 | vDwn | 10⁻³ m/s | Navigation Algorithm | Int16 | Vehicle Down velocity, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 37–38 | wFwd | 10⁻² deg/s | Navigation Algorithm | Int16 | Angular rate about forward axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. |
| 39–40 | wStbd | 10⁻² deg/s | Navigation Algorithm | Int16 | Angular rate about starboard axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. |
| 41–42 | wDwn | 10⁻² deg/s | Navigation Algorithm | Int16 | Angular rate about down axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. |
| 43–44 | aFwd | 10⁻³ m/s² | Navigation Algorithm | Int16 | Forward acceleration, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. Accelerations are valid at the IMU and are in vehicle frame if a SPRINT mounting angle has been configured. Compensated for gravity. |
| 45–46 | aStbd | 10⁻³ m/s² | Navigation Algorithm | Int16 | Starboard acceleration, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. Accelerations are valid at the IMU and are in vehicle frame if a SPRINT mounting angle has been configured. Compensated for gravity. |
| 47–48 | aDwn | 10⁻³ m/s² | Navigation Algorithm | Int16 | Down acceleration, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Accelerations and angular rates are from the IMU, compensated for any gyro and accelerometer bias estimated by the system. Accelerations are valid at the IMU and are in vehicle frame if a SPRINT mounting angle has been configured. Compensated for gravity. |
| 49–52 | posMajor | m | Navigation Algorithm | Float32 | Horizontal position 1σ error ellipse, semi-major axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 53–56 | posMinor | m | Navigation Algorithm | Float32 | Semi-minor axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 57–60 | dirMajor | deg | Navigation Algorithm | Float32 | Direction of semi-major axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 61–64 | stdDepth | m | Navigation Algorithm | Float32 | 1σ depth error, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 65–68 | stdLevN | deg | Navigation Algorithm | Float32 | 1σ level error about North, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 69–72 | stdLevE | deg | Navigation Algorithm | Float32 | 1σ level error about East, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Roll and Pitch 1σ ≈ max(stdLevN, stdLevE) for roll/pitch ≪ 45°. |
| 73–76 | stdHeading | deg | Navigation Algorithm | Float32 | 1σ heading error, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 77–80 | velMajor | m/s | Navigation Algorithm | Float32 | Horizontal velocity 1σ error ellipse, semi-major axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Velocity RMS = `sqrt(velMajor² + velMinor²). |
| 81–84 | velMinor | m/s | Navigation Algorithm | Float32 | Semi-minor axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. Velocity RMS = `sqrt(velMajor² + velMinor²). |
| 85–88 | dirVMajor | deg | Navigation Algorithm | Float32 | Direction of velocity semi-major axis, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 89–92 | velDown | m/s | Navigation Algorithm | Float32 | 1σ down velocity error, populated once hybrid mode has initialised, 0 if hybrid mode is not initialised. |
| 93–94 | Status | N/A | Navigation Algorithm | Bit16 | See LNAV Status Bit Fields |
| 95 | Checksum | — | Navigation Algorithm | — | Checksum: This is the byte-wise exclusive-OR of the pre-byte-stuffed fields: ID and Payload. |
| 96–97 | DLE ETX | 0x10 0x03 | Navigation Algorithm | — | See Multiplex Protocol |
LNAV Notes
- Where a number is prepended by
0x, the following characters are a number in hexadecimal notation (e.g.0x40 = 64). - Horizontal position statistics:
- 1DRMS =
sqrt(posMajor² + posMinor²) - CEP (50%) ≈
0.589 × (posMajor + posMinor) - 1σ error ellipse represents 39.4% probability
- 95% probability error ellipse =
2.447 ×1σ error ellipse.
- 1DRMS =
- The LNAV Roll, Pitch, and Heading are defined as Euler rotations.
Status Bit Fields
| Status Bit | Field Name | Notes / Bit Set |
|---|---|---|
| 0 | bOrientationStatus | Orientation invalid (e.g. AHRS not OK or unsettled). |
| 1 | bPosStatus | Hybrid mode not OK or not initialised. |
| 2 | bAltitudeStatus | 0 indicates that the altitude and DVL velocities have been updated in this message compared to the last time LNAV was sent. 1 indicates that the altitude and DVL velocities data are either old (no update from DVL since last LNAV message sent) or invalid. |
| 3 | Not Used | — |
| 4 | bOrientationSource | 0 indicates orientation source = Aligning. 1 indicates orientation source = Hybrid mode. |
| 5 | bSubseaUSBLUsed | 0 indicates data received and some or all used by the Hybrid mode within the last second; otherwise 1. |
| 6 | bDepthUsed | 0 indicates data received and some or all used by the Hybrid mode within the last second; otherwise 1. |
| 7 | bDVLUsed | 0 indicates data received and some or all used by the Hybrid mode within the last second; otherwise 1. |
| 8 | Not Used | Reserved. |
| 9 | Not Used | Reserved. |
| 10 | bXPOSUsed | 0 indicates data received and some or all used by the Hybrid mode within the last second; otherwise 1. |
| 11 | bGPSUsed | 0 indicates data received and some or all used by the Hybrid mode within the last second; otherwise 1. Includes GNSS height, if selected. |
| 12 | Not Used | Reserved. |
| 13 | Not Used | Reserved. |
| 14 | bEuler | 1 indicates Roll, Pitch, and Heading are Euler rotations. |
| 15 | Not Used | Reserved for future use. |
Multiplex Protocol
The Multiplex Protocol uses the Byte Stuffing technique to separate binary messages. Byte stuffing ensures that unique control bytes (e.g. message delimiters) are not wrongly interpreted when they are part of a message payload.
In the Multiplex Protocol, the unique control byte is 0x10 - this is the 'Data Link Escape' (DLE). The DLE byte is used in the following cases:
- For every DLE byte found within the message payload an extra DLE byte is inserted (stuffed).
- When the DLE byte is placed before a 0x02 byte (the 'Start of Text' or STX byte), it is used to mark the start of the message.
- When the DLE byte is placed before a 0x03 byte (the 'End of Text' or ETX byte), it is used to mark the end of the message.
Packet Format
| Field | DLE STX | ID | Payload | Checksum | DLE ETX |
|---|---|---|---|---|---|
| Size | 2 Bytes | 2 Bytes | 0–2047 Bytes | 1 Byte | 2 Bytes |
ID Field Format
| Bit Field | TS | RES | SID | MID |
|---|---|---|---|---|
| Size | 1 bit | 1 bit | 4 bits | 10 bits (LSB) |
| Total Size: 2 Bytes |
Example Message
The following example demonstrates data encoding using the Multiplex Protocol.
Data to encode:
0x00
0x01
0x02
0x03
0x04
0x0E
0x0F
0x10
0x11
Multiplex-Protocol-Encoded Message:
0x0A Packet Size
0x10 Message Start
0x02
0x00 ID
0x01
0x00 Message Payload
0x01
0x02
0x03
0x04
0x0E
0x0F
0x10 < (Stuffed Byte)
0x10
0x11
0x00 Checksum
0x10 Message End
0x03