blob: c571b16a8df1be69cda3ae4d04fcd5f38f7a788f [file] [log] [blame]
Comran Morshed6c6a0a92016-01-17 12:45:16 +00001#ifndef Y2016_CONSTANTS_H_
2#define Y2016_CONSTANTS_H_
Comran Morshed9a9948c2016-01-16 15:58:04 +00003
4#include <stdint.h>
5
Comran Morshed6c6a0a92016-01-17 12:45:16 +00006#include "frc971/control_loops/state_feedback_loop.h"
Austin Schuh2fc10fa2016-02-08 00:44:34 -08007#include "frc971/shifter_hall_effect.h"
8#include "frc971/constants.h"
Comran Morshed9a9948c2016-01-16 15:58:04 +00009
Comran Morshed6c6a0a92016-01-17 12:45:16 +000010namespace y2016 {
Comran Morshed9a9948c2016-01-16 15:58:04 +000011namespace constants {
12
13using ::frc971::constants::ShifterHallEffect;
Austin Schuh2fc10fa2016-02-08 00:44:34 -080014using ::frc971::constants::ZeroingConstants;
Comran Morshed9a9948c2016-01-16 15:58:04 +000015
16// Has all of the numbers that change for both robots and makes it easy to
17// retrieve the values for the current one.
18
19// Everything is in SI units (volts, radians, meters, seconds, etc).
20// Some of these values are related to the conversion between raw values
21// (encoder counts, voltage, etc) to scaled units (radians, meters, etc).
22
23// This structure contains current values for all of the things that change.
24struct Values {
Comran Morshed225f0b92016-02-10 20:34:27 +000025 // ///// Mutual constants between robots. /////
26 // TODO(constants): Update/check these with what we're using this year.
27 static const int kZeroingSampleSize = 200;
28
29 // The ratio from the encoder shaft to the drivetrain wheels.
30 static constexpr double kDrivetrainEncoderRatio =
Austin Schuh9f77fd22016-02-21 02:53:58 -080031 (18.0 / 36.0) /*output reduction*/ * (44.0 / 30.0) /*encoder gears*/;
Comran Morshed225f0b92016-02-10 20:34:27 +000032
Comran Morshed225f0b92016-02-10 20:34:27 +000033 // Ratios for our subsystems.
34 static constexpr double kShooterEncoderRatio = 1.0;
Comran Morshed1b3290d2016-02-14 16:35:51 +000035 static constexpr double kIntakeEncoderRatio =
36 16.0 / 48.0 * 18.0 / 72.0 * 14.0 / 64.0;
37 static constexpr double kShoulderEncoderRatio =
Comran Morshed367d8e52016-03-05 14:45:47 +000038 12.0 / 42.0 * 18.0 / 72.0 * 14.0 / 64.0;
Comran Morshed1b3290d2016-02-14 16:35:51 +000039 static constexpr double kWristEncoderRatio =
40 16.0 / 48.0 * 18.0 / 64.0 * 14.0 / 54.0;
Comran Morshed225f0b92016-02-10 20:34:27 +000041
Austin Schuh9f77fd22016-02-21 02:53:58 -080042 static constexpr double kIntakePotRatio = 16.0 / 48.0 * 18.0 / 72.0;
Comran Morshed225f0b92016-02-10 20:34:27 +000043 static constexpr double kShoulderPotRatio = 16.0 / 58.0;
44 static constexpr double kWristPotRatio = 16.0 / 48.0;
45
46 // Difference in radians between index pulses.
Comran Morshed1b3290d2016-02-14 16:35:51 +000047 static constexpr double kIntakeEncoderIndexDifference =
48 2.0 * M_PI * kIntakeEncoderRatio;
49 static constexpr double kShoulderEncoderIndexDifference =
50 2.0 * M_PI * kShoulderEncoderRatio;
51 static constexpr double kWristEncoderIndexDifference =
52 2.0 * M_PI * kWristEncoderRatio;
Comran Morshed225f0b92016-02-10 20:34:27 +000053
54 // Subsystem motion ranges, in whatever units that their respective queues say
55 // the use.
Austin Schuh3480e932016-02-21 13:06:51 -080056 static constexpr ::frc971::constants::Range kIntakeRange{
57 // Lower hard stop
58 -0.4,
59 // Upper hard stop
Austin Schuh449966b2016-03-11 21:27:05 -080060 164.2067247 * M_PI / 180.0 + 0.05,
Austin Schuh3480e932016-02-21 13:06:51 -080061 // Lower soft stop
Austin Schuh449966b2016-03-11 21:27:05 -080062 -0.300,
Austin Schuh3480e932016-02-21 13:06:51 -080063 // Uppper soft stop
Austin Schuha3240bd2016-03-13 15:31:01 -070064 164.2067247 * M_PI / 180.0};
Austin Schuh3480e932016-02-21 13:06:51 -080065 static constexpr ::frc971::constants::Range kShoulderRange{// Lower hard stop
Austin Schuh583e00e2016-03-19 21:41:46 -070066 -0.100,
Austin Schuh3480e932016-02-21 13:06:51 -080067 // Upper hard stop
68 2.8,
69 // Lower soft stop
Austin Schuh449966b2016-03-11 21:27:05 -080070 -0.010,
Austin Schuh3480e932016-02-21 13:06:51 -080071 // Uppper soft stop
72 2.0};
73 static constexpr ::frc971::constants::Range kWristRange{// Lower hard stop
Austin Schuha3240bd2016-03-13 15:31:01 -070074 -2.9,
Austin Schuh3480e932016-02-21 13:06:51 -080075 // Upper hard stop
Austin Schuha3240bd2016-03-13 15:31:01 -070076 2.9,
Austin Schuh3480e932016-02-21 13:06:51 -080077 // Lower soft stop
Austin Schuha3240bd2016-03-13 15:31:01 -070078 -2.6,
Austin Schuh3480e932016-02-21 13:06:51 -080079 // Uppper soft stop
Austin Schuha3240bd2016-03-13 15:31:01 -070080 2.6};
Comran Morshed225f0b92016-02-10 20:34:27 +000081
82 // ///// Dynamic constants. /////
83 double drivetrain_max_speed;
84
Austin Schuh2fc10fa2016-02-08 00:44:34 -080085 struct Intake {
Comran Morshed225f0b92016-02-10 20:34:27 +000086 double pot_offset;
Austin Schuh2fc10fa2016-02-08 00:44:34 -080087 ZeroingConstants zeroing;
88 };
89 Intake intake;
90
91 struct Shoulder {
Comran Morshed225f0b92016-02-10 20:34:27 +000092 double pot_offset;
Austin Schuh2fc10fa2016-02-08 00:44:34 -080093 ZeroingConstants zeroing;
94 };
95 Shoulder shoulder;
96
97 struct Wrist {
Comran Morshed225f0b92016-02-10 20:34:27 +000098 double pot_offset;
Austin Schuh2fc10fa2016-02-08 00:44:34 -080099 ZeroingConstants zeroing;
100 };
101 Wrist wrist;
Brian Silverman2ccf8c52016-03-15 00:22:26 -0400102
103 const char *vision_name;
Comran Morshed9a9948c2016-01-16 15:58:04 +0000104};
105
106// Creates (once) a Values instance for ::aos::network::GetTeamNumber() and
107// returns a reference to it.
108const Values &GetValues();
109
110// Creates Values instances for each team number it is called with and returns
111// them.
112const Values &GetValuesForTeam(uint16_t team_number);
113
114} // namespace constants
Comran Morshed6c6a0a92016-01-17 12:45:16 +0000115} // namespace y2016
Comran Morshed9a9948c2016-01-16 15:58:04 +0000116
Comran Morshed6c6a0a92016-01-17 12:45:16 +0000117#endif // Y2016_CONSTANTS_H_