Combine Gyroscope with accelerometer to get heading

Alexis picture Alexis · Nov 8, 2011 · Viewed 14.2k times · Source

I'm using an Android device to get the heading(azimuth, or yaw angle).

Android API used the Accelerometer value + the mganetic field to compute a matrix rotation, the azimuth is then extracted form that matrix (aka SensorManager.getOrientation(...)) But the result is very inaccurate! especially if the phone is perturbed by some magnetic stuff.

And then I have the Gyroscope, If I integrate the value of the gyro trough time, I'm able to get an actual Angle, but like everybody knows :p, this is subject to drift... after 10 seconds even tough I'm not moving the angle drifted of 10°...

So here I have in one side the result of the accel + magneto, it's quite crap near magnetic field and on the other side I have the result of the gyro that are really good, but drift over time...

So my question is, is there an easy or smart way to combine the two results together to get a kind of "robust" heading estimation? I say easy because I know there is kalman filters.. but even tough i read the theory 50 times I can't get a damn thing :).

Thank you!

Answer

Ali picture Ali · Nov 9, 2011

As far as I know, either the Kalman filter or something similar is implemented in the SensorManager. Check out Sensor Fusion on Android Devices: A Revolution in Motion Processing.

You are trying to solve a problem that is already solved.