Expose dt in control loop plant parameters

Change-Id: I0da4cbde0117c78bd56ce910069a3e0c0bc1744f
diff --git a/frc971/control_loops/hybrid_state_feedback_loop_test.cc b/frc971/control_loops/hybrid_state_feedback_loop_test.cc
index 38dbd53..13f74fa 100644
--- a/frc971/control_loops/hybrid_state_feedback_loop_test.cc
+++ b/frc971/control_loops/hybrid_state_feedback_loop_test.cc
@@ -127,7 +127,7 @@
       Eigen::Matrix<double, 7, 2>::Identity(),
       Eigen::Matrix<double, 7, 4>::Identity(),
       Eigen::Matrix<double, 4, 1>::Constant(1),
-      Eigen::Matrix<double, 4, 1>::Constant(-1));
+      Eigen::Matrix<double, 4, 1>::Constant(-1), std::chrono::milliseconds(5));
 
   // Build a plant.
   ::std::vector<::std::unique_ptr<StateFeedbackPlantCoefficients<2, 4, 7>>>
diff --git a/frc971/control_loops/python/control_loop.py b/frc971/control_loops/python/control_loop.py
index 919968e..347e1cd 100644
--- a/frc971/control_loops/python/control_loop.py
+++ b/frc971/control_loops/python/control_loop.py
@@ -183,6 +183,7 @@
             fd.write('#include \"%s/%s\"\n' % (os.path.join(*self._namespaces),
                                                header_file_name))
             fd.write('\n')
+            fd.write('#include <chrono>\n')
             fd.write('#include <vector>\n')
             fd.write('\n')
             fd.write(
@@ -389,8 +390,10 @@
             ans.append(self._DumpMatrix('A', self.A, scalar_type))
             ans.append(self._DumpMatrix('B', self.B, scalar_type))
             ans.append(
+                '  const std::chrono::nanoseconds dt(%d);\n' % (self.dt * 1e9))
+            ans.append(
                 '  return %s'
-                '(A, B, C, D, U_max, U_min);\n' % (plant_coefficient_type))
+                '(A, B, C, D, U_max, U_min, dt);\n' % (plant_coefficient_type))
         elif plant_coefficient_type.startswith('StateFeedbackHybridPlant'):
             ans.append(
                 self._DumpMatrix('A_continuous', self.A_continuous,
diff --git a/frc971/control_loops/state_feedback_loop.h b/frc971/control_loops/state_feedback_loop.h
index 81783cc..83a54f0 100644
--- a/frc971/control_loops/state_feedback_loop.h
+++ b/frc971/control_loops/state_feedback_loop.h
@@ -39,7 +39,8 @@
         C(other.C),
         D(other.D),
         U_min(other.U_min),
-        U_max(other.U_max) {}
+        U_max(other.U_max),
+        dt(other.dt) {}
 
   StateFeedbackPlantCoefficients(
       const Eigen::Matrix<Scalar, number_of_states, number_of_states> &A,
@@ -47,8 +48,9 @@
       const Eigen::Matrix<Scalar, number_of_outputs, number_of_states> &C,
       const Eigen::Matrix<Scalar, number_of_outputs, number_of_inputs> &D,
       const Eigen::Matrix<Scalar, number_of_inputs, 1> &U_max,
-      const Eigen::Matrix<Scalar, number_of_inputs, 1> &U_min)
-      : A(A), B(B), C(C), D(D), U_min(U_min), U_max(U_max) {}
+      const Eigen::Matrix<Scalar, number_of_inputs, 1> &U_min,
+      const std::chrono::nanoseconds dt)
+      : A(A), B(B), C(C), D(D), U_min(U_min), U_max(U_max), dt(dt) {}
 
   const Eigen::Matrix<Scalar, number_of_states, number_of_states> A;
   const Eigen::Matrix<Scalar, number_of_states, number_of_inputs> B;
@@ -56,6 +58,7 @@
   const Eigen::Matrix<Scalar, number_of_outputs, number_of_inputs> D;
   const Eigen::Matrix<Scalar, number_of_inputs, 1> U_min;
   const Eigen::Matrix<Scalar, number_of_inputs, 1> U_max;
+  const std::chrono::nanoseconds dt;
 };
 
 template <int number_of_states, int number_of_inputs, int number_of_outputs,