}
}
- lastGoalRad = best;
+ double currentPositionRad = getPositionRad();
+ double errorRad = best - currentPositionRad;
+ double absError = Math.abs(errorRad);
+ // if(Math.abs(best - lastGoalRad) < Math.PI/2){
+ // best = setpointFilter.calculate(best);
+ // }
+
+ // Tells the Kraken to get to this position using 1000Hz profile
+ double motorGoalRotations = Units.radiansToRotations(best) * GEAR_RATIO;
+ if (isInDeadband) {
+ if (absError > START_THRESHOLD_RAD) {
+ isInDeadband = false;
+ lastGoalRad = best;
+ }
+ } else {
+ lastGoalRad = best;
+ if (absError < STOP_THRESHOLD_RAD) {
+ isInDeadband = true;
+ }
+ }
- double motorGoalRotations = Units.radiansToRotations(lastGoalRad) * GEAR_RATIO;
-
motorGoalRotations = MathUtil.clamp(motorGoalRotations, Units.degreesToRotations(-180) * GEAR_RATIO, Units.degreesToRotations(180) * GEAR_RATIO);
double acceleration = (goalVelocityRadPerSec - lastFrameVelocity)/Constants.LOOP_TIME;
// Add the feedforward for the target velocity (SOTM) here as well
double feedforwardVoltage = feedForward.calculate((goalVelocityRadPerSec) * GEAR_RATIO);
- double robotTurnCompensation = goalVelocityRadPerSec * 0.165;
+ double robotTurnCompensation = goalVelocityRadPerSec * 0.185;
+ double feedforward = isInDeadband ? 0.0 : robotTurnCompensation;
+
motor.setControl(mmVoltageRequest
.withPosition(motorGoalRotations)
- .withFeedForward(robotTurnCompensation));
+ .withFeedForward(feedforward));
+
+ Logger.recordOutput("Turret/InDeadband", isInDeadband);
lastFrameVelocity = Units.rotationsToRadians(motor.getVelocity().getValueAsDouble());