blob: 86431ba13cc359355faff1133bafe0bdbe0cc185 [file] [log] [blame]
Brian Silverman431500a2013-10-28 19:50:15 -07001#include "frc971/constants.h"
2
3#include <math.h>
4#include <stdint.h>
5#include <inttypes.h>
6
7#include "aos/common/logging/logging.h"
8#include "aos/common/once.h"
9#include "aos/common/network/team_number.h"
10
Brian Silverman2c590c32013-11-04 18:08:54 -080011#include "frc971/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
12#include "frc971/control_loops/drivetrain/polydrivetrain_clutch_motor_plant.h"
13#include "frc971/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
14#include "frc971/control_loops/drivetrain/drivetrain_clutch_motor_plant.h"
15
Brian Silverman431500a2013-10-28 19:50:15 -070016#ifndef M_PI
17#define M_PI 3.14159265358979323846
18#endif
19
20namespace frc971 {
21namespace constants {
22namespace {
23
24// It has about 0.029043 of gearbox slop.
25// For purposes of moving the end up/down by a certain amount, the wrist is 18
26// inches long.
Brian Silverman1a6590d2013-11-04 14:46:46 -080027const double kCompWristHallEffectStartAngle = 1.27;
Brian Silvermanc0faf612013-11-03 15:53:22 -080028const double kPracticeWristHallEffectStartAngle = 1.182;
Brian Silverman431500a2013-10-28 19:50:15 -070029
30const double kWristHallEffectStopAngle = 100 * M_PI / 180.0;
31
32const double kPracticeWristUpperPhysicalLimit = 1.677562;
33const double kCompWristUpperPhysicalLimit = 1.677562;
34
35const double kPracticeWristLowerPhysicalLimit = -0.746128;
36const double kCompWristLowerPhysicalLimit = -0.746128;
37
38const double kPracticeWristUpperLimit = 1.615385;
39const double kCompWristUpperLimit = 1.615385;
40
41const double kPracticeWristLowerLimit = -0.746128;
42const double kCompWristLowerLimit = -0.746128;
43
44const double kWristZeroingSpeed = 0.125;
45const double kWristZeroingOffSpeed = 0.35;
46
47const int kAngleAdjustHallEffect = 2;
48
49// Angle measured from CAD with the top of the angle adjust at the top of the
50// wire guide is 0.773652098 radians.
51
52const double kCompAngleAdjustHallEffectStartAngle[2] = {0.301170496, 1.5};
53const double kPracticeAngleAdjustHallEffectStartAngle[2] = {0.305172594, 1.5};
54
55const double kAngleAdjustHallEffectStopAngle[2] = {0.1, 1.0};
56
57const double kPracticeAngleAdjustUpperPhysicalLimit = 0.904737;
58const double kCompAngleAdjustUpperPhysicalLimit = 0.904737;
59
60const double kPracticeAngleAdjustLowerPhysicalLimit = 0.270;
61const double kCompAngleAdjustLowerPhysicalLimit = 0.302;
62
63const double kPracticeAngleAdjustUpperLimit = 0.87;
64const double kCompAngleAdjustUpperLimit = 0.87;
65
66const double kPracticeAngleAdjustLowerLimit = 0.31;
67const double kCompAngleAdjustLowerLimit = 0.28;
68
69const double kAngleAdjustZeroingSpeed = -0.2;
70const double kAngleAdjustZeroingOffSpeed = -0.5;
71
72const double kPracticeAngleAdjustDeadband = 0.4;
73const double kCompAngleAdjustDeadband = 0.65;
74
75const int kCompCameraCenter = -2;
76const int kPracticeCameraCenter = -5;
77
Brian Silverman1a6590d2013-11-04 14:46:46 -080078const double kCompDrivetrainEncoderRatio =
79 (15.0 / 50.0) /*output reduction*/ * (36.0 / 24.0) /*encoder gears*/;
80const double kCompLowGearRatio = 14.0 / 60.0 * 15.0 / 50.0;
81const double kCompHighGearRatio = 30.0 / 44.0 * 15.0 / 50.0;
Brian Silverman431500a2013-10-28 19:50:15 -070082
Brian Silverman1a6590d2013-11-04 14:46:46 -080083const double kPracticeDrivetrainEncoderRatio =
84 (17.0 / 50.0) /*output reduction*/ * (64.0 / 24.0) /*encoder gears*/;
85const double kPracticeLowGearRatio = 16.0 / 60.0 * 19.0 / 50.0;
86const double kPracticeHighGearRatio = 28.0 / 48.0 * 19.0 / 50.0;
87
88const ShifterHallEffect kCompLeftDriveShifter{0.8 /*TODO*/, 2.14, 1.2, 1.0};
89const ShifterHallEffect kCompRightDriveShifter{0.865, 2.375, 1.2, 1.0};
Brian Silverman6eb51f12013-11-02 14:39:01 -070090
91const ShifterHallEffect kPracticeLeftDriveShifter{2.082283, 0.834433, 0.60,
92 0.47};
93const ShifterHallEffect kPracticeRightDriveShifter{2.070124, 0.838993, 0.62,
94 0.55};
95
Brian Silverman431500a2013-10-28 19:50:15 -070096const Values *DoGetValues() {
97 uint16_t team = ::aos::network::GetTeamNumber();
98 LOG(INFO, "creating a Constants for team %" PRIu16 "\n", team);
99 switch (team) {
100 case kCompTeamNumber:
101 return new Values{kCompWristHallEffectStartAngle,
102 kWristHallEffectStopAngle,
103 kCompWristUpperLimit,
104 kCompWristLowerLimit,
105 kCompWristUpperPhysicalLimit,
106 kCompWristLowerPhysicalLimit,
107 kWristZeroingSpeed,
108 kWristZeroingOffSpeed,
109 kCompAngleAdjustHallEffectStartAngle,
110 kAngleAdjustHallEffectStopAngle,
111 kCompAngleAdjustUpperLimit,
112 kCompAngleAdjustLowerLimit,
113 kCompAngleAdjustUpperPhysicalLimit,
114 kCompAngleAdjustLowerPhysicalLimit,
115 kAngleAdjustZeroingSpeed,
116 kAngleAdjustZeroingOffSpeed,
117 kCompAngleAdjustDeadband,
Brian Silverman1a6590d2013-11-04 14:46:46 -0800118 kCompDrivetrainEncoderRatio,
119 kCompLowGearRatio,
120 kCompHighGearRatio,
Brian Silverman6eb51f12013-11-02 14:39:01 -0700121 kCompLeftDriveShifter,
122 kCompRightDriveShifter,
Brian Silverman1a6590d2013-11-04 14:46:46 -0800123 true,
Brian Silverman2c590c32013-11-04 18:08:54 -0800124 control_loops::MakeVClutchDrivetrainLoop,
125 control_loops::MakeClutchDrivetrainLoop,
Brian Silverman431500a2013-10-28 19:50:15 -0700126 kCompCameraCenter};
127 break;
128 case kPracticeTeamNumber:
129 return new Values{kPracticeWristHallEffectStartAngle,
130 kWristHallEffectStopAngle,
131 kPracticeWristUpperLimit,
132 kPracticeWristLowerLimit,
133 kPracticeWristUpperPhysicalLimit,
134 kPracticeWristLowerPhysicalLimit,
135 kWristZeroingSpeed,
136 kWristZeroingOffSpeed,
137 kPracticeAngleAdjustHallEffectStartAngle,
138 kAngleAdjustHallEffectStopAngle,
139 kPracticeAngleAdjustUpperLimit,
140 kPracticeAngleAdjustLowerLimit,
141 kPracticeAngleAdjustUpperPhysicalLimit,
142 kPracticeAngleAdjustLowerPhysicalLimit,
143 kAngleAdjustZeroingSpeed,
144 kAngleAdjustZeroingOffSpeed,
145 kPracticeAngleAdjustDeadband,
Brian Silverman1a6590d2013-11-04 14:46:46 -0800146 kPracticeDrivetrainEncoderRatio,
147 kPracticeLowGearRatio,
148 kPracticeHighGearRatio,
Brian Silverman6eb51f12013-11-02 14:39:01 -0700149 kPracticeLeftDriveShifter,
150 kPracticeRightDriveShifter,
Brian Silverman1a6590d2013-11-04 14:46:46 -0800151 false,
Brian Silverman2c590c32013-11-04 18:08:54 -0800152 control_loops::MakeVDogDrivetrainLoop,
153 control_loops::MakeDogDrivetrainLoop,
Brian Silverman431500a2013-10-28 19:50:15 -0700154 kPracticeCameraCenter};
155 break;
156 default:
157 LOG(FATAL, "unknown team #%" PRIu16 "\n", team);
158 }
159}
160
161} // namespace
162
163const Values &GetValues() {
164 static ::aos::Once<const Values> once(DoGetValues);
165 return *once.Get();
166}
167
168} // namespace constants
169} // namespace frc971