blob: 91fd1d01dbf34c032f626fe0800319ea40e84d2f [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 Silverman1a6590d2013-11-04 14:46:46 -080022const double kCompDrivetrainEncoderRatio =
23 (15.0 / 50.0) /*output reduction*/ * (36.0 / 24.0) /*encoder gears*/;
24const double kCompLowGearRatio = 14.0 / 60.0 * 15.0 / 50.0;
25const double kCompHighGearRatio = 30.0 / 44.0 * 15.0 / 50.0;
Brian Silverman431500a2013-10-28 19:50:15 -070026
Brian Silverman1a6590d2013-11-04 14:46:46 -080027const double kPracticeDrivetrainEncoderRatio =
28 (17.0 / 50.0) /*output reduction*/ * (64.0 / 24.0) /*encoder gears*/;
29const double kPracticeLowGearRatio = 16.0 / 60.0 * 19.0 / 50.0;
30const double kPracticeHighGearRatio = 28.0 / 48.0 * 19.0 / 50.0;
31
Austin Schuh809c2562014-03-02 11:50:19 -080032const ShifterHallEffect kCompRightDriveShifter{525, 635, 603, 529, 0.3, 0.7};
33const ShifterHallEffect kCompLeftDriveShifter{525, 645, 620, 533, 0.3, 0.7};
Brian Silverman6eb51f12013-11-02 14:39:01 -070034
Austin Schuh809c2562014-03-02 11:50:19 -080035const ShifterHallEffect kPracticeRightDriveShifter{550, 640, 635, 550, 0.2, 0.7};
36const ShifterHallEffect kPracticeLeftDriveShifter{540, 620, 640, 550, 0.2, 0.7};
Austin Schuh06cbbf12014-02-22 02:07:31 -080037const double shooter_zeroing_speed = 0.05;
Austin Schuh6b428602014-02-22 21:02:00 -080038const double shooter_unload_speed = 0.08;
Brian Silverman6eb51f12013-11-02 14:39:01 -070039
Ben Fredricksona9dcfa42014-02-23 02:05:59 +000040const Values *DoGetValuesForTeam(uint16_t team) {
Brian Silverman431500a2013-10-28 19:50:15 -070041 switch (team) {
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080042 case 1: // for tests
43 return new Values{
44 kCompDrivetrainEncoderRatio,
45 kCompLowGearRatio,
46 kCompHighGearRatio,
47 kCompLeftDriveShifter,
48 kCompRightDriveShifter,
Austin Schuh11726212014-03-02 14:01:02 -080049 false,
Austin Schuha25a0412014-03-09 00:50:04 -080050 control_loops::MakeVelocityDrivetrainLoop,
51 control_loops::MakeDrivetrainLoop,
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080052 // ShooterLimits
53 // TODO(ben): make these real numbers
54 {-0.00127, 0.298196, -0.001524, 0.305054, 0.0149098,
55 {-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 -080056 shooter_zeroing_speed,
57 shooter_unload_speed
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080058 },
59 {0.5,
60 0.1,
61 0.1,
62 0.0,
63 1.57,
64 0,
65 0,
Austin Schuh27b8fb12014-02-22 15:10:05 -080066 {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}},
67 {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 -080068 0.01, // claw_unimportant_epsilon
69 0.9, // start_fine_tune_pos
70 4.0,
James Kuszmaul9ead1de2014-02-28 21:24:39 -080071 },
Austin Schuh809c2562014-03-02 11:50:19 -080072 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +000073 0.02, // drivetrain done delta
74 5.0 // drivetrain max speed
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080075 };
76 break;
Brian Silverman431500a2013-10-28 19:50:15 -070077 case kCompTeamNumber:
Brian Silverman756f9ff2014-01-17 23:40:23 -080078 return new Values{
Austin Schuh288c8c32014-02-16 17:20:17 -080079 kCompDrivetrainEncoderRatio,
80 kCompLowGearRatio,
81 kCompHighGearRatio,
82 kCompLeftDriveShifter,
83 kCompRightDriveShifter,
Austin Schuh11726212014-03-02 14:01:02 -080084 false,
Austin Schuha25a0412014-03-09 00:50:04 -080085 control_loops::MakeVelocityDrivetrainLoop,
86 control_loops::MakeDrivetrainLoop,
Brian Silverman5911b402014-02-16 19:40:50 -080087 // ShooterLimits
88 // TODO(ben): make these real numbers
Austin Schuh30537882014-02-18 01:07:23 -080089 {-0.00127, 0.298196, -0.001524, 0.305054, 0.0149098,
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080090 {-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 -080091 shooter_zeroing_speed,
92 shooter_unload_speed
Austin Schuh60c56662014-02-17 14:37:19 -080093 },
Austin Schuhd27931c2014-02-16 19:18:20 -080094 {0.5,
95 0.1,
96 0.1,
97 0.0,
98 1.57,
Brian Silverman0d2b7cb2014-02-18 20:25:57 -080099 0,
100 0,
101 {0.0, 2.05, 0.02, 2.02, {-0.1, 0.05, 0, 0}, {1.0, 1.1, 0, 0}, {2.0, 2.1, 0, 0}},
102 {0.0, 2.05, 0.02, 2.02, {-0.1, 0.05, 0, 0}, {1.0, 1.1, 0, 0}, {2.0, 2.1, 0, 0}},
Austin Schuhd27931c2014-02-16 19:18:20 -0800103 0.01, // claw_unimportant_epsilon
104 0.9, // start_fine_tune_pos
Austin Schuh4cb047f2014-02-16 21:10:19 -0800105 4.0,
James Kuszmaul9ead1de2014-02-28 21:24:39 -0800106 },
107 //TODO(james): Get realer numbers for shooter_action.
Austin Schuh809c2562014-03-02 11:50:19 -0800108 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +0000109 0.02, // drivetrain done delta
110 5.0 // drivetrain max speed
Brian Silverman756f9ff2014-01-17 23:40:23 -0800111 };
Brian Silverman431500a2013-10-28 19:50:15 -0700112 break;
113 case kPracticeTeamNumber:
Brian Silverman756f9ff2014-01-17 23:40:23 -0800114 return new Values{
Austin Schuh288c8c32014-02-16 17:20:17 -0800115 kPracticeDrivetrainEncoderRatio,
116 kPracticeLowGearRatio,
117 kPracticeHighGearRatio,
118 kPracticeLeftDriveShifter,
119 kPracticeRightDriveShifter,
120 false,
Austin Schuha25a0412014-03-09 00:50:04 -0800121 control_loops::MakeVelocityDrivetrainLoop,
122 control_loops::MakeDrivetrainLoop,
Brian Silverman5911b402014-02-16 19:40:50 -0800123 // ShooterLimits
Austin Schuh06cbbf12014-02-22 02:07:31 -0800124 {-0.001042, 0.294084, -0.001935, 0.303460, 0.0138401,
125 {-0.002, 0.000446, -0.002, 0.000446},
126 {-0.002, 0.009078, -0.002, 0.009078},
127 {0.003869, 0.026194, 0.003869, 0.026194},
Austin Schuh6b428602014-02-22 21:02:00 -0800128 shooter_zeroing_speed,
129 shooter_unload_speed
Austin Schuh60c56662014-02-17 14:37:19 -0800130 },
Austin Schuh78d55462014-02-23 01:39:30 -0800131 {0.400000 * 2.0,
132 0.200000 * 2.0,
133 0.000000 * 2.0,
134 -0.762218 * 2.0,
135 0.912207 * 2.0,
136 -0.849484,
137 1.42308,
Austin Schuh80ff2e12014-03-08 12:06:19 -0800138 {-3.364758, 2.086668, -3.166136, 1.95, {-1.7 * 2.0, -1.544662 * 2.0, -1.7 * 2.0, -1.547616 * 2.0}, {-0.130218 * 2.0, -0.019771 * 2.0, -0.132036 * 2.0, -0.018862 * 2.0}, {0.935842 * 2.0, 1.1 * 2.0, 0.932660 * 2.0, 1.1 * 2.0}},
139 {-2.451642, 3.107504, -2.273474, 2.750, {-1.3 * 2.0, -1.088331 * 2.0, -1.3 * 2.0, -1.088331 * 2.0}, {-0.134536 * 2.0, -0.018408 * 2.0, -0.136127 * 2.0, -0.019771 * 2.0}, {1.447396 * 2.0, 1.6 * 2.0, 1.443987 * 2.0, 1.6 * 2.0}},
Austin Schuh78d55462014-02-23 01:39:30 -0800140 0.020000 * 2.0, // claw_unimportant_epsilon
141 -0.200000 * 2.0, // start_fine_tune_pos
Austin Schuh54e2e6c2014-02-21 22:58:53 -0800142 4.000000,
James Kuszmaul9ead1de2014-02-28 21:24:39 -0800143 },
144 //TODO(james): Get realer numbers for shooter_action.
Austin Schuh809c2562014-03-02 11:50:19 -0800145 {0.07, 0.15}, // shooter_action
Ben Fredrickson890c3fe2014-03-02 00:15:16 +0000146 0.02, // drivetrain done delta
147 5.0 // drivetrain max speed
Brian Silverman756f9ff2014-01-17 23:40:23 -0800148 };
Brian Silverman431500a2013-10-28 19:50:15 -0700149 break;
150 default:
151 LOG(FATAL, "unknown team #%" PRIu16 "\n", team);
152 }
153}
154
Ben Fredricksona9dcfa42014-02-23 02:05:59 +0000155const Values *DoGetValues() {
156 uint16_t team = ::aos::network::GetTeamNumber();
157 LOG(INFO, "creating a Constants for team %" PRIu16 "\n", team);
158 return DoGetValuesForTeam(team);
159}
160
Brian Silverman431500a2013-10-28 19:50:15 -0700161} // namespace
162
163const Values &GetValues() {
164 static ::aos::Once<const Values> once(DoGetValues);
165 return *once.Get();
166}
167
Ben Fredricksona9dcfa42014-02-23 02:05:59 +0000168const Values &GetValuesForTeam(uint16_t team_number) {
169 return *(DoGetValuesForTeam(team_number));
170}
171
Brian Silverman431500a2013-10-28 19:50:15 -0700172} // namespace constants
173} // namespace frc971