[From Bill Powers (970918.0946 MDT)]

I'm starting a project called Build-A-Bug. The motivation is dual: first,
I've had no response at all, nor have I found any comprehensible resource
materials, relating to my project Build-A-Man. Second, I've seen a number
of bug models all of which are so glaringly non-physical that they're
useless, and I think there's some chance of coming up with a useful one.

Basically what I'm looking for is a model of a bug that will move
realistically when torques are applied at the two joints of each of its six
legs. I think that neglecting the mass of the limb segments, and looking
only at the effects of forces and moments on the rigid mass of the body,
will not lead to significant errors -- a bug's legs are pretty skinny.
This, by the way, is why I picked a bug. The masses of a person's limbs are
not negligible.

I've been working on the physics of this model for a couple of weeks, and am
at the point where I think I can put the first version together in a few
more days of work (perhaps a week of elapsed time). However, I'm working at
the very outer limits of my ability to handle mechanics problems, and some
help from other brains would really make a difference. So, if there are any
takers, I want to start a separate list, not on a server but just through
e-mail by constructing a list of recipients which every recipient will have
to use also in replying. Send me a message saying you want to participate,
and I'll eventually post a reply with all the participants' e-mail addresses.

When I'm ready, I'll distribute an explanation of the model as it exists to
date, and source code to show the working parts of it. I'm looking for two
kinds of help. First, are my mathematical operations right, and can they be
simplified? Second, what kinds of control systems can we use to give us a
basic workable bug as a test bed for higher levels of control? This means
just basically standing up, tilting forward/back and left/right, and
twisting to the left or right in direction.

The basic idea is fairly simple.

1. From the position of the tip of the outer leg segment, compute the
position of the elbow/knee.

2. From the torques at the joints (two shoulder, one elbow/leg as in the
Little Man), compute the x,y,z forces and x,y,z moments operating on the
mass of the body.

3. From the forces and moments, compute the velocities and angles or
positions (translation and rotation) at the center of the body's mass,
using the appropriate masses and moments of inertia around each axis, for
the next iteration.

4. From the new positions of the body and mountings for each leg, go to
step 1.

The basic rules are these:

When the tip of a leg is in contact with the ground and the negative y
force is positive, it remains fixed. Movements of the body change the
distance between the shoulder and the tip of the leg, from which we compute
the new elbow position and the new forces due to torques. Given the new
forces, we compute the next position and angle of the body, and so on.

We will avoid extremes of joint angles so we don't have to worry about
boundary conditions. The legs will never be allowed to straighten out
completely or fold up completely.

When the y force on the tip of a leg goes to zero, the control system will
switch from velocity or force control to position control. I think this
will come naturally out of using the same muscle model as in LM version 2,
with the addition of tactile feedback from the foot pad. But before we get
to that, we can just force an arbitrary switch in control mode. This will
allow higher systems to lift the leg and take a step while the legs in
contact with the ground hold the weight.

I have discovered a really neat fact. The torque operating at the
elbow/knee joint creates a force on the line between shoulder and foot, and
that is all! It's just as if a straight thrust were being generated. Maybe
everyone else knew that, but I didn't.


In deference to my limited mathematical abilities, I've gone back to the
real basic-basics, as described in about four pages of Machinery's
Handbook. You start with torques (couples) and forces, applied at arbitrary
angles to solid objects and linkages. You calculate resultants, and add up
all the x, y, and z forces. The reaction forces on the body are directed
oppositely to the forces at the tip of the leg. I don't use vector notation
because I immediately get lost when I try to do it. I just do it the hard
way, which for me is the easiest way.

The programs I will distribute (you will need Turbo Pascal version 3 or
higher) will include routines for drawing the bug in perspective on the
screen, so you can see the effects of trial programs. I use the x and y
outputs of the mouse for making variables vary, to see their effects while
testing to see if I got the signs right, etc..

Let me know if you want to take part in this project.


Bill P.