Technical Explanation – Dead-Reckoned Track

Theoretical description

What is it?

We can use a two-element vector with components [northing, easting] to describe the track with respect to starting position P0. The direction vector for each time step is [cosθ,sinθ], where θ is the true bearing. The position at the end of the first time step is: P1 = P0+15*60*2*[-0.707,0.707], where 15*60 is the number of seconds, 2 is the speed in m/s and θ=135°. The position after the second time step is: P2 = P1+30*60*1.5*[0,1]. So the final position, P2, is 1272 m south and 3972 m east of the starting point.

Dead reckoning is the process of deducing a track from periodic estimates of heading and speed. The method is as old as human navigation but was introduced to biologging by Wilson & Wilson (1988). Even with the advent of GPS-equipped tags, dead-reckoning is still widely-used especially with animals for which GPS positions are not regularly available, either due to restricted battery power or because the GPS satellite signals are blocked by water or terrain. Compared to GPS, dead-reckoning has two important advantages and one major disadvantage. The advantages of dead-reckoning are: (i) it requires only three tiny low-power sensors (an accelerometer, a magnetometer, and a speed sensor), and (ii) the animal’s track can be computed with very high temporal resolution. The big disadvantage of dead-reckoning is that errors accumulate over time, resulting in inaccurate positions unless occasional GPS fixes are available to correct the track (see function fit_tracks()).

How is it measured/computed?

Dead-reckoning is an iterative procedure in which the estimated position of the animal is updated using estimates of its current speed and direction of travel. The update formula is:

Pt = Pt-1 + T st Dt

where Pt-1 and Pt are the positions of the animal at consecutive time steps relative to some starting position, P0; T is the time between time steps and therefore the time resolution of the track; st is the forward speed of the animal at time t; and Dt is the direction of travel. For a terrestrial animal, P is a two-element vector that says how much the animal travels towards the north and towards the east. To emphasize that these movements are relative to an initial starting position, the vector components are often referred to as ‘northing’ and ‘easting’, i.e., distance travelled from the reference position towards the north or east. For an aquatic or airborne animal, the vectors need to be three-dimensional, e.g., with elements: northing, easting and up (this ‘left-hand‘ coordinate system is used in the animaltags tools but is not the only way to do it; a ‘right-hand’ system would be northing, easting, and down). Dt is the same size as Pt but is a direction vector and so always has unit magnitude (i.e., the square-root of the sum of its components squared equals one): Dt says which way the animal is going but not how fast.

What is it good for?

If not corrected with occasional GPS positions, dead-reckoned tracks can accumulate massive errors making them generally unreliable for georeferenced tracking (Gunner et al., 2021). However, the shape of a dead-reckoned over short time intervals may be quite reliable. Dead-reckoned tracks can be used therefore to infer foraging tactics, social interactions, disturbance behavior, or to compute tortuousity.

Dead-reckoning is also a valuable tool for interpolating GPS positions. As salt-water attenuates radio signals, tags on marine animals can only get positions when the animal surfaces. But even on terrestrial animals, the high power consumption of GPS receivers can lead to frugal use. Merging sparse but precise GPS fixes with the high time resolution but inaccurate dead-reckoned track is a great way to get the best of both worlds.

Technical description

Deep-Dive on Functionality

The function ptrack() assumes a [north,east,up] navigation frame and a [forward,right,up] local frame. Both A and M must be rotated if needed to match the animal’s cardinal axes otherwise the track will not be meaningful. Use rotate_vecs() to achieve this. Unless the local declination angle is also corrected with rotframe(), the dead-reckoned track will use magnetic north rather than true north.


Verified positions (for example, from visual observations or GPS) can be used as a rough gauge of the accuracy of a dead-reckoned track, for example to confirm the general direction of travel is correct. However, due to the large error in dead-reckoned tracks, these verified positions are more often used to correct and improve the tracks rather than for verification (see Caveats below).


Dead-reckoned tracks are usually very inaccurate. They are useful to get an idea of HOW animals move rather than WHERE they go. Few animals probably travel in exactly the direction of their longitudinal axis and anyway measuring the precise orientation of the longitudinal axis of a non-rigid animal is fraught with error. Moreover, if there is net flow in the medium, the animal will be advected by the flow in addition to its autonomous movement. For swimming animals this can lead to substantial errors. The forward speed is assumed to be with respect to the medium so the track derived here is NOT the ‘track-made-good’, i.e., the geographic movement of the animal. It estimates the movement of the animal with respect to the medium. There are numerous sources of error so use at your own risk!

Dead-reckoning relies on accurate estimates of the animal’s forward speed, st , and direction of travel, Dt at time t. Speed sensors (e.g., a paddle wheel for an aquatic animal) have several sources of error including stalling at low speeds and biofouling. However, for tags without a speed sensor, more creative and error-prone solutions are required (see Speed Estimation tutorial). To estimate direction of travel, it is usually assumed that animals move in the direction of their longitudinal (i.e., fore-aft) axis. This axis can be inferred from the orientation of the animal, i.e., using the animal’s pitch, roll and heading derived from accelerometer and magnetometer data. Errors in Dt can arise both from inaccuracies in estimating orientation and from movements that do not meet the longitudinal-travel assumption. In particular currents or winds, and lift forces acting on the body lead to biases in movement direction. Animals may also move in seemingly inefficient ways to facilitate other activities (e.g., a pitch-down posture while benthic foraging, Vance et al. 2020). Finally, for suction cup attached tags, errors can arise due to uncertainty about the orientation of the tag on the animal (see tag orientation prediction).

The choice of sampling rate (i.e., 1/T in the formula above, T is the time between time steps and therefore the time resolution of the track) can have an important impact on dead-reckoning. If the sampling-rate is too low, there is a risk that rapid tortuous movements, e.g., during foraging, will alias (see Decimation). Aliasing can lead to track lines that seem plausible but that are completely incorrect. Conversely, a high sampling-rate can lead to errors in orientation, and therefore Dt, due to specific acceleration. Choosing a sampling rate close to the dominant stroke frequency (see dsf) may be a safe strategy. Many tags sample accelerometers at a higher rate than magnetometers and to compute orientation, you need to decimate these data streams by different amounts to get a common sampling rate. It is essential to use delay-free filters when decimating to keep the accelerometer and magnetometer data time-aligned.

In summary, the big disadvantage of dead-reckoning is that errors accumulate over time, resulting in inaccurate positions unless occasional GPS fixes are available to correct the track (see function fit_tracks()).


Wilson RP, Wilson MP (1988) Dead reckoning—a new technique for determining penguin movements at sea. Kieler Meeresforsch 32:155–158.

Gunner RM, Holton MD, Scantlebury MD et al. (2021) Dead-reckoning animal movements in R: a reappraisal using Gundog.TracksAnim. Biotelemetry 9:23.