Added make_hybrid_drivetrain_velocity_loop to drivetrain_config

Change-Id: I66dde6ddf0fc63c794d6b11ff2a2131005902953
diff --git a/frc971/control_loops/drivetrain/BUILD b/frc971/control_loops/drivetrain/BUILD
index c37f379..7f87cca 100644
--- a/frc971/control_loops/drivetrain/BUILD
+++ b/frc971/control_loops/drivetrain/BUILD
@@ -34,6 +34,7 @@
     ],
     deps = [
         "//frc971:shifter_hall_effect",
+        "//frc971/control_loops:hybrid_state_feedback_loop",
         "//frc971/control_loops:state_feedback_loop",
     ],
 )
diff --git a/frc971/control_loops/drivetrain/drivetrain_config.h b/frc971/control_loops/drivetrain/drivetrain_config.h
index 476128d..c4652be 100644
--- a/frc971/control_loops/drivetrain/drivetrain_config.h
+++ b/frc971/control_loops/drivetrain/drivetrain_config.h
@@ -3,8 +3,11 @@
 
 #include <functional>
 
-#include "frc971/shifter_hall_effect.h"
+#if defined(__linux__)
+#include "frc971/control_loops/hybrid_state_feedback_loop.h"
+#endif
 #include "frc971/control_loops/state_feedback_loop.h"
+#include "frc971/shifter_hall_effect.h"
 
 namespace frc971 {
 namespace control_loops {
@@ -53,6 +56,12 @@
   ::std::function<StateFeedbackLoop<4, 2, 2, Scalar>()> make_drivetrain_loop;
   ::std::function<StateFeedbackLoop<2, 2, 2, Scalar>()> make_v_drivetrain_loop;
   ::std::function<StateFeedbackLoop<7, 2, 4, Scalar>()> make_kf_drivetrain_loop;
+#if defined(__linux__)
+  ::std::function<
+      StateFeedbackLoop<2, 2, 2, Scalar, StateFeedbackHybridPlant<2, 2, 2>,
+                        HybridKalman<2, 2, 2>>()>
+      make_hybrid_drivetrain_velocity_loop;
+#endif
 
   ::std::chrono::nanoseconds dt;  // Control loop time step.
   Scalar robot_radius;            // Robot radius, in meters.
diff --git a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
index 383059f..f6d5aa2 100644
--- a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
+++ b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
@@ -17,6 +17,7 @@
 #include "frc971/queues/gyro.q.h"
 #include "y2016/constants.h"
 #include "y2016/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2016/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2016/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2016/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -43,6 +44,7 @@
       ::y2016::control_loops::drivetrain::MakeDrivetrainLoop,
       ::y2016::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
       ::y2016::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      ::y2016::control_loops::drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(::y2016::control_loops::drivetrain::kDt)),
diff --git a/frc971/control_loops/hybrid_state_feedback_loop.h b/frc971/control_loops/hybrid_state_feedback_loop.h
index 05d5aab..0af0144 100644
--- a/frc971/control_loops/hybrid_state_feedback_loop.h
+++ b/frc971/control_loops/hybrid_state_feedback_loop.h
@@ -3,7 +3,6 @@
 
 #include <assert.h>
 
-#include <iostream>
 #include <memory>
 #include <utility>
 #include <vector>
diff --git a/frc971/control_loops/state_feedback_loop.h b/frc971/control_loops/state_feedback_loop.h
index dd581bf..2511d98 100644
--- a/frc971/control_loops/state_feedback_loop.h
+++ b/frc971/control_loops/state_feedback_loop.h
@@ -3,7 +3,6 @@
 
 #include <assert.h>
 
-#include <iostream>
 #include <memory>
 #include <utility>
 #include <vector>
diff --git a/y2012/control_loops/drivetrain/drivetrain_base.cc b/y2012/control_loops/drivetrain/drivetrain_base.cc
index 8ca87bc..4e5a87f 100644
--- a/y2012/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2012/control_loops/drivetrain/drivetrain_base.cc
@@ -7,6 +7,7 @@
 #include "y2012/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
 #include "y2012/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2012/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
+#include "y2012/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 
 using ::frc971::control_loops::drivetrain::DrivetrainConfig;
 
@@ -27,9 +28,10 @@
       ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2012::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2012::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2012::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2014/control_loops/drivetrain/drivetrain_base.cc b/y2014/control_loops/drivetrain/drivetrain_base.cc
index 07a74c4..8859f16 100644
--- a/y2014/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2014/control_loops/drivetrain/drivetrain_base.cc
@@ -5,6 +5,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "y2014/constants.h"
 #include "y2014/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2014/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2014/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2014/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -23,9 +24,10 @@
       ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2014::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2014::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2014::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2014_bot3/control_loops/drivetrain/drivetrain_base.cc b/y2014_bot3/control_loops/drivetrain/drivetrain_base.cc
index 0380564..4d03eca 100644
--- a/y2014_bot3/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2014_bot3/control_loops/drivetrain/drivetrain_base.cc
@@ -5,6 +5,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2014_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2014_bot3/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2014_bot3/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2014_bot3/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -30,6 +31,7 @@
       ::y2014_bot3::control_loops::drivetrain::MakeDrivetrainLoop,
       ::y2014_bot3::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
       ::y2014_bot3::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      ::y2014_bot3::control_loops::drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2016/control_loops/drivetrain/drivetrain_base.cc b/y2016/control_loops/drivetrain/drivetrain_base.cc
index bee3666..3a3f3c8 100644
--- a/y2016/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2016/control_loops/drivetrain/drivetrain_base.cc
@@ -6,6 +6,7 @@
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2016/constants.h"
 #include "y2016/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2016/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2016/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2016/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -28,9 +29,10 @@
       ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2016::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2016::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2016::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2017/control_loops/drivetrain/drivetrain_base.cc b/y2017/control_loops/drivetrain/drivetrain_base.cc
index ecea96c..6cc7822 100644
--- a/y2017/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2017/control_loops/drivetrain/drivetrain_base.cc
@@ -6,6 +6,7 @@
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2017/constants.h"
 #include "y2017/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2017/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2017/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2017/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -28,9 +29,10 @@
       ::frc971::control_loops::drivetrain::GyroType::IMU_Z_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2017::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2017::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2017::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2017_bot3/control_loops/drivetrain/drivetrain_base.cc b/y2017_bot3/control_loops/drivetrain/drivetrain_base.cc
index b9b5728..97b5ed4 100644
--- a/y2017_bot3/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2017_bot3/control_loops/drivetrain/drivetrain_base.cc
@@ -5,6 +5,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2017_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2017_bot3/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2017_bot3/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2017_bot3/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -27,9 +28,10 @@
       ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2017_bot3::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2017_bot3::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2017_bot3::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2018/control_loops/drivetrain/drivetrain_base.cc b/y2018/control_loops/drivetrain/drivetrain_base.cc
index 78e4b84..bfd1a48 100644
--- a/y2018/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2018/control_loops/drivetrain/drivetrain_base.cc
@@ -5,6 +5,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2018/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2018/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2018/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2018/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
 
@@ -27,9 +28,10 @@
       ::frc971::control_loops::drivetrain::GyroType::IMU_Z_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_Y,
 
-      ::y2018::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2018::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2018::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),
diff --git a/y2018_bot3/control_loops/drivetrain/drivetrain_base.cc b/y2018_bot3/control_loops/drivetrain/drivetrain_base.cc
index 9501a8a..4945947 100644
--- a/y2018_bot3/control_loops/drivetrain/drivetrain_base.cc
+++ b/y2018_bot3/control_loops/drivetrain/drivetrain_base.cc
@@ -4,6 +4,7 @@
 
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "frc971/control_loops/state_feedback_loop.h"
+#include "y2018_bot3/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
 #include "y2018_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
 #include "y2018_bot3/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
 #include "y2018_bot3/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
@@ -28,9 +29,10 @@
       ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
       ::frc971::control_loops::drivetrain::IMUType::IMU_X,
 
-      ::y2018_bot3::control_loops::drivetrain::MakeDrivetrainLoop,
-      ::y2018_bot3::control_loops::drivetrain::MakeVelocityDrivetrainLoop,
-      ::y2018_bot3::control_loops::drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
 
       chrono::duration_cast<chrono::nanoseconds>(
           chrono::duration<double>(drivetrain::kDt)),