From c5919af3efdd98f65e05cd0a84825c65a720da2a Mon Sep 17 00:00:00 2001 From: OnDYCLaptop Date: Fri, 10 Jul 2026 22:23:23 +0800 Subject: [PATCH] =?UTF-8?q?7.10=E6=99=9A=E6=99=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../robot/subsystems/ConveyorSubsystem.java | 5 ++- .../subsystems/IntakeRollerSubsystem.java | 6 ++- .../robot/subsystems/ShooterSubsystem.java | 42 +++++++++++-------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java b/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java index aec95ef..feb9199 100644 --- a/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java +++ b/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java @@ -1,5 +1,6 @@ package frc.robot.subsystems; +import com.ctre.phoenix6.controls.NeutralOut; import com.ctre.phoenix6.controls.VoltageOut; import com.ctre.phoenix6.hardware.TalonFX; @@ -15,6 +16,7 @@ import frc.robot.Constants; public class ConveyorSubsystem extends SubsystemBase { public final TalonFX mainConveyor; private final VoltageOut voltageRequest = new VoltageOut(0); + private final NeutralOut neutralRequest = new NeutralOut(); private final NetworkTable table = NetworkTableInstance.getDefault().getTable("Conveyor"); private double targetOutputVolts = 0.0; @@ -29,7 +31,8 @@ public class ConveyorSubsystem extends SubsystemBase { setVoltage(Constants.Conveyor.reverseVoltage); } public void stop() { - setVoltage(0.0); + targetOutputVolts = 0.0; + mainConveyor.setControl(neutralRequest); } public void setVoltage(double outputVolts) { targetOutputVolts = MathUtil.clamp(outputVolts, -12.0, 12.0); diff --git a/src/main/java/frc/robot/subsystems/IntakeRollerSubsystem.java b/src/main/java/frc/robot/subsystems/IntakeRollerSubsystem.java index 6c97e03..3fb09b0 100644 --- a/src/main/java/frc/robot/subsystems/IntakeRollerSubsystem.java +++ b/src/main/java/frc/robot/subsystems/IntakeRollerSubsystem.java @@ -1,6 +1,7 @@ package frc.robot.subsystems; import com.ctre.phoenix6.controls.Follower; +import com.ctre.phoenix6.controls.NeutralOut; import com.ctre.phoenix6.controls.VoltageOut; import com.ctre.phoenix6.hardware.TalonFX; import com.ctre.phoenix6.signals.MotorAlignmentValue; @@ -22,6 +23,7 @@ public class IntakeRollerSubsystem extends SubsystemBase { private final TalonFX rightIntakeRoller; private final VoltageOut voltageRequest = new VoltageOut(0); + private final NeutralOut neutralRequest = new NeutralOut(); private final Follower rightFollower; private final NetworkTable table = NetworkTableInstance.getDefault().getTable("IntakeRoller"); private double targetOutputVolts = 0.0; @@ -44,7 +46,9 @@ public class IntakeRollerSubsystem extends SubsystemBase { } public void stop() { - setVoltage(0.0); + targetOutputVolts = 0.0; + leftIntakeRoller.setControl(neutralRequest); + rightIntakeRoller.setControl(neutralRequest); } public void setVoltage(double outputVolts) { diff --git a/src/main/java/frc/robot/subsystems/ShooterSubsystem.java b/src/main/java/frc/robot/subsystems/ShooterSubsystem.java index 6187e8b..f569771 100644 --- a/src/main/java/frc/robot/subsystems/ShooterSubsystem.java +++ b/src/main/java/frc/robot/subsystems/ShooterSubsystem.java @@ -3,6 +3,7 @@ package frc.robot.subsystems; import com.ctre.phoenix6.configs.MotorOutputConfigs; import com.ctre.phoenix6.configs.Slot0Configs; import com.ctre.phoenix6.controls.Follower; +import com.ctre.phoenix6.controls.NeutralOut; import com.ctre.phoenix6.controls.VelocityVoltage; import com.ctre.phoenix6.controls.VoltageOut; import com.ctre.phoenix6.hardware.TalonFX; @@ -18,7 +19,6 @@ import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableInstance; import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.Timer; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.Commands; import edu.wpi.first.wpilibj2.command.SubsystemBase; @@ -45,6 +45,8 @@ public class ShooterSubsystem extends SubsystemBase { private final VelocityVoltage leftFlywheelVelocityRequest = new VelocityVoltage(0).withSlot(0); private final VelocityVoltage conveyorVelocityRequest = new VelocityVoltage(0).withSlot(0); private final VoltageOut backboardVoltageRequest = new VoltageOut(0); + private final NeutralOut flywheelNeutralRequest = new NeutralOut(); + private final NeutralOut conveyorNeutralRequest = new NeutralOut(); private final Follower flywheelFollower; private final Follower conveyorFollower; @@ -56,7 +58,6 @@ public class ShooterSubsystem extends SubsystemBase { private double flywheelOutputVolts = 0.0; private double flywheelTargetVelocity = 0.0; private double flywheelVelocityTolerance = Constants.Shooter.flywheelReadyVelocityTolerance; - private double flywheelVelocityReadyStartTimestamp = 0.0; private boolean flywheelVelocityTuningActive = false; private double shooterConveyorTargetVelocity = 0.0; private boolean shooterConveyorVelocityTuningActive = false; @@ -79,10 +80,18 @@ public class ShooterSubsystem extends SubsystemBase { leftConveyor.getConfigurator().apply(Constants.Shooter.conveyorSlot0Configs); rightConveyor.getConfigurator().apply(Constants.Shooter.conveyorSlot0Configs); - var motorOutputConfigs = new MotorOutputConfigs(); - motorOutputConfigs.Inverted = InvertedValue.Clockwise_Positive; - leftFlywheel.getConfigurator().apply(motorOutputConfigs); - leftConveyor.getConfigurator().apply(motorOutputConfigs); + var leftFlywheelMotorOutputConfigs = new MotorOutputConfigs(); + leftFlywheelMotorOutputConfigs.Inverted = InvertedValue.Clockwise_Positive; + leftFlywheelMotorOutputConfigs.NeutralMode = NeutralModeValue.Coast; + leftFlywheel.getConfigurator().apply(leftFlywheelMotorOutputConfigs); + + var rightFlywheelMotorOutputConfigs = new MotorOutputConfigs(); + rightFlywheelMotorOutputConfigs.NeutralMode = NeutralModeValue.Coast; + rightFlywheel.getConfigurator().apply(rightFlywheelMotorOutputConfigs); + + var conveyorMotorOutputConfigs = new MotorOutputConfigs(); + conveyorMotorOutputConfigs.Inverted = InvertedValue.Clockwise_Positive; + leftConveyor.getConfigurator().apply(conveyorMotorOutputConfigs); flywheelFollower = new Follower(leftFlywheel.getDeviceID(), MotorAlignmentValue.Opposed).withUpdateFreqHz(50); conveyorFollower = new Follower(leftConveyor.getDeviceID(), MotorAlignmentValue.Opposed).withUpdateFreqHz(50); @@ -136,24 +145,21 @@ public class ShooterSubsystem extends SubsystemBase { } public void setFlywheelVelocity(double targetVelocityRps) { - double clampedTargetVelocity = MathUtil.clamp( - targetVelocityRps, - -Constants.Shooter.flywheelMaxVelocity, - Constants.Shooter.flywheelMaxVelocity - ); - if (Math.abs(clampedTargetVelocity - flywheelTargetVelocity) > 1e-6) { - flywheelVelocityReadyStartTimestamp = Timer.getFPGATimestamp(); - } - flywheelTargetVelocity = clampedTargetVelocity; + flywheelTargetVelocity = targetVelocityRps; leftFlywheel.setControl(leftFlywheelVelocityRequest.withVelocity(flywheelTargetVelocity)); setRightFlywheelFollowLeft(); } public void stopFlywheel() { - setFlywheelVelocity(0.0); + flywheelTargetVelocity = 0.0; + leftFlywheel.setControl(flywheelNeutralRequest); + rightFlywheel.setControl(flywheelNeutralRequest); } public boolean atVelocity() { + if (flywheelTargetVelocity <= 10.0) { + return false; + } double currentvelocity = getAverageFlywheelVelocity(); if(currentvelocity>flywheelTargetVelocity*0.95){ return true; @@ -197,7 +203,9 @@ public class ShooterSubsystem extends SubsystemBase { } public void stopShooterConveyor() { - runShooterConveyorVelocity(0.0); + shooterConveyorTargetVelocity = 0.0; + leftConveyor.setControl(conveyorNeutralRequest); + rightConveyor.setControl(conveyorNeutralRequest); } public double getShooterConveyorVelocity() {