Skip to content

Commit 131732c

Browse files
committed
represent pid timescales differently for ctre vs rev
1 parent 1b64d87 commit 131732c

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/main/kotlin/org/team4099/lib/units/MechanismUnits.kt

+13-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.team4099.lib.units.base.Length
66
import org.team4099.lib.units.base.Meter
77
import org.team4099.lib.units.base.Time
88
import org.team4099.lib.units.base.inMeters
9+
import org.team4099.lib.units.base.inMilliseconds
10+
import org.team4099.lib.units.base.inMinutes
911
import org.team4099.lib.units.base.inSeconds
1012
import org.team4099.lib.units.base.meters
1113
import org.team4099.lib.units.base.minutes
@@ -35,9 +37,9 @@ import org.team4099.lib.units.derived.radians
3537
import org.team4099.lib.units.derived.rotations
3638
import kotlin.math.PI
3739

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}),
4143
}
4244

4345
interface MechanismSensor<U : UnitKey> {
@@ -115,7 +117,7 @@ class LinearMechanismSensor(
115117
): Double {
116118
return (
117119
integralGain.inVoltsPerMeterSeconds /
118-
(positionToRawUnits(1.meters) * timescale.velocity.inSeconds)
120+
(positionToRawUnits(1.meters) * timescale.pidTimeScaleConversion(timescale.velocity))
119121
) /
120122
compensationVoltage.inVolts * fullPowerThrottle
121123
}
@@ -124,7 +126,7 @@ class LinearMechanismSensor(
124126
derivativeGain: DerivativeGain<Meter, Volt>,
125127
): Double {
126128
return (
127-
derivativeGain.inVoltsPerMeterPerSecond * timescale.velocity.inSeconds /
129+
derivativeGain.inVoltsPerMeterPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
128130
positionToRawUnits(1.meters)
129131
) / compensationVoltage.inVolts * fullPowerThrottle
130132
}
@@ -141,7 +143,7 @@ class LinearMechanismSensor(
141143
): Double {
142144
return (
143145
integralGain.inVoltsPerMeters /
144-
(velocityToRawUnits(1.meters.perSecond) * timescale.velocity.inSeconds)
146+
(velocityToRawUnits(1.meters.perSecond) * timescale.pidTimeScaleConversion(timescale.velocity))
145147
) /
146148
compensationVoltage.inVolts * fullPowerThrottle
147149
}
@@ -150,7 +152,7 @@ class LinearMechanismSensor(
150152
derivativeGain: DerivativeGain<Velocity<Meter>, Volt>,
151153
): Double {
152154
return (
153-
derivativeGain.inVoltsPerMetersPerSecondPerSecond * timescale.velocity.inSeconds /
155+
derivativeGain.inVoltsPerMetersPerSecondPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
154156
velocityToRawUnits(1.meters.perSecond)
155157
) / compensationVoltage.inVolts * fullPowerThrottle
156158
}
@@ -202,7 +204,7 @@ class AngularMechanismSensor(
202204
): Double {
203205
return (
204206
integralGain.inVoltsPerRadianSeconds /
205-
(positionToRawUnits(1.radians) * timescale.velocity.inSeconds)
207+
(positionToRawUnits(1.radians) * timescale.pidTimeScaleConversion(timescale.velocity))
206208
) /
207209
compensationVoltage.inVolts * fullPowerThrottle
208210
}
@@ -211,7 +213,7 @@ class AngularMechanismSensor(
211213
derivativeGain: DerivativeGain<Radian, Volt>
212214
): Double {
213215
return (
214-
derivativeGain.inVoltsPerRadianPerSecond * timescale.velocity.inSeconds /
216+
derivativeGain.inVoltsPerRadianPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
215217
positionToRawUnits(1.radians)
216218
) / compensationVoltage.inVolts * fullPowerThrottle
217219
}
@@ -230,7 +232,7 @@ class AngularMechanismSensor(
230232
): Double {
231233
return (
232234
integralGain.inVoltsPerRadians /
233-
(velocityToRawUnits(1.radians.perSecond) * timescale.velocity.inSeconds)
235+
(velocityToRawUnits(1.radians.perSecond) * timescale.pidTimeScaleConversion(timescale.velocity))
234236
) /
235237
compensationVoltage.inVolts * fullPowerThrottle
236238
}
@@ -239,7 +241,7 @@ class AngularMechanismSensor(
239241
derivativeGain: DerivativeGain<Velocity<Radian>, Volt>
240242
): Double {
241243
return (
242-
derivativeGain.inVoltsPerRadiansPerSecondPerSecond * timescale.velocity.inSeconds /
244+
derivativeGain.inVoltsPerRadiansPerSecondPerSecond * timescale.pidTimeScaleConversion(timescale.velocity) /
243245
velocityToRawUnits(1.radians.perSecond)
244246
) / compensationVoltage.inVolts * fullPowerThrottle
245247
}

0 commit comments

Comments
 (0)