$DVKFA, $DVKFB Kalman Filter Support Messages

When you want to use DVL input into your ow system Kalman Filter or if you have a high-grade IMU you wish to use instead of the DVL's built-in, we supply two data messages you can use: $DVKFA and $DVKFB. The messages have identical content but different encoding. $DVKFA is an NMEA-like string of ASCII data fields separated by commas. $DVKFB is a packed binary representation of the same data so you do not have to suffer the overhead of converting ASCII to binary.

Both messages types are sent to either serial or Ethernet, but you may find it difficult to parse the boundaries of the $DVKFB message when receiving it on a serial port as there are no reserved control characters marking end-of-message in a binary message.

Binary data is in three different formats: IEEE-754 single-precision floating point (four bytes in little-endian format), unsigned 32 bit integer (four bytes in little-endian format), and C-string (ASCII characters terminated with a null character).

Field are listed below. The offset numbers are byte offsets into the $DVKFB message.

Field 0 (offset 0). Each message starts with an NMEA tag, either $DVKFA or $DVKFB. IN $DVKFB the field is exactly 8 bytes long including the terminal null.

Field 1 (offset 8). Message version, an unsigned 32 bit number. This is a bit vector describing which data groups are included. The initial release has a version of 0x0000000F. If the message version changes we will provide mode clarity on the bit fields, and we will also endeavor to endure that the new messages are backwards-compatible with this message.

Field 2 (offset 12). Sequence Number, an unsigned 32 bit number that starts at 0 and increments by 1 each time a message is sent. $DVKFA and DVKFB have independent sequence numbers.

Field 3 (offset 16). Delta-Time, a single-precision floating point number denoting the number of seconds of time included the this measurement. Standard values are 0.05, 0.1, and 0.2, although other values are possible if you use the manual-control message.

Field 4 (offset 20). System-Time, a single-precision floating point number denoting the system clock value in seconds, which starts at 0 at boot-up and counts up.

Field 5 (offset 24). Down-angle, a single-precision floating point number denoting the angle in degrees from horizontal of the sensor cones. This is 70.0 unless you have an experimental sensor head.

Field 6 (offset 28). IMU status string. This is a fixed 12-byte field with at least one terminal null. If using a baseline IMU, the value will be a four-digit number (see here for a description of the digits). If using an enhanced IMU this field will read either "OK" or "WAIT".

Field 7 (offset 40). Quaternion W, a single-precision floating point number. The quaternion is in the sensor frame and will read (1,0,0,0) when the sensor is level WRT gravity and the X-axis is pointed east.

Field 8 (offset 44). Quaternion X, a single-precision floating point number.

Field 9 (offset 48). Quaternion Y, a single-precision floating point number.

Field 10 (offset 52). Quaternion Z, a single-precision floating point number.

Field 11 (offset 56). Sensor channel A, a group of five values. The measurement cone on channel A is lined up with the +X axis with the down-angle mechanically applied.

Each sensor channel includes the following data, in this order (offsets are for the $DVKFB message and are offset from the channel base offset):

  1. (offset 0). Range to best estimate of bottom, a single-precision floating point number. If the channel is not locked, this is -1, otherwise it ranges from 0.1 to about 50 meters.

  2. (offset 4). Velocity along the sensor cone's axis, a single-precision floating point number. If the channel is not locked, this is 0, otherwise it ranges from about -10 m/s to +10 m/s. A positive velocity means the sensor is approaching the reflecting object.

  3. (offset 8). Confidence, a single-precision floating point number. If the channel is not locked, this is 0, otherwise it ranges from 0 to 1000+. Confidence is a measure of the variance of a synthesized Doppler signal (based on the parameters of measurement) compared to the measured signal. The larger the number, the more confidence that the estimated Doppler velocity represents the actual Doppler velocity.

  4. (offset 12). Gain, a single-precision floating point number the denoted the current gain in dB of the automatic gain control system for this channel. It ranges from 6 to 66 dB.

  5. (offset 16). Locked, an unsigned 32 bit number that indicated if the channel processor detected a valid return signal. A value of 1 means a valid detection, a value o 0 means no valid detection.

Field 12 (offset 76). Sensor channel B, a group of five values. The measurement cone on channel B is lined up with the -Y axis with the down-angle mechanically applied.

Field 13 (offset 96). Sensor channel C, a group of five values. The measurement cone on channel C is lined up with the -X axis with the down-angle mechanically applied.

Field 14 (offset 116). Sensor channel D, a group of five values. The measurement cone on channel D is lined up with the +Y axis with the down-angle mechanically applied.

Field 15 (offset 135). End-of-message tag, an unsigned 32 bit number that should have the value 0x0055AAFF. This has no purpose other than an indication that you have counted the preceding fields properly.

Last updated