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;
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;
diff --git a/y2019/camera_log.fbs b/y2019/camera_log.fbs
index 0ef7c04..11faf2d 100644
--- a/y2019/camera_log.fbs
+++ b/y2019/camera_log.fbs
@@ -1,7 +1,7 @@
namespace y2019;
table CameraLog {
- log:bool;
+ log:bool (id: 0);
}
root_type CameraLog;
diff --git a/y2019/control_loops/drivetrain/camera.fbs b/y2019/control_loops/drivetrain/camera.fbs
index 154dd2e..74117d9 100644
--- a/y2019/control_loops/drivetrain/camera.fbs
+++ b/y2019/control_loops/drivetrain/camera.fbs
@@ -2,23 +2,23 @@
// See the Target structure in //y2019/jevois:structures.h for documentation.
table CameraTarget {
- distance:float;
- height:float;
- heading:float;
- skew:float;
+ distance:float (id: 0);
+ height:float (id: 1);
+ heading:float (id: 2);
+ skew:float (id: 3);
}
// Frames from a camera.
table CameraFrame {
// Number of nanoseconds since the aos::monotonic_clock epoch at which this
// frame was captured.
- timestamp:long;
+ timestamp:long (id: 0);
// Buffer for the 3 targets.
- targets:[CameraTarget];
+ targets:[CameraTarget] (id: 1);
// Index of the camera position (not serial number) which this frame is from.
- camera:ubyte;
+ camera:ubyte (id: 2);
}
root_type CameraFrame;
diff --git a/y2019/control_loops/drivetrain/target_selector.fbs b/y2019/control_loops/drivetrain/target_selector.fbs
index f7a3291..b997bdb 100644
--- a/y2019/control_loops/drivetrain/target_selector.fbs
+++ b/y2019/control_loops/drivetrain/target_selector.fbs
@@ -17,7 +17,7 @@
// The drivetrain listens on ".y2019.control_loops.drivetrain.target_selector_hint"
table TargetSelectorHint {
// Which target we should go for:
- suggested_target:SelectionHint;
+ suggested_target:SelectionHint (id: 0);
}
root_type TargetSelectorHint;
diff --git a/y2019/control_loops/superstructure/superstructure_goal.fbs b/y2019/control_loops/superstructure/superstructure_goal.fbs
index 77e7c8d..93c31cd 100644
--- a/y2019/control_loops/superstructure/superstructure_goal.fbs
+++ b/y2019/control_loops/superstructure/superstructure_goal.fbs
@@ -4,34 +4,34 @@
table SuctionGoal {
// True = apply suction
- grab_piece:bool;
+ grab_piece:bool (id: 0);
// 0 = ball mode
// 1 = disk mode
- gamepiece_mode:int;
+ gamepiece_mode:int (id: 1);
}
table Goal {
// Meters, 0 = lowest position - mechanical hard stop,
// positive = upward
- elevator:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal;
+ elevator:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 0);
// 0 = linkage on the sprocket is pointing straight up,
// positive = forward
- intake:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal;
+ intake:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 1);
// 0 = Straight up parallel to elevator
// Positive rotates toward intake from 0
- wrist:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal;
+ wrist:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 2);
// Distance stilts extended out of the bottom of the robot. Positive = down.
// 0 is the height such that the bottom of the stilts is tangent to the
// bottom of the middle wheels.
- stilts:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal;
+ stilts:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 3);
// Positive is rollers intaking inward.
- roller_voltage:float;
+ roller_voltage:float (id: 4);
- suction:SuctionGoal;
+ suction:SuctionGoal (id: 5);
}
root_type Goal;
diff --git a/y2019/control_loops/superstructure/superstructure_output.fbs b/y2019/control_loops/superstructure/superstructure_output.fbs
index b679347..42ba6b2 100644
--- a/y2019/control_loops/superstructure/superstructure_output.fbs
+++ b/y2019/control_loops/superstructure/superstructure_output.fbs
@@ -2,29 +2,29 @@
table Output {
// Voltage sent to motors moving elevator up/down. Positive is up.
- elevator_voltage:double;
+ elevator_voltage:double (id: 0);
// Voltage sent to wrist motors on elevator to rotate.
// Positive rotates over the top towards the front of the robot.
- wrist_voltage:double;
+ wrist_voltage:double (id: 1);
// Voltage sent to motors on intake joint. Positive extends rollers.
- intake_joint_voltage:double;
+ intake_joint_voltage:double (id: 2);
// Voltage sent to rollers on intake. Positive rolls inward.
- intake_roller_voltage:double;
+ intake_roller_voltage:double (id: 3);
// Voltage sent to motors to move stilts height. Positive moves robot
// upward.
- stilts_voltage:double;
+ stilts_voltage:double (id: 4);
// True opens solenoid (applies suction)
// Top/bottom are when wrist is toward the front of the robot
- intake_suction_top:bool;
- intake_suction_bottom:bool;
+ intake_suction_top:bool (id: 5);
+ intake_suction_bottom:bool (id: 6);
// Voltage sent to the vacuum pump motors.
- pump_voltage:double;
+ pump_voltage:double (id: 7);
}
root_type Output;
diff --git a/y2019/control_loops/superstructure/superstructure_position.fbs b/y2019/control_loops/superstructure/superstructure_position.fbs
index 80a851e..86a615d 100644
--- a/y2019/control_loops/superstructure/superstructure_position.fbs
+++ b/y2019/control_loops/superstructure/superstructure_position.fbs
@@ -5,26 +5,26 @@
table Position {
// Input from pressure sensor in bar
// 1 = 1 atm, 0 = full vacuum
- suction_pressure:float;
+ suction_pressure:float (id: 0);
// Position of the elevator, 0 at lowest position, positive when up.
- elevator:frc971.PotAndAbsolutePosition;
+ elevator:frc971.PotAndAbsolutePosition (id: 1);
// Position of wrist, 0 when up, positive is rotating toward the front,
// over the top.
- wrist:frc971.PotAndAbsolutePosition;
+ wrist:frc971.PotAndAbsolutePosition (id: 2);
// Position of the intake. 0 when rollers are retracted, positive extended.
- intake_joint:frc971.AbsolutePosition;
+ intake_joint:frc971.AbsolutePosition (id: 3);
// Position of the stilts, 0 when retracted (defualt), positive lifts robot.
- stilts:frc971.PotAndAbsolutePosition;
+ stilts:frc971.PotAndAbsolutePosition (id: 4);
// True if the platform detection sensors detect the platform directly
// below the robot right behind the left and right wheels. Useful for
// determining when the robot is all the way on the platform.
- platform_left_detect:bool;
- platform_right_detect:bool;
+ platform_left_detect:bool (id: 5);
+ platform_right_detect:bool (id: 6);
}
root_type Position;
diff --git a/y2019/control_loops/superstructure/superstructure_status.fbs b/y2019/control_loops/superstructure/superstructure_status.fbs
index 9d3f44e..98fe483 100644
--- a/y2019/control_loops/superstructure/superstructure_status.fbs
+++ b/y2019/control_loops/superstructure/superstructure_status.fbs
@@ -5,19 +5,19 @@
table Status {
// All subsystems know their location.
- 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);
// Whether suction_pressure indicates cargo is held
- has_piece:bool;
+ has_piece:bool (id: 2);
// Status of each subsystem.
- elevator:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus;
- wrist:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus;
- intake:frc971.control_loops.AbsoluteEncoderProfiledJointStatus;
- stilts:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus;
+ elevator:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 3);
+ wrist:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 4);
+ intake:frc971.control_loops.AbsoluteEncoderProfiledJointStatus (id: 5);
+ stilts:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 6);
}
root_type Status;
diff --git a/y2019/status_light.fbs b/y2019/status_light.fbs
index 665b3f8..cbc65b3 100644
--- a/y2019/status_light.fbs
+++ b/y2019/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/y2020/control_loops/superstructure/superstructure_goal.fbs b/y2020/control_loops/superstructure/superstructure_goal.fbs
index 9200082..792b6b4 100644
--- a/y2020/control_loops/superstructure/superstructure_goal.fbs
+++ b/y2020/control_loops/superstructure/superstructure_goal.fbs
@@ -5,10 +5,10 @@
table ShooterGoal {
// Angular velocity in rad/s of the slowest (lowest) wheel in the kicker.
// Positive is shooting the ball.
- velocity_accelerator:double;
+ velocity_accelerator:double (id: 0);
// Angular velocity in rad/s of the flywheel. Positive is shooting.
- velocity_finisher:double;
+ velocity_finisher:double (id: 1);
}
table Goal {
diff --git a/y2020/control_loops/superstructure/superstructure_output.fbs b/y2020/control_loops/superstructure/superstructure_output.fbs
index fd57825..005d930 100644
--- a/y2020/control_loops/superstructure/superstructure_output.fbs
+++ b/y2020/control_loops/superstructure/superstructure_output.fbs
@@ -2,35 +2,35 @@
table Output {
// Votage sent to the hood. Positive moves up.
- hood_voltage:double;
+ hood_voltage:double (id: 0);
// Voltage sent to motors on intake joint. Positive extends rollers.
- intake_joint_voltage:double;
+ intake_joint_voltage:double (id: 1);
// Voltage sent to rollers on intake. Positive rolls inward.
- intake_roller_voltage:double;
+ intake_roller_voltage:double (id: 2);
- //Voltage sent to the motors.
- //Positive rotates counterclockwise from a birds eye view.
- turret_voltage:double;
+ // Voltage sent to the motors.
+ // Positive rotates counterclockwise from a birds eye view.
+ turret_voltage:double (id: 3);
// Voltage sent to the feeder belt. Positive is feeding.
- feeder_voltage:double;
+ feeder_voltage:double (id: 4);
// Voltage sent to the washing_machine and control panel spinner.
// Positive runs the washing machine CCW facing the front of the robot, and
// the spinner runs CCW from a top down view.
- washing_machine_spinner_voltage:double;
+ washing_machine_spinner_voltage:double (id: 5);
// Voltage sent to the kicker. Positive is shooting.
- accelerator_left_voltage:double;
- accelerator_right_voltage:double;
+ accelerator_left_voltage:double (id: 6);
+ accelerator_right_voltage:double (id: 7);
// Voltage sent to the flywheel. Positive is shooting.
- finisher_voltage:double;
+ finisher_voltage:double (id: 8);
// Positive is deploying climber and to climb; cannot run in reverse
- climber_voltage:double;
+ climber_voltage:double (id: 9);
}
root_type Output;
diff --git a/y2020/control_loops/superstructure/superstructure_position.fbs b/y2020/control_loops/superstructure/superstructure_position.fbs
index ed4ba18..f139381 100644
--- a/y2020/control_loops/superstructure/superstructure_position.fbs
+++ b/y2020/control_loops/superstructure/superstructure_position.fbs
@@ -4,29 +4,29 @@
table ShooterPosition {
// Flywheel angle in radians, positive is shooting.
- theta_finisher:double;
+ theta_finisher:double (id: 0);
// Kicker angle in radians of the slowest (lowest) wheel, positive is
// accelerating the ball toward the shooter.
- theta_accelerator_left:double;
- theta_accelerator_right:double;
+ theta_accelerator_left:double (id: 1);
+ theta_accelerator_right:double (id: 2);
}
table Position {
// Zero is at the horizontal, positive towards the front (radians).
- hood:frc971.AbsolutePosition;
+ hood:frc971.AbsolutePosition (id: 0);
// Position of the intake. 0 when four-bar is vertical, positive extended.
- intake_joint:frc971.AbsolutePosition;
+ intake_joint:frc971.AbsolutePosition (id: 1);
// See goal for definition of 0
- turret:frc971.PotAndAbsolutePosition;
+ turret:frc971.PotAndAbsolutePosition (id: 2);
// Position of the kicker and flywheel
- shooter:ShooterPosition;
+ shooter:ShooterPosition (id: 3);
// Position of the control panel, relative to start, positive counterclockwise from above.
- control_panel:frc971.RelativePosition;
+ control_panel:frc971.RelativePosition (id: 4);
}
root_type Position;
diff --git a/y2020/control_loops/superstructure/superstructure_status.fbs b/y2020/control_loops/superstructure/superstructure_status.fbs
index dc6116c..fb94d32 100644
--- a/y2020/control_loops/superstructure/superstructure_status.fbs
+++ b/y2020/control_loops/superstructure/superstructure_status.fbs
@@ -6,63 +6,63 @@
table FlywheelControllerStatus {
// The current average velocity in radians/second over the last kHistoryLength
// in shooter.h
- 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);
// The target speed selected by the lookup table or from manual override
// Can be compared to velocity to determine if ready.
- angular_velocity_goal:double;
+ angular_velocity_goal:double (id: 2);
// Voltage error.
- voltage_error:double;
+ voltage_error:double (id: 3);
}
table ShooterStatus {
// The final wheel shooting the ball
- finisher:FlywheelControllerStatus;
+ finisher:FlywheelControllerStatus (id: 0);
// The subsystem to accelerate the ball before the finisher
// Velocity is the fastest (top) wheel
- accelerator_left:FlywheelControllerStatus;
- accelerator_right:FlywheelControllerStatus;
+ accelerator_left:FlywheelControllerStatus (id: 1);
+ accelerator_right:FlywheelControllerStatus (id: 2);
}
table AimerStatus {
// The current goal angle for the turret auto-tracking, in radians.
- turret_position:double;
+ turret_position:double (id: 0);
// The current goal velocity for the turret, in radians / sec.
- turret_velocity:double;
+ turret_velocity:double (id: 1);
// Whether we are currently aiming for the inner port.
- aiming_for_inner_port:bool;
+ aiming_for_inner_port:bool (id: 2);
// The current distance to the target, in meters.
- target_distance:double;
+ target_distance:double (id: 3);
// The current "shot distance." When shooting on the fly, this may be
// different from the static distance to the target.
- shot_distance:double;
+ shot_distance:double (id: 4);
}
table Status {
// All subsystems know their location.
- zeroed:bool;
+ zeroed:bool (id: 0);
// If true, we have aborted. This is if one or all subsystem estops.
- estopped:bool;
+ estopped:bool (id: 1);
// Subsystem status.
- hood:frc971.control_loops.AbsoluteEncoderProfiledJointStatus;
- intake:frc971.control_loops.AbsoluteEncoderProfiledJointStatus;
- turret:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus;
+ hood:frc971.control_loops.AbsoluteEncoderProfiledJointStatus (id: 2);
+ intake:frc971.control_loops.AbsoluteEncoderProfiledJointStatus (id: 3);
+ turret:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 4);
// Shooter subsystem status.
- shooter:ShooterStatus;
+ shooter:ShooterStatus (id: 5);
// Status of the control_panel
- control_panel:frc971.control_loops.RelativeEncoderProfiledJointStatus;
+ control_panel:frc971.control_loops.RelativeEncoderProfiledJointStatus (id: 6);
// Status of the vision auto-tracking.
- aimer:AimerStatus;
+ aimer:AimerStatus (id: 7);
}
root_type Status;
diff --git a/y2020/setpoint.fbs b/y2020/setpoint.fbs
index 5f1af72..74164e5 100644
--- a/y2020/setpoint.fbs
+++ b/y2020/setpoint.fbs
@@ -1,11 +1,11 @@
namespace y2020.joysticks;
table Setpoint {
- accelerator:double;
+ accelerator:double (id: 0);
- finisher:double;
+ finisher:double (id: 1);
- hood:double;
+ hood:double (id: 2);
}
root_type Setpoint;
diff --git a/y2020/vision/sift/sift.fbs b/y2020/vision/sift/sift.fbs
index f38e0fe..5c44858 100644
--- a/y2020/vision/sift/sift.fbs
+++ b/y2020/vision/sift/sift.fbs
@@ -2,9 +2,9 @@
// Represents the location of a keypoint in field coordinates.
struct KeypointFieldLocation {
- x:float;
- y:float;
- z:float;
+ x:float (id: 0);
+ y:float (id: 1);
+ z:float (id: 2);
}
// Represents a single feature extracted from an image.
@@ -18,70 +18,70 @@
// The size of this depends on the parameters. It is width*width*hist_bins.
// Currently we have width=4 and hist_bins=8, which results in a size of
// 4*4*8=128.
- descriptor:[ubyte];
+ descriptor:[ubyte] (id: 0);
// Location of the keypoint.
- x:float;
- y:float;
+ x:float (id: 1);
+ y:float (id: 2);
// Size of the keypoint neighborhood.
- size:float;
+ size:float (id: 3);
// Angle of the keypoint.
// This is in [0,360) clockwise.
- angle:float;
+ angle:float (id: 4);
// How good of a keypoint this is.
- response:float;
+ response:float (id: 5);
// Which octave this keypoint is from.
- octave:int;
+ octave:int (id: 6);
// Where this feature's keypoint is on the field. This will only be filled out
// for training features, not ones extracted from query images.
- field_location:KeypointFieldLocation;
+ field_location:KeypointFieldLocation (id: 7);
}
// Represents a single match between a training image and a query image.
struct Match {
// The index of the feature for the query image.
- query_feature:int;
+ query_feature:int (id: 0);
// The index of the feature for the training image.
- train_feature:int;
+ train_feature:int (id: 1);
// How "good" the match is.
- distance:float;
+ distance:float (id: 2);
}
// Represents all the matches between a single training image and a query
// image.
table ImageMatch {
- matches:[Match];
+ matches:[Match] (id: 0);
// The index of the training image within all the training images.
- train_image:int;
+ train_image:int (id: 1);
}
table TransformationMatrix {
// The matrix data for a row-major 4x4 homogeneous transformation matrix.
// This implies the bottom row is (0, 0, 0, 1).
- data:[float];
+ data:[float] (id: 0);
}
// Calibration information for a given camera on a given robot.
table CameraCalibration {
// The name of the camera node which this calibration data applies to.
- node_name:string;
+ node_name:string (id: 0);
// The team number of the robot which this calibration data applies to.
- team_number:int;
+ team_number:int (id: 1);
// Intrinsics for the camera.
//
// This is the standard OpenCV intrinsics matrix in row major order (3x3).
- intrinsics:[float];
+ intrinsics:[float] (id: 2);
// Fixed extrinsics for the camera. This transforms from camera coordinates to
// robot coordinates. For example: multiplying (0, 0, 0, 1) by this results in
// the position of the camera aperature in robot coordinates.
- fixed_extrinsics:TransformationMatrix;
+ fixed_extrinsics:TransformationMatrix (id: 3);
// Extrinsics for a camera on a turret. This will only be filled out for
// applicable cameras. For turret-mounted cameras, fixed_extrinsics defines
@@ -97,13 +97,13 @@
// fixed_extrinsics
// rotation around the Z axis by the turret angle
// turret_extrinsics
- turret_extrinsics:TransformationMatrix;
+ turret_extrinsics:TransformationMatrix (id: 4);
// This is the standard OpenCV 5 parameter distortion coefficients
- dist_coeffs:[float];
+ dist_coeffs:[float] (id: 5);
// Timestamp for when the calibration was taken on the realtime clock.
- calibration_timestamp:int64;
+ calibration_timestamp:int64 (id: 6);
}
// Contains the information the EKF wants from an image matched against a single
@@ -120,7 +120,7 @@
// (0, 0, 0) is the aperture of the camera (we pretend it's an ideal pinhole
// camera). Positive Z is out of the camera. Positive X and Y are right
// handed, but which way they face depends on the camera extrinsics.
- camera_to_target:TransformationMatrix;
+ camera_to_target:TransformationMatrix (id: 0);
// Field coordinates of the target, represented as a transformation matrix
// from the field to the target.
@@ -133,36 +133,36 @@
//
// The value here will be selected from a small, static set of targets we
// train images on.
- field_to_target:TransformationMatrix;
+ field_to_target:TransformationMatrix (id: 1);
// The pose of the camera in the field coordinate frame
- field_to_camera:TransformationMatrix;
+ field_to_camera:TransformationMatrix (id: 2);
// 2D image coordinate representing target location on the matched image
- query_target_point_x:float;
- query_target_point_y:float;
+ query_target_point_x:float (id: 3);
+ query_target_point_y:float (id: 4);
// Perceived radius of target circle
- query_target_point_radius:float;
+ query_target_point_radius:float (id: 5);
}
table ImageMatchResult {
// The matches from this image to each of the training images which matched.
// Each member is against the same captured image.
- image_matches:[ImageMatch];
+ image_matches:[ImageMatch] (id: 0);
// The transformations for this image for each of the training images which
// matched.
// TODO(Brian): Include some kind of covariance information for these.
- camera_poses:[CameraPose];
+ camera_poses:[CameraPose] (id: 1);
// The features for this image.
- features:[Feature];
+ features:[Feature] (id: 2);
// Timestamp when the frame was captured.
- image_monotonic_timestamp_ns:long;
+ image_monotonic_timestamp_ns:long (id: 3);
// Information about the camera which took this image.
- camera_calibration:CameraCalibration;
+ camera_calibration:CameraCalibration (id: 4);
}
root_type ImageMatchResult;
diff --git a/y2020/vision/sift/sift_training.fbs b/y2020/vision/sift/sift_training.fbs
index 12ad9b4..c093e3b 100644
--- a/y2020/vision/sift/sift_training.fbs
+++ b/y2020/vision/sift/sift_training.fbs
@@ -4,26 +4,26 @@
// Represents a single image we train against.
table TrainingImage {
- features:[Feature];
+ features:[Feature] (id: 0);
// Field coordinates of the target, represented as a transformation matrix
// from the target to the field. See CameraPose in :sift_fbs for details of
// the conventions of this.
- field_to_target:TransformationMatrix;
+ field_to_target:TransformationMatrix (id: 1);
// 2D image coordinate representing target location on the training image
- target_point_x:float;
- target_point_y:float;
+ target_point_x:float (id: 2);
+ target_point_y:float (id: 3);
// Radius of target circle
- target_point_radius:float;
+ target_point_radius:float (id: 4);
}
// Represents the information used to match incoming images against.
table TrainingData {
- images:[TrainingImage];
+ images:[TrainingImage] (id: 0);
// Calibration information for all the cameras we know about.
- camera_calibrations:[CameraCalibration];
+ camera_calibrations:[CameraCalibration] (id: 1);
}
root_type TrainingData;
diff --git a/y2020/vision/vision.fbs b/y2020/vision/vision.fbs
index 17dc4a4..e89a181 100644
--- a/y2020/vision/vision.fbs
+++ b/y2020/vision/vision.fbs
@@ -10,13 +10,13 @@
// * Order: row major (index 0 is upper left, index 1 is to its right)
table CameraImage {
// The number of rows in the image.
- rows:int;
+ rows:int32 (id: 0);
// The number of columns in the image.
- cols:int;
+ cols:int32 (id: 1);
// The image data.
- data:[ubyte];
+ data:[ubyte] (id: 2);
// Timestamp when the frame was captured. This is the end-of-frame timestamp.
- monotonic_timestamp_ns:long;
+ monotonic_timestamp_ns:int64 (id: 3);
}
root_type CameraImage;