import java.lang.reflect.Field;
+import org.littletonrobotics.junction.Logger;
+
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.math.filter.LinearFilter;
import edu.wpi.first.math.geometry.Rotation2d;
private boolean turretVisionEnabled = false;
private boolean SOTM = true;
private Translation2d drivepose;
+ private double lastPos = 0;
private final LinearFilter turretAngleFilter = LinearFilter.movingAverage((int) (0.1 / Constants.LOOP_TIME));
private double lastTurretAngle = 0;
private double lastTurretVelocity = 0;
+ private double lastFrameVelocity;
+
public SimpleAutoShoot(Turret turret, Drivetrain drivetrain, Shooter shooter) {
this.turret = turret;
this.drivetrain = drivetrain;
// turretAngleFilter.calculate(
// new Rotation2d(Units.degreesToRadians(turretSetpoint)).minus(new Rotation2d(Units.degreesToRadians(lastTurretAngle))).getRadians() / Constants.LOOP_TIME);
- double turretAcceleration = ((-drivetrain.getAngularRate(2)) - (lastTurretVelocity)) / Constants.LOOP_TIME;
+ double velocityAdjustment = 0;
+ double turretAcceleration = ((-drivetrain.getAngularRate(2)) - (lastFrameVelocity)) / Constants.LOOP_TIME;
+ if (Math.abs(lastTurretAngle - turretSetpoint) > 90) {
+ velocityAdjustment = -drivetrain.getAngularRate(2) * 1.4;
+ }
+ Logger.recordOutput("Spinny accel", drivetrain.getAngularRate(2));
+ Logger.recordOutput("Original Turret Setpoint", turretSetpoint);
- turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(turretSetpoint)), -drivetrain.getAngularRate(2));
+ turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(turretSetpoint)), -drivetrain.getAngularRate(2) - velocityAdjustment);
// turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(turretSetpoint)), (-drivetrain.getAngularRate(2)) + turretAcceleration * 0.3);
//turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(turretSetpoint)), turretVelocity);
lastTurretAngle = turretSetpoint;
- lastTurretVelocity = -drivetrain.getAngularRate(2);
+ lastFrameVelocity = drivetrain.getAngularRate(2);
}
@Override
driver.get(PS5Button.CIRCLE).onTrue(
new InstantCommand(()->{
- turret.setFieldRelativeTarget(new Rotation2d(Math.PI), 0);
+ turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(180)), 0);
})
).onFalse(
new InstantCommand(()->{
- turret.setFieldRelativeTarget(new Rotation2d(0), 0);
+ turret.setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(-170)), 0);
})
);
private static final double MIN_ANGLE_RAD = Units.degreesToRadians(TurretConstants.MIN_ANGLE);
private static final double MAX_ANGLE_RAD = Units.degreesToRadians(TurretConstants.MAX_ANGLE);
- private static final double MAX_VEL_RAD_PER_SEC = 16.0;
- private static final double MAX_ACCEL_RAD_PER_SEC2 = 80.0;
+ private static final double MAX_VEL_RAD_PER_SEC = 25;
+ private static final double MAX_ACCEL_RAD_PER_SEC2 = 160.0;
private static final double VERSA_RATIO = 5.0;
private static final double TURRET_RATIO = 140.0 / 10.0;
private final TurretIOInputsAutoLogged inputs = new TurretIOInputsAutoLogged();
+ private double lastFrameVelocity = 0.0;
+
/* ---------------- Hardware ---------------- */
private final TalonFX motor = new TalonFX(IdConstants.TURRET_MOTOR_ID, Constants.RIO_CAN);
}
});
+ // profile = new TrapezoidProfile(new Constraints(MAX_VEL_RAD_PER_SEC, feedForward.maxAchievableAcceleration(DCMotor.getKrakenX60(1, GEAR_RATIO), goalVelocityRadPerSec))))
+
setpoint = new State(getPositionRad(), 0.0);
lastGoalRad = setpoint.position;
// motor.setVoltage(voltage);
// } else{
// in rad/sec
+ //double robotRotAcceleration = (Units.rotationsToRadians(motor.getVelocity().getValueAsDouble()) - lastFrameVelocity) / Constants.LOOP_TIME;
+ double motorSetpointPosition = (setpoint.position) * GEAR_RATIO;
+
targetVelocity = positionPID.calculate(
motor.getPosition().getValue().in(edu.wpi.first.units.Units.Radians),
- setpoint.position * GEAR_RATIO);
+ motorSetpointPosition);
targetVelocity += Units.rotationsToRadians(motorVelRotPerSec);
motor.setVoltage(voltage);
// }
+ lastFrameVelocity = Units.rotationsToRadians(motor.getVelocity().getValueAsDouble());
// var request = velocityRequest.withVelocity(Units.radiansToRotations(targetVelocity)).withEnableFOC(false);
Logger.recordOutput("Turret/Voltage", motor.getMotorVoltage().getValue());
Units.radiansToDegrees(best));
SmartDashboard.putNumber("Turret SetpointDeg",
Units.radiansToDegrees(setpoint.position));
+ SmartDashboard.putNumber("Turret Raw Setpoint", Units.radiansToDegrees(best));
SmartDashboard.putNumber("Turret motorPosRot",
Units.radiansToDegrees(motorPosRot));
SmartDashboard.putNumber("Turret motorVelRotPerSec",