How to get 3D speed vectors?

I want to make a device that measures absolute small scale 3D speed. Small scale as in 10-150cm movements, and absolute as relative to ground and not relative to the device (the device will turn, roll, etc). Most use cases are indoors, so a GPS won't help. The range 0-5m/s would be the most interesting. Is this possible to realize? Preferably in a watch like footprint.

I bought the TI chronos watch thinking that would be decent candidate with its accelerometer and easy prototyping through python. However I met some problems.

• I can't seperate gravity. Can this even be done if the device turns? I guess at least a gyro calibrated to ground would be needed?
• Accuracy. The chronos had only 8 bit accuracy, and even then has quite a lot of noise. Even after removing gravity I suspect from simply integrating acceleration I could end up with crazy speeds.
• Detecting zero movement. Closely related to the 2 above.

Hopefully my question is not too open ended.

-
If you need 6-DOF positioning you need a 3-axis accelerometer and a 3-axis gyro. All accelerometers are noisy, various types of Kalman filters are normally used to clean up the data. Sparkfun has several sensor boards you could use as an example: sparkfun.com/categories/160 – Mark May 7 '11 at 19:27
@Mark: Thanks for the tip. This could've been posted as an answer. – Imbrondir May 11 '11 at 9:46

"Even after removing gravity I suspect from simply integrating acceleration I could end up with crazy speeds."

Yes, the biggest error in accelerometers is the "zero-g bias". The typical accelerometer bias will rapidly accumulate in a simple integrator to crazy speeds. However, there are ways of automatically compensating for this bias. The simplest method is to stop frequently, and zero things out during the stop. More sophisticated accelerometer autocalibration techniques can compensate for this bias even while we are moving, and even if there are slow (possibly temperature-related) changes in that bias. Some of those techniques take advantage of the fact that, the average acceleration over "long" time periods must be approximately zero (otherwise we would soon reach Mach 100), and indoors the average velocity must be approximately zero (otherwise we would soon exit the building).

"Accurate absolute ground-speed, not relative to device"

The swarm of quadcopters at the UPenn GRASP Lab is pretty amazing.

Most people don't notice that the position and speed sensors are not attached to the quadcopters themselves, but firmly bolted to the walls of the room the quadcopters are in. Unreliable sources tell me they get millimeter accuracy with a $30,000 motion capture system. I'm pretty sure gyros and accelerometers are mounted on the quadcopters, and the GRASP people use a Kalman filter to convert the raw data (rotation, acceleration, and motion-capture approximate position) into position and velocity information. I hear a lot of people use a string potentiometer a b c d or ultrasonic pingers to measure distance. There's a way of using 3 (or more) of them to find absolute x,y,z, position. I hear each string potentiometer is "only"$200.

"Detecting zero movement"

Many systems (including low-cost "laser mice") detect movement using "optical flow". If you're lucky, perhaps a hacked mouse or two a b c d e f will give you adequate data?

-
 Very informative answer. Thanks a lot! – Imbrondir Mar 22 at 22:53

I don't think you can reliably do it from just using measurements from the device's frame of reference. I think your best bet is to capture the position of the device externally. Basically motion-capturing.

Depending on your measurement resolution, it might be possible to use non-GPS triangulation methods. Acoustic beacons, probably. Radio time-to-distance probably won't work in such a small volume. And I suspect radio time-to-angle (VOR) probably would not work in an indoor environment.

-
Three towers with lights on them and some photoresistors on the device to recognize amount of light and corelate it to distance? – a sandwhich May 7 '11 at 3:55
Motion capture! Didn't think about that. Perhaps ultrasound measuring time-to-distance + doppler shift (if that can be done precise enough)? Great tips. I'll have to read up on the various motion capture hacks. – Imbrondir May 7 '11 at 10:26
In addition to the motion capture, if this project allows room for it, a beagleboard with opencv and camera. – a sandwhich May 7 '11 at 17:44