FreeIMU: an Open Hardware Framework for Orientation and Motion Sensing

FreeIMU is an ongoing research project which aims to design Open Hardware 9/10 DOM/DOF Inertial Measurement Units as well as easy to use Orientation and Motion Sensing libraries, built on top of the Arduino platform.
The goal of the FreeIMU Framework is to simplify the development of projects based upon the most powerful and new consumer grade inertial, magnetic and pressure sensors.

FreeIMU version 0.2 (left) and version 0.1 (right)

The main application of FreeIMU is orientation sensing: by reading the data from the various sensors is possible to compute precisely the orientation of FreeIMU in the space. Recent boards also feature an high resolution barometer allowing to precisely track the device altitude. This can be useful in many applications: human-computer interaction device prototyping, flying machines, robots, human movement tracking and everywhere orientation sensing is a key aspect.

As FreeIMU breakout the sensors interrupt pins, it's also possible to detect per axis single and double taps, free fall as well as activity or inactivity. This makes FreeIMU a very good choice for Human-Computer devices prototyping. Interrupts pins are also very useful if you are into interrupt based reading of the sensors, useful to develop high frequency interrupt based sensor reading.

Video presentation of FreeIMU

Older video presentations: FreeIMU v0.3, FreeIMU v0.1 and 0.2.

A true Open Hardware project

Open Hardware Logo

FreeIMU is a true Open hardware, released under the CC-BY-SA. You are free, actually encouraged, to use it for any purpose, to study and modify its designs, to make your own copies of FreeIMU and even sell your own FreeIMU based hardware. But, you will have to share your designs based on FreeIMU keeping attribution and sharing them using the same libre license.

On FreeIMU repository (see development section below) and from the downloads on this page, you have access to everything you need to build your own FreeIMU board. You have access to the schematics, the PCB designs and even the bill of material so that you can build your own FreeIMU.

Moreover, FreeIMU has been designed using KiCAD, an excellent libre PCB design software, so you don't have to rely on proprietary software to study or modify FreeIMU.

Getting FreeIMU

An assembled, tested and ready to use FreeIMU board can be bought from:

The FreeIMUs boards bought from the above shops financially support the project. The boards have been produced and assembled in Italy by reasonably paid workers in a safe environment in respect with European and Italian laws.

Build your own FreeIMU

If you have SMD soldering experience (or if you are up for experimentation) you can build your own FreeIMU. From the downloads below you have access to all the designs needed to have your FreeIMU PCB manufactured.

You can get cheap PCB with awesome quality from Dorkbot PDX and order the various components needed from you favorite electronic distributor: the Bill of Materials (BOM) files will tell you exactly which components you'll need for your FreeIMU.

The are various ways of soldering the board. If you only need a couple of boards done, tack flux, solder wire and hot air reflow station are enough to build your boards (Remember not to use hot air over the pressure sensor). See this video for good instructions. In case you are building more units, an SMD stencil with solder paste is the suggested method.

In case you need help, just post a comment below.

FreeIMU versions

FreeIMU version 0.1

FreeIMU v0.1

WARNING: Discontinued due to the phasing out of the HMC5843.

FreeIMU v0.1 is the simplest FreeIMU available. It contains the ADXL345 accelerometer, the ITG3200 gyroscope and the HMC5843 magnetometer, their respective capacitors and an additional 10uF capacitor to help keeping the power to the sensors stable. It doesn't have any voltage regulator nor any level translator so it needs to be connected to a 3.3V power source and the I2C level signals have to be 3.3V. When used on a 5V microcontroller, an I2C level converter and a voltage regulator are needed.

FreeIMU version 0.2

FreeIMU v0.2

WARNING: Discontinued due to the phasing out of the HMC5843.

FreeIMU v0.2 has the same sensors (ADXL345, ITG3200 and HMC5843) and size of v0.1 but I added an integrated voltage regulator (MIC5205) and a logic level converter (PCA9306). With these components it's extremely simple to use FreeIMU v0.2 on 5V boards like 16MHz Arduinos, just connect FreeIMU to the 5V, GND, SDA and SCL on Arduino and you are ready to go!

IMPORTANT: in version 0.2 sent to production there is a bug in the drill size of the connectors. The drill hole should have been 0.04" while it is actually 0.032". Consequence of this is that only rounded pins will fit inside the drill and standard squared pins won't fit. This is not really a problem as the big oval pad makes actually possible to use 90 deg squared pin arrays using the pad as a smd connector. The Kicad sources above and the gerbers marked with "Fixed" have this issue fixed. However they haven't been tested on production so double check them before send them to fabrication.

FreeIMU version 0.3

FreeIMU v0.3

FreeIMU version 0.3 replaces the accelerometer and magnetometers used in v0.1 and v0.2 with the ADXL346 as accelerometer and the HMC5883L as magnetometer. The gyroscope is still the ITG3200. FreeIMU v0.3 integrates a voltage regulator (MIC5205) and a logic level translator (PCA9306) as well as all the pullups resistors needed.

FreeIMU version 0.3.1

FreeIMU v0.3.1 is a minor revision of FreeIMU v0.3. There have been some corrections in the silkscreen and the footprint of the HMC5883L have been made slightly bigger to make assembly easy. Everything else is just as in FreeIMU v0.3.

FreeIMU version 0.3.5

FreeIMU 0.3.5 top view

FreeIMU 0.3.5 is a small (22x20 mm) 9 degrees of measurement IMU MARG sensor featuring the BMA180 accelerometer, the ITG3200 gyroscope and the HMC5883L magnetometer.

FreeIMU 0.3.5 also has two additional subversions, FreeIMU 0.3.5_MS which features the MS5611-01BA high resolution pressure sensor and the FreeIMU 0.3.5_BMP which features the BMP085 pressure sensor.

FreeIMU v0.3.5 has an integrated voltage regulator (MIC5203) allowing you to plug it from 3V3 to 16V providing you 80mA of current which you can use to chain it to other 3V3 sensors or devices. By using the MIC5203, no tantalum caps are used in the whole design. Tantalum is not a good idea socially and environmentally.

The board has integrated 2K2 pullups resistors (which can be enabled or disabled by means of a solder switch) but doesn't have an integrated logic level converter. We decided to not include the LLC (which is present in my FreeIMU v0.2 and v0.3) as it adds considerable complexity in the design and schematics without being strictly necessary. In fact, given a properly configured software, it's a redundant part. Moreover the upcoming development of many 3V3 based control boards (eg: Multipilot 32) makes adding an LLC not a very far-seeing choice.

The IMU board is however compatible with my LLC board which can be stacked above the IMU, so that you can easily add the LLC protection keeping the amount of additional wires at the minimum.

The board, a part from the usual power and I2C connectors, breaks out the interrupt pins for all the three sensors. This should empower software developers to design interrupt based sensor reading and sensor fusion algorithms (opposed to the currently common polling based approach) which should provide possibility to shorten the cycle path of our algorithms.

FreeIMU version 0.3.5_MS

FreeIMU v0.3.5_MS

FreeIMU v0.3.5_MS is a variation of FreeIMU v0.3.5 which features the BMA180 accelerometer, the ITG3200 gyroscope, the HMC5883L magnetometer and the MS5611-01BA high resolution pressure sensor.

The board comes with a voltage regulator (MIC5203) and 2K2 pullups optionally disabled by using of a solder switch.

FreeIMU version 0.3.5_BMP

FreeIMU v0.3.5_BMP top view

FreeIMU v0.3.5_BMP is a variation of FreeIMU v0.3.5 which features the BMA180 accelerometer, the ITG3200 gyroscope, the HMC5883L magnetometer and the BMP085 pressure sensor.

The board comes with a voltage regulator (MIC5203) and 2K2 pullups optionally disabled by using of a solder switch.

FreeIMU version 0.4

FreeIMU v0.4.1

FreeIMU v0.4 features the MPU6050 gyroscope+accelerometer, the HMC5883L magnetometer and the MS5611-01BA high resolution altimeter.

The magnetometer is attached to the AUX I2C bus of the MPU6050 thus allowing it to be read directly by the MPU6050.

FreeIMU library

FreeIMU can be easily used on Arduino compatible boards using the Arduino FreeIMU library which implements sensor fusion MARG orientation filter enabling you to do easy and straightforward orientation sensing.

FreeIMU library - 2012/11/22
Use Arduino 1.0.1 IDE or later version.

Install the libraries as explained in the Arduino Libraries Reference section Contributed Libraries.
The FreeIMU library now supports all the versions up to v0.4. By default it's configured to be used on v0.4. In order to use on different boards, open the file FreeIMU.h and uncomment the correct version of your board.

The FreeIMU library also supports the following 3rd parties boards:

  • Sparkfun IMU Digital Combo Board - 6 Degrees of Freedom ITG3200/ADXL345 SEN-10121
  • Sparkfun 9 Degrees of Freedom - Razor IMU SEN-10736
  • Sparkfun 9 Degrees of Freedom - Sensor Stick SEN-10724
  • Sparkfun 9 Degrees of Freedom - Sensor Stick SEN-10183
  • DIYDrones ArduIMU+ V3
  • Generic MPU6050 Breakout boards (eg: GY-521, SEN-11028 and other MPU6050 wich have the MPU6050 AD0 pin connected to GND.)

Note for FreeIMU v0.1 and 0.2 users: from April 2011 the default magnetometer configuration is for HMC5883L. In order to use the library with HMC5843 (v0.1 and v0.2) edit the file HMC58X3.h and uncomment the line #define ISHMC5843.

FreeIMU Processing Programs
The FreeIMU library comes with Processing visualization demos. In order to use them, Download and install Processing. Copy the folders within the processing folder of the FreeIMU library archive into your Processing sketchbook.
Remember to change the Serial port address in the Processing code to match the address used by arduino on your system.

Ports to Other platforms

FreeIMU library on PIC 24 microcontroller by Hari Nair hair [dot] nair [at] gmail [dot] com. Author notes: 1. assumes a 6MHz crystal is attached and x4PLL internally, so Fosc = (6x4)/2 = 12 Mhz 2. trivial to use the internal FRC oscillator, instead of FNOSC_PRIPLL in the configuration words, use FNOSC_FRCPLL. This will give you Fosc = (8x4)/2 = 16MHz, but of course with less precision. 3. transmits ascii quaternion data at 38400baud. This does slow down the sampling rate. Without the quaternion print, the code completes in less than 10mS, so the sampling rate is exactly 100Hz as set by the timer.

FreeIMU library on NXP LPC1343 Cortex m3 processor by Hari Nair hair [dot] nair [at] gmail [dot] com. More details and possibility to contact the author on the FreeIMU community development forum.

Have you ported the FreeIMU library to other platforms? Please let me know and I'll list your work here!

Calibration

A calibration GUI application is available. The software is currently in alpha state, however many people are already using it.

The calibration, when properly executed, drastically improve the orientation sensing performance of the FreeIMU framework. If you are experiencing drifting or inconsistent results, your sensors may need to be calibrated using the Calibration GUI.

Community

There is now a FreeIMU Community website, which has been set up to become the central point of interaction between users of the FreeIMU framework. This is the place where you can get help, join others in developing new features, discuss IMUs applications and much more.

Previously we used FreeIMU answers on Launchpad as well as comments on Fabio's website for supporting users, however we decided to create an ad-hoc website to facilitate information gathering and collaboration between people.

Development, Bug Reports and Suggestions

Development of FreeIMU boards and libraries can be followed on FreeIMU project page on Launchpad which also hosts our software and hardware repository.

Suggestions or bug reports can be made on the FreeIMU Community, in the development forum.Previously bug reports were posted on the Launchpad bug reporting interface but that's not used anymore.

FreeIMU repository holds all the various library sources as well as design files and schematics. Everything is revisioned meaning that all the changes are logged and annotated.

The contents of the repository are available using Bazaar (bzr) with the command:
bzr co lp:freeimu

Never used bzr before? Not a big deal, it's very similar to git, svn or others. You may wanna have a look at the cheatsheet to have an overview of the commands available or read more documentation on bzr.

Alternatively, in case you have problems setting up bzr on your system, you can simply get the latest repository contents from here. The resulting file is a .tar.gz archive which can be opened with the excellent 7zip under Windows. Mac and Linux users shouldn't have problems opening such files.

The files on the repository can also browsed from a browser here. A list of recent changes is available here.

FreeIMU users videos

Here some videos made by FreeIMU users on their projects using FreeIMU.

rtsdrums flies like crazy with FreeIMU on his quadcopter.. check out the triple flip!

Warthox testing indoor FreeIMU v0.4r3 on one of his quadcopters.

Warthox stress test FreeIMU v0.3.5_MS on one of his quadcopters.

Chris uses FreeIMU on his VTOL EDF Tricopter powered by the MultiWii software.

Danilo Del Console uses FreeIMU in a 2 wheels self balancing robot.

Francesco Ferrara uses FreeIMU for a camera stabilization system.

Francesco Ferrara with his super fast implementation of the AHRS algorithm capable of displaying the rotating cube at 333Hz with FreeIMU! Great work!

Marchino65 with his first test with FreeIMU and the FreeIMU library on Arduino. The cube is spinning pretty good!

Francesco Ferrara in his first flight with FreeIMU on his very young quadcopter project called Simplo.

Install Instructions

Submitted by Rick (not verified) on Fri, 2012-09-14 16:34.

Hi Fab,

I'm sorry, for some reason I'm having trouble finding the
"install instructions in the FreeIMU library download page"
Maybe you could add the link for me in your email response?

The link below is not working for me right now - is it my end ?
"The files on the repository can also browsed from a webbrowser here."

Thanks again for your help,
Rick

Just search for the file

Submitted by fabio on Fri, 2012-09-14 16:38.

Just search for the file FreeIMU.h within the FreeIMU library and uncomment the correct version of the board you are using.

The instructions in the

Submitted by fabio on Fri, 2012-09-07 14:40.

The instructions in the download section of this page tells you what to do.

Download Section

Submitted by Rick Eis (not verified) on Fri, 2012-09-14 05:51.

Where is the download section you speak of?

Just below the links to

Submitted by fabio on Fri, 2012-09-14 11:17.

Just below the links to download the library.

Thanks, working fine now.

Submitted by Anonymous (not verified) on Fri, 2012-09-07 22:21.

Thanks, working fine now.

HELP.....ADXL345

Submitted by Anonymous (not verified) on Thu, 2012-09-06 11:20.

I always get this error when i uploaded the ADXL345_test code

ADXL345_test.cpp: In function 'void setup()':
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::getAxisGains(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:114: note: candidates are: void ADXL345::getAxisGains(float*)
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::setAxisGains(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:113: note: candidates are: void ADXL345::setAxisGains(float*)
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::getAxisGains(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:114: note: candidates are: void ADXL345::getAxisGains(float*)
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::setAxisGains(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:113: note: candidates are: void ADXL345::setAxisGains(float*)
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::getAxisGains(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:114: note: candidates are: void ADXL345::getAxisGains(float*)
ADXL345_test.pde:-1: error: no matching function for call to 'ADXL345::get_Gxyz(double [3])'
C:\Documents and Settings\INTERNET CAFE\Desktop\arduino-1.0.1\libraries\adxl345driver/ADXL345.h:109: note: candidates are: void ADXL345::get_Gxyz(float*)

That was a bug. Thanks for

Submitted by fabio on Fri, 2012-09-07 15:06.

That was a bug. Thanks for reporting. A fixed version is available on the repository at https://launchpad.net/freeimu/ ... please test it.

Altimeter values and speed

Submitted by tussh13 (not verified) on Tue, 2012-09-04 10:51.

1.There is no example in the FreeIMU library for getting altimeter values. How do i get altimeter values? I hav a 0.4.3 version.

2.Is it possible to get the compensated acceleration values of all 3 axes individually using the library?

1) The MS5611 is part of the

Submitted by fabio on Sat, 2012-09-08 22:52.

1) The MS5611 is part of the FreeIMU library and contains examples on how to get altitude readings from the barometer.

2) Not currently. Code example for doing that is available here and I do have newer code coming up which has gravity compensation as well as baro+acc filtered altitude estimation.

gravitiy compensation

Submitted by Angel (not verified) on Sun, 2012-09-09 20:47.

Is it normal to get non-zero gravity compensated values in a FreeIMU sitting still in the floor/table?
This is what I've done, I created a function into FreeIMU.cpp:
void FreeIMU::getDynamic(float * ypr) {
float q[7]; // quaternion
float gx, gy, gz, accx, accy, accz; // estimated gravity direction
getQ(q); // modified getQ so it returns the acceleration measurements in positions 4,5,6
accx=q[4];
accy=q[5];
accz=q[6];
//Note: calibrations have changed, convert acc in LSB to g using last conversions
// this is done in getvalues()

//calculate gravity components:
gx = 2 * (q[1]*q[3] - q[0]*q[2]);
gy = 2 * (q[0]*q[1] + q[2]*q[3]);
gz = q[0]*q[0] - q[1]*q[1] - q[2]*q[2] + q[3]*q[3];

Serial.print("Gravity: "); Serial.print("\t");
Serial.print(gx); Serial.print("\t");
Serial.print(gy); Serial.print("\t");
Serial.print(gz); //

accx-=gx;
accy-=gy;
accz-=gz;

Serial.print("Dynamic accelerations: "); Serial.print("\t");
Serial.print(accx); Serial.print("\t");
Serial.print(accy); Serial.print("\t");
Serial.println(accz); //

}

I have modified getQ to return a 9 vector where the last three are the accelerations:
void FreeIMU::getQ(float * q) {
float val[9];
getValues(val);
q[4] = val[0];
q[5] = val[1];
q[6] = val[2];
...

changed FreeIMU.h accordingly and added the acceleration LSB to g conversion, in my example using:
accgyro.setFullScaleGyroRange(MPU6050_ACCEL_FS_2);
I modified in getValues the line
values[i] = (float) accgyroval[i]/16384;
to add the LSB/g conversion.
And bellow the readings I get, even when I level the FreeIMU so that it is "perfectly" vertical and I get 1g reading in the z component, I read non-zero g for the x and y components, is this rounding error? I guess this is the reason for the non-zero readings in the dynamic accelerations.
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.10 -0.02
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.09 -0.01
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.10 -0.02
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.05 1.00Dynamic accelerations: 0.01 -0.10 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.10 -0.03
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.02 -0.10 -0.03
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.10 -0.03
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.00 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.03
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.00 -0.10 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.10 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.10 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.01 -0.09 -0.02
Gravity: 0.02 0.04 1.00Dynamic accelerations: 0.00 -0.10 -0.02

Doesn't look bad to me.. you

Submitted by fabio on Sun, 2012-09-09 23:44.

Doesn't look bad to me.. you may wanna use the new calibration code on the repository so that you should get perfect 0 0 1 gravity readings.

Cool. Looking forward to the

Submitted by zencuke (not verified) on Sun, 2012-09-09 00:51.

Cool. Looking forward to the enhancements.

A question about the Data Fusion Algorithm

Submitted by Uzumaki (not verified) on Fri, 2012-08-24 16:21.

Hi Fabio,

I have watched your video at:
http://www.varesano.net/blog/fabio/initial-implementation-9-domdof-marg-...
and your IMU is really amazing.

My IMU consists of a MPU-6050 (acc + gyro) and a LSM303DLHC (mag). I
also use the Madgwick data fusion algorithm. However my result is not
good. My IMU is very sensitive to the linear (translational)
acceleration. When I swiftly move the IMU back and forth, the
quaternion changes too much. Have you experienced this problem? If so could you give me some advices to overcome it?

Thank you.

Personally, I never had this

Submitted by fabio on Fri, 2012-08-24 16:42.

Personally, I never had this problem.. but I can give you some advices.. you may wanna play with changing the values of the following two values in FreeIMU.h

#define twoKpDef  (2.0f * 0.5f) // 2 * proportional gain
#define twoKiDef  (2.0f * 0.1f) // 2 * integral gain

Yeah, I will try to adjust

Submitted by Uzumaki (not verified) on Mon, 2012-08-27 05:02.

Yeah, I will try to adjust those two to see if I can get better results.

BTW, could you please post a video demonstrating the lateral acceleration rejection capability of your IMU?

Thanks

Invensense releases license for 6050 DPM in open source project

Submitted by zencuke (not verified) on Fri, 2012-08-24 15:55.

I saw a note in diydrones (http://diydrones.com/profiles/blog/show?id=705844%3ABlogPost%3A932616&co...) which says Inverness released a license for using the DMP fusion firmware in open source projects. Will we see this in FreeIMU lib soon? Has anyone tried running the DMP firmware on the FreeIMU MPU6050 with any software. It would be nice to get the sensor fusion algorithm out of the Arduino code (both code space and CPU time wise ) so it has more room for other things.Does anyone know if the available DMP fusion firmware works with the HMC5883L magnetometer?

Having trouble with FreeIMU lib

Submitted by Anonymous (not verified) on Sun, 2012-08-12 21:17.

Hello Mario,
I'm using the latest freeIMU library(freeIMU 0.4), the raw data seems to be ok but the yaw,roll,pitch seems to be messed up.
The freeIMU_yaw_pitch_roll example didn't compile so I've added:
#include "I2Cdev.h"
#include "MPU6050.h"
to the Arduino file.

This is the raw data I'm getting: http://i.imgur.com/ZRdJG.png
This is the yaw, pitch, roll data I'm getting just after the calibration: http://i.imgur.com/RDHDG.png
This is the yaw, pitch, roll data I'm getting after 10 seconds without touching the board: http://i.imgur.com/9Oeml.png
As you can see, the angles are not the same, quite far from it.

Any ideas what's going wrong?
Thank you!

The sensor fusion algorithm

Submitted by fabio on Sun, 2012-08-12 22:40.

The sensor fusion algorithm will take about 30 to 120 seconds to settle so, it should be pretty normal. Best way to check for correctness is loading the FreeIMU_quaternion and run the FreeIMU_cube on Processing so that you can better visualize things. Sometime ypr readings may be misleading.

I tried that as well, I

Submitted by Anonymous (not verified) on Sun, 2012-08-12 23:11.

I tried that as well, I uploaded the quaternion example and opened Cube on processing, left it to settle down for 3-4 minutes, pressed 'H' to set yaw, pitch, roll angles to zero.
Waited 10-15 seconds and the yaw drifted heavily:
http://i.imgur.com/g4AN2.png

Thank you for your help and quick replies!

IMU-Mocap

Submitted by Diego (not verified) on Mon, 2012-07-23 03:07.

Hi Fabio, Did This guys used your FreeImu for this project?
http://www.youtube.com/watch?v=MVvDw15-3e8&list=UUxVIgBfINXmlbaVmpt_LXXg...
If not, do you think that your IMU could have this quality?
It just I am trying to develope my own Inertial Motion Capture suit, and I am searching for the best solution available. There are tons of Imus, and I just have to decide for one.
Your´s seems very accurate.
What do you think?
Thank you!
Diego

I don't think this guys are

Submitted by fabio on Mon, 2012-07-23 09:17.

I don't think this guys are using FreeIMU. However, yes, FreeIMU can deliver such good results when properly calibrated, since it uses some of the best sensors available on the market.

FreeIMU is however only a sensor board and a library so you'll have to develop your solution for wireless communication and multiple IMUs data gathering.

You may wanna have a look at the SmartSkelethon project by John Patillo.

Problems with arduino + freeIMU driver

Submitted by Nejc (not verified) on Fri, 2012-07-20 09:11.

Hi,

First I would like to congratulate for a great project and for a contribution to the opensource world.

I bought an Arduino nano and started playing with IMU 0.35_BMP from ebay.
I succesfully programed the Arduino, the Arduino was recognised ok by the computer. But then I connected sensor IMU to arduino, and I got message "USB Device Not Recognized", but not always, sometimes it works.

Thank you for helping,

regards

Check your connections. You

Submitted by fabio on Mon, 2012-07-23 09:11.

Check your connections. You may have a short.

Missing KiCad library ??

Submitted by ProDrone (not verified) on Thu, 2012-07-12 15:29.

Hi Fabio,
I downloaded http://www.varesano.net/files/FreeIMU_v0.4.1_20111111_1954.zip
The sources for FreeIMU 0.4.x
When opening the project in KiCad,, i get an error:
The following libraries could not be found:
\fv_kicad_lib

Can i download it from somewhere ?

best regards!

Check out

Submitted by fabio on Thu, 2012-07-12 15:35.

Bus Pirate - Magnetometer I2C address

Submitted by Bart (not verified) on Mon, 2012-07-09 18:41.

Hi! I've received the Free IMU 0.4r3 and connected it to a Bus Pirate V3 with GND - VIN(5v) - SDA - SCL. I set the mode to I2C, speed at 400Khz (also tried at 100Khz), put the Pullup resistors and PSU on and let it scan for I2C devices. It found 0xD0 (0x68 W), 0xD1 (0x68 R), 0xEE(0x77) which come from the 6050 gyro and the MS5611 altometer but no response from the Magnetometer. When I try to get an ACK from the magnetometer, it doesn't respond. Have you got any idea?

Auxiliary I²C Bus Mode

Submitted by Bart (not verified) on Tue, 2012-07-10 08:40.

I think I got why the magnetometer didn't respond to an address search. The auxiliary I2C bus mode is probably still in master mode instead of pass-through mode so the system processor can't see the magnetometer. Unfortunately I don't find the default mode in the specs. Can you confirm my way of thought? Thanks!

Yeah, by default the MPU6050

Submitted by fabio on Tue, 2012-07-10 10:23.

Yeah, by default the MPU6050 works as master on the Aux I2C. If you wanna to connect the AUX I2C and the primary I2C bus, have a look at the FreeIMU library, functions FreeIMU::init, MPU6050::setI2CMasterModeEnabled(), MPU6050::setI2CBypassEnabled respectively in FreeIMU.cpp and MPU6050.cpp.

FreeIMU and eZ430-RF2500 ?

Submitted by Nejc (not verified) on Wed, 2012-07-04 08:55.

Hi,

Congratulation for a great project!

I was wondering if anyone tried to connect the freeIMU to the eZ430-RF2500 board instead to Arduino? Its even possible? Since eZ430-RF2500 is wireless it would be usefull also for quadcopters,...

Thank you,
Regards
Nejc

Hello Nejc, I'm not aware of

Submitted by fabio on Wed, 2012-07-04 14:08.

Hello Nejc, I'm not aware of anyone who did that.. however, supposing that such development board breaks out the I2C pins of the micro, it should be possible.

Actually, I'm currently developing a product using the same inertial sensors of the FreeIMU but directly interfaced with a CC430.. I'll have more details out on this website later this year.

Thank you for the

Submitted by Nejc (not verified) on Wed, 2012-07-04 14:12.

Thank you for the reply.

Actually I was searching for a solution to use FreeIMU wireless. I found just 1 hour ago that its possible to connect the Arduino to Xbee.
I dont know how the quadcopter projects on this side solve the problem of wireless, but I guess it would work with Xbee.

Regards,
Nejc

freeIMU 4.3 not working...

Submitted by Rob (not verified) on Sat, 2012-06-23 08:02.

Hi Fabio,

I recently received my freeIMU 4.3 and have just connected it to my Arduino Uno as per your video. Running the raw data example sketch, only the last two columns show any data, the other columns just display '0''s.

I am using Arduino 1.0.1.

any help would be greatly appreciated.

keep up the good work. thanks.

Have you modified FreeIMU.h

Submitted by fabio on Sat, 2012-06-23 18:38.

Thanks for getting a FreeIMU! Have you modified FreeIMU.h as explained in the FreeIMU library instruction above?

One problem fixed, one other problem to solve

Submitted by Rob (not verified) on Sun, 2012-06-24 03:49.

Thanks for the reply. I can't believe i'd forgotten to modify that line. The raw example sketch now works.

The problem i am now having is with the yaw_pitch_roll sketch, it doesn't compile, returning the error:

In file included from FreeIMU_yaw_pitch_roll.cpp:10:
/Users/Username/Documents/Arduino/libraries/FreeIMU/FreeIMU.h:136: error: 'MPU6050' does not name a type

All the libraries are in the correct location.

Thanks again for the reply.

Modify the

Submitted by fabio on Sun, 2012-06-24 09:01.

Modify the FreeIMU_yaw_pitch_roll program so that it includes the following two lines (put them after the other includes):
#include "I2Cdev.h"
#include "MPU6050.h"

That's a bug which is already fixed in my development version of the library which will be fixed in the next release of the FreeIMU library.

everything working

Submitted by Rob (not verified) on Tue, 2012-06-26 05:22.

thanks a lot for the support and for a great product.

About FreeIMU

Submitted by kshitiz (not verified) on Sat, 2012-06-23 00:19.

Hi,

We are planning to build an autonomous outdoor blimp for a college project this fall. We are wondering if your IMU would be good for this project. Our blimp would navigate through the predefined GPS waypoints with the help of IMU and GPS. Your suggestions would be appreciated.

Thanks

PS: The item is currently sold out.

We are planning to use

Submitted by kshitiz (not verified) on Sat, 2012-06-23 00:22.

We are planning to use arduino mega.

Wow, cool project! Very

Submitted by fabio on Sat, 2012-06-23 18:44.

Wow, cool project! Very interesting!

Yes, a FreeIMU with its very precise orientation and altitude sensing would be pretty good for such application. Pair it with a GPS and an Arduino Mega and you will really have lot of possibilities!

The boards are currently in stock at viacopter.eu (only 2 units) and sdmodel.it (more than 20 units). Both shops offers international shipping options.

Good luck with your project!

Would FreeIMU work with this IMU?

Submitted by Anonymous (not verified) on Mon, 2012-06-18 18:29.

Hello,
We're working on a college project that is to implement an inertial navigation system.
First things first - we need the orientation of the body(9DOF) and FreeIMU seems to be perfect for our needs.
We thought about buying this module: http://www.ebay.com/itm/10DOF-MS5611-HMC5883L-MPU6050-module-MWC-flight-...
Seems that its using the exact same components as the FreeIMU v0.4.
Could we use FreeIMU with this module? If so, would it require doing any changes?

Many thanks!

That board is a complete

Submitted by fabio on Tue, 2012-06-19 00:53.

That board is a complete China clone of FreeIMU v0.4... I never used the board but I'm fairly confident that the Chinese cloned it completely, so it should work. At worst, you'll have to change some code modifying the sensors I2C addresses.

Please consider that testing sensors and board designs, writing code and supporting users takes me a lot of time and efforts which are payed by the incomes coming from FreeIMU board sales.

Without people buying FreeIMU there wouldn't be any FreeIMU library to use and I wouldn't be here answering your comments...

So, choose wisely.

Not an exact clone, probably same schematics

Submitted by zencuke (not verified) on Thu, 2012-07-19 20:19.

This clone is not as ethical as the earlier one you noted. They probably copied your schematic but they do not credit your design. From the photos you can see that they also did a different board layout including a different connector pinout. It is interesting that they added back a mounting hole. I wonder if the new board layout was done for any other reason than obscuring the fact that it is a clone.

3.3V Pro Mini wiring?

Submitted by zencuke (not verified) on Sun, 2012-06-17 05:20.

For the Stalker I connected VIN as per your 035_arduino.sch. Is that what you mean by 5V connector? If so maybe I'm OK.

How should I connect to the 3.3V Pro mini which is powered right now by a 3.3V FTDI USB board? I was assuming that I would need to skip the regulator and connect the Pro 3.3V VCC directly to the FreeIMU 3V3 pin. Will that work?

Now that the holes are gone how do you suggest attaching this board. I want to make sure the alignment matches. Can I safely drill the copper pads in the upper corners? I'm having a hard time finding these pads in the Gerber files.

Thanks again for the help.

Yeah, that's what I meant for

Submitted by fabio on Tue, 2012-06-19 01:06.

Yeah, that's what I meant for 5V connector.

When using an host board already working at 3V3 as the Pro mini 8MHz, the suggested way is to skip the regulator and connect it directly to 3V3 connector.

Removing the drill holes has been something which I carefully evaluated, not just something random. Mechanically fixing the IMU to the tracked object via screws, in some application, was giving extremely bad results caused by vibration propagations. That was an huge problems for early UAV/quadcopter testers in pre-0.3.5 boards. That's why you won't find mounting holes in the board any more.

The suggested way to fix your board is to use a thick and good quality bi-adhesive tape.

My application should be easier

Submitted by zencuke (not verified) on Tue, 2012-06-19 20:00.

Sitting between 4 quadrotor motors doesn't sound like the ideal environment for a sensor. A hard screw mount would probably be an efficient vibration coupler so the change makes a lot of sense. Fortunately my application is less abusive. I'll basically hang it on a bicycle. The information I want is climb rate which I hope to get from the pressure sensor and calculated from measured speed and climb angle.

Mounting

Submitted by Osman Eralp (not verified) on Tue, 2012-06-19 01:20.

Fabio, Many thanks for your efforts and for hosting this site.

Mounting is a major issue. I find it interesting that you moved away from using a screw mount. Did you try using rubber grommets to isolate the IMU from the mounting posts when you had mounting holes? Do you have a picture showing how the FreeIMU should be mounted using the bi-adhisive tape?

You can check the following

Submitted by fabio on Tue, 2012-06-19 10:33.

You can check the following link: http://warthox.de/2011/08/flyduino-mwc-board-with-freeimu-v0-3-5_ms/

Yes, we tried using the rubber and also plastic screws but results weren't as good as with bi-adhisive tape.

Help with MP 6050

Submitted by Gene (not verified) on Sat, 2012-06-16 05:08.

ciao!!
I fell on your youtube video; very limpid and nice.Thanks for all the efforts you've put in this. I am a super newbie who was given an arduino mega and and the invensense MP 6050 to work with. Could you provide with info (header kits and all)on how to interface with it as you did for the FreeIMUs. Iam trying to get position data from sensors for a moving car.

Per favore, prima grazie!!!!

Do you have the sensor in a

Submitted by fabio on Tue, 2012-06-19 00:55.

Do you have the sensor in a breakout board or are you going to design a board for it?

Post new comment

The content of this field is kept private and will not be shown publicly.
If you have a personal or company website insert its address in the form http://www.example.com/ .
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <small> <del> <img> <h2> <h3> <h4> <b> <video> <sub> <sup>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.
  • You may use [inline:xx] tags to display uploaded files or images inline.
  • You may insert videos with [video:URL]
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

More information about formatting options