blob: 0de50c6118972e073817d6a066fa4334e4385bdf [file] [log] [blame]
package y2017.control_loops;
import "aos/common/controls/control_loops.q";
import "frc971/control_loops/control_loops.q";
struct JointState {
// Angle of the joint in radians.
float angle;
// Angular velocity of the joint in radians/second.
float angular_velocity;
// Profiled goal angle of the joint in radians.
float goal_angle;
// Profiled goal angular velocity of the joint in radians/second.
float goal_angular_velocity;
// Unprofiled goal angle of the joint in radians.
float unprofiled_goal_angle;
// Unprofiled goal angular velocity of the joint in radians/second.
float unprofiled_goal_angular_velocity;
// The estimated voltage error.
float voltage_error;
// The calculated velocity with delta x/delta t
float calculated_velocity;
// Components of the control loop output
float position_power;
float velocity_power;
float feedforwards_power;
// State of the estimator.
.frc971.EstimatorState estimator_state;
};
queue_group TurretQueue {
implements aos.control_loops.ControlLoop;
message Goal {
// An azimuth 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, and decreases when the turrent turns counter-clockwise.
// These are from a top view above the robot.
double angle_azimuth;
// TODO(phil): Define how we control the vertical angle of the turret: is
// it a distance or an angle, etc.
double angle_altitude;
// Caps on velocity/acceleration for profiling. 0 for the default.
.frc971.ProfileParameters profile_params_turret;
};
message Status {
// Is the turret zeroed?
bool zeroed;
// If true, we have aborted.
bool estopped;
// Estimate angles and angular velocities.
JointState azimuth;
JointState altitude;
};
message Position {
// The sensor readings for the azimuth. The units and sign are defined the
// same as what's in the Goal message.
.frc971.PotAndAbsolutePosition azimuth;
// TODO(phil): How are we measuring that other aspect of the turret (i.e.
// the "altitude") ?
};
message Output {
float voltage_azimuth;
float voltage_altitude;
};
queue Goal goal;
queue Position position;
queue Output output;
queue Status status;
};
queue_group TurretQueue turret_queue;