edu.wpi.first.wpilibj.command
Class PIDCommand

java.lang.Object
  extended by edu.wpi.first.wpilibj.command.Command
      extended by edu.wpi.first.wpilibj.command.PIDCommand
All Implemented Interfaces:
SmartDashboardData, SmartDashboardNamedData

public abstract class PIDCommand
extends Command

This class defines a Command which interacts heavily with a PID loop.

It provides some convenience methods to run an internal PIDController. It will also start and stop said PIDController when the PIDCommand is first initialized and ended/interrupted.

Author:
Joe Grinstead

Constructor Summary
PIDCommand(double p, double i, double d)
          Instantiates a PIDCommand that will use the given p, i and d values.
PIDCommand(double p, double i, double d, double period)
          Instantiates a PIDCommand that will use the given p, i and d values.
PIDCommand(java.lang.String name, double p, double i, double d)
          Instantiates a PIDCommand that will use the given p, i and d values.
PIDCommand(java.lang.String name, double p, double i, double d, double period)
          Instantiates a PIDCommand that will use the given p, i and d values.
 
Method Summary
protected  PIDController getPIDController()
          Returns the PIDController used by this PIDCommand.
protected  double getPosition()
          Returns the current position
protected  double getSetpoint()
          Returns the setpoint.
 NetworkTable getTable()
          Returns the NetworkTable associated with the data.
 java.lang.String getType()
          Returns the type of the data.
protected abstract  double returnPIDInput()
          Returns the input for the pid loop.
protected  void setSetpoint(double setpoint)
          Sets the setpoint to the given value.
protected  void setSetpointRange(double a, double b)
          Sets the range that the setpoint may be in.
 void setSetpointRelative(double deltaSetpoint)
          Adds the given value to the setpoint.
protected abstract  void usePIDOutput(double output)
          Uses the value that the pid loop calculated.
 
Methods inherited from class edu.wpi.first.wpilibj.command.Command
cancel, doesRequire, end, execute, getGroup, getName, grabTable, initialize, interrupted, isCanceled, isFinished, isInterruptible, isRunning, isTimedOut, requires, setInterruptible, setRunWhenDisabled, setTimeout, start, timeSinceInitialized, toString, willRunWhenDisabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PIDCommand

public PIDCommand(java.lang.String name,
                  double p,
                  double i,
                  double d)
Instantiates a PIDCommand that will use the given p, i and d values.

Parameters:
name - the name of the command
p - the proportional value
i - the integral value
d - the derivative value

PIDCommand

public PIDCommand(java.lang.String name,
                  double p,
                  double i,
                  double d,
                  double period)
Instantiates a PIDCommand that will use the given p, i and d values. It will also space the time between PID loop calculations to be equal to the given period.

Parameters:
name - the name
p - the proportional value
i - the integral value
d - the derivative value
period - the time (in seconds) between calculations

PIDCommand

public PIDCommand(double p,
                  double i,
                  double d)
Instantiates a PIDCommand that will use the given p, i and d values. It will use the class name as its name.

Parameters:
p - the proportional value
i - the integral value
d - the derivative value

PIDCommand

public PIDCommand(double p,
                  double i,
                  double d,
                  double period)
Instantiates a PIDCommand that will use the given p, i and d values. It will use the class name as its name.. It will also space the time between PID loop calculations to be equal to the given period.

Parameters:
p - the proportional value
i - the integral value
d - the derivative value
period - the time (in seconds) between calculations
Method Detail

getPIDController

protected PIDController getPIDController()
Returns the PIDController used by this PIDCommand. Use this if you would like to fine tune the pid loop.

Notice that calling setSetpoint(...) on the controller will not result in the setpoint being trimmed to be in the range defined by setSetpointRange(...).

Returns:
the PIDController used by this PIDCommand

setSetpointRelative

public void setSetpointRelative(double deltaSetpoint)
Adds the given value to the setpoint. If setRange(...) was used, then the bounds will still be honored by this method.

Parameters:
deltaSetpoint - the change in the setpoint

setSetpoint

protected void setSetpoint(double setpoint)
Sets the setpoint to the given value. If setRange(...) was called, then the given setpoint will be trimmed to fit within the range.

Parameters:
setpoint - the new setpoint

getSetpoint

protected double getSetpoint()
Returns the setpoint.

Returns:
the setpoint

getPosition

protected double getPosition()
Returns the current position

Returns:
the current position

setSetpointRange

protected void setSetpointRange(double a,
                                double b)
Sets the range that the setpoint may be in. If this method is called, all subsequent calls to setSetpoint(...) will force the setpoint within the given values.

Parameters:
a - the first value (can be the min or max, it doesn't matter)
b - the second value (can be the min or max, it doesn't matter)

returnPIDInput

protected abstract double returnPIDInput()
Returns the input for the pid loop.

It returns the input for the pid loop, so if this command was based off of a gyro, then it should return the angle of the gyro

All subclasses of PIDCommand must override this method.

This method will be called in a different thread then the Scheduler thread.

Returns:
the value the pid loop should use as input

usePIDOutput

protected abstract void usePIDOutput(double output)
Uses the value that the pid loop calculated. The calculated value is the "output" parameter. This method is a good time to set motor values, maybe something along the lines of driveline.tankDrive(output, -output)

All subclasses of PIDCommand must override this method.

This method will be called in a different thread then the Scheduler thread.

Parameters:
output - the value the pid loop calculated

getType

public java.lang.String getType()
Description copied from interface: SmartDashboardData
Returns the type of the data. This is used by the SmartDashboard on the desktop to determine what to do with the table returned by getTable().

For instance, if the type was "Button", then the SmartDashboard would show the data as a button on the desktop and would know to look at and modify the "pressed" field in the NetworkTable returned by getTable().

Specified by:
getType in interface SmartDashboardData
Overrides:
getType in class Command
Returns:
the type of the data

getTable

public NetworkTable getTable()
Description copied from interface: SmartDashboardData
Returns the NetworkTable associated with the data. The table should contain all the information the desktop version of SmartDashboard needs to interact with the object. The data should both keep the table up-to-date and also react to changes that the SmartDashboard might make.

For instance, the SendablePIDController will put its p, i and d values into its table and will change them if the table receives new values.

This method should return the same table between calls

Specified by:
getTable in interface SmartDashboardData
Overrides:
getTable in class Command
Returns:
the table that represents this data