# Kalman filtering (for drones)

##### Course index

I have recently been to a small conference where all the presentations and posters had a common vector, the Kalman filter.  I was pretty impressed about how most of the people there (from students to full professors) did not (fully) understand the tool. In particular, I saw a lot of inaccuracies on the slides and posters, e.g. wrong equations or incorrect usage of the filter stunned me. The Kalman filter is one of these tools that engineers should have in their toolboxes, so a full understanding of the filter and its implementation should be a must as well.

What does it mean to understand in this context? For sure it is not to copy, paste and check that your system is working. Reading the Kalman filter article in Wikipedia did not help me so much, in my opinion it is very confusing. This is not unexpected, when you check the algorithm in an arbitrary engineering text book, you can see why the Wiki entry has a lot of room for being improved. The following pages have what I like the most in an engineering text, I can read it as I were a compiler, i.e. I can reproduce the results step by step, no magic or guessing in between.

The Kalman filter allows to tackle the problem of state estimation in a very elegant way with low computational resources. Mathematically speaking, this means that the problem has an analytic solution. Furthermore, all the steps that build the solution have a clear physical meaning. So by understanding the filter what I mean is to understand the physics or maths behind each step.

What does it mean the problem of state estimation? It means to make an educated guess about a property (that can be described mathematically) of a system. An educated guess means  non-arbitrary or to have a mathematical ground.

Maybe you have read about many different flavors of the Kalman filter, e.g. {Extended, Unscented, Multiplicative, Hybrid, Invariant, AnotherNovel} Kalman filter. As I have mentioned before, there are many steps involved in the filter, all of them with a clear interpretation. Researchers and engineers have found how to replace or to enhance many of these steps in order to provide better solutions for particular problems. What better means here will be something to be discussed and analyzed along the course.

I will write this step by step course together with illustrative problems very common in drones, e.g. to estimate a position when your inertial sensors are noisy and biased. I will illustrate with animations and very explicit plots each of the steps involved of the process :D.

##### Requirements for the course
• Mathematics: Be familiar with linear algebra. What is a vector or a matrix and how to operate with them is a must.
• Programming: Do yourself a favor and remove that “lab of matrices” software from your computer :P. All the code has been written in Python and tested with Ubuntu 16.04. You will need to have installed the packages python-scipy and python-matplotlib.