Automatically generate claw constants.

Change-Id: I35d15b34e6ae8349b009cd636d5e3962f1c6af5c
diff --git a/y2014/control_loops/claw/BUILD b/y2014/control_loops/claw/BUILD
index a91462d..6f77d7a 100644
--- a/y2014/control_loops/claw/BUILD
+++ b/y2014/control_loops/claw/BUILD
@@ -25,6 +25,22 @@
   ],
 )
 
+genrule(
+  name = 'genrule_claw',
+  visibility = ['//visibility:private'],
+  cmd = '$(location //y2014/control_loops/python:claw) $(OUTS)',
+  tools = [
+    '//y2014/control_loops/python:claw',
+  ],
+  tags = [
+    'local',
+  ],
+  outs = [
+    'claw_motor_plant.h',
+    'claw_motor_plant.cc',
+  ],
+)
+
 cc_library(
   name = 'claw_lib',
   srcs = [
diff --git a/y2014/control_loops/claw/claw.cc b/y2014/control_loops/claw/claw.cc
index 7322b1e..1c93cf5 100644
--- a/y2014/control_loops/claw/claw.cc
+++ b/y2014/control_loops/claw/claw.cc
@@ -372,7 +372,7 @@
       has_bottom_claw_goal_(false),
       bottom_claw_goal_(0.0),
       bottom_claw_(this),
-      claw_(MakeClawLoop()),
+      claw_(::y2014::control_loops::claw::MakeClawLoop()),
       was_enabled_(false),
       doing_calibration_fine_tune_(false),
       capped_goal_(false),
diff --git a/y2014/control_loops/claw/claw_lib_test.cc b/y2014/control_loops/claw/claw_lib_test.cc
index 9eb173e..0bf287f 100644
--- a/y2014/control_loops/claw/claw_lib_test.cc
+++ b/y2014/control_loops/claw/claw_lib_test.cc
@@ -17,6 +17,8 @@
 namespace control_loops {
 namespace testing {
 
+using ::y2014::control_loops::claw::MakeClawPlant;
+
 typedef enum {
 	TOP_CLAW = 0,
 	BOTTOM_CLAW,
diff --git a/y2014/control_loops/claw/claw_motor_plant.cc b/y2014/control_loops/claw/claw_motor_plant.cc
deleted file mode 100644
index acba8d0..0000000
--- a/y2014/control_loops/claw/claw_motor_plant.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "y2014/control_loops/claw/claw_motor_plant.h"
-
-#include <vector>
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-
-StateFeedbackPlantCoefficients<4, 2, 2> MakeClawPlantCoefficients() {
-  Eigen::Matrix<double, 4, 4> A;
-  A << 1.0, 0.0, 0.00909331035298, 0.0, 0.0, 1.0, -6.04514323962e-05, 0.00903285892058, 0.0, 0.0, 0.824315642255, 0.0, 0.0, 0.0, -0.0112975266368, 0.813018115618;
-  Eigen::Matrix<double, 4, 2> B;
-  B << 0.000352527133889, 0.0, -0.000352527133889, 0.000376031064118, 0.0683072794628, 0.0, -0.0683072794628, 0.0726998350615;
-  Eigen::Matrix<double, 2, 4> C;
-  C << 1, 0, 0, 0, 1, 1, 0, 0;
-  Eigen::Matrix<double, 2, 2> D;
-  D << 0, 0, 0, 0;
-  Eigen::Matrix<double, 2, 1> U_max;
-  U_max << 12.0, 12.0;
-  Eigen::Matrix<double, 2, 1> U_min;
-  U_min << -12.0, -12.0;
-  return StateFeedbackPlantCoefficients<4, 2, 2>(A, B, C, D, U_max, U_min);
-}
-
-StateFeedbackController<4, 2, 2> MakeClawController() {
-  Eigen::Matrix<double, 4, 2> L;
-  L << 1.72431564225, 2.70472958703e-16, -1.72431564225, 1.71301811562, 65.9456997026, 1.03478906105e-14, -65.9456997026, 64.4642687194;
-  Eigen::Matrix<double, 2, 4> K;
-  K << 106.138028875, 0.0, 4.20012492658, 0.0, 99.5038407367, 99.7251230882, 3.77683310096, 3.78980738032;
-  Eigen::Matrix<double, 4, 4> A_inv;
-  A_inv << 1.0, 0.0, -0.0110313451387, 0.0, 0.0, 1.0, -7.89348747778e-05, -0.0111102800135, 0.0, 0.0, 1.21312753118, 0.0, 0.0, 0.0, 0.016857361889, 1.22998489307;
-  return StateFeedbackController<4, 2, 2>(L, K, A_inv, MakeClawPlantCoefficients());
-}
-
-StateFeedbackPlant<4, 2, 2> MakeClawPlant() {
-  ::std::vector< ::std::unique_ptr<StateFeedbackPlantCoefficients<4, 2, 2>>> plants(1);
-  plants[0] = ::std::unique_ptr<StateFeedbackPlantCoefficients<4, 2, 2>>(new StateFeedbackPlantCoefficients<4, 2, 2>(MakeClawPlantCoefficients()));
-  return StateFeedbackPlant<4, 2, 2>(&plants);
-}
-
-StateFeedbackLoop<4, 2, 2> MakeClawLoop() {
-  ::std::vector< ::std::unique_ptr<StateFeedbackController<4, 2, 2>>> controllers(1);
-  controllers[0] = ::std::unique_ptr<StateFeedbackController<4, 2, 2>>(new StateFeedbackController<4, 2, 2>(MakeClawController()));
-  return StateFeedbackLoop<4, 2, 2>(&controllers);
-}
-
-}  // namespace control_loops
-}  // namespace frc971
diff --git a/y2014/control_loops/claw/claw_motor_plant.h b/y2014/control_loops/claw/claw_motor_plant.h
deleted file mode 100644
index c7de33a..0000000
--- a/y2014/control_loops/claw/claw_motor_plant.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef Y2014_CONTROL_LOOPS_CLAW_CLAW_MOTOR_PLANT_H_
-#define Y2014_CONTROL_LOOPS_CLAW_CLAW_MOTOR_PLANT_H_
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-static constexpr double kClawMomentOfInertiaRatio = 0.933333;
-
-
-StateFeedbackPlantCoefficients<4, 2, 2> MakeClawPlantCoefficients();
-
-StateFeedbackController<4, 2, 2> MakeClawController();
-
-StateFeedbackPlant<4, 2, 2> MakeClawPlant();
-
-StateFeedbackLoop<4, 2, 2> MakeClawLoop();
-
-}  // namespace control_loops
-}  // namespace frc971
-
-#endif  // Y2014_CONTROL_LOOPS_CLAW_CLAW_MOTOR_PLANT_H_