Made StateFeedbackControllerConstants just a set of constants.
Change-Id: I0b7de27749f28ba75349cd8c6b3a80036f3dc04c
diff --git a/frc971/control_loops/state_feedback_loop.h b/frc971/control_loops/state_feedback_loop.h
index 3f4a6ad..bcf00d6 100644
--- a/frc971/control_loops/state_feedback_loop.h
+++ b/frc971/control_loops/state_feedback_loop.h
@@ -20,19 +20,19 @@
// input because that's what comes back from the sensors).
template <int number_of_states, int number_of_inputs, int number_of_outputs>
-class StateFeedbackPlantCoefficients final {
+struct StateFeedbackPlantCoefficients final {
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
StateFeedbackPlantCoefficients(const StateFeedbackPlantCoefficients &other)
- : A_(other.A()),
- A_continuous_(other.A_continuous()),
- B_(other.B()),
- B_continuous_(other.B_continuous()),
- C_(other.C()),
- D_(other.D()),
- U_min_(other.U_min()),
- U_max_(other.U_max()) {}
+ : A(other.A),
+ A_continuous(other.A_continuous),
+ B(other.B),
+ B_continuous(other.B_continuous),
+ C(other.C),
+ D(other.D),
+ U_min(other.U_min),
+ U_max(other.U_max) {}
StateFeedbackPlantCoefficients(
const Eigen::Matrix<double, number_of_states, number_of_states> &A,
@@ -45,61 +45,23 @@
const Eigen::Matrix<double, number_of_outputs, number_of_inputs> &D,
const Eigen::Matrix<double, number_of_inputs, 1> &U_max,
const Eigen::Matrix<double, number_of_inputs, 1> &U_min)
- : A_(A),
- A_continuous_(A_continuous),
- B_(B),
- B_continuous_(B_continuous),
- C_(C),
- D_(D),
- U_min_(U_min),
- U_max_(U_max) {}
+ : A(A),
+ A_continuous(A_continuous),
+ B(B),
+ B_continuous(B_continuous),
+ C(C),
+ D(D),
+ U_min(U_min),
+ U_max(U_max) {}
- const Eigen::Matrix<double, number_of_states, number_of_states> &A() const {
- return A_;
- }
- double A(int i, int j) const { return A()(i, j); }
- const Eigen::Matrix<double, number_of_states, number_of_states> &A_continuous()
- const {
- return A_continuous_;
- }
- double A_continuous(int i, int j) const { return A_continuous()(i, j); }
- const Eigen::Matrix<double, number_of_states, number_of_inputs> &B() const {
- return B_;
- }
- double B(int i, int j) const { return B()(i, j); }
- const Eigen::Matrix<double, number_of_states, number_of_inputs> &B_continuous() const {
- return B_continuous_;
- }
- double B_continuous(int i, int j) const { return B_continuous()(i, j); }
- const Eigen::Matrix<double, number_of_outputs, number_of_states> &C() const {
- return C_;
- }
- double C(int i, int j) const { return C()(i, j); }
- const Eigen::Matrix<double, number_of_outputs, number_of_inputs> &D() const {
- return D_;
- }
- double D(int i, int j) const { return D()(i, j); }
- const Eigen::Matrix<double, number_of_inputs, 1> &U_min() const {
- return U_min_;
- }
- double U_min(int i, int j) const { return U_min()(i, j); }
- const Eigen::Matrix<double, number_of_inputs, 1> &U_max() const {
- return U_max_;
- }
- double U_max(int i, int j) const { return U_max()(i, j); }
-
- private:
- const Eigen::Matrix<double, number_of_states, number_of_states> A_;
- const Eigen::Matrix<double, number_of_states, number_of_states> A_continuous_;
- const Eigen::Matrix<double, number_of_states, number_of_inputs> B_;
- const Eigen::Matrix<double, number_of_states, number_of_inputs> B_continuous_;
- const Eigen::Matrix<double, number_of_outputs, number_of_states> C_;
- const Eigen::Matrix<double, number_of_outputs, number_of_inputs> D_;
- const Eigen::Matrix<double, number_of_inputs, 1> U_min_;
- const Eigen::Matrix<double, number_of_inputs, 1> U_max_;
-
- StateFeedbackPlantCoefficients &operator=(
- StateFeedbackPlantCoefficients other) = delete;
+ const Eigen::Matrix<double, number_of_states, number_of_states> A;
+ const Eigen::Matrix<double, number_of_states, number_of_states> A_continuous;
+ const Eigen::Matrix<double, number_of_states, number_of_inputs> B;
+ const Eigen::Matrix<double, number_of_states, number_of_inputs> B_continuous;
+ const Eigen::Matrix<double, number_of_outputs, number_of_states> C;
+ const Eigen::Matrix<double, number_of_outputs, number_of_inputs> D;
+ const Eigen::Matrix<double, number_of_inputs, 1> U_min;
+ const Eigen::Matrix<double, number_of_inputs, 1> U_max;
};
template <int number_of_states, int number_of_inputs, int number_of_outputs>
@@ -125,27 +87,27 @@
virtual ~StateFeedbackPlant() {}
const Eigen::Matrix<double, number_of_states, number_of_states> &A() const {
- return coefficients().A();
+ return coefficients().A;
}
double A(int i, int j) const { return A()(i, j); }
const Eigen::Matrix<double, number_of_states, number_of_inputs> &B() const {
- return coefficients().B();
+ return coefficients().B;
}
double B(int i, int j) const { return B()(i, j); }
const Eigen::Matrix<double, number_of_outputs, number_of_states> &C() const {
- return coefficients().C();
+ return coefficients().C;
}
double C(int i, int j) const { return C()(i, j); }
const Eigen::Matrix<double, number_of_outputs, number_of_inputs> &D() const {
- return coefficients().D();
+ return coefficients().D;
}
double D(int i, int j) const { return D()(i, j); }
const Eigen::Matrix<double, number_of_inputs, 1> &U_min() const {
- return coefficients().U_min();
+ return coefficients().U_min;
}
double U_min(int i, int j) const { return U_min()(i, j); }
const Eigen::Matrix<double, number_of_inputs, 1> &U_max() const {
- return coefficients().U_max();
+ return coefficients().U_max;
}
double U_max(int i, int j) const { return U_max()(i, j); }
@@ -206,7 +168,8 @@
Eigen::Matrix<double, number_of_outputs, 1> Y_;
::std::vector<::std::unique_ptr<StateFeedbackPlantCoefficients<
- number_of_states, number_of_inputs, number_of_outputs>>> coefficients_;
+ number_of_states, number_of_inputs, number_of_outputs>>>
+ coefficients_;
int plant_index_;
@@ -236,20 +199,6 @@
const StateFeedbackPlantCoefficients<number_of_states, number_of_inputs,
number_of_outputs> &plant)
: L(L), K(K), Kff(Kff), A_inv(A_inv), plant(plant) {}
-
- // TODO(Brian): Remove this overload once they're all converted.
- StateFeedbackControllerConstants(
- const Eigen::Matrix<double, number_of_states, number_of_outputs> &L,
- const Eigen::Matrix<double, number_of_inputs, number_of_states> &K,
- const Eigen::Matrix<double, number_of_states, number_of_states> &A_inv,
- const StateFeedbackPlantCoefficients<number_of_states, number_of_inputs,
- number_of_outputs> &plant)
- : L(L),
- K(K),
- Kff(::Eigen::Matrix<double, number_of_inputs,
- number_of_states>::Zero()),
- A_inv(A_inv),
- plant(plant) {}
};
template <int number_of_states, int number_of_inputs, int number_of_outputs>
@@ -288,11 +237,11 @@
virtual ~StateFeedbackLoop() {}
const Eigen::Matrix<double, number_of_states, number_of_states> &A() const {
- return controller().plant.A();
+ return controller().plant.A;
}
double A(int i, int j) const { return A()(i, j); }
const Eigen::Matrix<double, number_of_states, number_of_inputs> &B() const {
- return controller().plant.B();
+ return controller().plant.B;
}
const Eigen::Matrix<double, number_of_states, number_of_states> &A_inv()
const {
@@ -301,19 +250,19 @@
double A_inv(int i, int j) const { return A_inv()(i, j); }
double B(int i, int j) const { return B()(i, j); }
const Eigen::Matrix<double, number_of_outputs, number_of_states> &C() const {
- return controller().plant.C();
+ return controller().plant.C;
}
double C(int i, int j) const { return C()(i, j); }
const Eigen::Matrix<double, number_of_outputs, number_of_inputs> &D() const {
- return controller().plant.D();
+ return controller().plant.D;
}
double D(int i, int j) const { return D()(i, j); }
const Eigen::Matrix<double, number_of_inputs, 1> &U_min() const {
- return controller().plant.U_min();
+ return controller().plant.U_min;
}
double U_min(int i, int j) const { return U_min()(i, j); }
const Eigen::Matrix<double, number_of_inputs, 1> &U_max() const {
- return controller().plant.U_max();
+ return controller().plant.U_max;
}
double U_max(int i, int j) const { return U_max()(i, j); }