@@ -6,6 +6,8 @@ import org.team4099.lib.units.base.Length
6
6
import org.team4099.lib.units.base.Meter
7
7
import org.team4099.lib.units.base.Time
8
8
import org.team4099.lib.units.base.inMeters
9
+ import org.team4099.lib.units.base.inMilliseconds
10
+ import org.team4099.lib.units.base.inMinutes
9
11
import org.team4099.lib.units.base.inSeconds
10
12
import org.team4099.lib.units.base.meters
11
13
import org.team4099.lib.units.base.minutes
@@ -35,9 +37,9 @@ import org.team4099.lib.units.derived.radians
35
37
import org.team4099.lib.units.derived.rotations
36
38
import kotlin.math.PI
37
39
38
- enum class Timescale (val velocity : Time , val acceleration : Time ) {
39
- REV_NEO (1 .minutes, 1 .seconds),
40
- CTRE (100 .milli.seconds, 1 .seconds),
40
+ enum class Timescale (val velocity : Time , val acceleration : Time , val pidTimeScaleConversion : ( Time ) -> Double ) {
41
+ REV_NEO (1 .minutes, 1 .seconds, {it.inMilliseconds} ),
42
+ CTRE (100 .milli.seconds, 1 .seconds, {it.inSeconds} ),
41
43
}
42
44
43
45
interface MechanismSensor <U : UnitKey > {
@@ -115,7 +117,7 @@ class LinearMechanismSensor(
115
117
): Double {
116
118
return (
117
119
integralGain.inVoltsPerMeterSeconds /
118
- (positionToRawUnits(1 .meters) * timescale.velocity.inSeconds )
120
+ (positionToRawUnits(1 .meters) * timescale.pidTimeScaleConversion(timescale.velocity) )
119
121
) /
120
122
compensationVoltage.inVolts * fullPowerThrottle
121
123
}
@@ -124,7 +126,7 @@ class LinearMechanismSensor(
124
126
derivativeGain : DerivativeGain <Meter , Volt >,
125
127
): Double {
126
128
return (
127
- derivativeGain.inVoltsPerMeterPerSecond * timescale.velocity.inSeconds /
129
+ derivativeGain.inVoltsPerMeterPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
128
130
positionToRawUnits(1 .meters)
129
131
) / compensationVoltage.inVolts * fullPowerThrottle
130
132
}
@@ -141,7 +143,7 @@ class LinearMechanismSensor(
141
143
): Double {
142
144
return (
143
145
integralGain.inVoltsPerMeters /
144
- (velocityToRawUnits(1 .meters.perSecond) * timescale.velocity.inSeconds )
146
+ (velocityToRawUnits(1 .meters.perSecond) * timescale.pidTimeScaleConversion(timescale.velocity) )
145
147
) /
146
148
compensationVoltage.inVolts * fullPowerThrottle
147
149
}
@@ -150,7 +152,7 @@ class LinearMechanismSensor(
150
152
derivativeGain : DerivativeGain <Velocity <Meter >, Volt >,
151
153
): Double {
152
154
return (
153
- derivativeGain.inVoltsPerMetersPerSecondPerSecond * timescale.velocity.inSeconds /
155
+ derivativeGain.inVoltsPerMetersPerSecondPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
154
156
velocityToRawUnits(1 .meters.perSecond)
155
157
) / compensationVoltage.inVolts * fullPowerThrottle
156
158
}
@@ -202,7 +204,7 @@ class AngularMechanismSensor(
202
204
): Double {
203
205
return (
204
206
integralGain.inVoltsPerRadianSeconds /
205
- (positionToRawUnits(1 .radians) * timescale.velocity.inSeconds )
207
+ (positionToRawUnits(1 .radians) * timescale.pidTimeScaleConversion(timescale.velocity) )
206
208
) /
207
209
compensationVoltage.inVolts * fullPowerThrottle
208
210
}
@@ -211,7 +213,7 @@ class AngularMechanismSensor(
211
213
derivativeGain : DerivativeGain <Radian , Volt >
212
214
): Double {
213
215
return (
214
- derivativeGain.inVoltsPerRadianPerSecond * timescale.velocity.inSeconds /
216
+ derivativeGain.inVoltsPerRadianPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
215
217
positionToRawUnits(1 .radians)
216
218
) / compensationVoltage.inVolts * fullPowerThrottle
217
219
}
@@ -230,7 +232,7 @@ class AngularMechanismSensor(
230
232
): Double {
231
233
return (
232
234
integralGain.inVoltsPerRadians /
233
- (velocityToRawUnits(1 .radians.perSecond) * timescale.velocity.inSeconds )
235
+ (velocityToRawUnits(1 .radians.perSecond) * timescale.pidTimeScaleConversion(timescale.velocity) )
234
236
) /
235
237
compensationVoltage.inVolts * fullPowerThrottle
236
238
}
@@ -239,7 +241,7 @@ class AngularMechanismSensor(
239
241
derivativeGain : DerivativeGain <Velocity <Radian >, Volt >
240
242
): Double {
241
243
return (
242
- derivativeGain.inVoltsPerRadiansPerSecondPerSecond * timescale.velocity.inSeconds /
244
+ derivativeGain.inVoltsPerRadiansPerSecondPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
243
245
velocityToRawUnits(1 .radians.perSecond)
244
246
) / compensationVoltage.inVolts * fullPowerThrottle
245
247
}
0 commit comments