Use explicit flatbuffer IDs in y2017 and newer.

Non-explicit ids are risky.  We've seen backwards incompatible
changes...

Change-Id: Id6ceebe031ac80430191f367635d0e951c3d2cbc
diff --git a/y2018/control_loops/superstructure/superstructure_goal.fbs b/y2018/control_loops/superstructure/superstructure_goal.fbs
index b618c1b..dbef25a 100644
--- a/y2018/control_loops/superstructure/superstructure_goal.fbs
+++ b/y2018/control_loops/superstructure/superstructure_goal.fbs
@@ -3,37 +3,37 @@
 namespace y2018.control_loops.superstructure;
 
 table IntakeGoal {
-  roller_voltage:double;
+  roller_voltage:double (id: 0);
 
   // Goal angle in radians of the intake.
   // Zero radians is where the intake is pointing straight out, with positive
   // radians inward towards the cube.
-  left_intake_angle:double;
-  right_intake_angle:double;
+  left_intake_angle:double (id: 1);
+  right_intake_angle:double (id: 2);
 }
 
 table Goal {
-  intake:IntakeGoal;
+  intake:IntakeGoal (id: 0);
 
   // Used to identiy a position in the planned set of positions on the arm.
-  arm_goal_position:uint;
+  arm_goal_position:uint32 (id: 1);
   // If true, start the grab box sequence.
-  grab_box:bool;
+  grab_box:bool (id: 2);
 
-  open_claw:bool;
-  close_claw:bool;
+  open_claw:bool (id: 3);
+  close_claw:bool (id: 4);
 
-  deploy_fork:bool;
+  deploy_fork:bool (id: 5);
 
-  hook_release:bool;
+  hook_release:bool (id: 6);
 
-  voltage_winch:double;
+  voltage_winch:double (id: 7);
 
-  open_threshold:double;
+  open_threshold:double (id: 8);
 
-  disable_box_correct:bool;
+  disable_box_correct:bool (id: 9);
 
-  trajectory_override:bool;
+  trajectory_override:bool (id: 10);
 }
 
 root_type Goal;
diff --git a/y2018/control_loops/superstructure/superstructure_output.fbs b/y2018/control_loops/superstructure/superstructure_output.fbs
index f4d62da..1055222 100644
--- a/y2018/control_loops/superstructure/superstructure_output.fbs
+++ b/y2018/control_loops/superstructure/superstructure_output.fbs
@@ -3,38 +3,38 @@
 table IntakeVoltage {
   // Voltage of the motors on the series elastic on one side (left or right) of
   // the intake.
-  voltage_elastic:double;
+  voltage_elastic:double (id: 0);
 
   // Voltage of the rollers on one side (left or right) of the intake.
-  voltage_rollers:double;
+  voltage_rollers:double (id: 1);
 }
 
 table Output {
   // Voltage sent to the parts on the left side of the intake.
-  left_intake:IntakeVoltage;
+  left_intake:IntakeVoltage (id: 0);
 
   // Voltage sent to the parts on the right side of the intake.
-  right_intake:IntakeVoltage;
+  right_intake:IntakeVoltage (id: 1);
 
   // Voltage sent to the motors on the proximal joint of the arm.
-  voltage_proximal:double;
+  voltage_proximal:double (id: 2);
 
   // Voltage sent to the motors on the distal joint of the arm.
-  voltage_distal:double;
+  voltage_distal:double (id: 3);
 
   // Voltage sent to the hanger.  Positive pulls the robot up.
-  voltage_winch:double;
+  voltage_winch:double (id: 4);
 
   // Clamped (when true) or unclamped (when false) status sent to the
   // pneumatic claw on the arm.
-  claw_grabbed:bool;
+  claw_grabbed:bool (id: 5);
 
   // If true, release the arm brakes.
-  release_arm_brake:bool;
+  release_arm_brake:bool (id: 6);
   // If true, release the hook
-  hook_release:bool;
+  hook_release:bool (id: 7);
   // If true, release the forks
-  forks_release:bool;
+  forks_release:bool (id: 8);
 }
 
 root_type Output;
diff --git a/y2018/control_loops/superstructure/superstructure_position.fbs b/y2018/control_loops/superstructure/superstructure_position.fbs
index 0323b78..87c4b0e 100644
--- a/y2018/control_loops/superstructure/superstructure_position.fbs
+++ b/y2018/control_loops/superstructure/superstructure_position.fbs
@@ -4,47 +4,47 @@
 
 table IntakeElasticSensors {
   // Position of the motor end of the series elastic in radians.
-  motor_position:frc971.PotAndAbsolutePosition;
+  motor_position:frc971.PotAndAbsolutePosition (id: 0);
 
   // Displacement of the spring in radians.
-  spring_angle:double;
+  spring_angle:double (id: 1);
 
   // False if the beam break sensor isn't triggered, true if the beam breaker is
   // triggered.
-  beam_break:bool;
+  beam_break:bool (id: 2);
 }
 
 table ArmPosition {
   // Values of the encoder and potentiometer at the base of the proximal
   // (connected to drivebase) arm in radians.
-  proximal:frc971.PotAndAbsolutePosition;
+  proximal:frc971.PotAndAbsolutePosition (id: 0);
 
   // Values of the encoder and potentiometer at the base of the distal
   // (connected to proximal) arm in radians.
-  distal:frc971.PotAndAbsolutePosition;
+  distal:frc971.PotAndAbsolutePosition (id: 1);
 }
 
 
 table Position {
   // Values of the series elastic encoders on the left side of the robot from
   // the rear perspective in radians.
-  left_intake:IntakeElasticSensors;
+  left_intake:IntakeElasticSensors (id: 0);
 
   // Values of the series elastic encoders on the right side of the robot from
   // the rear perspective in radians.
-  right_intake:IntakeElasticSensors;
+  right_intake:IntakeElasticSensors (id: 1);
 
-  arm:ArmPosition;
+  arm:ArmPosition (id: 2);
 
   // Value of the beam breaker sensor. This value is true if the beam is
   // broken, false if the beam isn't broken.
-  claw_beambreak_triggered:bool;
+  claw_beambreak_triggered:bool (id: 3);
   // Value of the beambreak sensor detecting when the box has hit the frame
   // cutout.
-  box_back_beambreak_triggered:bool;
+  box_back_beambreak_triggered:bool (id: 4);
 
   // Distance to the box in meters.
-  box_distance:double;
+  box_distance:double (id: 5);
 }
 
 root_type Position;
diff --git a/y2018/control_loops/superstructure/superstructure_status.fbs b/y2018/control_loops/superstructure/superstructure_status.fbs
index 8baf40e..9f53a82 100644
--- a/y2018/control_loops/superstructure/superstructure_status.fbs
+++ b/y2018/control_loops/superstructure/superstructure_status.fbs
@@ -4,97 +4,97 @@
 
 table IntakeSideStatus {
   // Is the subsystem zeroed?
-  zeroed:bool;
+  zeroed:bool (id: 0);
 
   // The state of the subsystem, if applicable.
-  state:int;
+  state:int32 (id: 1);
 
   // If true, we have aborted.
-  estopped:bool;
+  estopped:bool (id: 2);
 
   // Estimated position of the spring.
-  spring_position:float;
+  spring_position:float (id: 3);
   // Estimated velocity of the spring in units/second.
-  spring_velocity:float;
+  spring_velocity:float (id: 4);
   // Reported wrapping of the spring
-  spring_wrapped:int;
+  spring_wrapped:int (id: 5);
 
   // Estimated position of the joint.
-  motor_position:float;
+  motor_position:float (id: 6);
   // Estimated velocity of the joint in units/second.
-  motor_velocity:float;
+  motor_velocity:float (id: 7);
 
   // Goal position of the joint.
-  goal_position:float;
+  goal_position:float (id: 8);
   // Goal velocity of the joint in units/second.
-  goal_velocity:float;
+  goal_velocity:float (id: 9);
 
   // The calculated velocity with delta x/delta t
-  calculated_velocity:float;
+  calculated_velocity:float (id: 10);
 
   // The voltage given last cycle;
-  delayed_voltage:float;
+  delayed_voltage:float (id: 11);
 
   // State of the estimator.
-  estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState;
+  estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState (id: 12);
 }
 
 table ArmStatus {
   // State of the estimators.
-  proximal_estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState;
-  distal_estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState;
+  proximal_estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState (id: 0);
+  distal_estimator_state:frc971.PotAndAbsoluteEncoderEstimatorState (id: 1);
 
   // The node we are currently going to.
-  current_node:uint;
+  current_node:uint32 (id: 2);
   // Distance (in radians) to the end of the path.
-  path_distance_to_go:float;
+  path_distance_to_go:float (id: 3);
   // Goal position and velocity (radians)
-  goal_theta0:float;
-  goal_theta1:float;
-  goal_omega0:float;
-  goal_omega1:float;
+  goal_theta0:float (id: 4);
+  goal_theta1:float (id: 5);
+  goal_omega0:float (id: 6);
+  goal_omega1:float (id: 7);
 
   // Current position and velocity (radians)
-  theta0:float;
-  theta1:float;
+  theta0:float (id: 8);
+  theta1:float (id: 9);
 
-  omega0:float;
-  omega1:float;
+  omega0:float (id: 10);
+  omega1:float (id: 11);
 
   // Estimated voltage error for the two joints.
-  voltage_error0:float;
-  voltage_error1:float;
+  voltage_error0:float (id: 12);
+  voltage_error1:float (id: 13);
 
   // True if we are zeroed.
-  zeroed:bool;
+  zeroed:bool (id: 14);
 
   // True if the arm is zeroed.
-  estopped:bool;
+  estopped:bool (id: 15);
 
   // The current state machine state.
-  state:uint;
+  state:uint32 (id: 16);
 
-  grab_state:uint;
+  grab_state:uint32 (id: 17);
 
   // The number of times the LQR solver failed.
-  failed_solutions:uint;
+  failed_solutions:uint32 (id: 18);
 }
 
 table Status {
   // Are all the subsystems zeroed?
-  zeroed:bool;
+  zeroed:bool (id: 0);
 
   // If true, any of the subsystems have aborted.
-  estopped:bool;
+  estopped:bool (id: 1);
 
   // Status of both intake sides.
-  left_intake:IntakeSideStatus;
-  right_intake:IntakeSideStatus;
+  left_intake:IntakeSideStatus (id: 2);
+  right_intake:IntakeSideStatus (id: 3);
 
-  arm:ArmStatus;
+  arm:ArmStatus (id: 4);
 
-  filtered_box_velocity:double;
-  rotation_state:uint;
+  filtered_box_velocity:double (id: 5);
+  rotation_state:uint (id: 6);
 }
 
 root_type Status;
diff --git a/y2018/status_light.fbs b/y2018/status_light.fbs
index e51decb..118a3dc 100644
--- a/y2018/status_light.fbs
+++ b/y2018/status_light.fbs
@@ -2,9 +2,9 @@
 
 table StatusLight {
   // How bright to make each one. 0 is off, 1 is full on.
-  red:float;
-  green:float;
-  blue:float;
+  red:float (id: 0);
+  green:float (id: 1);
+  blue:float (id: 2);
 }
 
 root_type StatusLight;
diff --git a/y2018/vision/vision.fbs b/y2018/vision/vision.fbs
index 14f8a45..5337f2b 100644
--- a/y2018/vision/vision.fbs
+++ b/y2018/vision/vision.fbs
@@ -2,8 +2,8 @@
 
 // Published on ".y2018.vision.vision_status"
 table VisionStatus {
-  high_frame_count:uint;
-  low_frame_count:uint;
+  high_frame_count:uint (id: 0);
+  low_frame_count:uint (id: 1);
 }
 
 root_type VisionStatus;