content: package aima.core.robotics;
  
  import aima.core.robotics.datatypes.IMclMove;
  import aima.core.robotics.datatypes.IMclRangeReading;
  import aima.core.robotics.datatypes.IMclVector;
  import aima.core.robotics.datatypes.RobotException;
  /**
   * This interface defines functionality a robotic agent has to implement in order to localize itself via {@link MonteCarloLocalization}. 
   * 
   * @author Arno von Borries
   * @author Jan Phillip Kretzschmar
   * @author Andreas Walscheid
   *
   * @param <V> an n-1-dimensional vector implementing {@link IMclVector}, where n is the dimensionality of the environment.
   * @param <M> a movement (or sequence of movements) of the robot, implementing {@link IMclMove}. 
   * @param <R> a range measurement, implementing {@link IMclRangeReading}.
   */
  public interface IMclRobot<V extends IMclVector, M extends IMclMove<M>, R extends IMclRangeReading<R,V>> {
  	/**
  	 * Causes a series of sensor measurements to determine the distance to various obstacles within the environment.
  	 * @return an array of range measurements {@code <R>}. 
  	 * @throws RobotException thrown if the range reading was not successful.
  	 */
  	R[] getRangeReadings() throws RobotException;
  	/**
  	 * Causes the robot to perform a movement.
  	 * @return the move the robot performed.
  	 * @throws RobotException thrown if the move was not successful.
  	 */
  	M performMove() throws RobotException;
  }
  