blob: 0f707dce903d5af0d363fe11450c81524f148434 [file] [log] [blame]
package y2017.control_loops;
import "aos/common/controls/control_loops.q";
import "frc971/control_loops/profiled_subsystem.q";
// TODO(austin): Add this back in when the queue compiler supports diamond
// inheritance.
//import "frc971/control_loops/control_loops.q";
struct IntakeGoal {
// Zero for the intake is when the front tube is tangent with the front of the
// frame. Positive is out.
// Goal distance of the intake.
double distance;
// Caps on velocity/acceleration for profiling. 0 for the default.
.frc971.ProfileParameters profile_params;
// Voltage to send to the rollers. Positive is sucking in.
double voltage_rollers;
};
struct IndexerGoal {
// Indexer angular velocity goals in radians/second.
double angular_velocity;
// Roller voltage. Positive is sucking in.
double voltage_rollers;
};
struct TurretGoal {
// An angle of zero means the turrent faces toward the front of the
// robot where the intake is located. The angle increases when the turret
// 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.
double angle;
// Caps on velocity/acceleration for profiling. 0 for the default.
.frc971.ProfileParameters profile_params;
};
struct HoodGoal {
// Angle the hood is currently at. An angle of zero is at the lower hard
// stop, angle increases as hood rises.
double angle;
// Caps on velocity/acceleration for profiling. 0 for the default.
.frc971.ProfileParameters profile_params;
};
struct ShooterGoal {
// Angular velocity goals in radians/second. Positive is shooting out of the
// robot.
double angular_velocity;
};
struct 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.
double avg_angular_velocity;
// The current instantaneous filtered velocity in radians/second.
double angular_velocity;
// 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.
bool ready;
// True if the indexer is stuck.
bool stuck;
float stuck_voltage;
// The state of the indexer state machine.
int32_t state;
// The estimated voltage error from the kalman filter in volts.
double voltage_error;
// The estimated voltage error from the stuck indexer kalman filter.
double stuck_voltage_error;
// The current velocity measured as delta x / delta t in radians/sec.
double instantaneous_velocity;
// The error between our measurement and expected measurement in radians.
double position_error;
};
struct ShooterStatus {
// The current average velocity in radians/second.
double avg_angular_velocity;
// The current instantaneous filtered velocity in radians/second.
double angular_velocity;
// 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.
bool ready;
// The estimated voltage error from the kalman filter in volts.
double voltage_error;
// The current velocity measured as delta x / delta t in radians/sec.
double instantaneous_velocity;
double fixed_instantaneous_velocity;
// The error between our measurement and expected measurement in radians.
double position_error;
};
struct ColumnPosition {
// Indexer angle in radians relative to the base. Positive is according to
// the right hand rule around +z.
.frc971.HallEffectAndPosition indexer;
// Turret angle in radians relative to the indexer. Positive is the same as
// the indexer.
.frc971.HallEffectAndPosition turret;
};
queue_group SuperstructureQueue {
implements aos.control_loops.ControlLoop;
message Goal {
IntakeGoal intake;
IndexerGoal indexer;
TurretGoal turret;
HoodGoal hood;
ShooterGoal shooter;
};
message Status {
// Are all the subsystems zeroed?
bool zeroed;
// If true, we have aborted. This is the or of all subsystem estops.
bool estopped;
// Each subsystems status.
.frc971.control_loops.AbsoluteProfiledJointStatus intake;
.frc971.control_loops.AbsoluteProfiledJointStatus turret;
.frc971.control_loops.IndexProfiledJointStatus hood;
IndexerStatus indexer;
ShooterStatus shooter;
};
message Position {
// Position of the intake, zero when the intake is in, positive when it is
// out.
.frc971.PotAndAbsolutePosition intake;
// The position of the column.
ColumnPosition column;
// The sensor readings for the hood. The units and sign are defined the
// same as what's in the Goal message.
.frc971.IndexPosition hood;
// Shooter wheel angle in radians.
double theta_shooter;
};
message Output {
// Voltages for some of the subsystems.
double voltage_intake;
double voltage_indexer;
double voltage_shooter;
// Rollers on the intake.
double voltage_intake_rollers;
// Roller on the indexer
double voltage_indexer_rollers;
double voltage_turret;
double voltage_hood;
};
queue Goal goal;
queue Position position;
queue Output output;
queue Status status;
};
queue_group SuperstructureQueue superstructure_queue;