Tag Archives: kalman filter for quadcopter

How to filter data from IMU

In the previous post you can find how to read data from the sensor.

One note: the data used in this phase are taken from a IMU not yet mounted on the Quadcopter, to avoid mixing up too many factors. So I’ll test the data from IMU in case  4 running  motors in a second phase.

As described the accelerometer results are affected by noise.
In order to reduce this noise it is necessary to manage to have a filter that returns a smoother values.
In the IMU I’m using it is embedded a low pass filter that can work in a range from 260Hz to 5Hz.
To have a more generic software I developed a low pass filter anyway.

I got some preliminary introduction to this on wikipedia.Here the link
The parameter RC has to be varied empirically  in order to get a smoother results.

lp_filter1

Another interesting approach that it is  used often is the Kalman filter, especially when there are different parameters to be filtered.

For this particular case, I  found a very simple and clear blog that describe how to develop Kalman Filter :  Kalman filter for undergrads

It describes the case for Single-Variable example.Our case in facts it is a single variable example, since the value ACC x,ACC y and ACC z have no relation.

In my code I just modified the single case, for “3 single-variables”.

In the following picture you can see the kalman filter results. The interesting comment is that by playing with the parameters in Q , the results obtained by Kalman Filter is Equal to the result from low pass filter.

lp_filter2

I’ll keep this development any way in the code, since i don’t know if it is necessary a more severe filter when the IMU will be mounted on the flying quadcopter.

Here you can find the code called IMU_test2  including the low pass filter and the kalman filter.

Note it could be necessary to install the python library numpy on raspberry pi.

apt-get install python-numpy

apt-get install python-numpy-doc

So using the low pass filter (hw from IMU and/or sw from this code) I can reduce the noise of the ACC. In the next post I’ll try to explain how to reduce the GYRO drift problem by  a “fusion” of the results  from ACC and GYRO.

In parallel I’m thinking about improvements in kalman filter to include on it also the math model that links ACC and GYRO data. I’m looking into this Kalman filter for dummies

Advertisements