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/y2017/control_loops/superstructure/superstructure_goal.fbs b/y2017/control_loops/superstructure/superstructure_goal.fbs
index 6681262..3cf6945 100644
--- a/y2017/control_loops/superstructure/superstructure_goal.fbs
+++ b/y2017/control_loops/superstructure/superstructure_goal.fbs
@@ -7,27 +7,27 @@
   // frame. Positive is out.
 
   // Goal distance of the intake.
-  distance:double;
+  distance:double (id: 0);
 
   // Caps on velocity/acceleration for profiling. 0 for the default.
-  profile_params:frc971.ProfileParameters;
+  profile_params:frc971.ProfileParameters (id: 1);
 
   // Voltage to send to the rollers. Positive is sucking in.
-  voltage_rollers:double;
+  voltage_rollers:double (id: 2);
 
   // If true, disable the intake so we can hang.
-  disable_intake:bool;
+  disable_intake:bool (id: 3);
 
   // The gear servo value.
-  gear_servo:double;
+  gear_servo:double (id: 4);
 }
 
 table IndexerGoal {
   // Indexer angular velocity goals in radians/second.
-  angular_velocity:double;
+  angular_velocity:double (id: 0);
 
   // Roller voltage. Positive is sucking in.
-  voltage_rollers:double;
+  voltage_rollers:double (id: 1);
 }
 
 table TurretGoal {
@@ -36,39 +36,39 @@
   // turns clockwise (towards right from the front), and decreases when
   // the turrent turns counter-clockwise (towards left from the front).
   // These are from a top view above the robot.
-  angle:double;
+  angle:double (id: 0);
 
   // If true, ignore the angle and track using vision.  If we don't see
   // anything, we'll use the turret goal above.
-  track:bool;
+  track:bool (id: 1);
 
   // Caps on velocity/acceleration for profiling. 0 for the default.
-  profile_params:frc971.ProfileParameters;
+  profile_params:frc971.ProfileParameters (id: 2);
 }
 
 table HoodGoal {
   // Angle the hood is currently at. An angle of zero is at the lower hard
   // stop, angle increases as hood rises.
-  angle:double;
+  angle:double (id: 0);
 
   // Caps on velocity/acceleration for profiling. 0 for the default.
-  profile_params:frc971.ProfileParameters;
+  profile_params:frc971.ProfileParameters (id: 1);
 }
 
 table ShooterGoal {
   // Angular velocity goals in radians/second. Positive is shooting out of the
   // robot.
-  angular_velocity:double;
+  angular_velocity:double (id: 0);
 }
 
 table Goal {
-  intake:IntakeGoal;
-  indexer:IndexerGoal;
-  turret:TurretGoal;
-  hood:HoodGoal;
-  shooter:ShooterGoal;
-  lights_on:bool;
-  use_vision_for_shots:bool;
+  intake:IntakeGoal (id: 0);
+  indexer:IndexerGoal (id: 1);
+  turret:TurretGoal (id: 2);
+  hood:HoodGoal (id: 3);
+  shooter:ShooterGoal (id: 4);
+  lights_on:bool (id: 5);
+  use_vision_for_shots:bool (id: 6);
 }
 
 root_type Goal;
diff --git a/y2017/control_loops/superstructure/superstructure_output.fbs b/y2017/control_loops/superstructure/superstructure_output.fbs
index 5301380..74f6129 100644
--- a/y2017/control_loops/superstructure/superstructure_output.fbs
+++ b/y2017/control_loops/superstructure/superstructure_output.fbs
@@ -2,26 +2,26 @@
 
 table Output {
   // Voltages for some of the subsystems.
-  voltage_intake:double;
-  voltage_indexer:double;
-  voltage_shooter:double;
+  voltage_intake:double (id: 0);
+  voltage_indexer:double (id: 1);
+  voltage_shooter:double (id: 2);
 
   // Rollers on the intake.
-  voltage_intake_rollers:double;
+  voltage_intake_rollers:double (id: 3);
   // Roller on the indexer
-  voltage_indexer_rollers:double;
+  voltage_indexer_rollers:double (id: 4);
 
-  voltage_turret:double;
-  voltage_hood:double;
+  voltage_turret:double (id: 5);
+  voltage_hood:double (id: 6);
 
-  gear_servo:double;
+  gear_servo:double (id: 7);
 
   // If true, the lights are on.
-  lights_on:bool;
+  lights_on:bool (id: 8);
 
-  red_light_on:bool;
-  green_light_on:bool;
-  blue_light_on:bool;
+  red_light_on:bool (id: 9);
+  green_light_on:bool (id: 10);
+  blue_light_on:bool (id: 11);
 }
 
 root_type Output;
diff --git a/y2017/control_loops/superstructure/superstructure_position.fbs b/y2017/control_loops/superstructure/superstructure_position.fbs
index 7f95462..5c70ff4 100644
--- a/y2017/control_loops/superstructure/superstructure_position.fbs
+++ b/y2017/control_loops/superstructure/superstructure_position.fbs
@@ -5,27 +5,27 @@
 table ColumnPosition {
   // Indexer angle in radians relative to the base.  Positive is according to
   // the right hand rule around +z.
-  indexer:frc971.HallEffectAndPosition;
+  indexer:frc971.HallEffectAndPosition (id: 0);
   // Turret angle in radians relative to the indexer.  Positive is the same as
   // the indexer.
-  turret:frc971.HallEffectAndPosition;
+  turret:frc971.HallEffectAndPosition (id: 1);
 }
 
 
 table Position {
   // Position of the intake, zero when the intake is in, positive when it is
   // out.
-  intake:frc971.PotAndAbsolutePosition;
+  intake:frc971.PotAndAbsolutePosition (id: 0);
 
   // The position of the column.
-  column:ColumnPosition;
+  column:ColumnPosition (id: 1);
 
   // The sensor readings for the hood. The units and sign are defined the
   // same as what's in the Goal message.
-  hood:frc971.IndexPosition;
+  hood:frc971.IndexPosition (id: 2);
 
   // Shooter wheel angle in radians.
-  theta_shooter:double;
+  theta_shooter:double (id: 3);
 }
 
 root_type Position;
diff --git a/y2017/control_loops/superstructure/superstructure_status.fbs b/y2017/control_loops/superstructure/superstructure_status.fbs
index 217eb5b..88c335b 100644
--- a/y2017/control_loops/superstructure/superstructure_status.fbs
+++ b/y2017/control_loops/superstructure/superstructure_status.fbs
@@ -6,124 +6,124 @@
 table IndexerStatus {
   // The current average velocity in radians/second. Positive is moving balls up
   // towards the shooter. This is the angular velocity of the inner piece.
-  avg_angular_velocity:double;
+  avg_angular_velocity:double (id: 0);
 
   // The current instantaneous filtered velocity in radians/second.
-  angular_velocity:double;
+  angular_velocity:double (id: 1);
 
   // True if the indexer is ready.  It is better to compare the velocities
   // directly so there isn't confusion on if the goal is up to date.
-  ready:bool;
+  ready:bool (id: 2);
 
   // True if the indexer is stuck.
-  stuck:bool;
-  stuck_voltage:float;
+  stuck:bool (id: 3);
+  stuck_voltage:float (id: 4);
 
   // The state of the indexer state machine.
-  state:int;
+  state:int32 (id: 5);
 
   // The estimated voltage error from the kalman filter in volts.
-  voltage_error:double;
+  voltage_error:double (id: 6);
   // The estimated voltage error from the stuck indexer kalman filter.
-  stuck_voltage_error:double;
+  stuck_voltage_error:double (id: 7);
 
   // The current velocity measured as delta x / delta t in radians/sec.
-  instantaneous_velocity:double;
+  instantaneous_velocity:double (id: 8);
 
   // The error between our measurement and expected measurement in radians.
-  position_error:double;
+  position_error:double (id: 9);
 }
 
 table ShooterStatus {
   // The current average velocity in radians/second.
-  avg_angular_velocity:double;
+  avg_angular_velocity:double (id: 0);
 
   // The current instantaneous filtered velocity in radians/second.
-  angular_velocity:double;
+  angular_velocity:double (id: 1);
 
   // True if the shooter is ready.  It is better to compare the velocities
   // directly so there isn't confusion on if the goal is up to date.
-  ready:bool;
+  ready:bool (id: 2);
 
   // The estimated voltage error from the kalman filter in volts.
-  voltage_error:double;
+  voltage_error:double (id: 3);
 
   // The current velocity measured as delta x / delta t in radians/sec.
-  instantaneous_velocity:double;
-  filtered_velocity:double;
-  fixed_instantaneous_velocity:double;
+  instantaneous_velocity:double (id: 4);
+  filtered_velocity:double (id: 5);
+  fixed_instantaneous_velocity:double (id: 6);
 
   // The error between our measurement and expected measurement in radians.
-  position_error:double;
+  position_error:double (id: 7);
 }
 
 table ColumnEstimatorState {
-  error:bool;
-  zeroed:bool;
-  indexer:frc971.HallEffectAndPositionEstimatorState;
-  turret:frc971.HallEffectAndPositionEstimatorState;
+  error:bool (id: 0);
+  zeroed:bool (id: 1);
+  indexer:frc971.HallEffectAndPositionEstimatorState (id: 2);
+  turret:frc971.HallEffectAndPositionEstimatorState (id: 3);
 }
 
-table TurretProfiledSubsystemStatus {
+table TurretProfiledSubsystemStatus  {
   // Is the subsystem zeroed?
-  zeroed:bool;
+  zeroed:bool (id: 0);
 
   // The state of the subsystem, if applicable.  -1 otherwise.
-  state:int;
+  state:int (id: 1);
 
   // If true, we have aborted.
-  estopped:bool;
+  estopped:bool (id: 2);
 
   // Position of the joint.
-  position:float;
+  position:float (id: 3);
   // Velocity of the joint in units/second.
-  velocity:float;
+  velocity:float (id: 4);
   // Profiled goal position of the joint.
-  goal_position:float;
+  goal_position:float (id: 5);
   // Profiled goal velocity of the joint in units/second.
-  goal_velocity:float;
+  goal_velocity:float (id: 6);
   // Unprofiled goal position from absoulte zero of the joint.
-  unprofiled_goal_position:float;
+  unprofiled_goal_position:float (id: 7);
   // Unprofiled goal velocity of the joint in units/second.
-  unprofiled_goal_velocity:float;
+  unprofiled_goal_velocity:float (id: 8);
 
   // The estimated voltage error.
-  voltage_error:float;
+  voltage_error:float (id: 9);
 
   // The calculated velocity with delta x/delta t
-  calculated_velocity:float;
+  calculated_velocity:float (id: 10);
 
   // Components of the control loop output
-  position_power:float;
-  velocity_power:float;
-  feedforwards_power:float;
+  position_power:float (id: 11);
+  velocity_power:float (id: 12);
+  feedforwards_power:float (id: 13);
 
   // State of the estimator.
-  estimator_state:ColumnEstimatorState;
+  estimator_state:ColumnEstimatorState (id: 14);
 
-  raw_vision_angle:double;
-  vision_angle:double;
-  vision_tracking:bool;
+  raw_vision_angle:double (id: 15);
+  vision_angle:double (id: 16);
+  vision_tracking:bool (id: 17);
 
-  turret_encoder_angle:double;
+  turret_encoder_angle:double (id: 18);
 }
 
 table Status {
   // Are all the subsystems zeroed?
-  zeroed:bool;
+  zeroed:bool (id: 0);
 
   // If true, we have aborted. This is the or of all subsystem estops.
-  estopped:bool;
+  estopped:bool (id: 1);
 
   // Each subsystems status.
-  intake:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus;
-  hood:frc971.control_loops.IndexProfiledJointStatus;
-  shooter:ShooterStatus;
+  intake:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 2);
+  hood:frc971.control_loops.IndexProfiledJointStatus (id: 3);
+  shooter:ShooterStatus (id: 4);
 
-  turret:TurretProfiledSubsystemStatus;
-  indexer:IndexerStatus;
+  turret:TurretProfiledSubsystemStatus (id: 5);
+  indexer:IndexerStatus (id: 6);
 
-  vision_distance:float;
+  vision_distance:float (id: 7);
 }
 
 root_type Status;
diff --git a/y2017/vision/vision.fbs b/y2017/vision/vision.fbs
index f1bc013..7516af1 100644
--- a/y2017/vision/vision.fbs
+++ b/y2017/vision/vision.fbs
@@ -2,15 +2,15 @@
 
 // Published on ".y2017.vision.vision_status"
 table VisionStatus {
-  image_valid:bool;
+  image_valid:bool (id: 0);
 
   // Distance to the target in meters.
-  distance:double;
+  distance:double (id: 1);
   // The angle in radians of the bottom of the target.
-  angle:double;
+  angle:double (id: 2);
 
   // Capture time of the angle using the clock behind monotonic_clock::now().
-  target_time:long;
+  target_time:int64 (id: 3);
 }
 
 root_type VisionStatus;