blob: 8b4cefdde1f2fa574cdadf45150002782dd14584 [file] [log] [blame]
Tyler Chatow12581562019-01-26 20:42:42 -08001#ifndef FRC971_CONTROL_LOOPS_CAPPED_TEST_PLANT_H_
2#define FRC971_CONTROL_LOOPS_CAPPED_TEST_PLANT_H_
3
Tyler Chatow12581562019-01-26 20:42:42 -08004#include "gtest/gtest.h"
5
Philipp Schrader790cb542023-07-05 21:06:52 -07006#include "frc971/control_loops/state_feedback_loop.h"
7
Tyler Chatow12581562019-01-26 20:42:42 -08008namespace frc971 {
9namespace control_loops {
10
11// Basic state feedback plant for use in tests.
12class CappedTestPlant : public StateFeedbackPlant<2, 1, 1> {
13 public:
14 explicit CappedTestPlant(StateFeedbackPlant<2, 1, 1> &&other)
15 : StateFeedbackPlant<2, 1, 1>(::std::move(other)) {}
16
17 void CheckU(const ::Eigen::Matrix<double, 1, 1> &U) override {
18 EXPECT_LE(U(0, 0), U_max(0, 0) + 0.00001 + voltage_offset_);
19 EXPECT_GE(U(0, 0), U_min(0, 0) - 0.00001 + voltage_offset_);
20 }
21
22 double voltage_offset() const { return voltage_offset_; }
23 void set_voltage_offset(double voltage_offset) {
24 voltage_offset_ = voltage_offset;
25 }
26
27 private:
28 double voltage_offset_ = 0.0;
29};
30
Tyler Chatow12581562019-01-26 20:42:42 -080031} // namespace control_loops
Philipp Schrader790cb542023-07-05 21:06:52 -070032} // namespace frc971
Austin Schuhb39f4522022-03-27 13:29:42 -070033#endif // FRC971_CONTROL_LOOPS_CAPPED_TEST_PLANT_H_