April 3, 2020
Introduction
Typically a DVL (Doppler Velocity Logger) is used in 2 different types of navigation:
- Dead Reckoning Navigation
- DVL-Aided INS Navigation
Dead Reckoning Navigation
Dead Reckoning Navigation relies on the DVL for velocity, time and range to maintain a position. Start with an initial position. Then maintiain the positional awareness by tracking the velocity, time and range with the DVL. Calculate the distance traveled from the previous position to know where you are currently.
Initial Position
A initial positions needs to be known to start navigation. This can be as simple as [0,0,0]
coordinate or it can be a GPS location. For a GPS location, the vessel must be at the surface for the GPS location to be taken. GPS will not penerate below the surface.
Maintain Position
Once the vessel goes below the water surface, it will rely on the DVL to maintain position. The position is calculated. The DVL will provide all the data to calculate the position.
Bottom Track and Water Track
There are two ways the DVL will provide the data. Either with Bottom Track or Water Track. Both data are output at the same time, so you can monitor when to use Bottom Track or Water Track values. There is also a status that indicate when Bottom Track is in a good state.
A description of the DVL data format can be found here:
http://www.rowetechinc.co/wiki/index.php?title=ADCP_Data_Types#RTD_-_Rowe_Tech_DVL_Format
Bottom Track
Bottom Track is more acccurate but only works if the seafloor is within the range of the DVL. The DVL has a maximum range it can see the seafloor. The maximum range is based on the frequency of the DVL.
Bottom Track data reports the speed of the vessel in [X,Y,Z]
and [East,North,Vertical]
. It will also report the depth of the water and a timestamp. It will also provide the heading, pitch and roll.
Water Track
If the seafloor is out of range, Water Track is used. Water Tracks measures the speed of the water. When the vessel is moving, the water speed includes the speed of the vessel and the speed of the water. Typically, in the open ocean, the water speed is very small, so the overall speed is the vessel. But at the surface, because of waves and wind, the water speed can flucutate. Water Track is considered a backup because it is not as accurate as Bottom Track, because of the flucutations in the water speed.
You must also configure Water Track to look at a specific region of the water. You select the region of the water that has the least fluctuion in water current speeds. This region is a fixed distanced from the ADCP. So, as you drop down to the seafloor, eventually the seafloor will be in the Water Track data, causing a bad value. By this point though, the Bottom Track should see the seafloor and be reporting data. So, you want to be careful when you setup Water Track to select a region that you can rely on for consistent water currents.
More details about Water Track can be found here:
http://www.rowetechinc.co/wiki/index.php?title=Water_Track
Calculate Position
Distance Traveled
Distance
= Speed
* Time
Speed is given as [X,Y,Z]
and [East,North,Vertical]
in mm/s. Time is given in hundredths of a second. So the distance result will given as a 3D result of distance traveled in [X,Y,Z]
and East,North,Vertical in meters.
Once you have calculated the distanced traveled, you apply it the previous position. This will give you new position. You can then keep track of each position.
Geodesy Calculator
If you are using [X,Y,Z]
Instrument coordinate transform, the caluclations are a little more simple. You take the [X,Y,Z]
value and add them together to get a new [X,Y,Z]
point. But to plot this on a map, you would need to determine where [X,Y,Z]
are on the map. If you plan to work with a map, it is much easier to a GPS initial point. This will require you to use a Geodesy calculate to calculate distances between two GPS points or to calculate a new GPS position based on an initial GPS position and a distance traveled. You can find many different Geodesy calculates in many different programming languages.
C# .NET DotSpatial
https://github.com/DotSpatial/DotSpatial
Python
https://github.com/mrJean1/PyGeodesyl
Example
Let do an example. Your initial position is [0,0,0]
and our start time is 42798 Hundredths of Seconds.
We will be using X,Y,Z (Instrument) for this example. This is going to use $PRTI01 data.
$PRTI01,sssssshh,nnnnnn,TTTT,XXXX,YYYY,ZZZZ,DDDD,xxxx,yyyy,zzzz,dddd,ABCD,S,N*FFWhere: PRTI01 = Identity string. sssssshh = Start time of this sample in hundredths of seconds since power up or user reset. nnnnnn = Sample number TTTT = Temperature in hundredths of degrees Celsius. Measured at the transducer XXXX = Bottom track X velocity component mm/s. -99999 indicates no valid velocity YYYY = Bottom track Y velocity component mm/s. -99999 indicates no valid velocity ZZZZ = Bottom track Z velocity component mm/s. -99999 indicates no valid velocity DDDD = Depth below transducer in mm. Range to the bottom, 0 = no detection xxxx = Water mass X velocity component mm/s. -99999 indicates no valid velocity yyyy = Water mass Y velocity component mm/s. -99999 indicates no valid velocity zzzz = Water mass Z velocity component mm/s. -99999 indicates no valid velocity dddd = Depth of water mass measurement in mm. Position of bin in front of the transducer ABCD = Built in test and status bits in hexadecimal0000 = OK. S = Sub System. See appendix B5 for description. N = Sub System index.
Our first piece of data from the DVL.
$PRTI01,42898,393,1946,-1491,-40,-390,13169,,,,,0000*30 $PRTI02,42898,393,1946,1348,667,339,13169,,,,,0000*2D
Time
The time 42898 is given in the format:
sssssshh = Start time of this sample in hundredths of seconds since power up or user reset.So we will divide by 100 to get seconds. 42898 HunSec to Seconds = 42898 / 100 = 428.98 seconds
Our previous time was 42798 HunSec or 427.98 seconds. So our difference in time is 1 Second
(428.98-427.98 = 1 sec). So 1 Second has elapsed since our last sample. So our time in our distance traveled calculation is 1 second
.
Speed
XXXX = Bottom track X velocity component mm/s. -99999 indicates no valid velocity YYYY = Bottom track Y velocity component mm/s. -99999 indicates no valid velocity ZZZZ = Bottom track Z velocity component mm/s. -99999 indicates no valid velocity
So in this example:
X = -1491 mm/s = -1.491 m/s Y -40 mm/s = -0.04 m/s Z = -390 mm/s = -0.39 m/s
So our Distance traveled calculations is:
X Distance = -1.491 m/s / 1 second = -1.491 m Y Distance = -0.04 m/s / 1 second = -0.04 m Z Distance = -0.39 m/s / 1 second = 0.39 m
So based on this example, we started at [0,0,0]
, and we add our new distance traveled. So our new position is [-1.491, -0.04, -0.39]
. So we are travelling in the negative X direction and downward Z.
Our next set of data.
$PRTI01,42998,394,1945,-112,-343,-649,12361,,,,,0000*30 $PRTI02,42998,394,1945,288,-305,613,12361,,,,,0000*3E
In our next Point, we have elasped again 1 second. Previous time was 42898 and our new time is 42998.
Our speeds are:
X = -112 mm/s = -0.112 m/s Y = -343 mm/s = -0.343 m/s Z = -649 mm/s = -0.649 m/s
So we have traveled:
X Distance = -0.112 m/s / 1 second = -0.112 m Y Distance = -0.343 m/s / 1 second = -0.343 m Z Distance = -0.649 m/s / 1 second = -0.649 m
We now add our latest distance traveled to our Previous position, which was [-1.491, -0.04, -0.39]
.
X = -1.491 + -0.112 = -1.603 Y = -0.04 + -0.343 = -0.383 Z = -0.39 + -0.649 = -1.039
So from our start position we have traveled negative X and downward Z. You can continue on your own with the next point below.
$PRTI01,43098,395,1948,-342,-474,-587,12819,,,,,0000*35 $PRTI02,43098,395,1948,544,-287,556,12819,,,,,0000*30
DVL-Aided INS Navigation
A DVL-Aided INS uses many sensors including a DVL to maintain position. To most, the INS is a black box. Sensor inputs go into the INS. The Kalman Filter then calculates a position based on all the sensor input. The DVL is specifically used to give speed. The speed is used to account or the drift of the INS. The INS has a longer and a short term drift. There are many papers about INS and how they work and it is out of the scope of this tutorial.
What you need to know for the DVL is what data formats the INS expects from the DVL. Then how the DVL was installed. The INS manufacture needs to know the install offsets from the INS.
To setup the Kearfott INS to use our DVL, instructions are here:
http://www.rowetechinc.co/wiki/index.php?title=Kearfott_INS_Setup
Our DVL will work with almost all manufactures of INS. The INS manufactures have usually settled on PD6 or PD13 data format output from the DVL. Our DVL can output this format natively. The only difference between manufactures of INS is the commands they send the DVL. You may need to determine if we handle all the commands they send because every DVL manufacture has different commands. We try to incorporate every command a DVL will receive from all the manufactures, but if you need to add more commands, please let us know, and we will add the support.
More topics and tutorials can be found at Rowe EDU
For more information about Rowe Technologies DVLs, please visit:
http://rowetechinc.com/seapilot/
sales@rowetechinc.com
+1 (858) 842 3020.