In this tutorial series, we explain what is dead reckoning. We focus on the application of dead reckoning in mobile robotics. We concisely explain the main idea of dead reckoning and we explain how to use a simple approach for solving the dead reckoning problem and for implementing the solution. In the second part of this tutorial given here, we explain how to simulate dead reckoning in Python for a simple model of a mobile robot.
The dead reckoning implementation approach presented in this tutorial is far from optimal, and we can say that it is actually a “naive” approach. However, this naive approach is very useful for understanding the advantages and disadvantages of dead reckoning and learning how to simulate dead reckoning in Python. In the third and fourth parts of this tutorial series, we will present a more optimal approach for solving the dead reckoning problem.
There are a number of definitions and problem formulations of dead reckoning. In this tutorial, under the term “dead reckoning”, we understand the following. Briefly speaking, dead reckoning is a method for calculating (estimating) the position and orientation of a mobile robot at the current time instant by using information about
- The position and orientation of the mobile robot at the previous time instant.
- Measurements of the traveled distance and change of orientation of the mobile robot between the previous and current time instants.
Dead reckoning is probably a centuries-old (if not millennia-old) method used for navigation and location determination by using incremental measurements. It was used for incrementally determining the position of a ship on an open sea. In the first tutorial part presented here, we explain how to use a “naive” approach for dead reckoning in mobile robotics. The idea is to use wheel encoder measurements and gyroscopes to update the location and orientation of the robot. After some time the variance of the estimation error will become very large and this method will not work. This is due to the accumulation and integration of the measurement and approximation errors in every step. That is, the dead reckoning method is useful for short-term localization.
This method should be studied and properly understood before implementing more advanced methods for robotic localization such as nonlinear Kalman filters and particle filters.
The YouTube tutorial accompanying this webpage tutorial is given below.
Kinematic Model of Mobile Robot for Dead Reckoning
Before we mathematically define the process of dead reckoning, we first need to introduce a kinematic model of a mobile robot. This is because the dead reckoning method relies upon simplified kinematics models of mobile robots.
The figure below shows a simple mobile robot with two active wheels and a third passive wheel (castor wheel) that for clarity is not shown in this figure. This is a graphical representation of a differential drive mobile robot explained in our previous tutorial given here. However, the main principle of the dead reckoning method that is explained in this tutorial is applicable to other mobile robotic configurations.
The robot consists of the robot base and two active wheels. In addition to these two wheels, there is a third passive caster wheel that provides the stability of the robotic platform (passive means that is not actively actuated, however, the wheel can still move around two perpendicular axes). This third wheel is not shown on the graph in order not to make the graph too complex. We introduce the following quantities:
- Inertial coordinate system
– (denoted by uppercase letters and ). This coordinate system is fixed. - Body coordinate system
– (denoted by uppercase letters and ). The body coordinate system is also called the body frame. This coordinate system is rigidly fixed to the robot body or robot base. Its center is at the point . Usually the point is the center of the mass or the center of the symmetry of the robot body or the robot base. The body coordinate system moves together with the robot. - The coordinates
and are horizontal and vertical positions of the body coordinate system – with respect to the inertial coordinate system – . - The angle
is the angle that the body coordinate system makes with the axis of the inertial coordinate system. That is, the angle is the rotation of the body coordinate system with respect to the inertial coordinate system. The angle is called the orientation angle or angular orientation. This angle is also called the bearing angle (or simply bearing) or heading angle (or simply heading). Since the body coordinate system is firmly attached to the robot body the angle is the rotation of the robot body. is the instantaneous velocity of the center of the body frame. is the instantaneous angular velocity of the robot.
Definition of (robot) pose
Next, we need to define what is a robot pose. The (robot) pose is the vector
(1)
The (robot) pose completely defines the position (location) and orientation of the robot with respect to the fixed inertial frame
The precise knowledge of the robot pose is important for a number of reasons. First of all, it determines the precise location and orientation of the robot in space. Secondly, the robot pose is used for feedback control. Finally, robot pose information is used in other robotic algorithms, such as path planning, obstacle avoidance, and SLAM algorithms.
Kinematic Model of Mobile Robot for Dead Reckoning
Here we present arguably the simplest possible kinematics model of the mobile robot that can be used to define and solve the dead reckoning problem. We deliberately base this tutorial on the simple kinematics model in order not to blur the main ideas of dead reckoning with too many mathematical details. Although relatively simple, this model can still be used in practical applications. We use two approaches to develop the kinematics model of the robot. The first approach is based on the discretization of the continuous-time model of the differential drive robot. This model is derived in our previous tutorial given here. The second approach is based on a simple kinematics derivation and physical intuition. Both modeling approaches result in identical models. However, the second approach is more intuitive since it is directly based on kinematics and direct physical reasoning.
Let us start with the discretization approach. In our previous tutorial, we derived the following continuous-time kinematics model of robot motion
(2)
By using the forward Euler method, we discretize the model (2), as follows
(3)
where
(4)
where
From (4), we obtain the discretized kinematics model of the robot
(5)
Next, we need to observe the following
- The product
is the distance traveled in the direction of the velocity vector (the velocity vector is actually determined by the intensity given by and direction determined by the angle ). It should be kept in mind that the velocity vector is constant between the time instants and . The distance traveled between the time instants and is denoted by(6)
- Since
is the angular velocity, the product is the rotation angle of the robot body between the discrete-time instant and . We denote this angle by(7)
Finally, by using (6) and (7), the final discretized model of the robot kinematics takes the following form
(8)
If we ignore the last equation in (8), the resulting two equations
(9)
describe the translation of the robot body along the direction of the instantaneous velocity vector, where the orientation angle
(10)
then, this equation describes the rotation for the angle of
Let us not use this principle to rederive the kinematics model (8) by using a more intuitive approach that does not explicitly rely upon the model discretization.
We formally decompose the motion of the robot from the starting point (at the discrete-time
- From the starting point
(location at the discrete-time instant ) to the endpoint (location at the discrete-time instant ), the robot moves along a straight line. That is, during the motion from the point to the point , the orientation angle is constant, and the position coordinates and are changing. - At the point
, the orientation angle is changed, such that the orientation becomes .
This is just a formal mathematical decomposition of the motion, since in practice, the actual motion between the two points might not look like this. This is an approximation of the motion that enables us to mathematically analyze the geometry and kinematics of motion. However, if the time interval
To repeat, from the mathematical point of view, the motion is decomposed into a series of straight-line motions and orientation changes. Let us illustrate this with the example shown in the figure below.
The goal is to move from the point
In step 2, we move from the point A to the point
In step 3, we adjust the orientation of the robot for the angle
In step 4, we move along the straight line from the point
Next, we develop the kinematics model of the robot that mathematically describes this motion. Consider the figure shown below.
Here, we remind the reader that
(11)
where
(12)
From the discrete-time instant
(13)
These equations describe the location of the robot at the time instant
In the endpoint, we perform the rotation for the angle
(14)
By combining (13) and (14), we obtain the final kinematics model of the mobile robot
(15)
That is precisely the kinematics model (8) obtained by using discretization.
Dead Reckoning Using Kinematics Model and Python Simulations
Here, we first define the dead reckoning problem, and then, we explain how to use the derived kinematics model (15) (or (8)) to solve the dead reckoning problem. In the second part of this tutorial series (link will be posted later on), we explain how to implement the dead reckoning method in Python and through simulations, we explain several issues with dead reckoning.
First, let us define the pose vector. The pose vector, denoted by
(16)
Next, let us define an estimate of the pose vector. The estimate of the pose vector, denoted by
(17)
where
The dead reckoning problem can be formally described as follows.
Dead reckoning problem. Let us assume that
- The estimate of the robot pose vector
at the discrete-time instant is known. - The measurements of the traveled distance
and orientation change are obtained at the discrete-time instant . - The initial values
, , and are known accurately. That is, the initial pose vector is known accurately.
Then, under these assumptions, obtain an estimate of the robot pose vector
To solve this problem and to implement its solution in Python, we need to clarify several important aspects of this problem.
First of all, we need to explain what is odometry. Often, in robotics literature or during the conversation between robotics engineers you will hear the term “odometry”. People use this term in different contexts and have different understandings of this term. Under the term “odometry” we understand the process of using the data from sensors to estimate/measure the traveled distance and heading direction (orientation of the robot). Some people restrict the term odometry only to the sensing (measurement) process, and some people under the term odometry understand the complete process of sensing and estimating the distance and heading direction. In this tutorial, under the term odometry we understand both the sensing and estimation process. In that sense, dead reckoning is a type of odometry.
Now, the main question is how to measure the distance traveled
One of the most important issues that limit the accuracy of odometry and dead reckoning is that measurements of
This means that in the model (8), we are not directly measuring
(18)
where
(19)
where
Here, it is very important to keep in mind that the true values of
In the sequel, we present the simplest possible approach for solving the dead reckoning problem. This approach is suboptimal and in some sense “naive”. However, this approach is still very useful since it can give us the first idea of the behavior of the dead reckoning. The idea for solving this problem is to use the kinematic model (8) and to substitute the true values of the distance
(20)
We initialize the equations (20) with the exact initial value of the location and orientation, that is
(21)
After that, by using the measurements