WPILibC++ 2027.0.0-alpha-4
Loading...
Searching...
No Matches
wpi::math::BangBangController Class Reference

Implements a bang-bang controller, which outputs either 0 or 1 depending on whether the measurement is less than the setpoint. More...

#include <wpi/math/controller/BangBangController.hpp>

Inheritance diagram for wpi::math::BangBangController:
wpi::util::Sendable wpi::util::SendableHelper< BangBangController >

Public Member Functions

constexpr BangBangController (double tolerance=std::numeric_limits< double >::infinity())
 Creates a new bang-bang controller.
constexpr void SetSetpoint (double setpoint)
 Sets the setpoint for the bang-bang controller.
constexpr double GetSetpoint () const
 Returns the current setpoint of the bang-bang controller.
constexpr bool AtSetpoint () const
 Returns true if the error is within the tolerance of the setpoint.
constexpr void SetTolerance (double tolerance)
 Sets the error within which AtSetpoint will return true.
constexpr double GetTolerance () const
 Returns the current tolerance of the controller.
constexpr double GetMeasurement () const
 Returns the current measurement of the process variable.
constexpr double GetError () const
 Returns the current error.
constexpr double Calculate (double measurement, double setpoint)
 Returns the calculated control output.
constexpr double Calculate (double measurement)
 Returns the calculated control output.
void InitSendable (wpi::util::SendableBuilder &builder) override
 Initializes this Sendable object.
Public Member Functions inherited from wpi::util::Sendable
virtual constexpr ~Sendable ()=default
Public Member Functions inherited from wpi::util::SendableHelper< BangBangController >
constexpr SendableHelper (const SendableHelper &rhs)=default
constexpr SendableHelperoperator= (const SendableHelper &rhs)=default

Additional Inherited Members

Protected Member Functions inherited from wpi::util::SendableHelper< BangBangController >
constexpr ~SendableHelper ()

Detailed Description

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 & Destructor Documentation

◆ BangBangController()

wpi::math::BangBangController::BangBangController ( double tolerance = std::numeric_limits<double>::infinity())
inlineexplicitconstexpr

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
toleranceTolerance for atSetpoint.

Member Function Documentation

◆ AtSetpoint()

bool wpi::math::BangBangController::AtSetpoint ( ) const
inlineconstexpr

Returns true if the error is within the tolerance of the setpoint.

Returns
Whether the error is within the acceptable bounds.

◆ Calculate() [1/2]

double wpi::math::BangBangController::Calculate ( double measurement)
inlineconstexpr

Returns the calculated control output.

Parameters
measurementThe most recent measurement of the process variable.
Returns
The calculated motor output (0 or 1).

◆ Calculate() [2/2]

double wpi::math::BangBangController::Calculate ( double measurement,
double setpoint )
inlineconstexpr

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
measurementThe most recent measurement of the process variable.
setpointThe setpoint for the process variable.
Returns
The calculated motor output (0 or 1).

◆ GetError()

double wpi::math::BangBangController::GetError ( ) const
inlineconstexpr

Returns the current error.

Returns
The current error.

◆ GetMeasurement()

double wpi::math::BangBangController::GetMeasurement ( ) const
inlineconstexpr

Returns the current measurement of the process variable.

Returns
The current measurement of the process variable.

◆ GetSetpoint()

double wpi::math::BangBangController::GetSetpoint ( ) const
inlineconstexpr

Returns the current setpoint of the bang-bang controller.

Returns
The current setpoint.

◆ GetTolerance()

double wpi::math::BangBangController::GetTolerance ( ) const
inlineconstexpr

Returns the current tolerance of the controller.

Returns
The current tolerance.

◆ InitSendable()

void wpi::math::BangBangController::InitSendable ( wpi::util::SendableBuilder & builder)
overridevirtual

Initializes this Sendable object.

Parameters
buildersendable builder

Implements wpi::util::Sendable.

◆ SetSetpoint()

void wpi::math::BangBangController::SetSetpoint ( double setpoint)
inlineconstexpr

Sets the setpoint for the bang-bang controller.

Parameters
setpointThe desired setpoint.

◆ SetTolerance()

void wpi::math::BangBangController::SetTolerance ( double tolerance)
inlineconstexpr

Sets the error within which AtSetpoint will return true.

Parameters
tolerancePosition error which is tolerable.

The documentation for this class was generated from the following file: