FridgeKinematics:

  - Added class to perform forward and inverse kinematics.
  - Added basic test to hand verify results.
  - Added claw fridge collision check by Mr. Schuh.
  - Revered code review changes that broke the math.
  - Added tests for collision from Mr. Schuh.
  - Constants are working, thanks Brian.
  - Added velocity calculation based on jacobian.

Change-Id: Iba752fbe6ebecca6dfd3102b23c8aebc3cc652a2
diff --git a/frc971/constants.cc b/frc971/constants.cc
index 58066c6..04b9576 100644
--- a/frc971/constants.cc
+++ b/frc971/constants.cc
@@ -63,6 +63,43 @@
 const double kMaxAllowedLeftRightArmDifference = 0.04;       // radians
 const double kMaxAllowedLeftRightElevatorDifference = 0.01;  // meters
 
+const Values::ClawGeometry kClawGeometry{
+    // Horizontal distance from the center of the grabber to the end.
+    0.5 * 18.0 * 0.0254,
+    // Vertical distance from the arm rotation center to the bottom of
+    // the
+    // grabber.  Distance measured with arm vertical (theta = 0).
+    5.1 * 0.0254,
+    // Vertical separation of the claw and arm rotation centers with the
+    // elevator at 0.0 and the arm angle set to zero.
+    10.5 * 0.0254,
+    // Horizontal separation of the claw and arm rotation centers with
+    // the
+    // elevator at 0.0 and the arm angle set to zero.
+    6.5 * 0.0254,
+    // Distance between the center of the claw to the top of the claw.
+    // 2.75 inches would work most of the time.  Using 3.5 inches because
+    // of the
+    // pnumatics fitting on the piston.
+    3.5 * 0.0254,
+    // The grabber is safe at any height if it is behind this location.
+    // The location of the grabber is used here and not the location of
+    // the end
+    // of the grabber.  The grabber location is (0, 0) when the elevator
+    // is at 0
+    // and the arm angle is 0.
+    (18.0 - 0.3) * 0.0254,
+    // The grabber is safe at any x if it is above this location.
+    // The location of the grabber is used here and not the location of
+    // the end
+    // of the grabber.  The grabber location is (0, 0) when the elevator
+    // is at 0
+    // and the arm angle is 0.
+    // The "-5.4" is the location of the bottom of the grabber when
+    // the elevator is at the bottom (-0.3 inches) and arm angle is 0.
+    -8.0 * 0.0254,
+};
+
 // Gearing ratios of the pots and encoders for the elevator and arm.
 // Ratio is output shaft rotations per encoder/pot rotation
 // Checked by Daniel on 2/13/15.
@@ -154,6 +191,7 @@
 
           kMaxAllowedLeftRightArmDifference,
           kMaxAllowedLeftRightElevatorDifference,
+          kClawGeometry,
       };
       break;
     case kPracticeTeamNumber:
@@ -222,6 +260,7 @@
 
           kMaxAllowedLeftRightArmDifference,
           kMaxAllowedLeftRightElevatorDifference,
+          kClawGeometry,
       };
       break;
     case kCompTeamNumber:
@@ -292,6 +331,7 @@
 
           kMaxAllowedLeftRightArmDifference,
           kMaxAllowedLeftRightElevatorDifference,
+          kClawGeometry,
       };
       break;
     default: