Add generic linearized LQR class
This provides a convenient class for taking a system with non-linear
dynamics and generating an LQR controller for it. It still needs some
optimizations to be able to run effectively on a roborio.
Change-Id: I57eaec75738b05713bef272b677aeaa439980354
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/control_loops/swerve/BUILD b/frc971/control_loops/swerve/BUILD
index b88fd62..637e42c 100644
--- a/frc971/control_loops/swerve/BUILD
+++ b/frc971/control_loops/swerve/BUILD
@@ -400,6 +400,34 @@
)
cc_library(
+ name = "linearization_utils",
+ hdrs = ["linearization_utils.h"],
+)
+
+cc_library(
+ name = "linearized_controller",
+ hdrs = ["linearized_controller.h"],
+ deps = [
+ ":eigen_dynamics",
+ ":linearization_utils",
+ "//frc971/control_loops:c2d",
+ "//frc971/control_loops:dlqr",
+ "//frc971/control_loops:jacobian",
+ "@com_google_absl//absl/log",
+ "@com_google_absl//absl/log:check",
+ ],
+)
+
+cc_test(
+ name = "linearized_controller_test",
+ srcs = ["linearized_controller_test.cc"],
+ deps = [
+ ":linearized_controller",
+ "//aos/testing:googletest",
+ ],
+)
+
+cc_library(
name = "auto_diff_jacobian",
hdrs = ["auto_diff_jacobian.h"],
target_compatible_with = ["@platforms//os:linux"],