Friday, December 8, 2006

Ideas on Balancing

Ever since seeing Legway in action I've wanted to make a balancing robot, but my stock RCX didn't quite have the oompf to do it (that guy has some special proximity sensors). Then I read an article on Ballbot and knew that that's what I have to try to build.

But if I can't detect tilt in one plane, how am I going to detect it in two? I was originally thinking some kind of axle-mounted rotation sensor, but that won't work when the wheel is rotating (duh). The standard Lego solution for two-wheeled balancers seems to be a distance sensor in front and back, both pointed downwards. This is no good for several reasons:
  1. I need front and back AND side to side (solution so use 4 sensors, but...)
  2. The solution fails for slopes or obstacles
  3. Other than the four-sensored jackal of Tingawahe, no real animals use this method
  4. In the special case of a light sensor (instead of, say, an ultrasonic one), the ground has to be totally homogeneous in color and texture.
The standard non-Lego (but still robotic) solution seems to be gyroscopes (which Ballbot uses), but those suffer from a non-obvious problem: The rotation of the Earth. As the Earth turns the gyroscope stays still in space, which makes the robot fall over. There are calculations to counteract that, but still, no real animals do that either which should be a hint there's a better way. Also, it seems like it would be more robust to detect gravity directly, rather than have a requirement that you start out upright and keep track of everything since then (a kind of verticality dead-reckoning, when you put it that way).

"Real animals" got me thinking, though. What about those otolith dealies inside our ears? They detect gravity directly by having a little stone that rolls around and bumps into tiny hairs, which tells your brain which way is down.

So here's the idea: Rest a spherical weight on a "tripod" (think of holding a ball in your fingers like you are Merlin) of touch sensors so that they are partially pressing the sensors (this method depends on being able to get a range of values from a Lego touch sensor--I think that's possible). When the whole thing tilts, the weight on the sensors changes in a way related trigonometrically to the angle of tilt.

No comments: