@@ -6,6 +6,7 @@ import com.qualcomm.robotcore.hardware.HardwareMap
66import com.qualcomm.robotcore.util.ElapsedTime
77import pioneer.Constants
88import pioneer.decode.Artifact
9+ import pioneer.helpers.Chrono
910import pioneer.helpers.FileLogger
1011import pioneer.helpers.PIDController
1112import kotlin.math.PI
@@ -114,8 +115,7 @@ class Spindexer(
114115 val reachedTarget: Boolean
115116 get() {
116117 // Compute circular error
117- val error = wrapTicks(targetMotorTicks - currentMotorTicks)
118- return abs(error) < Constants .Spindexer .POSITION_TOLERANCE_TICKS && (motor.velocity < Constants .Spindexer .VELOCITY_TOLERANCE_TPS )
118+ return abs(motorTicksError) < Constants .Spindexer .POSITION_TOLERANCE_TICKS && (motor.velocity < Constants .Spindexer .VELOCITY_TOLERANCE_TPS )
119119 }
120120
121121 // Getters for artifact storage status
@@ -144,6 +144,9 @@ class Spindexer(
144144 val targetMotorTicks: Int
145145 get() = (motorState.radians * ticksPerRadian).toInt()
146146
147+ val motorTicksError: Int
148+ get() = wrapTicks(targetMotorTicks - currentMotorTicks)
149+
147150 val currentScannedArtifact: Artifact ?
148151 get() = scanArtifact()
149152
@@ -172,6 +175,7 @@ class Spindexer(
172175 listOf (MotorPosition .OUTTAKE_1 , MotorPosition .OUTTAKE_2 , MotorPosition .OUTTAKE_3 )
173176 private lateinit var motor: DcMotorEx
174177 private lateinit var intakeSensor: RevColorSensor
178+ private val chrono = Chrono (false )
175179
176180 /* *
177181 * Returns the index of the current motor position in the intake/outtake lists.
@@ -207,8 +211,8 @@ class Spindexer(
207211 * Updates the motor position to match the desired motor state.
208212 * Checks for new artifacts if in an intake position.
209213 */
210- override fun update (dt : Double ) {
211- runMotorToState(dt )
214+ override fun update () {
215+ runMotorToState()
212216 if (checkingForNewArtifacts) checkForArtifact()
213217 }
214218
@@ -322,21 +326,21 @@ class Spindexer(
322326 return lastPower
323327 }
324328
325- private fun runMotorToState (dt : Double ) {
329+ private fun runMotorToState () {
326330 if (manualMove) return
327331
328- val rawError = targetMotorTicks - currentMotorTicks
329- val error = wrapTicks(rawError)
330-
331332 // PID
332- var power = motorPID.update(error.toDouble(), dt)
333+ chrono.update()
334+ var power = motorPID.update(motorTicksError.toDouble(), chrono.dt)
333335
334336 // Ramp power to prevent sudden acceleration
335- power = rampPower(power, dt)
337+ power = rampPower(power, chrono. dt)
336338
337339 // Static constant
338340 val adjustedKS = Constants .Spindexer .KS_START + Constants .Spindexer .KS_STEP * numStoredArtifacts
339- power + = if (abs(error) > 100 ) adjustedKS * sign(error.toDouble()) else 0.0
341+ power + = if (abs(motorTicksError) > 100 ) adjustedKS * sign(motorTicksError.toDouble()) else 0.0
342+
343+ if (abs(motorTicksError) < Constants .Spindexer .PID_TOLERANCE_TICKS ) power = 0.0
340344
341345 // Apply power
342346 val maxPower = 1.0
0 commit comments