Implements a bang-bang controller, which outputs either 0 or 1 depending on whether the measurement is less than the setpoint.
More...
|
| 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.
|
| virtual constexpr | ~Sendable ()=default |
| constexpr | SendableHelper (const SendableHelper &rhs)=default |
| constexpr SendableHelper & | operator= (const SendableHelper &rhs)=default |
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.