Class 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 over-speeding 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 Detail

      • 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

        public 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 Detail

      • 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 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).