blob: 5e1de7bbaf8d0074d4d2288169bdcf36cc687bf5 [file] [log] [blame]
Tyler Chatow37ecdcd2019-01-26 20:18:42 -08001#ifndef Y2019_CONSTANTS_H_
2#define Y2019_CONSTANTS_H_
3
Tyler Chatow37ecdcd2019-01-26 20:18:42 -08004#include <math.h>
Sabina Davis1b84afa2019-02-09 01:20:21 -08005#include <stdint.h>
Tyler Chatow37ecdcd2019-01-26 20:18:42 -08006
7#include "frc971/constants.h"
Sabina Davis7be49f32019-02-02 00:30:19 -08008#include "y2019/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
Alex Perry5fb5ff22019-02-09 21:53:17 -08009#include "y2019/control_loops/superstructure/intake/intake_plant.h"
10#include "y2019/control_loops/superstructure/elevator/elevator_plant.h"
11#include "y2019/control_loops/superstructure/stilts/stilts_plant.h"
12#include "y2019/control_loops/superstructure/wrist/wrist_plant.h"
Tyler Chatow37ecdcd2019-01-26 20:18:42 -080013
14namespace y2019 {
15namespace constants {
16
17// Has all of our "constants", except the ones that come from other places. The
18// ones which change between robots are put together with a workable way to
19// retrieve the values for the current robot.
20
21// Everything is in SI units (volts, radians, meters, seconds, etc).
22// Some of these values are related to the conversion between raw values
23// (encoder counts, voltage, etc) to scaled units (radians, meters, etc).
24//
25// All ratios are from the encoder shaft to the output units.
26
27struct Values {
28 static const int kZeroingSampleSize = 200;
Sabina Davis7be49f32019-02-02 00:30:19 -080029
30 static constexpr double kDrivetrainCyclesPerRevolution() { return 512.0; }
31 static constexpr double kDrivetrainEncoderCountsPerRevolution() {
32 return kDrivetrainCyclesPerRevolution() * 4;
33 }
Alex Perry5fb5ff22019-02-09 21:53:17 -080034 static constexpr double kDrivetrainEncoderRatio() { return (24.0 / 52.0); }
Sabina Davis7be49f32019-02-02 00:30:19 -080035 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 }
Alex Perry5fb5ff22019-02-09 21:53:17 -080041
42 // Elevator
43 static constexpr double kElevatorEncoderCountsPerRevolution() {
44 return 4096.0;
45 }
46
47 static constexpr double kElevatorEncoderRatio() {
48 return (1.0) * control_loops::superstructure::elevator::kRadius;
49 }
50
51 static constexpr double kMaxElevatorEncoderPulsesPerSecond() {
52 return control_loops::superstructure::elevator::kFreeSpeed *
53 control_loops::superstructure::elevator::kOutputRatio /
54 kElevatorEncoderRatio() / (2.0 * M_PI) *
55 kElevatorEncoderCountsPerRevolution();
56 }
57
58 static constexpr double kElevatorPotRatio() {
59 return (1.0) * control_loops::superstructure::elevator::kRadius;
60 }
61
62 // Intake
63 static constexpr double kIntakeEncoderCountsPerRevolution() { return 4096.0; }
64
65 static constexpr double kIntakeEncoderRatio() { return (18.0 / 38.0); }
66
67 static constexpr double kMaxIntakeEncoderPulsesPerSecond() {
68 return control_loops::superstructure::intake::kFreeSpeed *
69 control_loops::superstructure::intake::kOutputRatio /
70 kIntakeEncoderRatio() / (2.0 * M_PI) *
71 kIntakeEncoderCountsPerRevolution();
72 }
73
74 // Wrist
75 static constexpr double kWristEncoderCountsPerRevolution() { return 4096.0; }
76
77 static constexpr double kWristEncoderRatio() {
78 return (20.0 / 100.0) * (24.0 / 84.0);
79 }
80
81 static constexpr double kMaxWristEncoderPulsesPerSecond() {
82 return control_loops::superstructure::wrist::kFreeSpeed *
83 control_loops::superstructure::wrist::kOutputRatio /
84 kWristEncoderRatio() / (2.0 * M_PI) *
85 kWristEncoderCountsPerRevolution();
86 }
87
88 static constexpr double kWristPotRatio() { return (24.0) / (84.0); }
89
90 // Stilts
91 static constexpr double kStiltsEncoderCountsPerRevolution() { return 4096.0; }
92
93 static constexpr double kStiltsEncoderRatio() {
94 return (1.0 /* Gear ratio */) *
95 control_loops::superstructure::stilts::kRadius;
96 }
97
98 static constexpr double kMaxStiltsEncoderPulsesPerSecond() {
99 return control_loops::superstructure::stilts::kFreeSpeed *
100 control_loops::superstructure::stilts::kOutputRatio /
101 kStiltsEncoderRatio() / (2.0 * M_PI) *
102 kStiltsEncoderCountsPerRevolution();
103 }
104
105 static constexpr double kStiltsPotRatio() {
106 return (1.0 /* Gear ratio */) *
107 control_loops::superstructure::stilts::kRadius;
108 }
109
110 struct PotAndAbsConstants {
111 ::frc971::constants::PotAndAbsoluteEncoderZeroingConstants zeroing;
112 double potentiometer_offset;
113 };
114 PotAndAbsConstants elevator;
115 PotAndAbsConstants wrist;
116 PotAndAbsConstants stilts;
117
118 struct Intake {
119 ::frc971::constants::AbsoluteEncoderZeroingConstants zeroing;
120 };
121 Intake intake;
Tyler Chatow37ecdcd2019-01-26 20:18:42 -0800122};
123
124// Creates (once) a Values instance for ::aos::network::GetTeamNumber() and
125// returns a reference to it.
126const Values &GetValues();
127
128// Creates Values instances for each team number it is called with and returns
129// them.
130const Values &GetValuesForTeam(uint16_t team_number);
131
132} // namespace constants
133} // namespace y2019
134
135#endif // Y2019_CONSTANTS_H_