blob: 3c9c4be70cb52940c40b6e41fa854efe5bb94dc2 [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
Ravago Jones2060ee62023-02-03 18:12:24 -080026 static const int kDrivetrainWriterPriority = 35;
27 static const int kDrivetrainTxPriority = 36;
28 static const int kDrivetrainRxPriority = 36;
29
Maxwell Hendersonad312342023-01-10 12:07:47 -080030 static constexpr double kDrivetrainCyclesPerRevolution() { return 512.0; }
31 static constexpr double kDrivetrainEncoderCountsPerRevolution() {
32 return kDrivetrainCyclesPerRevolution() * 4;
33 }
34 static constexpr double kDrivetrainEncoderRatio() { return 1.0; }
35 static constexpr double kMaxDrivetrainEncoderPulsesPerSecond() {
36 return control_loops::drivetrain::kFreeSpeed / (2.0 * M_PI) *
37 control_loops::drivetrain::kHighOutputRatio /
38 constants::Values::kDrivetrainEncoderRatio() *
39 kDrivetrainEncoderCountsPerRevolution();
40 }
41
Ravago Jones2060ee62023-02-03 18:12:24 -080042 static constexpr double kDrivetrainSupplyCurrentLimit() { return 35.0; }
43 static constexpr double kDrivetrainStatorCurrentLimit() { return 40.0; }
44
Maxwell Hendersonad312342023-01-10 12:07:47 -080045 static double DrivetrainEncoderToMeters(int32_t in) {
46 return ((static_cast<double>(in) /
47 kDrivetrainEncoderCountsPerRevolution()) *
48 (2.0 * M_PI)) *
49 kDrivetrainEncoderRatio() * control_loops::drivetrain::kWheelRadius;
50 }
51
Ravago Jones2060ee62023-02-03 18:12:24 -080052 static double DrivetrainCANEncoderToMeters(double rotations) {
53 return (rotations * (2.0 * M_PI)) *
54 control_loops::drivetrain::kHighOutputRatio *
55 control_loops::drivetrain::kWheelRadius;
56 }
milind-u37385182023-02-20 15:07:28 -080057 static constexpr double kProximalEncoderCountsPerRevolution() {
58 return 4096.0;
59 }
60 static constexpr double kProximalEncoderRatio() { return (15.0 / 95.0); }
61 static constexpr double kMaxProximalEncoderPulsesPerSecond() {
62 return control_loops::superstructure::arm::kArmConstants.free_speed /
milind-u0a7d28d2023-02-20 17:44:37 -080063 (2.0 * M_PI) / control_loops::superstructure::arm::kArmConstants.g0 /
milind-u37385182023-02-20 15:07:28 -080064 kProximalEncoderRatio() * kProximalEncoderCountsPerRevolution();
65 }
66 static constexpr double kProximalPotRatio() {
Austin Schuh7dcc49b2023-02-21 17:35:10 -080067 return (36.0 / 24.0) * (15.0 / 95.0);
milind-u37385182023-02-20 15:07:28 -080068 }
69
milind-u051c7002023-02-20 16:28:18 -080070 static constexpr double kProximalPotRadiansPerVolt() {
71 return kProximalPotRatio() * (10.0 /*turns*/ / 5.0 /*volts*/) *
72 (2 * M_PI /*radians*/);
73 }
74
milind-u37385182023-02-20 15:07:28 -080075 static constexpr double kDistalEncoderCountsPerRevolution() { return 4096.0; }
76 static constexpr double kDistalEncoderRatio() { return (15.0 / 95.0); }
77 static constexpr double kMaxDistalEncoderPulsesPerSecond() {
78 return control_loops::superstructure::arm::kArmConstants.free_speed /
milind-u0a7d28d2023-02-20 17:44:37 -080079 (2.0 * M_PI) / control_loops::superstructure::arm::kArmConstants.g1 /
80 kDistalEncoderRatio() * kProximalEncoderCountsPerRevolution();
milind-u37385182023-02-20 15:07:28 -080081 }
82 static constexpr double kDistalPotRatio() {
Austin Schuh7dcc49b2023-02-21 17:35:10 -080083 return (36.0 / 24.0) * (15.0 / 95.0);
milind-u37385182023-02-20 15:07:28 -080084 }
Ravago Jones2060ee62023-02-03 18:12:24 -080085
milind-u051c7002023-02-20 16:28:18 -080086 static constexpr double kDistalPotRadiansPerVolt() {
87 return kDistalPotRatio() * (10.0 /*turns*/ / 5.0 /*volts*/) *
88 (2 * M_PI /*radians*/);
89 }
90
91 // Roll joint
92 static constexpr double kRollJointEncoderCountsPerRevolution() {
93 return 4096.0;
94 }
95
96 static constexpr double kRollJointEncoderRatio() { return (18.0 / 48.0); }
97
98 static constexpr double kRollJointPotRatio() { return (18.0 / 48.0); }
99
100 static constexpr double kRollJointPotRadiansPerVolt() {
101 return kRollJointPotRatio() * (3.0 /*turns*/ / 5.0 /*volts*/) *
102 (2 * M_PI /*radians*/);
103 }
104
105 static constexpr double kMaxRollJointEncoderPulsesPerSecond() {
106 return control_loops::superstructure::roll::kFreeSpeed / (2.0 * M_PI) *
107 control_loops::superstructure::roll::kOutputRatio /
108 kRollJointEncoderRatio() * kRollJointEncoderCountsPerRevolution();
109 }
110
111 static constexpr ::frc971::constants::Range kRollJointRange() {
112 return ::frc971::constants::Range{
113 -1.05, // Back Hard
114 1.44, // Front Hard
115 -0.89, // Back Soft
116 1.26 // Front Soft
117 };
118 }
119
120 // Wrist
121 static constexpr double kWristEncoderCountsPerRevolution() { return 4096.0; }
122
123 static constexpr double kWristEncoderRatio() {
124 return (24.0 / 36.0) * (36.0 / 60.0);
125 }
126
127 static constexpr double kMaxWristEncoderPulsesPerSecond() {
128 return control_loops::superstructure::wrist::kFreeSpeed / (2.0 * M_PI) *
129 control_loops::superstructure::wrist::kOutputRatio /
130 kWristEncoderRatio() * kWristEncoderCountsPerRevolution();
131 }
132
133 static constexpr ::frc971::constants::Range kWristRange() {
134 return ::frc971::constants::Range{
135 -1.05, // Back Hard
136 1.44, // Front Hard
137 -0.89, // Back Soft
138 1.26 // Front Soft
139 };
140 }
141
milind-u18934eb2023-02-20 16:28:58 -0800142 // Rollers
143 static constexpr double kRollerSupplyCurrentLimit() { return 30.0; }
144 static constexpr double kRollerStatorCurrentLimit() { return 60.0; }
Maxwell Henderson589cf272023-02-22 15:56:40 -0800145 static constexpr double kRollerVoltage() { return 12.0; }
146
147 // Game object is fed into end effector for at least this time
148 static constexpr std::chrono::milliseconds kExtraIntakingTime() {
149 return std::chrono::seconds(2);
150 }
151
152 // Game object is spit from end effector for at least this time
153 static constexpr std::chrono::milliseconds kExtraSpittingTime() {
154 return std::chrono::seconds(2);
155 }
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
171 struct ArmJointConstants {
172 ::frc971::constants::PotAndAbsoluteEncoderZeroingConstants zeroing;
173 double potentiometer_offset;
174 };
175
176 ArmJointConstants arm_proximal;
177 ArmJointConstants arm_distal;
milind-u18a901d2023-02-17 21:51:55 -0800178 ArmJointConstants roll_joint;
milind-u051c7002023-02-20 16:28:18 -0800179
180 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
181 ::frc971::zeroing::AbsoluteEncoderZeroingEstimator>
182 wrist;
Maxwell Hendersonad312342023-01-10 12:07:47 -0800183};
184
185// Creates and returns a Values instance for the constants.
186// Should be called before realtime because this allocates memory.
187// Only the first call to either of these will be used.
188Values MakeValues(uint16_t team);
189
190// Calls MakeValues with aos::network::GetTeamNumber()
191Values MakeValues();
192
193} // namespace constants
194} // namespace y2023
195
196#endif // Y2023_CONSTANTS_H_