 # Accelerometer to estimate speed

Hi all,

I am working in a robotics project, concretely in an Autonomous Ground Vehicle.

I am interested in estimating the speed with a 3 axis accelerometer.

My main idea is interfacing the accelerometre (with a nice Analog output) and read it periodically using interrupts. Knowing the acceleration and the period of time between reads I guess I could estimate the speed (hard integration).

I just wonder if anyone has ever done speed estimation using an accelerometer in Arduino and if my suggestion is correct.

Thanks

Dolphin

Hi Dolphin,

Could be fun trying but I would guess it would be difficult to do because you may get a lot of spurious data from the accelerometers if the surface is not absolutely smooth. I would guess the accumulated speed errors would make the readings unreliable at best.

Assuming the robot is moving on the ground, any reason you can’t use the accumulated movement of whatever is propelling the robot to get the speed, like rotation rate of the wheels?

I’ve got to echo mem. Integrating acceleration to get velocity (and integrating velocity to get position) can be done but doing it with any real accuracy is very difficult (hence the 10s of \$K of commercial units). OTOH a wheeled vehicle can simply count revolutions of the axle. IMUs are needed only on water- and air- craft where the vehicle motion thru its media is not the motion over the ground since the media may itself be moving.

Hey,

Just throwing my two cents in but I believe an object traveling at constant velocity will have 0 acceleration. I would take the other guys suggestion and somehow count how many times the whell turns, kinda works the same way as the car you drive to work.

Hey,

Just throwing my two cents in but I believe an object traveling at constant velocity will have 0 acceleration.

Indeed, but if you have kept track of the velocity up til that point you know the spped that the thing is moving at.

I do believe in the days before GPS, vehicle tracking was done using accelerometers.

It wouldn’t take long to connect an accelerometer to and Arduino and try it out. It would be interesting to know how good/bad it works.

Mike

I do believe in the days before GPS, vehicle tracking was done using accelerometers.

It wouldn’t take long to connect an accelerometer to and Arduino and try it out. It would be interesting to know how good/bad it works.

The challenge is that the acceleration forces of a small robot are of a similar level to the spurious noise generated through jiggling of the accelerometer due to motion on an uneven surface.

I played around with trying to get distance information from a moving 3-axis accelerometer (a nunchuck) and got too much error to be useful. Velocity will be easier than distance so its worth trying if you are up for experimenting, it would be interesting to see how successful you are with the accelerometer.

But if the point of the exercise is to get accurate readings of velocity then measuring movement of the wheels is easier

Noise, per se, is not the problem, it is systematic error. Suppose your accelerometer is in error by 0.01 g or 0.1 m/s^2 (a 1 g accelerometer off by 1%). Suppose also that the integration math is perfect and that the system is at rest. After 1 second the calculated velocity is 0.1 m/s, after 2 seconds the calculated velocity is 0.2 m/s. After 100 seconds the calculated velocity is 10 m/s - about 20 mph.

An integration process averages random noise but accumulates systematic errors. A systematic error could be a simple as the accelerometer not being quite level - a 1 degree tilt causes a significant error ( 0.17 m/s) since the system will interpret the earth 1 g acceleration as a motion.

One possible solution can be a periodic reset. If you know, somehow, that the system is at rest (perhaps the motors are not running) set the integrated value to zero and start over again.

The challenge is that the acceleration forces of a small robot are of a similar level to the spurious noise generated through jiggling of the accelerometer due to motion on an uneven surface.

The noise referred to above is the accelerometer signal deviation from true acceleration due to motion on an uneven surface. I found these error signals were of too high a magnitude compared to the acceleration I was measuring to make the accumulated acceleration values much use after a few tens of seconds.

Also, resetting when stationary would be desirable, but with just an accelerometer, how do you know when its stationary on a surface that may not be level?