Classes and modules for building motion control
systems with Python.


PyMotionControl itself does not interface with
actuator controllers. Instead the user of this
library is required to derive from
MotionControl.Axis.AxisBase and in the derived class
interface with actuator control packages of choice.

Axes are assembled into a so called "Stage". The class
MotionControl.Stage.Stage provides general motion stage
functionality. However one may choose to derive from it
to form a application specific stage.



PyMotionControl forms *model* part of a Model View Controller
(MVC) design. The "MotionControl" class provides an abstraction
for a generic motion control stage. As such the only interface
it exposes are function for setting a motion target position
and starting and aborting a *cycle*.

*Cycles* are sequences of "Actions", instances of classes derived
from "AbstractAction" base class. Each action effects on all assigned
axes simulatanously and the action queue is advaned upon successfull
completion of the currently active action. If a action fails, the
rest of the queue is not executed, but cleared and the
*emergency_abort_action* executed, which usually just stops all axes,
but may also perform a movement into a safe position.

A MotionControl has a number of axes, which are instances of
classes detived from "Axis". "Axis" abstracts a typical motion
axis interface.

To program complex action sequences, subclass from "MotionControl".
Provide interface functions which turn a given target destination
or ultimate action into a sequence of sub-actions, queueing them
up in MotionControl.cycle_queue

"Constraints" interface with "MotionControl": Every "MotionControl"
instance has a set of constraints. In the most simple case just the
axis limits. Upon setting a new target position the constraints
are checked. Only if all constraints are met a cycle can be started.


NOTE scratchpad.py:

scratchpad.py is the source file where new things are
tested and outlined, before they are moved into their
proper module file. So all contents of it are
work-in-progress, highly experimental and most likely
not working in the state you see them there.