blob: 9db46fd3413563f1f58d08d1984856be0b64286b [file] [log] [blame]
Brian Silverman431500a2013-10-28 19:50:15 -07001#include "frc971/constants.h"
2
3#include <math.h>
4#include <stdint.h>
5#include <inttypes.h>
6
7#include "aos/common/logging/logging.h"
8#include "aos/common/once.h"
9#include "aos/common/network/team_number.h"
10
Brian Silverman2c590c32013-11-04 18:08:54 -080011#include "frc971/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
Brian Silverman2c590c32013-11-04 18:08:54 -080012#include "frc971/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
Brian Silverman2c590c32013-11-04 18:08:54 -080013
Brian Silverman431500a2013-10-28 19:50:15 -070014#ifndef M_PI
15#define M_PI 3.14159265358979323846
16#endif
17
18namespace frc971 {
19namespace constants {
20namespace {
21
Brian Silvermane5db0c62014-03-13 15:53:18 -070022const uint16_t kCompTeamNumber = 971;
Brian Silvermana20703b2014-03-20 14:29:37 -070023const uint16_t kPracticeTeamNumber = 9971;
Brian Silvermane5db0c62014-03-13 15:53:18 -070024
Brian Silverman1a6590d2013-11-04 14:46:46 -080025const double kCompDrivetrainEncoderRatio =
Brian Silvermanf970f2c2014-03-22 19:34:30 -070026 (18.0 / 50.0) /*output reduction*/ * (56.0 / 30.0) /*encoder gears*/;
27const double kCompLowGearRatio = 18.0 / 60.0 * 18.0 / 50.0;
28const double kCompHighGearRatio = 28.0 / 50.0 * 18.0 / 50.0;
Brian Silverman431500a2013-10-28 19:50:15 -070029
Brian Silvermanf970f2c2014-03-22 19:34:30 -070030const double kPracticeDrivetrainEncoderRatio = kCompDrivetrainEncoderRatio;
31const double kPracticeLowGearRatio = kCompLowGearRatio;
32const double kPracticeHighGearRatio = kCompHighGearRatio;
Brian Silverman1a6590d2013-11-04 14:46:46 -080033
Brian Silvermane5db0c62014-03-13 15:53:18 -070034const ShifterHallEffect kCompRightDriveShifter{555, 657, 660, 560, 0.2, 0.7};
35const ShifterHallEffect kCompLeftDriveShifter{555, 660, 644, 552, 0.2, 0.7};
Brian Silverman6eb51f12013-11-02 14:39:01 -070036
Austin Schuh809c2562014-03-02 11:50:19 -080037const ShifterHallEffect kPracticeRightDriveShifter{550, 640, 635, 550, 0.2, 0.7};
38const ShifterHallEffect kPracticeLeftDriveShifter{540, 620, 640, 550, 0.2, 0.7};
Brian Silvermane5db0c62014-03-13 15:53:18 -070039
Austin Schuh06cbbf12014-02-22 02:07:31 -080040const double shooter_zeroing_speed = 0.05;
Austin Schuh6b428602014-02-22 21:02:00 -080041const double shooter_unload_speed = 0.08;
Brian Silverman6eb51f12013-11-02 14:39:01 -070042
Ben Fredricksona9dcfa42014-02-23 02:05:59 +000043const Values *DoGetValuesForTeam(uint16_t team) {
Brian Silverman431500a2013-10-28 19:50:15 -070044 switch (team) {
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080045 case 1: // for tests
46 return new Values{
47 kCompDrivetrainEncoderRatio,
48 kCompLowGearRatio,
49 kCompHighGearRatio,
50 kCompLeftDriveShifter,
51 kCompRightDriveShifter,
Austin Schuh11726212014-03-02 14:01:02 -080052 false,
Austin Schuha25a0412014-03-09 00:50:04 -080053 control_loops::MakeVelocityDrivetrainLoop,
54 control_loops::MakeDrivetrainLoop,
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080055 // ShooterLimits
56 // TODO(ben): make these real numbers
57 {-0.00127, 0.298196, -0.001524, 0.305054, 0.0149098,
58 {-0.001778, 0.000762, 0, 0}, {-0.001778, 0.009906, 0, 0}, {0.006096, 0.026416, 0, 0},
Austin Schuh6b428602014-02-22 21:02:00 -080059 shooter_zeroing_speed,
60 shooter_unload_speed
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080061 },
62 {0.5,
63 0.1,
64 0.1,
65 0.0,
66 1.57,
67 0,
68 0,
Austin Schuh27b8fb12014-02-22 15:10:05 -080069 {0.0, 2.05, 0.02, 2.02, {-0.1, 0.05, -0.1, 0.05}, {1.0, 1.1, 1.0, 1.1}, {2.0, 2.1, 2.0, 2.1}},
70 {0.0, 2.05, 0.02, 2.02, {-0.1, 0.05, -0.1, 0.05}, {1.0, 1.1, 1.0, 1.1}, {2.0, 2.1, 2.0, 2.1}},
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080071 0.01, // claw_unimportant_epsilon
72 0.9, // start_fine_tune_pos
73 4.0,
James Kuszmaul9ead1de2014-02-28 21:24:39 -080074 },
Austin Schuh809c2562014-03-02 11:50:19 -080075 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +000076 0.02, // drivetrain done delta
77 5.0 // drivetrain max speed
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080078 };
79 break;
Brian Silverman431500a2013-10-28 19:50:15 -070080 case kCompTeamNumber:
Brian Silverman756f9ff2014-01-17 23:40:23 -080081 return new Values{
Austin Schuh288c8c32014-02-16 17:20:17 -080082 kCompDrivetrainEncoderRatio,
83 kCompLowGearRatio,
84 kCompHighGearRatio,
85 kCompLeftDriveShifter,
86 kCompRightDriveShifter,
Brian Silvermane0ad2792014-03-14 18:50:49 -070087 true,
Austin Schuha25a0412014-03-09 00:50:04 -080088 control_loops::MakeVelocityDrivetrainLoop,
89 control_loops::MakeDrivetrainLoop,
Brian Silverman5911b402014-02-16 19:40:50 -080090 // ShooterLimits
Brian Silvermane5db0c62014-03-13 15:53:18 -070091 {-0.001041, 0.296019, -0.001488, 0.302717, 0.0149098,
92 {-0.002, 0.000446, -0.002, 0.000446},
93 {-0.002, 0.009078, -0.002, 0.009078},
94 {0.003870, 0.026194, 0.003869, 0.026343},
Austin Schuh6b428602014-02-22 21:02:00 -080095 shooter_zeroing_speed,
96 shooter_unload_speed
Austin Schuh60c56662014-02-17 14:37:19 -080097 },
Brian Silvermane5db0c62014-03-13 15:53:18 -070098 {0.800000,
99 0.400000,
100 0.000000,
101 -1.220821,
102 1.822142,
103 -0.849484,
104 1.42309,
105 {-3.328397, 2.091668, -3.166136, 1.95,
106 {-3.4, -3.092051, -3.4, -3.093414},
107 {-0.249073, -0.035452, -0.251800, -0.033179},
108 {1.889410, 2.2, 1.883956, 2.2}},
109 {-2.453460, 3.082960, -2.453460, 3.082960,
110 {-2.6, -2.185752, -2.6, -2.184843},
111 {-0.280434, -0.049087, -0.277707, -0.047724},
112 {2.892065, 3.2, 2.888429, 3.2}},
113 0.040000, // claw_unimportant_epsilon
114 -0.400000, // start_fine_tune_pos
115 4.000000,
James Kuszmaul9ead1de2014-02-28 21:24:39 -0800116 },
117 //TODO(james): Get realer numbers for shooter_action.
Austin Schuh809c2562014-03-02 11:50:19 -0800118 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +0000119 0.02, // drivetrain done delta
120 5.0 // drivetrain max speed
Brian Silverman756f9ff2014-01-17 23:40:23 -0800121 };
Brian Silverman431500a2013-10-28 19:50:15 -0700122 break;
123 case kPracticeTeamNumber:
Brian Silverman756f9ff2014-01-17 23:40:23 -0800124 return new Values{
Austin Schuh288c8c32014-02-16 17:20:17 -0800125 kPracticeDrivetrainEncoderRatio,
126 kPracticeLowGearRatio,
127 kPracticeHighGearRatio,
128 kPracticeLeftDriveShifter,
129 kPracticeRightDriveShifter,
130 false,
Austin Schuha25a0412014-03-09 00:50:04 -0800131 control_loops::MakeVelocityDrivetrainLoop,
132 control_loops::MakeDrivetrainLoop,
Brian Silverman5911b402014-02-16 19:40:50 -0800133 // ShooterLimits
Austin Schuh06cbbf12014-02-22 02:07:31 -0800134 {-0.001042, 0.294084, -0.001935, 0.303460, 0.0138401,
135 {-0.002, 0.000446, -0.002, 0.000446},
136 {-0.002, 0.009078, -0.002, 0.009078},
137 {0.003869, 0.026194, 0.003869, 0.026194},
Austin Schuh6b428602014-02-22 21:02:00 -0800138 shooter_zeroing_speed,
139 shooter_unload_speed
Austin Schuh60c56662014-02-17 14:37:19 -0800140 },
Austin Schuh78d55462014-02-23 01:39:30 -0800141 {0.400000 * 2.0,
142 0.200000 * 2.0,
143 0.000000 * 2.0,
144 -0.762218 * 2.0,
145 0.912207 * 2.0,
146 -0.849484,
147 1.42308,
Brian Silvermane5db0c62014-03-13 15:53:18 -0700148 {-3.364758, 2.086668, -3.166136, 1.95,
149 {-1.7 * 2.0, -1.544662 * 2.0, -1.7 * 2.0, -1.547616 * 2.0},
150 {-0.130218 * 2.0, -0.019771 * 2.0, -0.132036 * 2.0, -0.018862 * 2.0},
151 {0.935842 * 2.0, 1.1 * 2.0, 0.932660 * 2.0, 1.1 * 2.0}},
152 {-2.451642, 3.107504, -2.273474, 2.750,
153 {-1.3 * 2.0, -1.088331 * 2.0, -1.3 * 2.0, -1.088331 * 2.0},
154 {-0.134536 * 2.0, -0.018408 * 2.0, -0.136127 * 2.0, -0.019771 * 2.0},
155 {1.447396 * 2.0, 1.6 * 2.0, 1.443987 * 2.0, 1.6 * 2.0}},
Austin Schuh78d55462014-02-23 01:39:30 -0800156 0.020000 * 2.0, // claw_unimportant_epsilon
157 -0.200000 * 2.0, // start_fine_tune_pos
Austin Schuh54e2e6c2014-02-21 22:58:53 -0800158 4.000000,
James Kuszmaul9ead1de2014-02-28 21:24:39 -0800159 },
160 //TODO(james): Get realer numbers for shooter_action.
Austin Schuh809c2562014-03-02 11:50:19 -0800161 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +0000162 0.02, // drivetrain done delta
163 5.0 // drivetrain max speed
Brian Silverman756f9ff2014-01-17 23:40:23 -0800164 };
Brian Silverman431500a2013-10-28 19:50:15 -0700165 break;
166 default:
167 LOG(FATAL, "unknown team #%" PRIu16 "\n", team);
168 }
169}
170
Ben Fredricksona9dcfa42014-02-23 02:05:59 +0000171const Values *DoGetValues() {
172 uint16_t team = ::aos::network::GetTeamNumber();
173 LOG(INFO, "creating a Constants for team %" PRIu16 "\n", team);
174 return DoGetValuesForTeam(team);
175}
176
Brian Silverman431500a2013-10-28 19:50:15 -0700177} // namespace
178
179const Values &GetValues() {
180 static ::aos::Once<const Values> once(DoGetValues);
181 return *once.Get();
182}
183
Ben Fredricksona9dcfa42014-02-23 02:05:59 +0000184const Values &GetValuesForTeam(uint16_t team_number) {
185 return *(DoGetValuesForTeam(team_number));
186}
187
Brian Silverman431500a2013-10-28 19:50:15 -0700188} // namespace constants
189} // namespace frc971