dIMU 6 DOF accelerometer and gyroscope

Dexter Industries is working on a new sensor for the NXT. It is a 6 DOF (Degrees Of Freedom) IMU (Inertial Measurement Unit), called a dIMU. It consists of an accelerometer, and a gyroscopic sensor.

An Accelerometer (often referred to as an “accel”) is a gravity sensor. It measures the strength of gravity (in g forces). If the accel sensor is stationary, flat, “upright”, and on the earth, it should read 1g in the Z axis, and 0g in both the X and the Y axis. If you were to tip the sensor, the X and/or the Y axis would then begin to feel the pull of gravity, and the Z axis would start to feel it less. However, being moved around causes it to sense more than just the pull of the earth; it now is sensing acceleration and deceleration, potentially in all three axis. Earth has a g force of 1, but the reason an accelerometer will often have a range more like 2, 4, or 8 g forces is because it senses acceleration due to motion.

The accelerometer used in the dIMU has a full 3 axis, and has a selectable range of sensitivity (2g, 4g, or 8g). It has 8 bit resolution for all ranges, but it also has a 10-bit resolution RAW value. The range chooses which 8 bits you are reading. Reading all 10 bits makes it unnecessary to worry about the range. The only advantage I can think of to using the range, and only 8 bits, is that you only need to read one I2C register per axis (instead of two). This could be a slight time saver if you really need speed. The down-side, is that in 4 or 8 g ranges you lose 1 or 2 least significant bits (you get lower resolution), and in 2 or 4 g ranges, the sensor value maxes out at 2 or 4 g. One more cool feature of the accel sensor, is being able to write an offset to the sensor itself. No sensor is perfect, and being so, they need to be calibrated. Being able to write an offset to the accelerometer means you potentially need less user code in the program to get good values.

A gyroscopic sensor (typically called a “gyro” for short), is a sensor that measures rate of rotation in dps (degrees per second). If you hold a gyro “upright” in a chair, and you spin the chair, the value from the sensor will be in direct proportion to the speed the chair is spinning (it will return how many degrees per second the chair is turning). If you want to get values that are of absolute degrees (so you know how many times you have spun around in the chair, for example), you can get an idea of the position by using an integral. To do that, you need to multiply the speed in dps (degrees per second), by the time since the last reading, and adding that to a grand sum. It would be something like this: Position = Position + (dps * TimeFrame). An integral is very susceptible to errors, because any little error in the reading will be added up every time you update the integral. Also, the longer between reads, the more likely you are to have missed important information (such as a short jerk to the sensor).

The gyroscopic sensor used in the dIMU has 3 axis. The gyro has a selectable range of 250, 500, and 2000 dps. The resolution is 16-bit. That means that in 2000 dps mode, you get readings precise to 1/16 of a dps. In 500 and 250 dps modes, you get readings precise to 1/64 and 1/128 dps. Now, in case you didn’t realize it already, that is very precise. Integrated into the gyro, is also a temperature sensor. I have yet to use it, but it is supposed to have a resolution of 8 bits.

John Cole from Dexter Industries sent me a dIMU to test, and experiment with (Thank you!). I can say from personal experience that it is a great device, and the possibilities that this combination of sensors brings are endless. I have already (as has Laurens Valk) built a segway that uses this as the sensor to balance, and I have many ideas for other robots that would use the dIMU.

This entry was posted in Dexter Industries, Mindstorms, NXT and tagged , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s