blob: cf69efcbea0bdc24392ff19b49f039c35d74d304 [file] [log] [blame]
Daniel Petti663fef02015-01-22 21:43:00 -08001package frc971.control_loops;
2
3import "aos/common/controls/control_loops.q";
Brian Silverman0a7f6062015-01-24 17:41:33 -05004import "frc971/control_loops/control_loops.q";
5
6// Represents states for all of the box-grabbing pistons.
7// true is grabbed and false is retracted for all of them.
8struct GrabberPistons {
9 bool top_front;
10 bool top_back;
11 bool bottom_front;
12 bool bottom_back;
13};
Daniel Petti663fef02015-01-22 21:43:00 -080014
Austin Schuh9e37c322015-02-16 15:47:49 -080015// The internal state of the zeroing estimator.
16struct EstimatorState {
17 // If true, there has been a fatal error for the estimator.
18 bool error;
19 // If the joint has seen an index pulse and is zeroed.
20 bool zeroed;
21 // The estimated position of the joint.
22 double position;
23};
24
Ben Fredrickson6b5ba792015-01-25 17:14:40 -080025queue_group FridgeQueue {
Daniel Petti663fef02015-01-22 21:43:00 -080026 implements aos.control_loops.ControlLoop;
27
Brian Silverman0a7f6062015-01-24 17:41:33 -050028 // All angles are in radians with 0 sticking straight out horizontally over
29 // the intake (the front). Rotating up and into the robot (towards the back
30 // where boxes are placed) is positive. Positive output voltage moves all
31 // mechanisms in the direction with positive sensor values.
Daniel Petti663fef02015-01-22 21:43:00 -080032
Brian Silverman0a7f6062015-01-24 17:41:33 -050033 // Elevator heights are the vertical distance (in meters) from the top of the
34 // frame (at the front and back) to the axis of the bottom pivot of the arm.
Daniel Petti663fef02015-01-22 21:43:00 -080035
36 message Goal {
Brian Silverman0a7f6062015-01-24 17:41:33 -050037 // Angle of the arm.
Daniel Petti663fef02015-01-22 21:43:00 -080038 double angle;
Brian Silverman0a7f6062015-01-24 17:41:33 -050039 // Height of the elevator.
Daniel Petti663fef02015-01-22 21:43:00 -080040 double height;
41
Austin Schuh703b8d42015-02-01 14:56:34 -080042 // Angular velocity of the arm.
43 double angular_velocity;
44 // Linear velocity of the elevator.
45 double velocity;
46
47 // TODO(austin): Do I need acceleration here too?
48
Brian Silverman0a7f6062015-01-24 17:41:33 -050049 GrabberPistons grabbers;
Daniel Petti663fef02015-01-22 21:43:00 -080050 };
51
52 message Position {
Brian Silverman0a7f6062015-01-24 17:41:33 -050053 PotAndIndexPair arm;
54 PotAndIndexPair elevator;
Daniel Petti663fef02015-01-22 21:43:00 -080055 };
56
57 message Status {
58 // Are both the arm and elevator zeroed?
59 bool zeroed;
Ben Fredrickson6b5ba792015-01-25 17:14:40 -080060
61 // Angle of the arm.
62 double angle;
63 // Height of the elevator.
64 double height;
65 // state of the grabber pistons
66 GrabberPistons grabbers;
Austin Schuh703b8d42015-02-01 14:56:34 -080067
Austin Schuh5ae4efd2015-02-15 23:34:22 -080068 // If true, we have aborted.
Austin Schuh703b8d42015-02-01 14:56:34 -080069 bool estopped;
Austin Schuh482a4e12015-02-14 22:43:43 -080070
71 // The internal state of the state machine.
72 int32_t state;
Austin Schuh9e37c322015-02-16 15:47:49 -080073
74 EstimatorState left_elevator_state;
75 EstimatorState right_elevator_state;
76 EstimatorState left_arm_state;
77 EstimatorState right_arm_state;
Daniel Petti663fef02015-01-22 21:43:00 -080078 };
79
80 message Output {
Brian Silverman0a7f6062015-01-24 17:41:33 -050081 double left_arm;
82 double right_arm;
83 double left_elevator;
84 double right_elevator;
Daniel Petti663fef02015-01-22 21:43:00 -080085
Brian Silverman0a7f6062015-01-24 17:41:33 -050086 GrabberPistons grabbers;
Daniel Petti663fef02015-01-22 21:43:00 -080087 };
88
89 queue Goal goal;
90 queue Position position;
91 queue Output output;
92 queue Status status;
93};
Daniel Petti8bb86eb2015-01-26 17:09:58 -080094
Ben Fredrickson6b5ba792015-01-25 17:14:40 -080095queue_group FridgeQueue fridge_queue;