Electronic – IMU (ADXL345 & ITG3200). Triple Axis Filter

.net-micro-frameworkimu

I am building a TriCopter based on the FEZmini .Net Micro Framework.

I have an ADXL345 triple axis Accelerometer and an ITG3200 triple axis Gyro which I am interfacing via I2C.

I am able to get data from the two sensors and they seem to be working fine. What I am having a hard time with is finding a filter that can successfully fuse the two sensors data together into useful IMU data.

I have converted the Kalman Filter presented by Varesano.net to c# but without any useful results. The filter simply does nothing when the IMU moves.

I also converted the complimentary filter presented by nuclearprojects.com to c# with more success, but not complete success: Although the X and Y values are stable, the Z axis keeps rotating fairly constantly, which means I have no good data for Yaw of my TriCopter.

If you need more background on my project, please let me know or have a look at my project on my site at: http://bit.ly/TriRot

Any help would be much appreciated.

Thanks in advance

Gineer

Best Answer

Assuming that the conversion of the algorithms you used was correct, I would suggest the Kalman filter. However, the issue you are going to face is that the .NET Micro framework will not run the cycles fast enough to fuse the sensor data and prevent drift or provide stable results; this will be especially true once you put the other runtime code on the processor. You might squeeze 20-30hz out of the processing loop if it is exclusively fusing the data.

Arduino is not running managed code and is optimized by the compiler giving it the extra edge needed to make a semi functional copter as you can see on youtube. Still not stable enough for practical use though IMO.

In order to have an effective IMU and killer end product, you'll need to process the fusing algorithm with a separate processor running non-managed code.

If you still want to go down the road of using a .NET micro based copter for the core flight control (which I am doing myself), take a look at the new Invensense MPU-6000 which does the sensor fusion onboard and effectively offloads the calculations from your managed core processor.

http://invensense.com/mems/gyro/mpu6000.html

Related Topic