## Rosie the Robot - a Question of Balance

- Ken Perlin

 How did Rosie the Robot, the beloved cyber-domestic on The Jetsons, balance on those three tiny wheels? Well yes, I know, she's a cartoon, but that's not really the point here, is it? I've noticed that the idea of a robot servant with magical balance seems to have real staying power. There is, for example, the very recent example of Flo the waitress droid in "Attack of the Clones." Obviously when George Lucas was a teenager he used to watch Hazel, and now he's borrowed his future from Shirley Booth by way of Hannah-Barbera. Who knew? Anyway, back to the original question: how do female working-class robots in the food services industry balance like that? I've been inspired to try to make something that would do the same. Rather than make a full fledged house-hold robot maid, complete with voice-chip and bourgeois-baiting working-class chutzpah, I figured I'd start with simple things - a robot that rolls around on one wheel, or a table that balances on three or four tiny wheels. You could put your glass of Perrier (or can of Budweiser) on this table, and have it roll across the room to serve your guests. As you put things on the table and took them off again, the table would magically stay poised and balanced. Why? Because it's cool for a serving table to be smart enough to balance itself on closely spaced little wheels (just like Rosie). In that spirit, here are some research projects along these lines...

### PROJECT 1: The magic serving table

I plan to implement a Robotic Operationally Self-balancing Intelligent Endtable. The general approach I'm hoping to take consists of solving two problems: (i) keeping the weight centered when people place items at various places on the table surface (eg: a glass of water near one edge of the table), and (ii) keeping the table from toppling over when it rolls itself from one place to another. These two problems will be solved by two different mechanisms. Here is how each of these two mechanisms might work.

Keeping the weight centered:

Inside the tabletop will be several little counterbalancing mini-vehicles, each of which runs around the inside the tabletop so as to keep the weight distribution balanced.

Between the tabletop and the support pillar beneath it, is a set of relative tilt sensors. An imbalance in these sensors causes the mini-vehicles to roll "uphill", so as to keep the weight even.

Each mini-vehicle is really simple: just a motor and a battery. When switched on, the motor turns a little wheel, which makes the motor move within the table. If the motor is with positive, the mini-vehicle goes one way; if driven with negative voltage, it goes the other way. There are several possible arrangements for the sensors and mini-vehicles. I'll describe some of them.

Two mini-vehicles along the axes of a square table

 Java source: cross.java We can simply run the two mini-vehicles linearly inside the table on tracks, (one on top of the other, so they don't bump into each other). One mini-vehicle compensates for shifting weight along one axis, the other compensates for shifting weight along the orthogonal axis. A nice thing about this strategy is that the control can be very simple; there is no need for computer software in the control loop. Each of the two tilt sensors can simply drive the voltage (through a suitable conditioning curve) of the motor that powers the corresponding mini-vehicle. You can see the principle in the java applet to the left, which shows a schematic top view. Try dragging the blue "weight" around with your mouse, and watch the two red mini-vehicles slide so as to counterbalance the table.

Three mini-vehicles around the perimeter of a circular table

 We need three mini-vehicles. If you use only two mini-vehicles around a circular table, then it's possible for the table to tilt in such a way that the mini-vehicles can't counterbalance instantly. A microprocessor converts the three sensed pressures into a set of three (positive or negative) voltages to drive the respective mini-vehicles. Part of the logic is to keep the mini-vehicles spread apart from each other around the perimeter, so that they can respond quickly to a push in any direction. You can see the principle in the java applet to the right, which shows a schematic top view. Try dragging the blue "weight" around with your mouse, and watch the three red mini-vehicles run around the perimeter so as to counterbalance. Java source: cross.java

Keeping the table from toppling over when it moves

 Java source: cross.java When the table moves, a torque will be developed (because of the forward push on the base) that will tend to make the vehicle fall over backward. We need to counter this force. One way to do this is to actively tilt the table base forward, just enough so that the force on the table is always pointing straight down the now slanted support pillar. To do this, we can hang a pendulum on a rigid rod inside the (hollow) support pillar. A relative tilt sensor detects whether the pendulum is tilted with respect to the support pillar (which will happen when the table accelarates or decelarates). This information is used to power a motor which tilts the base so as to align the base with the pendulum: When the pendulum pushes backward, the base is tilted forward; when the pendulum pushes forward, the base is tilted backward. In the applet on the left, which shows a schematic side view, drag your mouse left or right to move the table. Watch how the table tilts as it moves.

### PROJECT 2: Robot that balances on one wheel

 I started here asking the question: If a robot could only balance on one wheel (essentially a single point), how could that robot stay upright? Clearly there is a need for very fast, responsive active control. There are some precedents. The "parallel bicycle" developed in 1987 by Kazuo Yamafuji (far left), and its famous recent variant the Segway, developed by Dean Kamen (near left), both balance on two wheels. The vehicle rocks forward and back under active control to effect a sort of balancing pencil trick. But what about one wheel? How do you stop a single wheel from falling sideways?

The solution I've been working on uses a gyroscope to tell which way is up, together with a counter-torque mechanism that provides large torques on demand in any tilt direction. If the gyroscope senses that the vehicle is starting to tilt in any direction, then the counter-torque mechanism rapidly creates an opposing torque, so that the robot stays upright.

The design problem that I was facing is that electric motors are not good at starting and stopping quickly, so you can't just suddenly spin a weight around briefly to create a strong temporary torque. And you don't want to start swinging around big weights on long swing arms. For one thing, such a robot would ever get a job in the food services industry.

Instead, I use the fact that electric motors are very good at spinning at relatively constant speeds, and that a great deal of torque can be stored up within a spinning flywheel. The basic approach is to use two stacked plates, each of which has a motor driving a large flywheel. The two flywheels spin in opposite directions. The plates are both allowed to wobble freely about the joint connecting them.

The basic principle is as follows: if you reach out with your fingers and try to pry apart the two plates at one edge, then both flywheels will precess in the same direction, and the entire mechanism will rotate perpendicularly to the direction you are prying.

The applet below illustrates how the counter-torque mechanism works. You can examine it from different angles by dragging your mouse over it. The body of the robot and the gyroscope have been removed, so that you can clearly see the workings of the counter-torque mechanism.

The two electric motors (shown in copper), each driving a flywheel (also shown in copper), are attached to wobbling plates (shown in gold). Three electromagnet pairs (shown in red) face each other between the two wobbling plates, one magnet pair every 120 degrees. Each of the two electromagnets in each pair are wired together but wound in opposite directions, so that they will tend to repel each other. By supplying variable amounts of electric current to each of these three electromagnet pairs, you can create a prying-apart force at any point around the circumference of the two wobbling plates. In this way, you can quickly create a large precessional torque about any axis perpendicular to the spin axes of the flywheels.

Note that the two plates are supported by the robot frame (which is shown in silver) in such a way that the plates can only wobble in opposite directions. Also, the wobbling plates are connected to the frame in such a way that if both plates rotate together, then the frame is constrained to rotate with them.

Java source: rosie1.java