What's needed to utilize an IMU such as the ArduIMU+ V3 to be used in an INS. Is there any other hardware needed?
2 Answers
It contains all the necessary components to function as a rudimentary IMU. If you read through the comments here, you'll see that either a GPS or magnometer will be required for error correction. All IMUs will suffer from drift without some calibration, especially one this cheap! I don't see a clear answer on whether this can operate without one, but I imagine it could, albeit with a large margin of error.
-
-
$\begingroup$ I'm making a robot that learns to 'walk' and I need to determine when it moves forward for the learning. $\endgroup$– JordanCommented Nov 28, 2012 at 3:31
-
$\begingroup$ I've never used it so I won't speculate. I'm fairly confident the drift on one of these would be horrible after a minute's operation. $\endgroup$ Commented Dec 4, 2012 at 23:00
As you said you want to use it to detect, if your robot moves forward, I think it is good enough, if your robot is big enough. But, you need to calibrate it! (Not once but continously... before and during operation). You need of course some power supply and there should be no huge metal parts, magnets or coils in nearby, so that the magnetometer isn't disturbed.
Within a controlled environment, a magnetometer will give you stable readings on the orientation (where is north as a 3D vector), which won't drift. However it is quite slow.
An gyroscope is faster and will give you information on rotation. However, you'll measure some "biased error". And to get your orientation, you'll sum up all measurements... that contain this biased error. And this will give you an orientation that slightly rotates, because the error isn't 0 on average but has a negative or positive offset value (for each axis!) that even changes over time (e.g. influenced by temperature, battery voltage). However, one can use the Magnetometer to detect this, as it is quite stable (if not disturbed by magnets and so on).
The accelerometer will give you the acceleration in each direction, but also with an biased error! If you integrate up the acceleration (including the error) over time, you will get the speed... which will increase more and more, due to the biased error. So even your robot doesn't move at all, it would actually give you more than the speed of light within a very short time span. Also it is biased by gravition. That means under normal conditions you measure a downwards acceleration (~9.81 m/s²) - except if the sensor is in free fall, where it measures ~0 m/s². The only way to get around this, is to make assumptions in the motion model. For example, if you mount it to the foot/shoe of a robot (which works really good for humans). You can assume: if you only measure something near to 9.81 m² acceleration pointing downwards, the speed is 0. That means you reset your speed to 0 m/s, and only let it have different values if the accelerations differs more than a threshold value. There are also some online-calibration algorithms for accelerometers. They assume that you either measure some acceleration close to 0 m/s² (free fall) that can be used to correct the bias. Or you measure something that is earth graviation in any direction +/- some unbiased error. You can imagine that your measurements are either assumed as a vector from the center to the sphere's surface which has a radius of approx. 9.81 [m/s²]. Note that the earth gravition isn't exact and slightly location dependent. And if your robot needs to work on other planets or in space, there will be different values, too! ;-)
An ATMega328 should be fast enough to do those calculations, but maybe not at the best possible accuracy that can be achieved by these sensors. I don't know what kind of software is delevered with this board... If nothing is provided you need to grasp the following topics: kalman filters and quaternions; or need to find some software that does it for you.
I think it is doable with this board, but it depends much on details of your application... needed accuracy and how big your dimensions are (is your robot 3 cm small or is it a meter in size)? Do you need motion and speed only?
Anyhow, for sake of simplicity, I would suggest you to use a vision based location tracking instead. You can record a video of the robots "vision" (or "eyes") and detect the size and location of one or multiple markers in real time. If you know where the marker is and how big it is in reality, you can estimate the robots position. This is much simpler and much more accurate, but might need a bit more processing power and a camera, but saves you a lot of time.