Sped up pickup.

Change-Id: Iae4ba2a13b40b0316dfd6d4638d7ed3fa99820d9
diff --git a/frc971/actors/pickup_actor.cc b/frc971/actors/pickup_actor.cc
index c0c3b2a..e367789 100644
--- a/frc971/actors/pickup_actor.cc
+++ b/frc971/actors/pickup_actor.cc
@@ -13,8 +13,10 @@
 namespace {
 constexpr double kClawPickupVelocity = 3.00;
 constexpr double kClawPickupAcceleration = 4.0;
-constexpr double kClawMoveVelocity = 3.00;
-constexpr double kClawMoveAcceleration = 8.0;
+constexpr double kClawMoveDownVelocity = 7.00;
+constexpr double kClawMoveDownAcceleration = 15.0;
+constexpr double kClawMoveUpVelocity = 8.0;
+constexpr double kClawMoveUpAcceleration = 20.0;
 }  // namespace
 
 PickupActor::PickupActor(PickupActionQueueGroup* queues)
@@ -22,6 +24,7 @@
 
 bool PickupActor::RunAction(const PickupParams& params) {
   constexpr double kAngleEpsilon = 0.10;
+  // Start lifting the tote.
   {
     auto message = control_loops::claw_queue.goal.MakeMessage();
     message->angle = params.pickup_angle;
@@ -46,6 +49,7 @@
     }
   }
 
+  // Once above params.suck_angle, start sucking while lifting.
   {
     auto message = control_loops::claw_queue.goal.MakeMessage();
     message->angle = params.pickup_angle;
@@ -70,11 +74,12 @@
     }
   }
 
+  // Now that we have reached the upper height, come back down while intaking.
   {
     auto message = control_loops::claw_queue.goal.MakeMessage();
     message->angle = params.suck_angle_finish;
-    message->max_velocity = kClawMoveVelocity;
-    message->max_acceleration = kClawMoveAcceleration;
+    message->max_velocity = kClawMoveDownVelocity;
+    message->max_acceleration = kClawMoveDownAcceleration;
     message->angular_velocity = 0.0;
     message->intake = params.intake_voltage;
     message->rollers_closed = true;
@@ -83,6 +88,7 @@
     message.Send();
   }
 
+  // Pull in for params.intake_time.
   ::aos::time::Time end_time =
       ::aos::time::Time::Now() + aos::time::Time::InSeconds(params.intake_time);
   while ( ::aos::time::Time::Now() <= end_time) {
@@ -90,13 +96,14 @@
     if (ShouldCancel()) return true;
   }
 
+  // Lift the claw back up to pack the box back in.
   {
     auto message = control_loops::claw_queue.goal.MakeMessage();
     message->angle = params.pickup_finish_angle;
-    message->max_velocity = kClawMoveVelocity;
-    message->max_acceleration = kClawMoveAcceleration;
+    message->max_velocity = kClawMoveUpVelocity;
+    message->max_acceleration = kClawMoveUpAcceleration;
     message->angular_velocity = 0.0;
-    message->intake = 0.0;
+    message->intake = params.intake_voltage;
     message->rollers_closed = true;
 
     LOG_STRUCT(DEBUG, "Sending claw goal", *message);
@@ -115,6 +122,21 @@
     }
   }
 
+  // Stop the motors...
+  {
+    auto message = control_loops::claw_queue.goal.MakeMessage();
+    message->angle = params.pickup_finish_angle;
+    message->max_velocity = kClawMoveUpVelocity;
+    message->max_acceleration = kClawMoveUpAcceleration;
+    message->angular_velocity = 0.0;
+    message->intake = 0.0;
+    message->rollers_closed = true;
+
+    LOG_STRUCT(DEBUG, "Sending claw goal", *message);
+    message.Send();
+  }
+
+
   return true;
 }