University of Bristol, Mechanical Engineering Department, PhD year 1/3 (2009-10) - An efficient orientation filter for MARG (Magnetic, Angular Rate and Gravitational) sensor arrays
A real-time demonstration of an efficient orientation filter capable of providing an estimate of the sensor arrays orientation relative to the earth through the fusion of tri-axis gyroscope, tri-axis accelerometer and tri-axis magnetometer data. Unlike an IMU, the inclusion of the magnetometer mean that the filter is not subject to any accumulating errors. The filter also incorporates magnetic distortion compensation to overcome soft-iron disturbances and gyroscope bias drift compensation. The algorithm is an alternative to more computationally expensive Kalman based solutions that are commonly used in this application. The total computation requirement of this filter is 278 scalar arithmetic operations per sample.
Source code and documentation available here: http://code.google.com/p/imumargalgorithm30042010sohm/
Hardware used in video: Sparkfun 6DOF IMU Razor (ADXL335, LPR530 and LPY530) with gyroscope RC HP filters removed, Sparkfun HMC5843 breakout board (low ESR cap replacement), x-io Board with .NET interface library (http://www.x-io.co.uk).