#ifndef RobotController_H
#define RobotController_H


#include "..\Transform\Transformation.h"



class RobotControllerException {};

/****************************************************************************
 * RobotController - template interface for a robotic manipulator controller.
 *     Responsibility: Controller is a layer between the user program 
 *         and controller hardware that commands robot's motion.
 *         It converts coordinates in actuator space into hardware commands
 *         and sends them to the controller hardware.
 *     Arguments: class ActuatorSpace, any set of values in actuator space.
 *         i.e. for SCARA that would be a set of angles, for a Stewart
 *         Platform that would be 6 actuator elongations...
 *
 */



template <class ActuatorSpace>
class RobotController{
	public:
		virtual void moveTo( const ActuatorSpace& a) 
				throw(RobotControllerException)		// throws ManipulatorException
				= 0;								// pure virtual method
		virtual void goHome() = 0;					// Moves all actuators to home position
};


#endif RobotController_H