Claw, shooter and drivetrain are now generated.

Change-Id: I0aaa42a77cfef8362dcd39ea660fdf9e484279ea
diff --git a/y2014/control_loops/python/BUILD b/y2014/control_loops/python/BUILD
index 6536f93..21406e3 100644
--- a/y2014/control_loops/python/BUILD
+++ b/y2014/control_loops/python/BUILD
@@ -10,7 +10,7 @@
   ],
 )
 
-py_library(
+py_binary(
   name = 'polydrivetrain',
   srcs = [
     'polydrivetrain.py',
@@ -21,13 +21,24 @@
   ],
 )
 
+py_library(
+  name = 'polydrivetrain_lib',
+  srcs = [
+    'polydrivetrain.py',
+    'drivetrain.py',
+  ],
+  deps = [
+    '//frc971/control_loops/python:controls',
+  ],
+)
+
 py_binary(
   name = 'claw',
   srcs = [
     'claw.py',
   ],
   deps = [
-    ':polydrivetrain',
+    ':polydrivetrain_lib',
     '//frc971/control_loops/python:controls',
   ]
 )
diff --git a/y2014/control_loops/python/claw.py b/y2014/control_loops/python/claw.py
index f1fcae3..6808ce6 100755
--- a/y2014/control_loops/python/claw.py
+++ b/y2014/control_loops/python/claw.py
@@ -484,6 +484,8 @@
                                                  namespaces=namespaces)
     loop_writer.AddConstant(control_loop.Constant("kClawMomentOfInertiaRatio",
       "%f", claw.J_top / claw.J_bottom))
+    loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+          claw.dt))
     if argv[1][-3:] == '.cc':
       loop_writer.Write(argv[2], argv[1])
     else:
diff --git a/y2014/control_loops/python/drivetrain.py b/y2014/control_loops/python/drivetrain.py
index 1372c25..b94a501 100755
--- a/y2014/control_loops/python/drivetrain.py
+++ b/y2014/control_loops/python/drivetrain.py
@@ -295,6 +295,8 @@
         "Drivetrain", [drivetrain_low_low, drivetrain_low_high,
                        drivetrain_high_low, drivetrain_high_high],
         namespaces = namespaces)
+    dog_loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+          drivetrain_low_low.dt))
     if argv[1][-3:] == '.cc':
       dog_loop_writer.Write(argv[2], argv[1])
     else:
diff --git a/y2014/control_loops/python/polydrivetrain.py b/y2014/control_loops/python/polydrivetrain.py
index b066c75..3dafd21 100755
--- a/y2014/control_loops/python/polydrivetrain.py
+++ b/y2014/control_loops/python/polydrivetrain.py
@@ -397,14 +397,16 @@
 def main(argv):
   vdrivetrain = VelocityDrivetrain()
 
-  if len(argv) != 7:
+  if len(argv) != 5:
     print "Expected .h file name and .cc file name"
   else:
+    namespaces = ['y2014', 'control_loops', 'drivetrain']
     dog_loop_writer = control_loop.ControlLoopWriter(
         "VelocityDrivetrain", [vdrivetrain.drivetrain_low_low,
                        vdrivetrain.drivetrain_low_high,
                        vdrivetrain.drivetrain_high_low,
-                       vdrivetrain.drivetrain_high_high])
+                       vdrivetrain.drivetrain_high_high],
+                       namespaces=namespaces)
 
     if argv[1][-3:] == '.cc':
       dog_loop_writer.Write(argv[2], argv[1])
@@ -414,10 +416,10 @@
     cim_writer = control_loop.ControlLoopWriter(
         "CIM", [drivetrain.CIM()])
 
-    if argv[5][-3:] == '.cc':
-      cim_writer.Write(argv[6], argv[5])
+    if argv[3][-3:] == '.cc':
+      cim_writer.Write(argv[4], argv[3])
     else:
-      cim_writer.Write(argv[5], argv[6])
+      cim_writer.Write(argv[3], argv[4])
     return
 
   vl_plot = []
diff --git a/y2014/control_loops/python/shooter.py b/y2014/control_loops/python/shooter.py
index cfb7e35..7324b18 100755
--- a/y2014/control_loops/python/shooter.py
+++ b/y2014/control_loops/python/shooter.py
@@ -7,7 +7,7 @@
 from matplotlib import pylab
 
 class SprungShooter(control_loop.ControlLoop):
-  def __init__(self, name="RawSprungShooter"):
+  def __init__(self, name="RawSprungShooter", verbose=False):
     super(SprungShooter, self).__init__(name)
     # Stall Torque in N m
     self.stall_torque = .4982
@@ -68,7 +68,7 @@
 
 
 class Shooter(SprungShooter):
-  def __init__(self, name="RawShooter"):
+  def __init__(self, name="RawShooter", verbose=False):
     super(Shooter, self).__init__(name)
 
     # State feedback matrices
@@ -96,7 +96,7 @@
 
 
 class SprungShooterDeltaU(SprungShooter):
-  def __init__(self, name="SprungShooter"):
+  def __init__(self, name="SprungShooter", verbose=False):
     super(SprungShooterDeltaU, self).__init__(name)
     A_unaugmented = self.A
     B_unaugmented = self.B
@@ -116,17 +116,19 @@
 
     self.PlaceControllerPoles([0.50, 0.35, 0.80])
 
-    print "K"
-    print self.K
-    print "Placed controller poles are"
-    print numpy.linalg.eig(self.A - self.B * self.K)[0]
+    if verbose:
+      print "K"
+      print self.K
+      print "Placed controller poles are"
+      print numpy.linalg.eig(self.A - self.B * self.K)[0]
 
     self.rpl = .05
     self.ipl = 0.008
     self.PlaceObserverPoles([self.rpl + 1j * self.ipl,
                              self.rpl - 1j * self.ipl, 0.90])
-    print "Placed observer poles are"
-    print numpy.linalg.eig(self.A - self.L * self.C)[0]
+    if verbose:
+      print "Placed observer poles are"
+      print numpy.linalg.eig(self.A - self.L * self.C)[0]
 
     self.U_max = numpy.matrix([[12.0]])
     self.U_min = numpy.matrix([[-12.0]])
@@ -135,7 +137,7 @@
 
 
 class ShooterDeltaU(Shooter):
-  def __init__(self, name="Shooter"):
+  def __init__(self, name="Shooter", verbose=False):
     super(ShooterDeltaU, self).__init__(name)
     A_unaugmented = self.A
     B_unaugmented = self.B
@@ -155,17 +157,19 @@
 
     self.PlaceControllerPoles([0.55, 0.45, 0.80])
 
-    print "K"
-    print self.K
-    print "Placed controller poles are"
-    print numpy.linalg.eig(self.A - self.B * self.K)[0]
+    if verbose:
+      print "K"
+      print self.K
+      print "Placed controller poles are"
+      print numpy.linalg.eig(self.A - self.B * self.K)[0]
 
     self.rpl = .05
     self.ipl = 0.008
     self.PlaceObserverPoles([self.rpl + 1j * self.ipl,
                              self.rpl - 1j * self.ipl, 0.90])
-    print "Placed observer poles are"
-    print numpy.linalg.eig(self.A - self.L * self.C)[0]
+    if verbose:
+      print "Placed observer poles are"
+      print numpy.linalg.eig(self.A - self.L * self.C)[0]
 
     self.U_max = numpy.matrix([[12.0]])
     self.U_min = numpy.matrix([[-12.0]])
@@ -189,8 +193,8 @@
   args = parser.parse_args(argv[1:])
 
   # Simulate the response of the system to a goal.
-  sprung_shooter = SprungShooterDeltaU()
-  raw_sprung_shooter = SprungShooter()
+  sprung_shooter = SprungShooterDeltaU(verbose=args.plot)
+  raw_sprung_shooter = SprungShooter(verbose=args.plot)
   close_loop_x = []
   close_loop_u = []
   goal_position = -0.3
@@ -214,8 +218,8 @@
     pylab.plot(range(500), close_loop_u)
     pylab.show()
 
-  shooter = ShooterDeltaU()
-  raw_shooter = Shooter()
+  shooter = ShooterDeltaU(verbose=args.plot)
+  raw_shooter = Shooter(verbose=args.plot)
   close_loop_x = []
   close_loop_u = []
   goal_position = -0.3
@@ -237,8 +241,8 @@
     pylab.show()
 
   # Write the generated constants out to a file.
-  unaug_sprung_shooter = SprungShooter("RawSprungShooter")
-  unaug_shooter = Shooter("RawShooter")
+  unaug_sprung_shooter = SprungShooter("RawSprungShooter", verbose=args.plot)
+  unaug_shooter = Shooter("RawShooter", verbose=args.plot)
   namespaces = ['y2014', 'control_loops', 'shooter']
   unaug_loop_writer = control_loop.ControlLoopWriter("RawShooter",
                                                      [unaug_sprung_shooter,
@@ -247,8 +251,8 @@
   unaug_loop_writer.Write(args.unaugmented_shooterh,
                           args.unaugmented_shootercc)
 
-  sprung_shooter = SprungShooterDeltaU()
-  shooter = ShooterDeltaU()
+  sprung_shooter = SprungShooterDeltaU(verbose=args.plot)
+  shooter = ShooterDeltaU(verbose=args.plot)
   loop_writer = control_loop.ControlLoopWriter("Shooter",
                                                [sprung_shooter, shooter],
                                                namespaces=namespaces)
@@ -257,6 +261,8 @@
                                                   sprung_shooter.max_extension))
   loop_writer.AddConstant(control_loop.Constant("kSpringConstant", "%f",
                                                   sprung_shooter.Ks))
+  loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+                                                sprung_shooter.dt))
   loop_writer.Write(args.shooterh, args.shootercc)
 
 if __name__ == '__main__':