Tuned superstructure loop and added feed forwards.

Change-Id: Ia2e3a1746529a4c27395f2e9b6e875c5cddb7616
diff --git a/y2016/control_loops/python/wrist.py b/y2016/control_loops/python/wrist.py
index 79a115e..2ad1d07 100755
--- a/y2016/control_loops/python/wrist.py
+++ b/y2016/control_loops/python/wrist.py
@@ -2,8 +2,6 @@
 
 from frc971.control_loops.python import control_loop
 from frc971.control_loops.python import controls
-from frc971.control_loops.python import polytope
-from y2016.control_loops.python import polydrivetrain
 import numpy
 import sys
 import matplotlib
@@ -77,8 +75,8 @@
     self.R = numpy.matrix([[(1.0 / (12.0 ** 2.0))]])
     self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
-    print 'K', self.K
-    print 'Poles are', numpy.linalg.eig(self.A - self.B * self.K)[0]
+    glog.debug('Poles are %s for %s',
+               repr(numpy.linalg.eig(self.A - self.B * self.K)[0]), self._name)
 
     q_pos = 0.05
     q_vel = 2.65
@@ -91,15 +89,15 @@
     self.KalmanGain, self.Q_steady = controls.kalman(
         A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
 
-    print 'Kal', self.KalmanGain
     self.L = self.A * self.KalmanGain
-    print 'KalL is', self.L
 
     # The box formed by U_min and U_max must encompass all possible values,
     # or else Austin's code gets angry.
     self.U_max = numpy.matrix([[12.0]])
     self.U_min = numpy.matrix([[-12.0]])
 
+    self.Kff = controls.TwoStateFeedForwards(self.B, self.Q)
+
     self.InitializeState()
 
 class IntegralWrist(Wrist):
@@ -140,6 +138,9 @@
     self.K = numpy.matrix(numpy.zeros((1, 3)))
     self.K[0, 0:2] = self.K_unaugmented
     self.K[0, 2] = 1
+    self.Kff_unaugmented = self.Kff
+    self.Kff = numpy.matrix(numpy.zeros((1, 3)))
+    self.Kff[0, 0:2] = self.Kff_unaugmented
 
     self.InitializeState()
 
@@ -260,13 +261,13 @@
   else:
     namespaces = ['y2016', 'control_loops', 'superstructure']
     wrist = Wrist("Wrist")
-    loop_writer = control_loop.ControlLoopWriter('Wrist', [wrist],
-                                                 namespaces=namespaces)
+    loop_writer = control_loop.ControlLoopWriter(
+        'Wrist', [wrist], namespaces=namespaces)
     loop_writer.Write(argv[1], argv[2])
 
-    integral_wrist = IntegralWrist("IntegralWrist")
-    integral_loop_writer = control_loop.ControlLoopWriter("IntegralWrist", [integral_wrist],
-                                                          namespaces=namespaces)
+    integral_wrist = IntegralWrist('IntegralWrist')
+    integral_loop_writer = control_loop.ControlLoopWriter(
+        'IntegralWrist', [integral_wrist], namespaces=namespaces)
     integral_loop_writer.Write(argv[3], argv[4])
 
 if __name__ == '__main__':