Add roll AngularSystem code gen to 2023

Controller hasn't been tuned, FYI.

Change-Id: I0e5ddb594552a020b58060c4edea96ff675bf677
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/frc971/control_loops/python/angular_system.py b/frc971/control_loops/python/angular_system.py
index 6772e71..c6ffb50 100755
--- a/frc971/control_loops/python/angular_system.py
+++ b/frc971/control_loops/python/angular_system.py
@@ -120,11 +120,15 @@
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
-                                                         B=self.B,
-                                                         C=self.C,
-                                                         Q=self.Q,
-                                                         R=self.R)
+        # From testing, these continuous Q and R's appear to be good approximations of Q and R.
+        self.Q_continuous = self.Q / self.dt
+        self.R_continuous = self.R * self.dt
+
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
 
         glog.debug('Kal %s', repr(self.KalmanGain))
 
@@ -165,11 +169,15 @@
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
-                                                         B=self.B,
-                                                         C=self.C,
-                                                         Q=self.Q,
-                                                         R=self.R)
+        # From testing, these continuous Q and R's appear to be good approximations of Q and R.
+        self.Q_continuous = self.Q / self.dt
+        self.R_continuous = self.R * self.dt
+
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
 
         self.K_unaugmented = self.K
         self.K = numpy.matrix(numpy.zeros((1, 3)))
@@ -409,7 +417,12 @@
             max_acceleration=max_acceleration)
 
 
-def WriteAngularSystem(params, plant_files, controller_files, year_namespaces):
+def WriteAngularSystem(params,
+                       plant_files,
+                       controller_files,
+                       year_namespaces,
+                       plant_type='StateFeedbackPlant',
+                       observer_type='StateFeedbackObserver'):
     """Writes out the constants for a angular system to a file.
 
     Args:
@@ -440,7 +453,9 @@
 
     loop_writer = control_loop.ControlLoopWriter(name,
                                                  angular_systems,
-                                                 namespaces=year_namespaces)
+                                                 namespaces=year_namespaces,
+                                                 plant_type=plant_type,
+                                                 observer_type=observer_type)
     loop_writer.AddConstant(
         control_loop.Constant('kOutputRatio', '%f', angular_systems[0].G))
     loop_writer.AddConstant(
@@ -451,5 +466,7 @@
     integral_loop_writer = control_loop.ControlLoopWriter(
         'Integral' + name,
         integral_angular_systems,
-        namespaces=year_namespaces)
+        namespaces=year_namespaces,
+        plant_type=plant_type,
+        observer_type=observer_type)
     integral_loop_writer.Write(controller_files[0], controller_files[1])