
This robot drives on a table top without falling of: it detects the table's edges and backs up, then continues in a different direction. More pictures: follow links given in the explanations below, or watch a movie (1.5MB QuickTime)
The table must have a convex shape and be rather spacious.
Four feelers extend before, behind and on either side of the rover. Touch sensors detect when these fall down over the edge of the table. The rover then stops, backs up, takes a different direction and moves forward again.
A feeler must not be hanging over the edge during the backup manoeuver, because it may then be ripped off. To prevent this, the feelers are lifted from the surface before backing up, and lowered again at the end of the backup just before moving forward again.
There are only three sensor inputs, but there are four feelers. We need to distinguish left and right, but we may put the front and back feeler on a single sensor input, because we may assume that when that sensor is triggered, we are in fact moving forward, so it is the front feeler that went down. The exception is when the back feeler goes off the edge when the feelers are lowered just after having backed up.
The program does not properly detect an edge behind the rover when lowering its feelers after having backed up.
There are three motors:
Driving is through a differential gear, in a classical construction. Speed must be sufficiently low to permit (a) detection of the edge and (b) stopping before falling off.
Steering is with a classical rack and pinion system. Positioning the wheels is a problem, because we have used all the sensor inputs to detect table edges, so we have none left for detecting the steering wheel position. Solution: move the steering wheels completely to one side, then let the motor run for a predetermined span which is enough to put the front wheels in a straight position. The duration has to be determined by experiment, and the result is that the rover does not drive completely straight. Short of using a second RCX there is no good solution to this.
Lifting/lowering the feelers is a purely mechanical design problem: all feelers need to move independently, yet they must all be lifted up at the same time. The lifting mechanism must give sufficient freedom to the feelers when lowered, and it is this constraint that was the most difficult problem in building the rover. A cam is used to do the lifting, it gives sufficient freedom when in its "off" position. This is described in more detail below.
This is composed of the motor at the top of the rover which actuates the liftercam and the lifter arms which lift the feelers. Read the theory before building this.