blob: fef9ced114353f15e9cc99fb327a6be8d8932f50 [file] [log] [blame]
package y2019.control_loops.superstructure;
import "aos/controls/control_loops.q";
import "frc971/control_loops/profiled_subsystem.q";
struct ElevatorGoal {
// Meters, 0 = lowest position - mechanical hard stop,
// positive = upward
double height;
.frc971.ProfileParameters profile_params;
};
struct IntakeGoal {
// Positive is rollers intaking inward.
double roller_voltage;
// 0 = linkage on the sprocket is pointing straight up,
// positive = forward
double joint_angle;
.frc971.ProfileParameters profile_params;
};
struct SuctionGoal {
// True = open solenoid (apply suction)
// Top/bottom are when wrist is forward
bool top;
bool bottom;
};
struct StiltsGoal {
// 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.
double height;
.frc971.ProfileParameters profile_params;
};
struct WristGoal {
// 0 = Straight up parallel to elevator
// Positive rotates toward intake from 0
double angle;
.frc971.ProfileParameters profile_params;
};
queue_group SuperstructureQueue {
implements aos.control_loops.ControlLoop;
message Goal {
ElevatorGoal elevator;
IntakeGoal intake;
SuctionGoal suction;
StiltsGoal stilts;
WristGoal wrist;
};
message Status {
// All subsystems know their location.
bool zeroed;
// If true, we have aborted. This is the or of all subsystem estops.
bool estopped;
// Whether suction_pressure indicates cargo is held
bool has_piece;
// Status of each subsystem.
.frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus elevator;
.frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus wrist;
.frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus intake;
.frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus stilts;
};
message Position {
// Input from pressure sensor in psi
// 0 = current atmospheric pressure, negative = suction.
double suction_pressure;
// Position of the elevator, 0 at lowest position, positive when up.
.frc971.PotAndAbsolutePosition elevator;
// Position of wrist, 0 when up, positive is rotating toward the front,
// over the top.
.frc971.PotAndAbsolutePosition wrist;
// Position of the intake. 0 when rollers are retracted, positive extended.
.frc971.PotAndAbsolutePosition intake_joint;
// Position of the stilts, 0 when retracted (defualt), positive lifts robot.
.frc971.PotAndAbsolutePosition stilts;
};
message Output {
// Voltage sent to motors moving elevator up/down. Positive is up.
double elevator_voltage;
// Voltage sent to wrist motors on elevator to rotate.
// Positive rotates over the top towards the front of the robot.
double wrist_voltage;
// Voltage sent to motors on intake joint. Positive extends rollers.
double intake_joint_voltage;
// Voltage sent to rollers on intake. Positive rolls inward.
double intake_roller_voltage;
// Voltage sent to motors to move stilts height. Positive moves robot upward.
double stilts_voltage;
// True opens solenoid (applies suction)
// Top/bottom are when wrist is toward the front of the robot
bool intake_suction_top;
bool intake_suction_bottom;
// Voltage sent to the vacuum pump motors.
double pump_voltage;
};
queue Goal goal;
queue Output output;
queue Status status;
queue Position position;
};
queue_group SuperstructureQueue superstructure_queue;