14#include "wpi/units/time.hpp"
15#include "wpi/units/voltage.hpp"
38template <
int States,
int Inputs,
int Outputs>
60 wpi::units::volt_t maxVoltage, wpi::units::second_t dt)
62 plant, controller, observer,
65 u, maxVoltage.value());
85 wpi::units::second_t dt)
89 observer, clampFunction) {}
106 wpi::units::volt_t maxVoltage)
110 u, maxVoltage.value());
176 double U(
int i)
const {
return U()(i); }
#define EXPORT_TEMPLATE_DECLARE(export)
Definition SymbolExports.hpp:94
#define WPILIB_DLLEXPORT
Definition SymbolExports.hpp:36
A Kalman filter combines predictions from a model and measurements to give an estimate of the true sy...
Definition KalmanFilter.hpp:45
Constructs a plant inversion model-based feedforward from a LinearSystem.
Definition LinearPlantInversionFeedforward.hpp:30
Contains the controller coefficients and logic for a linear-quadratic regulator (LQR).
Definition LinearQuadraticRegulator.hpp:38
A plant defined using state-space notation.
Definition LinearSystem.hpp:35
Combines a controller, feedforward, and observer for controlling a mechanism with full state feedback...
Definition LinearSystemLoop.hpp:39
InputVector U() const
Returns the controller's calculated control input u.
Definition LinearSystemLoop.hpp:167
LinearSystemLoop(LinearSystem< States, Inputs, Outputs > &plant, LinearQuadraticRegulator< States, Inputs > &controller, KalmanFilter< States, Inputs, Outputs > &observer, std::function< InputVector(const InputVector &)> clampFunction, wpi::units::second_t dt)
Constructs a state-space loop with the given plant, controller, and observer.
Definition LinearSystemLoop.hpp:81
double U(int i) const
Returns an element of the controller's calculated control input u.
Definition LinearSystemLoop.hpp:176
LinearQuadraticRegulator< States, Inputs > * m_controller
Definition LinearSystemLoop.hpp:274
void SetXhat(const StateVector &xHat)
Set the initial state estimate x-hat.
Definition LinearSystemLoop.hpp:183
void Correct(const OutputVector &y)
Correct the state estimate x-hat using the measurements in y.
Definition LinearSystemLoop.hpp:247
void Reset(const StateVector &initialState)
Zeroes reference r and controller output u.
Definition LinearSystemLoop.hpp:230
LinearSystemLoop(LinearQuadraticRegulator< States, Inputs > &controller, const LinearPlantInversionFeedforward< States, Inputs > &feedforward, KalmanFilter< States, Inputs, Outputs > &observer, wpi::units::volt_t maxVoltage)
Constructs a state-space loop with the given controller, feedforward and observer.
Definition LinearSystemLoop.hpp:102
const StateVector & Xhat() const
Returns the observer's state estimate x-hat.
Definition LinearSystemLoop.hpp:143
const LinearPlantInversionFeedforward< States, Inputs > Feedforward() const
Return the feedforward used internally.
Definition LinearSystemLoop.hpp:212
LinearSystemLoop(LinearSystemLoop &&)=default
KalmanFilter< States, Inputs, Outputs > * m_observer
Definition LinearSystemLoop.hpp:276
static constexpr int kOutputs
Definition LinearSystemLoop.hpp:289
StateVector m_nextR
Definition LinearSystemLoop.hpp:284
std::function< InputVector(const InputVector &)> m_clampFunc
Clamping function.
Definition LinearSystemLoop.hpp:281
LinearSystemLoop & operator=(LinearSystemLoop &&)=default
Vectord< Outputs > OutputVector
Definition LinearSystemLoop.hpp:43
static constexpr int kStates
Definition LinearSystemLoop.hpp:287
LinearPlantInversionFeedforward< States, Inputs > m_feedforward
Definition LinearSystemLoop.hpp:275
void SetXhat(int i, double value)
Set an element of the initial state estimate x-hat.
Definition LinearSystemLoop.hpp:191
double NextR(int i) const
Returns an element of the controller's next reference r.
Definition LinearSystemLoop.hpp:162
StateVector Error() const
Returns difference between reference r and current state x-hat.
Definition LinearSystemLoop.hpp:240
Vectord< States > StateVector
Definition LinearSystemLoop.hpp:41
InputVector ClampInput(const InputVector &u) const
Clamps input vector between system's minimum and maximum allowable input.
Definition LinearSystemLoop.hpp:271
void Predict(wpi::units::second_t dt)
Sets new controller output, projects model forward, and runs observer prediction.
Definition LinearSystemLoop.hpp:258
void SetNextR(const StateVector &nextR)
Set the next reference r.
Definition LinearSystemLoop.hpp:198
const LinearQuadraticRegulator< States, Inputs > & Controller() const
Return the controller used internally.
Definition LinearSystemLoop.hpp:203
const KalmanFilter< States, Inputs, Outputs > & Observer() const
Return the observer used internally.
Definition LinearSystemLoop.hpp:219
LinearSystemLoop(LinearSystem< States, Inputs, Outputs > &plant, LinearQuadraticRegulator< States, Inputs > &controller, KalmanFilter< States, Inputs, Outputs > &observer, wpi::units::volt_t maxVoltage, wpi::units::second_t dt)
Constructs a state-space loop with the given plant, controller, and observer.
Definition LinearSystemLoop.hpp:57
static constexpr int kInputs
Definition LinearSystemLoop.hpp:288
const StateVector & NextR() const
Returns the controller's next reference r.
Definition LinearSystemLoop.hpp:155
double Xhat(int i) const
Returns an element of the observer's state estimate x-hat.
Definition LinearSystemLoop.hpp:150
LinearSystemLoop(LinearQuadraticRegulator< States, Inputs > &controller, const LinearPlantInversionFeedforward< States, Inputs > &feedforward, KalmanFilter< States, Inputs, Outputs > &observer, std::function< InputVector(const InputVector &)> clampFunction)
Constructs a state-space loop with the given controller, feedforward, observer and clamp function.
Definition LinearSystemLoop.hpp:123
Vectord< Inputs > InputVector
Definition LinearSystemLoop.hpp:42
static void ReportUsage(std::string_view resource, std::string_view data)
Definition MathShared.hpp:61
Definition LinearSystem.hpp:20
Eigen::Vector< double, Inputs > DesaturateInputVector(const Eigen::Vector< double, Inputs > &u, double maxMagnitude)
Renormalize all inputs if any exceeds the maximum magnitude.
Definition StateSpaceUtil.hpp:195
Eigen::Vector< double, Size > Vectord
Definition EigenCore.hpp:12