naive jacobian etc.

[Avery Andrews 931103.0928]
  [Gary Cziko 931003.???]

Here's an attempted explanation. Suppose we have an arm, with various
joints, and a point at the end whose position we are interested in,
which we'll call the `tip'. If the arm is in a given configuration,
moving any individual joint a little bit will cause the tip to move
in a particular direction. For example, if the arm is straight out,
flexinb the elbow a little bit will cause the tip to move mostly
up, but a little bit inwards. And, as the amount of elbow flexion
gets smaller, the relative proportions of the upward and inward
movement change, with the latter tending to zero. In terms of
baby vector calculus, the partial derivative of tip-movement w.r.t.
elbow-flexion is a vector pointing straight up:

                           ^
                           > (effect of elbow flexion))
   X ----------0-----------
               T

  X = shoulder, 0 = elbow

For each joint, one can calculate the partial derivative of tip movement
w.r.t. flexion at that joint. The resulting collection of vectors
represent the immediate effects of flexion at each joint, and can be
represented as a matrix, which is called the Jacobian, whose columns
are the various partial derivative (various aspects of the
representation are arbitrary, such as the order of the columns
representing the partial derivations). So if we have three joints moving
the tip in three dimensions, we get a Jacobian that looks like this:

     D1,1 D1,2 D1,3

     D2,1 D2,2 D2,3

Each column represents a vector sticking out from the tip in some
direction, representing the direction and velocity with which the
tip will start moving if the corresponding joint is flexed a little
bit.

One thing you can do with the Jacobian is calculate an
approximation to how the tip will respond to a combination of joint
movements: If we (pre) multiply the Jacobian by a column vector
of joint movements:

  F1 D1,1 D1,2 D1,3 T1

  F2 * D2,1 D2,2 D2,3 = T2

  F3

We get an approximation to how the tip will move.

Another thing we can do with the Jacobian is find out a bit about which
joint movements will be helpful in reducing the distance between the
perceived and reference locations of the tip. Suppose we have an
`error vector', pointing from the tip to the reference location.
If the Jacobian component for a joint is more or less in the same
direction as the error-vector, then flexion of the joint will reduce
the size of the error vector, while if it is in the opposite direction,
flexion will have this effect, while if the two are at right angles,
neither flexion or extension will have much effect. An operation called
the `dot product' measures the extent to which two vectors are pointing
in the same direction: it consists of just multiplying corresponding
components & adding the results (it gives the cosine of the angle
between them, which seems magical to me, but is nonetheless true):

      A1 B1
            . = A1*B1 + A2*B2
      A2 B2

So if we take the dot product of each Jacobian component with the
error-vector, we get an indication of what *immediate* contribution
movement at each joint will make to reducing the error. But this is
equivalent to pre-multiplying the error-vector by the transpose of the
Jacobian (baby matrix algebra), whence `transpose Jacobianism'. It's
cartesian from the use of Cartesian coordinates, and naive if you just
use the components of the result of this multiplication (scaled or limited,
perhaps) to tell you how to move each joint.

And, it doesn't work very well, at least in the naive form, tho there
may well be ways of fixing it up. The problem is that the Jacobian
just tells you what effect a tiny change in joint angle will have,
whereas in many cases you need to know more. In the elbow case,
for example, if the target is located at the elbow, the system will
lock, because both components of the Jacoboian point straight up:

                          ^
                          >^
                          >> (effect of movement at shoulder, elbow)
   X ----------0-----------
               T

  X = shoulder, 0 = elbow

And the shoulder component will be larger than the elbow one, due to
mechanical advantage. So if the target is a bit above the elbow,
the shoulder angle will increase at first, even though to get a sensible result
at the end it should actually decrease.

The Little-Man arm controller avoids this kind of problem by using
appropriately chosen coordinate systems, & a bit of hardwired
`foreknowledge'. Suppose we use shoulder-centered polar coordinates
rather than Cartesian ones. Furthermore, being smart, we know that the
only way to correct a distance error is by changing the elbow angle -
flex to decrease the distance, extend to increase. We can think of
ourselves as *pretending* that the Jacobian for elbow flexion points
toward the shoulder, even though this is literally false almost
everywhere (though it gets truer as the elbow flexes). The Jacobian
for shoulder angle change on the other hand really will be a pure change
in perceived angle, without any effect on the distance coordinates.
If we represent the error-vector as a (distance, angle) pair, then the
second component is guaranteed to be in line with one of our Jacobian
components, so that good control is trivially available. For the
distance component, flexing the elbow introduces an angle error as well
as changing the distance, so our Jacobian is not fully in line with
the error, but since the shoulder angle control is so easy, a
shoulder-angle control system can make up for this, & we can get away
with pretending that the Jacobian for shoulder-angle point shoulder-ward.

So we might regard the Little-Man style controller (and Bill Powers'
14df, if I understand it more or less correctly) as a kind of
clever transpose Jacobian scheme, the cleverness residing in a good
choice of coordinate systems (really, perceptual dimensions), plus
foreknowledge of the fact that when the arm is fully extended, the only
way to correct a distance error is to flex, in spite of the fact that
the Jacobian component for elbow flexion in that position is (0,0)
(a bit more vector calculus there).

I think there is a moral lesson here, which is this. Many people seem
to think that PCT is a sort of blind faith that feedback systems
can solve all problems, with no thought required, & I wouldn't be
surprised to see the Naive Cartesian Jacobian Transpose Controller
produced as an argument that this faith is false, which it certainly is.
But the contrast in workability between NCJTC and Little Man shows
vividly that the performance of these systems depends crucially on
how there perceptual systems are set up - one of the many aspects of
PCT that the critics tend not to notice.

It remains for us to find out whether we can get a useful story about
serious manipulator control out of all this - the fact that I was able
to invent a horrible 2df controller for 2 dimensions simply shows that
you can be an OK linguist without being much of a roboticist.

Avery.Andrews@anu.edu.au