Dir : src
                           RCCL source directory


Data Structures.

	Set of Joint Variables

A set of Joint variables if a string expressing the arm  configuration  and
six  (sometimes  seven  or  more) joint variables expressed in their range.
When the set of joint variables is calculated,  the  string  expresses  the
configurations changes, when T6 is determined, the string is built.

	Transforms

Transforms have a name, a value, a type, and an age.  The name is a string,
the  value  four vectors, the type a function, and the age an integer.  The
age is the last time the transform has been used,  if  it  is  functionally
defined  evaluating  the function more than one time within a sample period
can be avoided.  Transforms are individual entities, they can be pointed to
but have no pointers.

	Terms

A terms is an elements of an equation.  A term has a pointer to the  user's
provided  transform,  a  pointer  to an internal alternate transform, and a
pointer to an internal  old  transform,  the  value  it  had  before  being
changed.  When  is  transform  is  of  type 'hold', the three values occupy
three different memory  locations  and  can  be  distinct  values.  When  a
transform  is  of type 'varb', 'const', or functional, the three values are
the same  user  supplied  transform  and  the  term's  three  pointers  are
identical.  If  it is of type 'varb', a value change causes the equation it
belongs to to be changed.  If is 'const' its value should  not  change.  If
it  is  functional,  the  associated  function  will be evaluated each time
sample of the equation evaluation and the function is  expected  to  change
the  value.  A  term  has  a  boolean  to  indicate  in which member of the
equation it belong to.  A term has a queue header to be able to  queue  the
successive  values  of the hold transforms.  A term has pointer to the next
term in the equation and a pointer to the previous.  Terms  are  not  known
from the user.

	Position Equations

An equation is a doubly linked ring of terms.  At least one of the terms is
the  T6  term  in the lhs, and one term is in the rhs.  A position equation
has a name, a termination code set when it has been moved to, a scalar that
goes from 0 to 1 minus eps during the motion, and event when it is reached.
Internally to the system, a position equation has also four  predicates  to
indicate  if  the  canonical  equation has a COORD part, a TOOL part and is
these parts are functional or not.  It has also a pointer to the T6 term, a
pointer  to the TOOL term (that determines the tool frame on its left), and
a pointer to the POS term between the COORD and the TOOL  part.  Knowing  a
term  permits  to  solve the equation for a transform without knowing which
equation nor transform.
The solve functions take three arguments, the result : a transform, and two
terms.  The result is the value of a partial path in the graph.  If the two
terms are the same, the equation is solved for  this  term.  Two  functions
cover all the cases : one path or another, the direct or the inverse.

	Motion Records

A motion record has a final acceleration time (possibly  null),  a  segment
time  (if  null  time is left to the system computations), a pointer to the
position equation (if null use the last one), a motion mode  (cart  joint),
an  arm configuration change, a pointer to a term whose transform has to be
updated (if null none), a pointer to a monitor background function (if null
none), a new sample rate (if zero keep the last).  A motion record has also
an object mass to carry, a force limit selection word and values, a  comply
specification word and values, a maximum differential motion selection word
and values, and a distance  modifier  selection  word  and  values.  Motion
records are queued are the user's level and dequeued at interrupt level.

	Differential Motions and Generalized Forces

A diff motion or a force is a set of two vectors.

	Queues

A queue is a singly linked list of items.  An item has  a  pointer  to  the
next  and  a  variable  value part.  A queue has a head with two pointers :
'get' where items are taken out of the  queue  and  'put'  where  they  are
entered.  When the queue is empty, 'put' and 'get' are null.  The last item
in the queue is mark with a null pointer.  The function 'queue'  returns  a
pointer  to  a  free  area  where  the  value must be copied.  The function
'dequeue' returns a pointer to where the  values  can  be  copied  from  or
returns a null pointer if the queue is empty.


Trajectory Generation

Regardless of the motion mode, the trajectory generator keep  track  of  T6
and  J6.  It  also  maintains  the  COORD, the TOOL and the POS part of the
equation.  The POS part cannot be functional because it has  to  be  solved
for.  In comply mode, still regardless of the motion type, it maintains the
COMPLY part.

The trajectory generator implements  the  methods  described  by  Prof.  R.
Paul  in  "Robot Manipulators:  Mathematics, Programming, and Control", MIT
Press 1981 with the following additions :

Cart to Joint transition :
Joint value set in point B is obtained by linear extrapolation of the value
set in point A given the velocity and the transition time.

Joint to Cart transition :
T6 in point B is obtained by extrapolation of  the  drive  parameters  from
last T6 of previous motion and T6 in A.

Cart to Cart transition with moving frames :
Velocity caused by the moving frames is assumed to be continuous.  T6 in  B
is  recomputed  at  the beginning of the transition as well as T6 in A with
previous equation because they have moved (if there is no moving coordinate
frame  COORD  and  TOOL  are  not  revaluated).  Then the classic method is
applied and POS in A and B are calculated using T6 in A and B.  The T6 in B
has  been  kept  from  time  t-1 and the extra velocity cause by the moving
frames of last equation  can  be  derived.  A  set  of  differential  drive
parameters  is  derived  and  will  be  involved  in  the  final transition
polynomial.  The second point  of  the  transition,  a  similar  method  is
applied  to  obtain  the  extra  velocity  of  the moving frames of the new
equation.  The differential parameters are used in a third order polynomial
added to the regular quartic polynomial.  The derivative of this polynomial
at the beginning of the transition is chosen as  to  compensate  the  extra
velocities  and is zero at the end.  The value of the polynomial is zero at
each end.  This method is complicated but allows to deal with moving frames
moving  at speeds of the same order of magnitude as the robot capabilities.
Trajectories can be different from one path to another and do not  need  to
connect.  If  the  same  moving  frame  is used across path segments, extra
velocities cancel each other and the tracking is not affected.

Joint to Joint transition with moving frames :
Second point of the transition, extra velocity is derived the same  way  as
above and the expected position at the end of the path estimated.

Whenever the  motion  is  interrupted  of  the  arm  is  comply  mode,  the
extrapolation method is used, according to each case.

When the current equation has 'hold' transforms, the value is kept  at  the
end of the path segment.


Sat Nov  5 17:25:36 EST 1983

The file moves.c has been modified as to guarantee that  the  data  in  the
queue  is valid when it is dequeued. The free area is first allocated, data
copied into, and then entered into the queue.  A slight modification had to
be done to the file manip.h. Old versions are kept under the name moves.bad
and manip.bad in the corresponding directories.
