Showing posts with label ideas. Show all posts
Showing posts with label ideas. Show all posts

Monday, December 11, 2006

Et Tu, Light Sensors?

I built a tube with a light sensor at one end and put a piston in there to see if I could get a linear response. I would call the success "minimal". The Lego light sensor just isn't made for (relatively) sensitive measurements like this.

So where does that leave me? As I understand the human vestibular system, there's really a ton of little binary touch sensors in there for the otolith to rub against. I can't use a ton of sensors with only 3 input ports, so I was going to measure the tilt more abstractly by comparing relative forces on just a few sensors. That's out, but I think I can still do better than the other two main balance systems out there.

(To reiterate: Checking to see if the robot is perpendicular to the ground is just wrong--not all vectors perpendicular to the local ground are anti-parallel to gravity. Using a gyroscope is better in that sense, but worse in a design and robustness sense. A robot should constantly be checking and responding to the real environment. A gyroscope is a form of dead-reckoning. As tiny errors build up, what exactly zeros it out? If the robot loses track of the gyro for a second, how does it recover? It's not that you can't fix these issues; just that you shouldn't have to.)

Here's the new idea: Rotation sensors. I mocked those early on because "the wheels need to rotate", but the sensor doesn't have to be on the wheel axle. It could be on the axle of a pendulum. When the robot tilts, it makes an angle to the still-vertical pendulum. That rotation can be captured.

There are a couple of practical matters:
  • Stock rotation sensors only read off every 22.5°, which is way too small. It should be possible to gear a rotation sensor so that it reads a smaller angle, though.
  • I'll actually need two of these to detect tilt in two directions. And I'll either need to make a "universal" pendulum that can tilt in both directions and report the angle in each or make two separate pendulums in a compact manner.
  • I don't own any rotation sensors, they are like $30 each and I'm already in some trouble for spending too much on projects before I've gotten my allowance, so I think I'll have to make my own rotation sensors.
  • A major pro- of this arrangement is that there's no need for complicated (for the integer-only RCX) trig, you can just multiply the number of rotational "clicks" times the number of degrees per click to get your tilt.
(Later: Just realized that a pendulum rotation system is also dead-reckoning. You have to keep track of the total rotation to know when you are upright. But at least it's a dead-reckoning from gravity and not from an initialized value. Also, while I'm actually going to pursue a system where the rotation is captured via alternating light and dark patches [pics as soon as I have something], you could also make it so the shaft encoder had a gradient proportional to the angle so it would be an absolute system, not a dead-reckoned one.)

Saturday, December 9, 2006

Well. That's That.

The touch sensor otolith balancing system is not workable. A little experimentation shows that the touch sensor just isn't sensitive enough to small changes in pressure. It's basically a binary device even in raw mode.

However, it may be possible to salvage the system using light sensors. Light sensors?!? Yes, that's right. In the light sensor systems I derided, the light is being reflected off of the ground. That's still bad for the reasons I give. In a light sensor pseudo-otolith system, the light sensor just takes the place of a touch sensor. The touch sensor can't do small gradations, but the light sensor can.

I'm envisioning the light sensor (very tired of typing "light sensor" and "touch sensor" now) at the end of a short tunnel or cylinder. When the otolith shifts, instead of conveying that movement to a touch sensor via a lever, instead it moves a "piston" closer to the light sensor which registers the proximity.

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.