edu.wpi.first.wpilibj.command

## Class PIDCommand

- java.lang.Object
- - edu.wpi.first.wpilibj.command.Command
  - - edu.wpi.first.wpilibj.command.PIDCommand

- All Implemented Interfaces:
    NamedSendable, Sendable

      public abstract class PIDCommand
      extends Command
      implements Sendable

  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.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `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

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected PIDController` | `getPIDController()` Returns the `PIDController` used by this `PIDCommand`.
    `protected double` | `getPosition()` Returns the current position.
    `protected double` | `getSetpoint()` Returns the setpoint.
    `java.lang.String` | `getSmartDashboardType()` The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
    `void` | `initTable(NetworkTable table)` Initializes a table for this `Sendable` object.
    `protected abstract double` | `returnPIDInput()` Returns the input for the pid loop.
    `protected void` | `setInputRange(double minimumInput, double maximumInput)` Sets the maximum and minimum values expected from the input and setpoint.
    `protected void` | `setSetpoint(double setpoint)` Sets the setpoint to the given value.
    `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, clearRequirements, doesRequire, end, execute, getGroup, getName, 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.
      Returns:
        the `PIDController` used by this `PIDCommand`

    - #### setSetpointRelative

          public void setSetpointRelative(double deltaSetpoint)

      Adds the given value to the setpoint. If `setInputRange(...)` 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 `setInputRange(...)` 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

    - #### setInputRange

          protected void setInputRange(double minimumInput,
                                       double maximumInput)

      Sets the maximum and minimum values expected from the input and setpoint.
      Parameters:
        `minimumInput` - the minimum value expected from the input and setpoint
        `maximumInput` - the maximum value expected from the input and setpoint

    - #### 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

    - #### getSmartDashboardType

          public java.lang.String getSmartDashboardType()

      Description copied from interface: `Sendable`
      The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
      Specified by:
        `getSmartDashboardType` in interface `Sendable`
      Overrides:
        `getSmartDashboardType` in class `Command`
      Returns:
        The type of this `Sendable`.

    - #### initTable

          public void initTable(NetworkTable table)

      Description copied from interface: `Sendable`
      Initializes a table for this `Sendable` object.
      Specified by:
        `initTable` in interface `Sendable`
      Overrides:
        `initTable` in class `Command`
      Parameters:
        `table` - The table to put the values in.