Shooter now recovers from no air well enough.  Waits for the latch to open before moving.
diff --git a/frc971/control_loops/shooter/shooter.cc b/frc971/control_loops/shooter/shooter.cc
index 957b553..0ba599b 100755
--- a/frc971/control_loops/shooter/shooter.cc
+++ b/frc971/control_loops/shooter/shooter.cc
@@ -235,13 +235,17 @@
                                   values.shooter.upper_limit);
         }
 
-        state_ = STATE_REQUEST_LOAD;
-
         // Go to the current position.
         shooter_.SetGoalPosition(shooter_.absolute_position(), 0.0);
         // If the plunger is all the way back, we want to be latched.
         latch_piston_ = position->plunger;
         brake_piston_ = false;
+        if (position->latch == latch_piston_) {
+          state_ = STATE_REQUEST_LOAD;
+        } else {
+          shooter_loop_disable = true;
+          LOG(DEBUG, "Not moving on until the latch has moved to avoid a crash\n");
+        }
       } else {
         // If we can't start yet because we don't know where we are, set the
         // latch and brake to their defaults.
diff --git a/frc971/control_loops/shooter/shooter.h b/frc971/control_loops/shooter/shooter.h
index 649b00b..1ab224b 100755
--- a/frc971/control_loops/shooter/shooter.h
+++ b/frc971/control_loops/shooter/shooter.h
@@ -108,7 +108,7 @@
 
 const Time kUnloadTimeout = Time::InSeconds(10);
 const Time kLoadTimeout = Time::InSeconds(2);
-const Time kLoadProblemEndTimeout = Time::InSeconds(0.5);
+const Time kLoadProblemEndTimeout = Time::InSeconds(1.0);
 const Time kShooterBrakeSetTime = Time::InSeconds(0.05);
 // Time to wait after releasing the latch piston before winching back again.
 const Time kShotEndTimeout = Time::InSeconds(0.2);