blob: 059a3f0433ff48c61b9ab7aec91ad65e72f1388f [file] [log] [blame]
Maxwell Hendersonad312342023-01-10 12:07:47 -08001#ifndef Y2023_CONSTANTS_H_
2#define Y2023_CONSTANTS_H_
3
4#include <array>
5#include <cmath>
6#include <cstdint>
7
8#include "frc971/constants.h"
9#include "frc971/control_loops/pose.h"
10#include "frc971/control_loops/static_zeroing_single_dof_profiled_subsystem.h"
11#include "y2023/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
milind-u37385182023-02-20 15:07:28 -080012#include "y2023/control_loops/superstructure/arm/arm_constants.h"
milind-u051c7002023-02-20 16:28:18 -080013#include "y2023/control_loops/superstructure/roll/roll_plant.h"
14#include "y2023/control_loops/superstructure/wrist/wrist_plant.h"
Maxwell Hendersonad312342023-01-10 12:07:47 -080015
16namespace y2023 {
17namespace constants {
18
19constexpr uint16_t kCompTeamNumber = 971;
20constexpr uint16_t kPracticeTeamNumber = 9971;
21constexpr uint16_t kCodingRobotTeamNumber = 7971;
22
23struct Values {
24 static const int kZeroingSampleSize = 200;
25
milind-u32d29d32023-02-24 21:11:51 -080026 static const int kSuperstructureCANWriterPriority = 35;
Ravago Jones2060ee62023-02-03 18:12:24 -080027 static const int kDrivetrainWriterPriority = 35;
28 static const int kDrivetrainTxPriority = 36;
29 static const int kDrivetrainRxPriority = 36;
30
Maxwell Hendersonad312342023-01-10 12:07:47 -080031 static constexpr double kDrivetrainCyclesPerRevolution() { return 512.0; }
32 static constexpr double kDrivetrainEncoderCountsPerRevolution() {
33 return kDrivetrainCyclesPerRevolution() * 4;
34 }
35 static constexpr double kDrivetrainEncoderRatio() { return 1.0; }
36 static constexpr double kMaxDrivetrainEncoderPulsesPerSecond() {
37 return control_loops::drivetrain::kFreeSpeed / (2.0 * M_PI) *
38 control_loops::drivetrain::kHighOutputRatio /
39 constants::Values::kDrivetrainEncoderRatio() *
40 kDrivetrainEncoderCountsPerRevolution();
41 }
42
Ravago Jones2060ee62023-02-03 18:12:24 -080043 static constexpr double kDrivetrainSupplyCurrentLimit() { return 35.0; }
Austin Schuhe70cdeb2023-02-23 21:45:00 -080044 static constexpr double kDrivetrainStatorCurrentLimit() { return 60.0; }
Ravago Jones2060ee62023-02-03 18:12:24 -080045
Maxwell Hendersonad312342023-01-10 12:07:47 -080046 static double DrivetrainEncoderToMeters(int32_t in) {
47 return ((static_cast<double>(in) /
48 kDrivetrainEncoderCountsPerRevolution()) *
49 (2.0 * M_PI)) *
50 kDrivetrainEncoderRatio() * control_loops::drivetrain::kWheelRadius;
51 }
52
Ravago Jones2060ee62023-02-03 18:12:24 -080053 static double DrivetrainCANEncoderToMeters(double rotations) {
54 return (rotations * (2.0 * M_PI)) *
55 control_loops::drivetrain::kHighOutputRatio *
56 control_loops::drivetrain::kWheelRadius;
57 }
milind-u37385182023-02-20 15:07:28 -080058 static constexpr double kProximalEncoderCountsPerRevolution() {
59 return 4096.0;
60 }
61 static constexpr double kProximalEncoderRatio() { return (15.0 / 95.0); }
62 static constexpr double kMaxProximalEncoderPulsesPerSecond() {
63 return control_loops::superstructure::arm::kArmConstants.free_speed /
milind-u0a7d28d2023-02-20 17:44:37 -080064 (2.0 * M_PI) / control_loops::superstructure::arm::kArmConstants.g0 /
milind-u37385182023-02-20 15:07:28 -080065 kProximalEncoderRatio() * kProximalEncoderCountsPerRevolution();
66 }
67 static constexpr double kProximalPotRatio() {
Austin Schuh7dcc49b2023-02-21 17:35:10 -080068 return (36.0 / 24.0) * (15.0 / 95.0);
milind-u37385182023-02-20 15:07:28 -080069 }
70
milind-u051c7002023-02-20 16:28:18 -080071 static constexpr double kProximalPotRadiansPerVolt() {
72 return kProximalPotRatio() * (10.0 /*turns*/ / 5.0 /*volts*/) *
73 (2 * M_PI /*radians*/);
74 }
75
milind-u37385182023-02-20 15:07:28 -080076 static constexpr double kDistalEncoderCountsPerRevolution() { return 4096.0; }
Austin Schuhebf76ee2023-02-24 20:34:33 -080077 static constexpr double kDistalEncoderRatio() { return (15.0 / 96.0); }
milind-u37385182023-02-20 15:07:28 -080078 static constexpr double kMaxDistalEncoderPulsesPerSecond() {
79 return control_loops::superstructure::arm::kArmConstants.free_speed /
milind-u0a7d28d2023-02-20 17:44:37 -080080 (2.0 * M_PI) / control_loops::superstructure::arm::kArmConstants.g1 /
81 kDistalEncoderRatio() * kProximalEncoderCountsPerRevolution();
milind-u37385182023-02-20 15:07:28 -080082 }
83 static constexpr double kDistalPotRatio() {
Austin Schuhebf76ee2023-02-24 20:34:33 -080084 return (36.0 / 24.0) * (15.0 / 96.0);
milind-u37385182023-02-20 15:07:28 -080085 }
Ravago Jones2060ee62023-02-03 18:12:24 -080086
milind-u051c7002023-02-20 16:28:18 -080087 static constexpr double kDistalPotRadiansPerVolt() {
88 return kDistalPotRatio() * (10.0 /*turns*/ / 5.0 /*volts*/) *
89 (2 * M_PI /*radians*/);
90 }
91
92 // Roll joint
93 static constexpr double kRollJointEncoderCountsPerRevolution() {
94 return 4096.0;
95 }
96
97 static constexpr double kRollJointEncoderRatio() { return (18.0 / 48.0); }
98
99 static constexpr double kRollJointPotRatio() { return (18.0 / 48.0); }
100
101 static constexpr double kRollJointPotRadiansPerVolt() {
102 return kRollJointPotRatio() * (3.0 /*turns*/ / 5.0 /*volts*/) *
103 (2 * M_PI /*radians*/);
104 }
105
106 static constexpr double kMaxRollJointEncoderPulsesPerSecond() {
107 return control_loops::superstructure::roll::kFreeSpeed / (2.0 * M_PI) *
108 control_loops::superstructure::roll::kOutputRatio /
109 kRollJointEncoderRatio() * kRollJointEncoderCountsPerRevolution();
110 }
111
112 static constexpr ::frc971::constants::Range kRollJointRange() {
113 return ::frc971::constants::Range{
114 -1.05, // Back Hard
115 1.44, // Front Hard
116 -0.89, // Back Soft
117 1.26 // Front Soft
118 };
119 }
120
121 // Wrist
122 static constexpr double kWristEncoderCountsPerRevolution() { return 4096.0; }
123
124 static constexpr double kWristEncoderRatio() {
125 return (24.0 / 36.0) * (36.0 / 60.0);
126 }
127
128 static constexpr double kMaxWristEncoderPulsesPerSecond() {
129 return control_loops::superstructure::wrist::kFreeSpeed / (2.0 * M_PI) *
130 control_loops::superstructure::wrist::kOutputRatio /
131 kWristEncoderRatio() * kWristEncoderCountsPerRevolution();
132 }
133
134 static constexpr ::frc971::constants::Range kWristRange() {
135 return ::frc971::constants::Range{
Austin Schuh6dc925b2023-02-24 16:23:32 -0800136 .lower_hard = -0.10, // Back Hard
137 .upper_hard = 2.30, // Front Hard
138 .lower = 0.0, // Back Soft
Austin Schuh35a7f622023-02-25 19:00:20 -0800139 .upper = 2.2, // Front Soft
milind-u051c7002023-02-20 16:28:18 -0800140 };
141 }
142
milind-u18934eb2023-02-20 16:28:58 -0800143 // Rollers
144 static constexpr double kRollerSupplyCurrentLimit() { return 30.0; }
Austin Schuh23a90022023-02-24 22:13:39 -0800145 static constexpr double kRollerStatorCurrentLimit() { return 100.0; }
Maxwell Henderson589cf272023-02-22 15:56:40 -0800146
147 // Game object is fed into end effector for at least this time
148 static constexpr std::chrono::milliseconds kExtraIntakingTime() {
Maxwell Henderson8ca44562023-02-23 13:11:51 -0800149 return std::chrono::seconds(2);
Maxwell Henderson589cf272023-02-22 15:56:40 -0800150 }
151
152 // Game object is spit from end effector for at least this time
153 static constexpr std::chrono::milliseconds kExtraSpittingTime() {
Maxwell Henderson8ca44562023-02-23 13:11:51 -0800154 return std::chrono::seconds(2);
Maxwell Henderson589cf272023-02-22 15:56:40 -0800155 }
milind-u18934eb2023-02-20 16:28:58 -0800156
Maxwell Hendersonad312342023-01-10 12:07:47 -0800157 struct PotConstants {
158 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
159 ::frc971::zeroing::RelativeEncoderZeroingEstimator>
160 subsystem_params;
161 double potentiometer_offset;
162 };
163
164 struct PotAndAbsEncoderConstants {
165 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
166 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator>
167 subsystem_params;
168 double potentiometer_offset;
169 };
milind-u37385182023-02-20 15:07:28 -0800170
Maxwell Henderson8ca44562023-02-23 13:11:51 -0800171 struct AbsEncoderConstants {
172 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
173 ::frc971::zeroing::AbsoluteEncoderZeroingEstimator>
174 subsystem_params;
175 };
176
milind-u37385182023-02-20 15:07:28 -0800177 struct ArmJointConstants {
178 ::frc971::constants::PotAndAbsoluteEncoderZeroingConstants zeroing;
179 double potentiometer_offset;
180 };
181
182 ArmJointConstants arm_proximal;
183 ArmJointConstants arm_distal;
milind-u18a901d2023-02-17 21:51:55 -0800184 ArmJointConstants roll_joint;
milind-u051c7002023-02-20 16:28:18 -0800185
Maxwell Henderson8ca44562023-02-23 13:11:51 -0800186 AbsEncoderConstants wrist;
Maxwell Hendersonad312342023-01-10 12:07:47 -0800187};
188
189// Creates and returns a Values instance for the constants.
190// Should be called before realtime because this allocates memory.
191// Only the first call to either of these will be used.
192Values MakeValues(uint16_t team);
193
194// Calls MakeValues with aos::network::GetTeamNumber()
195Values MakeValues();
196
197} // namespace constants
198} // namespace y2023
199
200#endif // Y2023_CONSTANTS_H_