This directory contains interface, database, and kinematic functions specific
to the robots of the PUMA class.

A brief description of the more important files follows:

pumaConfig.c --
	Routines for converting between a string representation of a
	robot configuartion (such as "run"), and a bit representation,
	using the bit definitions in "../h/pumaKynvar.h".
	
pumaGravload.c --
	The routine pumaGravload(), which computes the gravity loading
	on the PUMA robot.

pumaJacobian.c --
	Routines for calculating the PUMA Jacobian.

pumaKinematic.c --
	Routines for calculating PUMA forward and inverse kinematics.

pumaSelect.c --
	An old routine for selecting the joint(s) best suited to provide
	compliance along an given set of Cartesian axes -- this is the
	old Paul-Shimano algorithm.

pumaSingular.c --
	Support routines used to see if the PUMA is at a singularity,
	or specficy the joint angles necessary to put it within a set distance
	of a given singularity.

puma_comfxns.c --
	These are the RCI robot interface functions, which are responsible
	for reading data in from the robot, updating the HOW structure
	appropriately, and building a packet of commands to ship down to
	the robot based on command requests which have been posted by the
	control program into the CHG structure using the CHG macros. The
	interface functions also contain a 'startup' function, nominally 
	called by the task startup function, and a 'release' function,
	which is nominally called by the task release function.
	See robotComfxns(7R).
	
puma_convert.c --
	Routines to convert between encoder and joint angle coordinates. These
	routines are embedded in the JLS structure for PUMA robots.

puma_jls.c --
	Routine to instantiate a JLS structure for a given PUMA robot. The
	parameter information for the robot is read in from the binary file
	$RCCL/conf/<robotName>.JLS. 

puma_kynvar.c --
	Routines to instantiate/allocate the PUMA_KYN and PUMA_VAR structures.
	These structures are defined in the file "../h/puma_kynvar.h".

testAngles.c --
	Support routines used to generate sets of test angles for
	the kinematic test programs.

testJacobian.c --
	Stand alone routine for testing the Jacobian routines. When run
	with no arguments, the program tests the Jacobian routines over a
	large range of joint angles, both close and far from singularities. 
	The testing consits of doing a particular Jacobian computation, 
	doing the inverse computation, and then seeing if the result is
	equal to the original input.
	
testKinematics.c --
	Stand alone program to test the kinematic routines. Like the
	testJacobian program, this program works by cycling through a large
	number of joint angles, both close to and far from singularities,
	computing both forward and inverse kinematics and comparing the final
	output with the input.



