Class BangBangController

java.lang.Object
org.wpilib.math.controller.BangBangController
All Implemented Interfaces:
Sendable

public class BangBangController extends Object implements Sendable
Implements a bang-bang controller, which outputs either 0 or 1 depending on whether the measurement is less than the setpoint. This maximally-aggressive control approach works very well for velocity control of high-inertia mechanisms, and poorly on most other things.

Note that this is an *asymmetric* bang-bang controller - it will not exert any control effort in the reverse direction (e.g. it won't try to slow down an overspeeding shooter wheel). This asymmetry is *extremely important*. Bang-bang control is extremely simple, but also potentially hazardous. Always ensure that your motor controllers are set to "coast" before attempting to control them with a bang-bang controller.

  • Constructor Details

    • BangBangController

      public BangBangController(double tolerance)
      Creates a new bang-bang controller.

      Always ensure that your motor controllers are set to "coast" before attempting to control them with a bang-bang controller.

      Parameters:
      tolerance - Tolerance for atSetpoint.
    • BangBangController

      Creates a new bang-bang controller.

      Always ensure that your motor controllers are set to "coast" before attempting to control them with a bang-bang controller.

  • Method Details

    • setSetpoint

      public void setSetpoint(double setpoint)
      Sets the setpoint for the bang-bang controller.
      Parameters:
      setpoint - The desired setpoint.
    • getSetpoint

      public double getSetpoint()
      Returns the current setpoint of the bang-bang controller.
      Returns:
      The current setpoint.
    • atSetpoint

      public boolean atSetpoint()
      Returns true if the error is within the tolerance of the setpoint.
      Returns:
      Whether the error is within the acceptable bounds.
    • setTolerance

      public final void setTolerance(double tolerance)
      Sets the error within which atSetpoint will return true.
      Parameters:
      tolerance - Position error which is tolerable.
    • getTolerance

      public double getTolerance()
      Returns the current tolerance of the controller.
      Returns:
      The current tolerance.
    • getMeasurement

      public double getMeasurement()
      Returns the current measurement of the process variable.
      Returns:
      The current measurement of the process variable.
    • getError

      public double getError()
      Returns the current error.
      Returns:
      The current error.
    • calculate

      public double calculate(double measurement, double setpoint)
      Returns the calculated control output.

      Always ensure that your motor controllers are set to "coast" before attempting to control them with a bang-bang controller.

      Parameters:
      measurement - The most recent measurement of the process variable.
      setpoint - The setpoint for the process variable.
      Returns:
      The calculated motor output (0 or 1).
    • calculate

      public double calculate(double measurement)
      Returns the calculated control output.
      Parameters:
      measurement - The most recent measurement of the process variable.
      Returns:
      The calculated motor output (0 or 1).
    • initSendable

      public void initSendable(SendableBuilder builder)
      Description copied from interface: Sendable
      Initializes this Sendable object.
      Specified by:
      initSendable in interface Sendable
      Parameters:
      builder - sendable builder