blob: ed659c3d5a99a7546da5b82e812fa563fc1b6cfb [file] [log] [blame]
Comran Morshed5323ecb2015-12-26 20:50:55 +00001package frc971.control_loops;
Brian Silverman17f503e2015-08-02 18:17:18 -07002
John Park33858a32018-09-28 23:05:48 -07003import "aos/controls/control_loops.q";
Austin Schuhedbb64f2016-03-19 01:18:09 -07004import "frc971/control_loops/control_loops.q";
Austin Schuh093535c2016-03-05 23:21:00 -08005
Brian Silverman51091a02015-12-26 15:56:58 -08006// For logging information about what the code is doing with the shifters.
Brian Silverman17f503e2015-08-02 18:17:18 -07007struct GearLogging {
Brian Silverman51091a02015-12-26 15:56:58 -08008 // Which controller is being used.
Brian Silverman17f503e2015-08-02 18:17:18 -07009 int8_t controller_index;
Comran Morshed0bf200a2016-02-19 15:19:32 +000010
11 // Whether each loop for the drivetrain sides is the high-gear one.
Brian Silverman17f503e2015-08-02 18:17:18 -070012 bool left_loop_high;
13 bool right_loop_high;
Comran Morshed0bf200a2016-02-19 15:19:32 +000014
15 // The states of each drivetrain shifter.
Brian Silverman17f503e2015-08-02 18:17:18 -070016 int8_t left_state;
17 int8_t right_state;
18};
19
Brian Silverman51091a02015-12-26 15:56:58 -080020// For logging information about the state of the shifters.
Brian Silverman17f503e2015-08-02 18:17:18 -070021struct CIMLogging {
Comran Morshed0bf200a2016-02-19 15:19:32 +000022 // Whether the code thinks each drivetrain side is currently in gear.
Brian Silverman17f503e2015-08-02 18:17:18 -070023 bool left_in_gear;
24 bool right_in_gear;
Comran Morshed0bf200a2016-02-19 15:19:32 +000025
26 // The angular velocities (in rad/s, positive forward) the code thinks motors
27 // on each side of the drivetrain are moving at.
Brian Silverman17f503e2015-08-02 18:17:18 -070028 double left_motor_speed;
29 double right_motor_speed;
Comran Morshed0bf200a2016-02-19 15:19:32 +000030
31 // The velocity estimates for each drivetrain side of the robot (in m/s,
32 // positive forward) that can be used for shifting.
Brian Silverman17f503e2015-08-02 18:17:18 -070033 double left_velocity;
34 double right_velocity;
35};
36
37queue_group DrivetrainQueue {
38 implements aos.control_loops.ControlLoop;
39
40 message Goal {
Brian Silverman51091a02015-12-26 15:56:58 -080041 // Position of the steering wheel (positive = turning left when going
42 // forwards).
Austin Schuh2b1fce02018-03-02 20:05:20 -080043 double wheel;
44 double wheel_velocity;
45 double wheel_torque;
Comran Morshed0bf200a2016-02-19 15:19:32 +000046
Brian Silverman51091a02015-12-26 15:56:58 -080047 // Position of the throttle (positive forwards).
Brian Silverman17f503e2015-08-02 18:17:18 -070048 double throttle;
Austin Schuh2b1fce02018-03-02 20:05:20 -080049 double throttle_velocity;
50 double throttle_torque;
Comran Morshed0bf200a2016-02-19 15:19:32 +000051
Brian Silverman51091a02015-12-26 15:56:58 -080052 // True to shift into high, false to shift into low.
Brian Silverman17f503e2015-08-02 18:17:18 -070053 bool highgear;
Comran Morshed0bf200a2016-02-19 15:19:32 +000054
Brian Silverman51091a02015-12-26 15:56:58 -080055 // True to activate quickturn.
Brian Silverman17f503e2015-08-02 18:17:18 -070056 bool quickturn;
Comran Morshed0bf200a2016-02-19 15:19:32 +000057
Brian Silverman51091a02015-12-26 15:56:58 -080058 // True to have the closed-loop controller take over.
Brian Silverman17f503e2015-08-02 18:17:18 -070059 bool control_loop_driving;
Comran Morshed0bf200a2016-02-19 15:19:32 +000060
61 // Position goals for each drivetrain side (in meters) when the
62 // closed-loop controller is active.
Brian Silverman17f503e2015-08-02 18:17:18 -070063 double left_goal;
Brian Silverman17f503e2015-08-02 18:17:18 -070064 double right_goal;
Comran Morshed0bf200a2016-02-19 15:19:32 +000065
66 // Velocity goal for each drivetrain side (in m/s) when the closed-loop
67 // controller is active.
68 double left_velocity_goal;
Brian Silverman17f503e2015-08-02 18:17:18 -070069 double right_velocity_goal;
Austin Schuh093535c2016-03-05 23:21:00 -080070
Austin Schuh0aae9242018-03-14 19:49:44 -070071 double max_ss_voltage;
72
Austin Schuh093535c2016-03-05 23:21:00 -080073 // Motion profile parameters.
74 // The control loop will profile if these are all non-zero.
Austin Schuhedbb64f2016-03-19 01:18:09 -070075 .frc971.ProfileParameters linear;
76 .frc971.ProfileParameters angular;
Brian Silverman17f503e2015-08-02 18:17:18 -070077 };
78
79 message Position {
Comran Morshed0bf200a2016-02-19 15:19:32 +000080 // Relative position of each drivetrain side (in meters).
Brian Silverman17f503e2015-08-02 18:17:18 -070081 double left_encoder;
82 double right_encoder;
Comran Morshed0bf200a2016-02-19 15:19:32 +000083
84 // The speed in m/s of each drivetrain side from the most recent encoder
85 // pulse, or 0 if there was no edge within the last 5ms.
Brian Silverman51091a02015-12-26 15:56:58 -080086 double left_speed;
Brian Silverman51091a02015-12-26 15:56:58 -080087 double right_speed;
Comran Morshed0bf200a2016-02-19 15:19:32 +000088
89 // Position of each drivetrain shifter, scaled from 0.0 to 1.0 where smaller
90 // is towards low gear.
Brian Silverman17f503e2015-08-02 18:17:18 -070091 double left_shifter_position;
92 double right_shifter_position;
Comran Morshed0bf200a2016-02-19 15:19:32 +000093
94 // Raw analog voltages of each shifter hall effect for logging purposes.
Austin Schuha0c1e152015-11-08 14:10:13 -080095 double low_left_hall;
96 double high_left_hall;
97 double low_right_hall;
98 double high_right_hall;
Brian Silverman17f503e2015-08-02 18:17:18 -070099 };
100
101 message Output {
Comran Morshed0bf200a2016-02-19 15:19:32 +0000102 // Voltage to send to motor(s) on either side of the drivetrain.
Brian Silverman17f503e2015-08-02 18:17:18 -0700103 double left_voltage;
104 double right_voltage;
Comran Morshed0bf200a2016-02-19 15:19:32 +0000105
106 // Whether to set each shifter piston to high gear.
Brian Silverman17f503e2015-08-02 18:17:18 -0700107 bool left_high;
108 bool right_high;
109 };
110
111 message Status {
Brian Silverman51091a02015-12-26 15:56:58 -0800112 // Estimated speed of the center of the robot in m/s (positive forwards).
Brian Silverman17f503e2015-08-02 18:17:18 -0700113 double robot_speed;
Comran Morshed0bf200a2016-02-19 15:19:32 +0000114
115 // Estimated relative position of each drivetrain side (in meters).
Austin Schuh093535c2016-03-05 23:21:00 -0800116 double estimated_left_position;
117 double estimated_right_position;
Comran Morshed0bf200a2016-02-19 15:19:32 +0000118
119 // Estimated velocity of each drivetrain side (in m/s).
Austin Schuh093535c2016-03-05 23:21:00 -0800120 double estimated_left_velocity;
121 double estimated_right_velocity;
Brian Silverman17f503e2015-08-02 18:17:18 -0700122
Comran Morshed0bf200a2016-02-19 15:19:32 +0000123 // The voltage we wanted to send to each drivetrain side last cycle.
Brian Silverman17f503e2015-08-02 18:17:18 -0700124 double uncapped_left_voltage;
125 double uncapped_right_voltage;
Comran Morshed0bf200a2016-02-19 15:19:32 +0000126
Austin Schuh41565602016-02-28 20:10:49 -0800127 // The goal velocities for the polydrive controller.
128 double left_velocity_goal;
129 double right_velocity_goal;
130
Austin Schuh093535c2016-03-05 23:21:00 -0800131 // The voltage error for the left and right sides.
132 double left_voltage_error;
133 double right_voltage_error;
134
135 // The profiled goal states.
136 double profiled_left_position_goal;
137 double profiled_right_position_goal;
138 double profiled_left_velocity_goal;
139 double profiled_right_velocity_goal;
140
141 // The KF offset
142 double estimated_angular_velocity_error;
143 // The KF estimated heading.
144 double estimated_heading;
145 // The KF wheel estimated heading.
146 //double estimated_wheel_heading;
147
Brian Silverman51091a02015-12-26 15:56:58 -0800148 // True if the output voltage was capped last cycle.
Brian Silverman17f503e2015-08-02 18:17:18 -0700149 bool output_was_capped;
Austin Schuh5900d142016-04-03 21:35:12 -0700150
151 // The angle of the robot relative to the ground.
152 double ground_angle;
Kyle Stachowicz2f3c20f2017-07-13 16:04:05 -0700153
154 // Information about shifting logic and curent gear, for logging purposes
155 GearLogging gear_logging;
156 CIMLogging cim_logging;
Brian Silverman17f503e2015-08-02 18:17:18 -0700157 };
158
159 queue Goal goal;
160 queue Position position;
161 queue Output output;
162 queue Status status;
163};
164
165queue_group DrivetrainQueue drivetrain_queue;