Work on getting wpilib_interface finished

I moved all the constants together to make it somewhat easier to work. I
also finished renaming serializer to indexer because Austin is more
stubborn than the rest of the team combined.

It at least compiles now. The TODOs are also also much more specific to
the few remaining pieces.

Change-Id: Id3baf2b5be0a946345b152612c2099cf1b599727
diff --git a/y2017/control_loops/python/drivetrain.py b/y2017/control_loops/python/drivetrain.py
index 17e0079..8a65128 100755
--- a/y2017/control_loops/python/drivetrain.py
+++ b/y2017/control_loops/python/drivetrain.py
@@ -23,8 +23,9 @@
     self.stall_torque = 2.42 * self.num_motors * 0.60
     # Stall Current in Amps
     self.stall_current = 133.0 * self.num_motors
-    # Free Speed in RPM. Used number from last year.
-    self.free_speed = 5500.0
+    self.free_speed_rpm = 5500.0
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60
     # Free Current in Amps
     self.free_current = 4.7 * self.num_motors
     # Moment of inertia of the drivetrain in kg m^2
@@ -38,7 +39,7 @@
     # Resistance of the motor, divided by the number of motors.
     self.resistance = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
                (12.0 - self.resistance * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -321,7 +322,7 @@
           drivetrain_low_low.stall_torque))
     dog_loop_writer.AddConstant(control_loop.Constant("kStallCurrent", "%f",
           drivetrain_low_low.stall_current))
-    dog_loop_writer.AddConstant(control_loop.Constant("kFreeSpeedRPM", "%f",
+    dog_loop_writer.AddConstant(control_loop.Constant("kFreeSpeed", "%f",
           drivetrain_low_low.free_speed))
     dog_loop_writer.AddConstant(control_loop.Constant("kFreeCurrent", "%f",
           drivetrain_low_low.free_current))
@@ -343,6 +344,8 @@
           drivetrain_low_low.G_low))
     dog_loop_writer.AddConstant(control_loop.Constant("kHighGearRatio", "%f",
           drivetrain_high_high.G_high))
+    dog_loop_writer.AddConstant(control_loop.Constant("kHighOutputRatio", "%f",
+          drivetrain_high_high.G_high * drivetrain_high_high.r))
 
     dog_loop_writer.Write(argv[1], argv[2])
 
diff --git a/y2017/control_loops/python/hood.py b/y2017/control_loops/python/hood.py
index 6ab8072..52eec8e 100755
--- a/y2017/control_loops/python/hood.py
+++ b/y2017/control_loops/python/hood.py
@@ -24,15 +24,16 @@
     self.stall_torque = 0.43
     # Stall Current in Amps
     self.stall_current = 53.0
-    # Free Speed in RPM
-    self.free_speed = 13180.0
+    self.free_speed_rpm = 13180.0
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60
     # Free Current in Amps
     self.free_current = 1.8
 
     # Resistance of the motor
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
                (12.0 - self.R * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -316,6 +317,10 @@
     hood = Hood('Hood')
     loop_writer = control_loop.ControlLoopWriter('Hood', [hood],
                                                  namespaces=namespaces)
+    loop_writer.AddConstant(control_loop.Constant(
+        'kFreeSpeed', '%f', hood.free_speed))
+    loop_writer.AddConstant(control_loop.Constant(
+        'kOutputRatio', '%f', hood.G))
     loop_writer.Write(argv[1], argv[2])
 
     integral_hood = IntegralHood('IntegralHood')
diff --git a/y2017/control_loops/python/indexer.py b/y2017/control_loops/python/indexer.py
index 4797600..01d9797 100755
--- a/y2017/control_loops/python/indexer.py
+++ b/y2017/control_loops/python/indexer.py
@@ -20,8 +20,9 @@
     self.stall_torque = 0.71
     # Stall Current in Amps
     self.stall_current = 134
-    # Free Speed in RPM
-    self.free_speed = 18730.0
+    self.free_speed_rpm = 18730.0
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60.0
     # Free Current in Amps
     self.free_current = 0.7
     # Moment of inertia of the indexer halves in kg m^2
@@ -54,7 +55,7 @@
     # Resistance of the motor, divided by 2 to account for the 2 motors
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
               (12.0 - self.R * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -284,6 +285,10 @@
     indexer = Indexer('Indexer')
     loop_writer = control_loop.ControlLoopWriter('Indexer', [indexer],
                                                  namespaces=namespaces)
+    loop_writer.AddConstant(control_loop.Constant(
+        'kFreeSpeed', '%f', indexer.free_speed))
+    loop_writer.AddConstant(control_loop.Constant(
+        'kOutputRatio', '%f', indexer.G))
     loop_writer.Write(argv[1], argv[2])
 
     integral_indexer = IntegralIndexer('IntegralIndexer')
diff --git a/y2017/control_loops/python/intake.py b/y2017/control_loops/python/intake.py
index 41cfc0d..712dfa4 100755
--- a/y2017/control_loops/python/intake.py
+++ b/y2017/control_loops/python/intake.py
@@ -24,15 +24,16 @@
     self.stall_torque = 0.71
     # Stall Current in Amps
     self.stall_current = 134.0
-    # Free Speed in RPM
-    self.free_speed = 18730.0
+    self.free_speed_rpm = 18730.0
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60.0
     # Free Current in Amps
     self.free_current = 0.7
 
     # Resistance of the motor
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
                (12.0 - self.R * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -308,6 +309,10 @@
     intake = Intake('Intake')
     loop_writer = control_loop.ControlLoopWriter('Intake', [intake],
                                                  namespaces=namespaces)
+    loop_writer.AddConstant(control_loop.Constant('kFreeSpeed', '%f',
+                                                  intake.free_speed))
+    loop_writer.AddConstant(control_loop.Constant('kOutputRatio', '%f',
+                                                  intake.G * intake.r))
     loop_writer.Write(argv[1], argv[2])
 
     integral_intake = IntegralIntake('IntegralIntake')
diff --git a/y2017/control_loops/python/shooter.py b/y2017/control_loops/python/shooter.py
index d7c505b..25e4b24 100755
--- a/y2017/control_loops/python/shooter.py
+++ b/y2017/control_loops/python/shooter.py
@@ -23,7 +23,9 @@
     # Stall Current in Amps
     self.stall_current = 134.0 * self.num_motors
     # Free Speed in RPM
-    self.free_speed = 18730.0
+    self.free_speed_rpm = 18730.0
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60.0
     # Free Current in Amps
     self.free_current = 0.7 * self.num_motors
     # Moment of inertia of the shooter wheel in kg m^2
@@ -33,7 +35,7 @@
     # Resistance of the motor, divided by 2 to account for the 2 motors
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
               (12.0 - self.R * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -266,6 +268,10 @@
     shooter = Shooter('Shooter')
     loop_writer = control_loop.ControlLoopWriter('Shooter', [shooter],
                                                  namespaces=namespaces)
+    loop_writer.AddConstant(control_loop.Constant(
+        'kFreeSpeed', '%f', shooter.free_speed))
+    loop_writer.AddConstant(control_loop.Constant(
+        'kOutputRatio', '%f', shooter.G))
     loop_writer.Write(argv[1], argv[2])
 
     integral_shooter = IntegralShooter('IntegralShooter')
diff --git a/y2017/control_loops/python/turret.py b/y2017/control_loops/python/turret.py
index 454be9e..a69e3e1 100755
--- a/y2017/control_loops/python/turret.py
+++ b/y2017/control_loops/python/turret.py
@@ -24,15 +24,16 @@
     self.stall_torque = 0.43
     # Stall Current in Amps
     self.stall_current = 53
-    # Free Speed in RPM
-    self.free_speed = 13180
+    self.free_speed_rpm = 13180
+    # Free Speed in rotations/second.
+    self.free_speed = self.free_speed_rpm / 60.0
     # Free Current in Amps
     self.free_current = 1.8
 
     # Resistance of the motor
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
                (12.0 - self.R * self.free_current))
     # Torque constant
     self.Kt = self.stall_torque / self.stall_current
@@ -302,6 +303,10 @@
     turret = Turret('Turret')
     loop_writer = control_loop.ControlLoopWriter('Turret', [turret],
                                                  namespaces=namespaces)
+    loop_writer.AddConstant(control_loop.Constant(
+        'kFreeSpeed', '%f', turret.free_speed))
+    loop_writer.AddConstant(control_loop.Constant(
+        'kOutputRatio', '%f', turret.G))
     loop_writer.Write(argv[1], argv[2])
 
     integral_turret = IntegralTurret('IntegralTurret')