EDU.gatech.cc.is.abstractrobot
Class Simple

java.lang.Object
  |
  +--EDU.gatech.cc.is.abstractrobot.Simple
Direct Known Subclasses:
CaptureSim, RescueVanSim, SimpleN150Hard, SimpleN150Sim, SocSmallSim

public abstract class Simple
extends java.lang.Object
implements SimpleInterface

Defines the basic capabilites all robot classes should provide. A simple robot can detect obstacles, its position, and turn and move. The intention is for this class to be extended for several types of physical robots (e.g. Nomad 150s, Hummers, Dennings, etc.). Having a superclass for all of them allows us to potentially use the same control system for each and the same rendering and simulation system.

Frames of reference
We use a standard cartesian coordinate system in meters and radians. Pretend you are looking down on the robot: +x goes out to your right (East), +y goes up (North). When the robot is initialized, it is facing the +x direction. Headings are given in radians, with East=0, North=PI/2 and so on CCW around to 2*PI. Some methods return "egocentric" vectors. An egocentric vector is given relative to the center of the robot in the same heading reference frame as global coordinates. An object one meter east of the robot is at (1,0) egocentrically.

Sensors
The Simple robot can sense it's location and obstacles.

Timestamps
Many of the sensor and motor command methods (e.g. get* and set*) require a timestamp as a parameter. This is to help reduce the amount of I/O to the physical robot. If the timestamp is less than or equal to the value sent on the last call to one of these methods, old data is returned. If the timestamp is -1 or greater than the last timestamp, the robot is queried, and new data is returned. The idea is that during each control cycle the higher level software will increment the timestamp and use it for all calls to these methods. Copyright (c)1997, 1998 Tucker Balch


Field Summary
protected static TBDictionary dictionary
          The robot's dictionary object.
 EDU.cmu.cs.coral.abstractrobot.DisplayVectors displayVectors
          This object draws vectors.
protected  int unique_id
          The robot's unique id.
 
Constructor Summary
Simple()
          Instantiate a Simple robot.
Simple(int id)
          Instantiate a Simple robot with constant values.
 
Method Summary
abstract  java.awt.Color getBackgroundColor()
          Gets the background color of the robot.
 TBDictionary getDictionary()
          Gets the TBDictionary holding parameters defined using the "dictionary" keyword in the dsc file.
abstract  java.awt.Color getForegroundColor()
          Gets the foreground color of the robot.
 int getID()
          Get the unique ID of the robot.
 int getID(long timestamp)
          Get the unique ID of the robot (>=0).
abstract  Vec2[] getObstacles(long timestamp)
          Get an array of Vec2s that point egocentrically from the center of the robot to the obstacles currently sensed by the robot's sensors
abstract  Vec2 getPosition(long timestamp)
          Get the position of the robot in global coordinates.
abstract  double getSteerHeading(long timestamp)
          Get the current heading of the steering motor.
abstract  long getTime()
          Gets time elapsed since the robot was instantiated.
abstract  void quit()
          Quit the robot and release any resources it has reserved.
abstract  void resetPosition(Vec2 position)
          Reset the odometry of the robot in global coordinates.
abstract  void resetSteerHeading(double heading)
          Reset the steering odometry of the robot in global coordinates.
abstract  void setBaseSpeed(double speed)
          Set the base speed for the robot (translation) in meters per second.
 void setDictionary(TBDictionary tbd)
          Sets the TBDictionary for the robots.
abstract  void setDisplayString(java.lang.String s)
          Set the String that is printed on the robot's display.
 void setID(int id)
          Set the unique ID of the robot.
abstract  void setObstacleMaxRange(double range)
          Set the maximum range at which a sensor reading should be considered an obstacle.
abstract  void setSpeed(long timestamp, double speed)
          Set the desired speed for the robot (translation).
abstract  void setSteerHeading(long timestamp, double heading)
          Set the desired heading for the steering motor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

unique_id

protected int unique_id
The robot's unique id.

dictionary

protected static TBDictionary dictionary
The robot's dictionary object.

displayVectors

public EDU.cmu.cs.coral.abstractrobot.DisplayVectors displayVectors
This object draws vectors. Use it for drawing vector fields and such for a robot.
Constructor Detail

Simple

public Simple()
Instantiate a Simple robot.

Simple

public Simple(int id)
Instantiate a Simple robot with constant values.
Parameters:
id - the unique_id
Method Detail

quit

public abstract void quit()
Quit the robot and release any resources it has reserved.
Specified by:
quit in interface SimpleInterface

getTime

public abstract long getTime()
Gets time elapsed since the robot was instantiated. This does not necessarily match real elapsed time since it may run faster than that in simulation. This is the appropriate source of time for timestamps.
Specified by:
getTime in interface SimpleInterface

getObstacles

public abstract Vec2[] getObstacles(long timestamp)
Get an array of Vec2s that point egocentrically from the center of the robot to the obstacles currently sensed by the robot's sensors
Specified by:
getObstacles in interface SimpleInterface
Parameters:
timestamp - only get new information if timestamp > than last call or == -1.
Returns:
the sensed obstacles.

setObstacleMaxRange

public abstract void setObstacleMaxRange(double range)
Set the maximum range at which a sensor reading should be considered an obstacle. Beyond this range, the readings are ignored. The default range on startup is 1 meter.
Specified by:
setObstacleMaxRange in interface SimpleInterface
Parameters:
range - the range in meters.

getPosition

public abstract Vec2 getPosition(long timestamp)
Get the position of the robot in global coordinates.
Specified by:
getPosition in interface SimpleInterface
Parameters:
timestamp - only get new information if timestamp > than last call or timestamp == -1.
Returns:
the position.

setID

public void setID(int id)
Set the unique ID of the robot.
Specified by:
setID in interface SimpleInterface
Parameters:
set - the robot's ID.
Returns:
the id.

getID

public int getID(long timestamp)
Get the unique ID of the robot (>=0). This number unique, but no other guarantees are made. It is possible for instance, for four robots to be numbered 8, 9, 11, 37. To get sequential numbers for a team, use methods in the KinSensor class.
Specified by:
getID in interface SimpleInterface
Parameters:
timestamp - only get new information if timestamp > than last call or timestamp == -1.
Returns:
the id.

getID

public int getID()
Get the unique ID of the robot.
Specified by:
getID in interface SimpleInterface
Returns:
the id.

resetPosition

public abstract void resetPosition(Vec2 position)
Reset the odometry of the robot in global coordinates. This might be done when reliable sensor information provides a very good estimate of the robot's location. Do this only if you are certain you're right!
Specified by:
resetPosition in interface SimpleInterface
Parameters:
position - the new position.
See Also:
getPosition(long)

getSteerHeading

public abstract double getSteerHeading(long timestamp)
Get the current heading of the steering motor.
Specified by:
getSteerHeading in interface SimpleInterface
Parameters:
timestamp - only get new information if timestamp > than last call or timestamp == -1.
Returns:
the heading in radians.
See Also:
setSteerHeading(long, double)

resetSteerHeading

public abstract void resetSteerHeading(double heading)
Reset the steering odometry of the robot in global coordinates. This might be done when reliable sensor information provides a very good estimate of the robot's heading. Do this only if you are certain you're right!
Specified by:
resetSteerHeading in interface SimpleInterface
Parameters:
heading - the new heading in radians.
See Also:
getSteerHeading(long), setSteerHeading(long, double)

setSteerHeading

public abstract void setSteerHeading(long timestamp,
                                     double heading)
Set the desired heading for the steering motor.
Specified by:
setSteerHeading in interface SimpleInterface
Parameters:
heading - the heading in radians.
timestamp - only get new information if timestamp > than last call or timestamp == -1.
See Also:
getSteerHeading(long)

setSpeed

public abstract void setSpeed(long timestamp,
                              double speed)
Set the desired speed for the robot (translation). The speed must be between 0 and 1; where 0 is stopped and 1.0 is "full blast". It will be clipped to whichever limit it exceeds. Also, underlying software will keep the actual speed at zero until the steering motor is close to the desired heading. Use setBaseSpeed to adjust the top speed.
Specified by:
setSpeed in interface SimpleInterface
Parameters:
timestamp - only get new information if timestamp > than last call or timestamp == -1.
speed - the desired speed from 0 to 1.0, where 1.0 is the base speed.
See Also:
setSteerHeading(long, double), setBaseSpeed(double)

setDisplayString

public abstract void setDisplayString(java.lang.String s)
Set the String that is printed on the robot's display. For real robots, this is printed on the console. For simulated robots, this appears printed below the agent when view "Robot State" is selected.
Specified by:
setDisplayString in interface SimpleInterface
Parameters:
s - String, the text to display.

setBaseSpeed

public abstract void setBaseSpeed(double speed)
Set the base speed for the robot (translation) in meters per second. Base speed is how fast the robot will move when setSpeed(1.0) is called. The speed must be between 0 and MAX_TRANSLATION. It will be clipped to whichever limit it exceeds.
Specified by:
setBaseSpeed in interface SimpleInterface
Parameters:
speed - the desired speed from 0 to 1.0, where 1.0 is the base speed.
See Also:
setSpeed(long, double)

getDictionary

public TBDictionary getDictionary()
Gets the TBDictionary holding parameters defined using the "dictionary" keyword in the dsc file.
Specified by:
getDictionary in interface SimpleInterface

setDictionary

public void setDictionary(TBDictionary tbd)
Sets the TBDictionary for the robots.
Specified by:
setDictionary in interface SimpleInterface
Parameters:
tbd - the dictionary to set it to

getForegroundColor

public abstract java.awt.Color getForegroundColor()
Gets the foreground color of the robot.
Specified by:
getForegroundColor in interface SimpleInterface

getBackgroundColor

public abstract java.awt.Color getBackgroundColor()
Gets the background color of the robot.
Specified by:
getBackgroundColor in interface SimpleInterface