Skip to content

Dead-Reckoning

◀ Go to Preliminaries

Go to Bayes Filter ▶

Dead-reckoning is a method of estimating a robot’s position using its previous position and the motion it has made since then. It relies on sensors like wheel encoders and speedometers to calculate movement. We use the Motion Model to help us perform dead-reckoning.

Motion Model in Dead-Reckoning

  1. Start from a known position (\(X_t\))
  2. Apply the control input (\(U_t\)) to predict motion
  3. Compute the new pose using the motion model equation:
\(X_{t} = f(X_{t-1}, U_{t-1})\)

Dead-Reckoning Example

A classic use of dead-reckoning is navigating the sea. For example, imagine you are on a boat with the boat's initial position defined as \((2, 4)\) in meters, with the x-axis representing the east and west and the y-axis representing the north and south.

From various instruements to measure orientation, speed, and time, the following have been measured since the boat was at its initial position: A speed of 2 m/s in the direction 45° north of east for 10 seconds.

With this information, the boat's new position can be approximated using the dead-reckoning motion model:

\[X_{t} = f(X_{t-1}, U_{t-1}) = (x_0 + v * Δt * cos(θ), y_0 + v * Δt * sin(θ))\]

The initial position (known position) of the boat \((x_0, y_0)\) is added with the newly measured information (control input) about the motion of the boat \((v, Δt, θ)\) to determine the current position of the boat.

\[X_{t} = (2 + 2 * 10 * cos(45°), 4 + 2 * 10 * sin(45°)) = (16.14, 18.14)\]

This process of dead-reckoning is then repeated, using the newly determined position of the boat and measured values of orientation, speed, and time to continue making new estimations about the boat's position.

For the application of robotics, dead-reckoning provides a continuous estimate of the robot’s position while being a relatively simple concept to implement. It is important to note that for robotics, dead-reckoning is repeated much more frequently in much smaller intervals of time and a robot's pose is usually measured with more values than in this example (recording things such as orientation or in 3D rather than 2D). However, dead-reckoning has a major flaw of not being able to account for errors that can accumulate over time, so it can be an unreliable estimate without additional sensor correction.

What does dead-reckoning use to estimate a robot's position?

Differential Drive Motion Model

Before continuing onto this section, please read the Differential Drive tutorial located in the Control section.

The Differential Drive Model will update the pose based on sensor measurements from wheel encoders with the following equation:

\[ \mathbf{x}_{t+1} = \begin{bmatrix} x_{t+1} \\ y_{t+1} \\ \theta_{t+1} \end{bmatrix} = f_d(\mathbf{x}_t, \mathbf{u}_t) = \mathbf{x}_t + \tau_t \begin{bmatrix} v_t \text{sinc}\left(\frac{\omega_t \tau_t}{2}\right) \cos\left(\theta_t + \frac{\omega_t \tau_t}{2}\right) \\ v_t \text{sinc}\left(\frac{\omega_t \tau_t}{2}\right) \sin\left(\theta_t + \frac{\omega_t \tau_t}{2}\right) \\ \omega_t \end{bmatrix} \]

where:

  • \(v_L\) is the average velocity of the left wheels.
  • \(v_R\) is the average velocity of the right wheels.
  • \(v\) is the robot’s overall linear velocity, which represents its forward or backward speed.
  • \(\omega\) is the robot’s angular velocity, which represents its rate of rotation or turning.
  • \(\ell\) is the axle length, which is the distance between the two wheels.
  • \(\tau_t\) is the time interval over which the motion is being measured.
  • \(x_t\), \(y_t\) is the robot's current position on a 2D plane.
  • \(\theta_t\) is the robot's current heading or orientation.
  • \(x_{t+1}\), \(y_{t+1}\), \(\theta_{t+1}\) is the robot's new pose at time \(t+1\).

Together, these variables make the Differential Drive motion model equation, which is able to estimate robot position on any Differential Drive Robot in a 2D environment.