Go Down

Topic: Need an easy to use 9DOF IMU module (Read 4689 times) previous topic - next topic


Hello everyone,
I want to try and build a Quadrotor over the summer, I plan on designing my own controllers(PIDs) and implement them on an Arduino.
In order to do so I need to obtain the orientation, I'd prefer using a 9DOF IMU module(6DOF could also work).
I aim for a simple to use IMU module so I can get the orientation(XYZ Acceleration, Euler angles or pitch/roll/yaw, and magnetometer data) easily. I'd like to spend as little time as possible getting it to work(And I'm not very talented when it comes to electronics/programming).
If the calculations are made on the Arduino I'd need it to have enough power left to handle the PID controllers(Optimal solution would be the IMU it self doing all of it).
After those two requirements are met I wouldn't want an expensive module as I'm a broke student  :)

To summarize, I'm looking for an easy to use 9DOF IMU module(Or 6DOF) that would allow me to use the Arduino as a PID controller without getting too expensive.

I was thinking about the:

  • MPU-6050, costs $40 on sparkfun, however seems to be difficult to work with and get the DMP to work.

  • FreeIMU 0.4, would cost around $100, seems to be pretty easy to use, uses the MPU-6050 and I believe it uses the DMP feature so it would save CPU time on the Arduino. The developer stated on one of his youtube videos that there are drifting problems.

  • ArduIMU, would cost around $80, uses the MPU-6000 but without DMP, has drift issues from what I've read.

  • MinIMU-9 , price is about $50, seems to be easy enough to use with an Arduino, the processing is made on the Arduino so might not have enough CPU for the PID controllers. Perhaps its possible to get one Arduino to process the data and send it to a second Arduino(The PID controllers)?

I'd be very happy to hear your thoughts/ideas on the modules above or anything else, I'm a fish out of the water here.


I just received one of these about a week ago:

They're based in China, so delivery took a couple of weeks, but it was far cheaper than anywhere else.

So far I've not done anything other than to output values from all the sensors to Serial/LCD but it all seems to work fine. I even took a pretty picture of it once I'd soldered the header pins on:


Jun 13, 2012, 02:08 am Last Edit: Jun 13, 2012, 02:27 am by Fabio Varesano Reason: 1
Biased comment below1

FreeIMU is actually a 10DOF board as it also comes with the MS5611 high resolution baromether. This allows to not only track rotations (yaw, pitch and roll) but also to track altitude. When the pressure readings gets fused with the dynimic acceleration readings coming from the MPU6050, the altitude can be tracked with about 10 cm of precision and almost immediate response to motion.

FreeIMU can be used on any Arduino out of the box with the FreeIMU library which has code to easily read from the various sensors and perform sensor fusion into quaternions, euler angles and yaw, pitch and roll notations.

FreeIMU is affected by drifting only when sensor fusion is performed without the magnetometer (as in the DMP testing video you saw) since gyroscopes are affected by drifting .. when sensors are properly calibrated and the sensor fusion happens using gyro, accelerometer and magnetometer there is no drifting.

FreeIMU is assembled in Italy. Each board is tested personally by myself.
FreeIMU is completely Open Hardware (CC-BY-SA license) and designed with KiCAD (no prioprietary software used) and on the project page you find all the information on how to build one by yourself.

Let me know if you have further questions, I'll be happy to reply.

[1] I happen to be the creator of the FreeIMU...


Hello Fabio, thank you for your reply(You are quite the celebrity when it comes to IMUs :) ).
I'm glad to hear the drifting isn't an issue.
I plan on using the IMU with an Arduino Uno, what frequency(Entire loop) can I expect using the FreeIMU v0.4?
I've seen a few Quadrotor projects using the FreeIMU, do you have an idea what loop frequency(IMU+contoll) they get?

*By loop frequency I mean how many times a second the Arduino can read the values from the IMU, calculate the Orientation(Euler angles, 3D acceleration data, compass orientation), calculate values for the PID controllers and output it.

Jase_MK, I'd be happy to hear about your progress.


With FreeIMU 0.4.3 using the FreeIMU library streaming over serial I get something about 330 Hz of quaternion output (complete orientation, result of sensor fusion). Faster speeds are achievable without streaming over serial.

On the MultiWii quadcopter firmware, with FreeIMU v0.4.3 you will get a loop time of 3200 to 3600 micro seconds in a complete control loop. The difference in time lies in those loops when the firmware needs to read the magnetometer or baromether since those have much slower sampling rate than the gyro/acc thus can be read less often.

Go Up