blob: 7ec518717cc806b3811dfb3954d6b9cefc35f69e [file] [log] [blame]
Henry Speiser354d2782022-07-22 13:56:48 -07001#include "y2022_bot3/constants.h"
2
3#include <cinttypes>
4#include <map>
5
6#if __has_feature(address_sanitizer)
7#include "sanitizer/lsan_interface.h"
8#endif
9
10#include "absl/base/call_once.h"
Philipp Schrader790cb542023-07-05 21:06:52 -070011#include "glog/logging.h"
12
Henry Speiser354d2782022-07-22 13:56:48 -070013#include "aos/mutex/mutex.h"
14#include "aos/network/team_number.h"
Thiago Monteiroa47ae662022-08-27 16:05:54 -070015#include "y2022_bot3/control_loops/superstructure/climber/integral_climber_plant.h"
16#include "y2022_bot3/control_loops/superstructure/intake/integral_intake_plant.h"
Henry Speiser354d2782022-07-22 13:56:48 -070017
18namespace y2022_bot3 {
19namespace constants {
20
21const int Values::kZeroingSampleSize;
22
23namespace {
24
25const uint16_t kCompTeamNumber = 971;
26const uint16_t kPracticeTeamNumber = 9971;
27const uint16_t kCodingRobotTeamNumber = 7971;
28
29} // namespace
30
31Values MakeValues(uint16_t team) {
32 LOG(INFO) << "creating a Constants for team: " << team;
33
34 Values r;
35
Thiago Monteiroa47ae662022-08-27 16:05:54 -070036 auto *const intake = &r.intake;
37 auto *const climber_left = &r.climber_left;
38 auto *const climber_right = &r.climber_right;
39
40 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
41 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator>
42 intake_params;
43
44 intake_params.zeroing_voltage = 3.0;
45 intake_params.operating_voltage = 12.0;
46 intake_params.zeroing_profile_params = {0.5, 3.0};
47 intake_params.default_profile_params = {6.0, 30.0};
48 intake_params.range = Values::kIntakeRange();
49 intake_params.make_integral_loop =
50 control_loops::superstructure::intake::MakeIntegralIntakeLoop;
51 intake_params.zeroing_constants.average_filter_size =
52 Values::kZeroingSampleSize;
53 intake_params.zeroing_constants.one_revolution_distance =
54 M_PI * 2.0 * constants::Values::kIntakeEncoderRatio();
55 intake_params.zeroing_constants.zeroing_threshold = 0.0005;
56 intake_params.zeroing_constants.moving_buffer_size = 20;
57 intake_params.zeroing_constants.allowable_encoder_error = 0.9;
58 intake_params.zeroing_constants.measured_absolute_position = 0.0;
59
60 intake->subsystem_params = intake_params;
61
62 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
63 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator>
64 climber_params;
65
66 climber_params.zeroing_voltage = 3.0;
67 climber_params.operating_voltage = 12.0;
68 climber_params.zeroing_profile_params = {0.5, 0.1};
69 climber_params.default_profile_params = {5.0, 1.0};
70 climber_params.range = Values::kClimberRange();
71 climber_params.make_integral_loop =
72 control_loops::superstructure::climber::MakeIntegralClimberLoop;
73 climber_params.zeroing_constants.average_filter_size =
74 Values::kZeroingSampleSize;
75 climber_params.zeroing_constants.one_revolution_distance =
76 constants::Values::kClimberEncoderRatio() *
77 constants::Values::kClimberEncoderMetersPerRevolution();
78 climber_params.zeroing_constants.zeroing_threshold = 0.0005;
79 climber_params.zeroing_constants.moving_buffer_size = 20;
80 climber_params.zeroing_constants.allowable_encoder_error = 0.9;
81 climber_params.zeroing_constants.measured_absolute_position = 0.0;
82
83 climber_left->subsystem_params = climber_params;
84 climber_right->subsystem_params = climber_params;
85
Henry Speiser354d2782022-07-22 13:56:48 -070086 switch (team) {
87 // A set of constants for tests.
88 case 1:
Thiago Monteiroa47ae662022-08-27 16:05:54 -070089 intake->potentiometer_offset = 0.0;
90 intake->subsystem_params.zeroing_constants.measured_absolute_position =
91 0.0;
92 climber_left->potentiometer_offset = 0.0;
93 climber_left->subsystem_params.zeroing_constants
94 .measured_absolute_position = 0.0;
95 climber_right->potentiometer_offset = 0.0;
96 climber_right->subsystem_params.zeroing_constants
97 .measured_absolute_position = 0.0;
Henry Speiser354d2782022-07-22 13:56:48 -070098 break;
99
100 case kCompTeamNumber:
Thiago Monteiroa47ae662022-08-27 16:05:54 -0700101 intake->potentiometer_offset = 0.0;
102 intake->subsystem_params.zeroing_constants.measured_absolute_position =
103 0.0;
104 climber_left->potentiometer_offset = 0.0;
105 climber_left->subsystem_params.zeroing_constants
106 .measured_absolute_position = 0.0;
107 climber_right->potentiometer_offset = 0.0;
108 climber_right->subsystem_params.zeroing_constants
109 .measured_absolute_position = 0.0;
Henry Speiser354d2782022-07-22 13:56:48 -0700110 break;
111
112 case kPracticeTeamNumber:
Thiago Monteiroa47ae662022-08-27 16:05:54 -0700113 intake->potentiometer_offset = 0.0;
114 intake->subsystem_params.zeroing_constants.measured_absolute_position =
115 0.0;
116 climber_left->potentiometer_offset = 0.0;
117 climber_left->subsystem_params.zeroing_constants
118 .measured_absolute_position = 0.0;
119 climber_right->potentiometer_offset = 0.0;
120 climber_right->subsystem_params.zeroing_constants
121 .measured_absolute_position = 0.0;
Henry Speiser354d2782022-07-22 13:56:48 -0700122 break;
123
124 case kCodingRobotTeamNumber:
Thiago Monteiroa47ae662022-08-27 16:05:54 -0700125 intake->potentiometer_offset = 0.0;
126 intake->subsystem_params.zeroing_constants.measured_absolute_position =
127 0.0;
128 climber_left->potentiometer_offset = 0.0;
129 climber_left->subsystem_params.zeroing_constants
130 .measured_absolute_position = 0.0;
131 climber_right->potentiometer_offset = 0.0;
132 climber_right->subsystem_params.zeroing_constants
133 .measured_absolute_position = 0.0;
Henry Speiser354d2782022-07-22 13:56:48 -0700134 break;
135
136 default:
137 LOG(FATAL) << "unknown team: " << team;
138 }
139
140 return r;
141}
142
143Values MakeValues() { return MakeValues(aos::network::GetTeamNumber()); }
144
145} // namespace constants
146} // namespace y2022_bot3