package frc.robot.subsystems.turret;
+import static edu.wpi.first.units.Units.Rotations;
+import static edu.wpi.first.units.Units.RotationsPerSecond;
+
import com.ctre.phoenix6.configs.Slot0Configs;
import com.ctre.phoenix6.configs.TalonFXConfiguration;
import com.ctre.phoenix6.controls.PositionVoltage;
import edu.wpi.first.math.trajectory.TrapezoidProfile;
import edu.wpi.first.math.trajectory.TrapezoidProfile.State;
import edu.wpi.first.math.util.Units;
+import edu.wpi.first.units.measure.AngularVelocity;
import edu.wpi.first.wpilibj.RobotBase;
import edu.wpi.first.wpilibj.simulation.SingleJointedArmSim;
import edu.wpi.first.wpilibj.smartdashboard.Mechanism2d;
private TalonFXSimState simState;
private SingleJointedArmSim turretSim;
- private final PositionVoltage positionRequest = new PositionVoltage(0.0);
-
/* ---------------- Control ---------------- */
private final TrapezoidProfile profile =
private double goalVelocityRadPerSec = 0.0;
private double lastGoalRad = 0.0;
+ public PositionVoltage voltageRequest;
+
/* ---------------- Gains ---------------- */
private static final double kP = 3500.0;
Feedback.FeedbackSensorSource = FeedbackSensorSourceValue.RotorSensor;
}}
);
+
+ voltageRequest = new PositionVoltage(0);
setpoint = new State(getPositionRad(), 0.0);
lastGoalRad = setpoint.position;
Units.radiansToRotations(setpoint.velocity) * GEAR_RATIO;
// --- Position + velocity feedforward (MA-style) ---
- motor.setControl(
- positionRequest
- .withPosition(motorPosRot)
- .withVelocity(motorVelRotPerSec));
+ motor.setControl(voltageRequest.withPosition(Rotations.of(motorPosRot)).withVelocity(RotationsPerSecond.of(motorVelRotPerSec)));
// --- Visualization ---
ligament.setAngle(Units.radiansToDegrees(getPositionRad()));