Maker Pro
Maker Pro

choosing components for an IMU/AHARS (accelerometer, gyroscope, magnetometer, gps)

M

Mike Noone

Hi - I'm starting up work on building an IMU/AHARS (Inertial
Measurement Unit/Airborne Heading-Attitude Reference System). I need to
maximize accuracy within about a $500 budget. It will be put on a
walking 6 legged robot that I've spent the last 18 months working on
(that I'm also opening up all the source code, schematics, hardware
designs, board layouts, etc. to shortly). This robot is controlled by
hobby servos at the moment (may be switching to something else in the
future), and thus it is not super steady. Since all the servos are run
at 50Hz - I expect most of the shaking occurs at around 50Hz. But if
anybody thinks this is wrong I would love to hear other opinions.

This device will take in data from 3 axes of gyroscope, 3 axes of
accelerometer, 3 axes of magnetometer, and a gps and combine it all
into an XYZ offset and a roll, pitch, yaw offset from initial (power
up) conditions. It will have some sort of processor onboard to do all
the filtering (using kalman filtering). Currently I'm thinking I'll use
an Atmel AT91SAM7X256 just because I'm very familiar with this part.

My current plan is to use 3 Analog ADXRS401 gyros. I've chosen these
because I believe them to be the most accurate of the under $100/axis
gyros for low speed operation. I would be very interested to hear if
anybody thinks this is wrong. I've only looked at Analog, Invensense,
Murata, and Tokin parts - does anybody else make low cost MEMS gyros?
Kionix used to but now they don't seem to.

There is alot of talk about the 3db bandwidth of the ADXRS401 in its
datasheet. I guess I don't totally understand what this means. I mean
certainly I know what 3db bandwidth refers to when talking about
amplifiers, but with a gyro? Does that mean the actual output voltage
decreases as you increase the frequency that you're sampling at? I want
to sample this thing as fast as possible for interpreting the sensory
data. How fast can I go up to? From reading the datasheet, I think
2KHz? Do I start to lose accuracy when sampling at this high of a
frequency?

Regarding gyros - I see that the Analog parts have both a 2.5V output
and a temperature output. I wonder, would it make sense to put a
resistor directly beneath the gyro and use some sort of control loop to
keep the part at a constant temperature? Also, what use is the 2.5V
output? Is the 2.5V output the same as the null output? Maybe are you
supposed to use the difference between the 2.5V output and the actual
output as the measure of angular speed?

Next - for accelerometers - I'm thinking I'll use 3 of either the
Analog ADXL103 or the ADXL203. The difference between the two is that
the 103 is a 1 axis part and the 203 is a 2 axis part. Is there any
advantage to having duplicate axes? I also looked at the Freescale part
- the MMA7260Q, but its bandwidth leaves alot to be desired (3db
bandwidth is 150Hz on the A axis, compared to 2.5Khz on the Analog
parts). Again, do I lose accuracy when I sample it at such a high
frequency? Are there any other parts I should be looking at?

For a magnetometer - I've used the MicroMag3 that Sparkfun sells with
good success. I've also used the Honeywell HMR2300 and it has also
worked well. But I really am not so sure which sensor among these or
the many others out there would be best. One thing that should be noted
is that there will be 18 motors operating within about 20cm of these
sensors. Surprisingly, with the MicroMag3 that I currently have on
board - I have not noticed a large difference in sensor readings with
the motors on or off. Any guidance here? I'm thinking I should probably
use the gyro and accelerometer parts primarily.

For GPS - I'm thinking I'll use a U-Blox LEA-4S. Not sure what antenna
to use. Suggestions? Any others that I should be considering? Also -
how much will I be using the GPS data? I mean this robot moves at maybe
10cm/second or so - so I expect the gyro, accelerometer, and
magnetometer data will be much more pertinent.

Also - how much accuracy do I need for this? The SAM7X has a built in
10b ADC. Is that enough? I really want this device as accurate as
possible, so if I need an external ADC with more precision than that is
fine by me.

With regards to kalman filtering - the tutorial I've been following has
just been covering how to correct gyro data. Does that mean that
accelerometer data is fine how it is? It doesn't need to be filtered?

Any suggestions/advice/pointers/etc. would be greatly appreciated!

Thanks!

-Mike Noone
 
Top