Build hybrid velocity loop for each drivetrain

This provides a way to get to the continuous time drivetrain model from
C++ without doing crazy codegen for all gears.

Change-Id: Iadd7388b74628a94a74ec19efb972fa01efe70c9
diff --git a/y2016/control_loops/drivetrain/BUILD b/y2016/control_loops/drivetrain/BUILD
index 39f2b56..629c957 100644
--- a/y2016/control_loops/drivetrain/BUILD
+++ b/y2016/control_loops/drivetrain/BUILD
@@ -1,5 +1,3 @@
-package(default_visibility = ["//visibility:public"])
-
 load("//aos/build:queues.bzl", "queue_library")
 
 genrule(
@@ -14,7 +12,6 @@
     tools = [
         "//y2016/control_loops/python:drivetrain",
     ],
-    visibility = ["//visibility:private"],
 )
 
 genrule(
@@ -24,27 +21,32 @@
         "polydrivetrain_dog_motor_plant.cc",
         "polydrivetrain_cim_plant.h",
         "polydrivetrain_cim_plant.cc",
+        "hybrid_velocity_drivetrain.h",
+        "hybrid_velocity_drivetrain.cc",
     ],
     cmd = "$(location //y2016/control_loops/python:polydrivetrain) $(OUTS)",
     tools = [
         "//y2016/control_loops/python:polydrivetrain",
     ],
-    visibility = ["//visibility:private"],
 )
 
 cc_library(
     name = "polydrivetrain_plants",
     srcs = [
         "drivetrain_dog_motor_plant.cc",
+        "hybrid_velocity_drivetrain.cc",
         "kalman_drivetrain_motor_plant.cc",
         "polydrivetrain_dog_motor_plant.cc",
     ],
     hdrs = [
         "drivetrain_dog_motor_plant.h",
+        "hybrid_velocity_drivetrain.h",
         "kalman_drivetrain_motor_plant.h",
         "polydrivetrain_dog_motor_plant.h",
     ],
+    visibility = ["//visibility:public"],
     deps = [
+        "//frc971/control_loops:hybrid_state_feedback_loop",
         "//frc971/control_loops:state_feedback_loop",
     ],
 )
@@ -57,6 +59,7 @@
     hdrs = [
         "drivetrain_base.h",
     ],
+    visibility = ["//visibility:public"],
     deps = [
         ":polydrivetrain_plants",
         "//frc971:shifter_hall_effect",
@@ -70,6 +73,7 @@
     srcs = [
         "drivetrain_main.cc",
     ],
+    visibility = ["//visibility:public"],
     deps = [
         ":drivetrain_base",
         "//aos:init",
diff --git a/y2016/control_loops/python/polydrivetrain.py b/y2016/control_loops/python/polydrivetrain.py
index 87d33e6..cdc2881 100755
--- a/y2016/control_loops/python/polydrivetrain.py
+++ b/y2016/control_loops/python/polydrivetrain.py
@@ -19,10 +19,10 @@
 def main(argv):
   if FLAGS.plot:
     polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 5:
+  elif len(argv) != 7:
     glog.fatal('Expected .h file name and .cc file name')
   else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], 'y2016',
+    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2016',
                                        drivetrain.kDrivetrain)
 
 if __name__ == '__main__':