FRC Paradigm Shift #1259
Documentation for the 2021 Robot
Constants.h
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2019 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <frc/geometry/Translation2d.h>
11 #include <frc/kinematics/SwerveDriveKinematics.h>
12 #include <frc/trajectory/TrapezoidProfile.h>
13 #include <units/time.h>
14 #include <units/velocity.h>
15 #include <units/acceleration.h>
16 #include <wpi/math>
17 
18 #include <ctre/phoenix/CANifier.h>
19 
20 using namespace ctre::phoenix;
21 using namespace units;
22 
24 #define DualJoysticks
25 
26 namespace DriveConstants
27 {
28  constexpr int kNumSwerveModules = 4;
29 
31  constexpr meter_t kTrackWidth = 23.5_in;
33  constexpr meter_t kWheelBase = 23.5_in;
34 
36  constexpr auto kDriveSpeed = meters_per_second_t(3.5);
37  constexpr auto kDriveAngularSpeed = radians_per_second_t(wpi::math::pi * 2.0);
38 
42  constexpr int kCanifierID = 0;
43 
44  constexpr int kFrontLeftDriveMotorPort = 1;
45  constexpr int kFrontLeftTurningMotorPort = 2;
46 
47  constexpr int kFrontRightDriveMotorPort = 3;
48  constexpr int kFrontRightTurningMotorPort = 4;
49 
50  constexpr int kRearRightDriveMotorPort = 5;
51  constexpr int kRearRightTurningMotorPort = 6;
52 
53  constexpr int kRearLeftDriveMotorPort = 7;
54  constexpr int kRearLeftTurningMotorPort = 8;
55 
60  constexpr CANifier::PWMChannel kFrontLeftPWM = CANifier::PWMChannel::PWMChannel0;
61  constexpr CANifier::PWMChannel kFrontRightPWM = CANifier::PWMChannel::PWMChannel2;
62  constexpr CANifier::PWMChannel kRearRightPWM = CANifier::PWMChannel::PWMChannel1;
63  constexpr CANifier::PWMChannel kRearLeftPWM = CANifier::PWMChannel::PWMChannel3;
65 
69  constexpr bool kFrontLeftDriveMotorReversed = true;
70  constexpr bool kRearLeftDriveMotorReversed = true;
71  constexpr bool kFrontRightDriveMotorReversed = false;
72  constexpr bool kRearRightDriveMotorReversed = false;
74 
75  constexpr bool kGyroReversed = false;
76 
77  // Process for reentering values: 0 all values out, line up with stick, all gears face inwards
78  // Line up based on side, left or right
79  // Record values, enter below, then redeploy
80  // All gears should face outwards
81 
82  //============================================LEAVE THESE ZEROES COMMENTED OUT!!!
83  // constexpr double kFrontLeftOffset = 0.0;
84  // constexpr double kFrontRightOffset = 0.0;
85  // constexpr double kRearRightOffset = 0.0;
86  // constexpr double kRearLeftOffset = 0.0;
87  //===============================================================================
88  constexpr double kFrontLeftOffset = 2689.0;
89  constexpr double kFrontRightOffset = 205.0;
90  constexpr double kRearRightOffset = 1858.0;
91  constexpr double kRearLeftOffset = 983.0;
92 
93  // Pulse Width per rotation is not equal for all encoders. Some are 0 - 3865, some are 0 - 4096
94  // FL: 4096
95  // FR: 3970
96  // RL: 4096
97  // RR: 3865
98  constexpr double kPulseWidthToZeroOne = 4096.0; // 4096 micro second pulse width is full circle
99  constexpr double kPulseWidthToRadians = 2.0 * wpi::math::pi / kPulseWidthToZeroOne;
100 
104  constexpr double kRotationDriveP = 1;
105  constexpr double kRotationDriveI = 0;
106  constexpr double kRotationDriveIMaxRange = 0;
107  constexpr double kRotationDriveD = 0.025;
109  constexpr double kRotationDriveMaxSpeed = 3.5;
111  constexpr double kRotationDriveDirectionLimit = 3;
113  constexpr double kRotationDriveTolerance = 0.07;
115 }
116 
118 {
119  constexpr int kEncoderCPR = 2048;
120 
121  constexpr int kEncoderTicksPerSec = 10;
122  constexpr double kWheelDiameterMeters = .1016;
123 
124  constexpr double kDriveGearRatio = 8.16;
125  constexpr double kTurnMotorRevsPerWheelRev = 12.8;
128  constexpr double kDriveEncoderMetersPerSec = kEncoderTicksPerSec / static_cast<double>(kEncoderCPR) / kDriveGearRatio * (kWheelDiameterMeters * wpi::math::pi);
129 
130  constexpr double kTurnEncoderCPR = 4096.0 / kTurnMotorRevsPerWheelRev; // Mag encoder relative output to SparkMax
131 
132  constexpr double kP_ModuleTurningController = 1.1;
133 
134  constexpr double kD_ModuleTurningController = 0.03;
135  constexpr double kPModuleDriveController = 0.001;
136 
137  constexpr uint kMotorCurrentLimit = 30;
138 
141  constexpr bool kTurnAdjust = false;
142  constexpr double kTurnP = 0.75;
143  constexpr double kTurnI = 0.0;
144  constexpr double kTurnD = 0.0;
145  constexpr double kTurnIA = 0.0;
146  constexpr double kTurnIZ = 0.0;
148 
151  constexpr bool kDriveAdjust = false;
152  constexpr double kDriveP = 0.1;
153  constexpr double kDriveI = 0;
154  constexpr double kDriveD = 0;
155  constexpr double kDriveFF = 0.047619;
157 }
158 
159 namespace AutoConstants
160 {
161  using radians_per_second_squared_t = compound_unit<radians, inverse<squared<second>>>;
162 
163  constexpr auto kMaxSpeed = meters_per_second_t(3.75);
164  constexpr auto kMaxAcceleration = meters_per_second_squared_t(4.5);
165  constexpr auto kMaxAngularSpeed = radians_per_second_t(wpi::math::pi * 6.0);
166  constexpr auto kMaxAngularAcceleration = unit_t<radians_per_second_squared_t>(wpi::math::pi * 6.0);
167 
168  constexpr double kPXController = 7.0;
169  constexpr double kDXController = 0.7;
170  constexpr double kPYController = 7.0;
171  constexpr double kDYController = 0.7;
172  constexpr double kPThetaController = 10.0;
173  constexpr double kDThetaController = 0.9;
174 
175  extern const frc::TrapezoidProfile<radians>::Constraints kThetaControllerConstraints;
176 } // namespace AutoConstants
177 
178 namespace OIConstants
179 {
180  constexpr double kDeadzoneX = 0.015;
181  constexpr double kDeadzoneY = 0.015;
182  constexpr double kDeadzoneXY = 0.08;
183  constexpr double kDeadzoneRot = 0.10;
184  constexpr double kDeadzoneAbsRot = 0.50;
185 
186  constexpr int kPrimaryControllerPort = 0;
187 #ifdef DualJoysticks
188  constexpr int kSecondaryControllerPort = 1;
189 #else
190  constexpr int kSecondaryControllerPort = 0;
191 #endif
192 }
193 
194 // Vision Subsystem Constants
196 {
197  // 6/30/21
198  // Limelight X Offset: -0.04
199  // Mounting angle of the limelight, in degrees
200  constexpr double kMountingAngle = 25.0;
201  // Permanent X adjustment -0.05
202  // Mounting height of the limelight from the ground, in inches
203  constexpr double kMountingHeight = 22;
204  // Target center height, in inches
205  // 6/30/21 Changed: Target bottom now instead for consistent tracking in worse conditions
206  constexpr double kTargetHeight = 81.25; //98.25;
207 
208  constexpr double kMinTargetDistance = 70;
209  constexpr double kMaxTargetDistance = 380;
210 
211  constexpr double kMinHoneDistance = 130;
212  constexpr double kMaxHoneDistance = 260;
213 }
constexpr bool kDriveAdjust
Definition: Constants.h:151
constexpr int kCanifierID
CANifier CAN ID (for absolute encoder PWM inputs)
Definition: Constants.h:42
constexpr bool kTurnAdjust
Definition: Constants.h:141
constexpr double kWheelDiameterMeters
4"
Definition: Constants.h:122
constexpr double kFrontRightOffset
Definition: Constants.h:89
constexpr int kEncoderCPR
Definition: Constants.h:119
constexpr double kMinTargetDistance
Definition: Constants.h:208
constexpr double kTurnP
Definition: Constants.h:142
constexpr double kMountingAngle
Definition: Constants.h:200
constexpr double kDThetaController
Definition: Constants.h:173
constexpr double kDriveGearRatio
MK3 swerve modules w/NEOs 12.1 ft/sec w/Falcon 13.6 ft/sec.
Definition: Constants.h:124
constexpr double kMinHoneDistance
Definition: Constants.h:211
constexpr double kMaxTargetDistance
Definition: Constants.h:209
constexpr double kRotationDriveMaxSpeed
Max speed for control.
Definition: Constants.h:109
constexpr double kRotationDriveI
Definition: Constants.h:105
constexpr uint kMotorCurrentLimit
Definition: Constants.h:137
constexpr int kEncoderTicksPerSec
TalonFX::GetSelectedSensorVelocity() returns ticks/100ms = 10 ticks/sec.
Definition: Constants.h:121
constexpr double kTurnIZ
Definition: Constants.h:146
constexpr double kRotationDriveD
Definition: Constants.h:107
constexpr CANifier::PWMChannel kFrontRightPWM
Definition: Constants.h:61
constexpr int kRearRightDriveMotorPort
Rear Right Drive CAN ID (TalonFX)
Definition: Constants.h:50
constexpr double kDriveP
Definition: Constants.h:152
constexpr auto kMaxAngularAcceleration
Definition: Constants.h:166
constexpr meter_t kTrackWidth
Distance between centers of left and right wheels on robot.
Definition: Constants.h:31
constexpr double kDeadzoneXY
Definition: Constants.h:182
constexpr double kDriveI
Definition: Constants.h:153
constexpr double kPYController
Definition: Constants.h:170
constexpr double kP_ModuleTurningController
Definition: Constants.h:132
constexpr int kFrontLeftDriveMotorPort
Front Left Drive CAN ID (TalonFX)
Definition: Constants.h:44
constexpr int kNumSwerveModules
Definition: Constants.h:28
compound_unit< radians, inverse< squared< second >>> radians_per_second_squared_t
Definition: Constants.h:161
constexpr double kDeadzoneY
Definition: Constants.h:181
constexpr int kSecondaryControllerPort
Definition: Constants.h:188
constexpr int kPrimaryControllerPort
Definition: Constants.h:186
constexpr double kTurnEncoderCPR
Definition: Constants.h:130
constexpr double kRearRightOffset
Definition: Constants.h:90
const frc::TrapezoidProfile< units::radians >::Constraints kThetaControllerConstraints
Definition: Constants.cpp:13
constexpr double kRotationDriveTolerance
Tolerance for turning.
Definition: Constants.h:113
constexpr double kRotationDriveDirectionLimit
Speeds higher than value will prevent robot from changing directions for a turn.
Definition: Constants.h:111
constexpr double kDeadzoneX
Definition: Constants.h:180
constexpr auto kMaxAcceleration
Definition: Constants.h:164
constexpr double kPThetaController
Definition: Constants.h:172
constexpr int kFrontRightTurningMotorPort
Front Right Turn CAN ID (SparkMAX)
Definition: Constants.h:48
constexpr double kDeadzoneAbsRot
Definition: Constants.h:184
constexpr int kFrontRightDriveMotorPort
Front Right Drive CAN ID (TalonFX)
Definition: Constants.h:47
constexpr double kDriveFF
Definition: Constants.h:155
constexpr double kD_ModuleTurningController
Definition: Constants.h:134
constexpr double kTargetHeight
Definition: Constants.h:206
constexpr auto kMaxSpeed
Definition: Constants.h:163
constexpr bool kGyroReversed
Definition: Constants.h:75
constexpr double kDXController
Definition: Constants.h:169
constexpr int kRearLeftDriveMotorPort
Rear Left Drive CAN ID (TalonFX)
Definition: Constants.h:53
constexpr CANifier::PWMChannel kRearLeftPWM
Definition: Constants.h:63
constexpr double kMountingHeight
Definition: Constants.h:203
constexpr meter_t kWheelBase
Distance between centers of front and back wheels on robot.
Definition: Constants.h:33
constexpr double kPulseWidthToZeroOne
Definition: Constants.h:98
constexpr auto kMaxAngularSpeed
Definition: Constants.h:165
constexpr int kFrontLeftTurningMotorPort
Front Left Turn CAN ID (SparkMAX)
Definition: Constants.h:45
constexpr double kRearLeftOffset
Definition: Constants.h:91
constexpr double kTurnI
Definition: Constants.h:143
constexpr double kPulseWidthToRadians
Definition: Constants.h:99
constexpr double kMaxHoneDistance
Definition: Constants.h:212
constexpr double kDeadzoneRot
Definition: Constants.h:183
constexpr double kFrontLeftOffset
Definition: Constants.h:88
constexpr bool kRearRightDriveMotorReversed
Definition: Constants.h:72
constexpr CANifier::PWMChannel kFrontLeftPWM
Definition: Constants.h:60
constexpr int kRearRightTurningMotorPort
Rear Right Turn CAN ID (SparkMAX)
Definition: Constants.h:51
constexpr auto kDriveSpeed
Definition: Constants.h:36
constexpr bool kFrontRightDriveMotorReversed
Definition: Constants.h:71
constexpr bool kRearLeftDriveMotorReversed
Definition: Constants.h:70
constexpr CANifier::PWMChannel kRearRightPWM
Definition: Constants.h:62
constexpr int kRearLeftTurningMotorPort
Definition: Constants.h:54
constexpr double kRotationDriveIMaxRange
Definition: Constants.h:106
constexpr auto kDriveAngularSpeed
Definition: Constants.h:37
constexpr double kPModuleDriveController
Definition: Constants.h:135
constexpr double kPXController
Definition: Constants.h:168
constexpr double kDYController
Definition: Constants.h:171
constexpr double kTurnMotorRevsPerWheelRev
Definition: Constants.h:125
constexpr double kDriveEncoderMetersPerSec
Definition: Constants.h:128
constexpr double kTurnIA
Definition: Constants.h:145
constexpr double kTurnD
Definition: Constants.h:144
constexpr double kDriveD
Definition: Constants.h:154
constexpr double kRotationDriveP
Definition: Constants.h:104
constexpr bool kFrontLeftDriveMotorReversed
Definition: Constants.h:69