From 8654285b6ea84fa9aca18fc2904cf479325424f2 Mon Sep 17 00:00:00 2001 From: Jason Deal Date: Fri, 18 Apr 2025 10:18:51 -0500 Subject: [PATCH] feat: climber state machine implementation --- docs/imgs/climber-state-machine.png | Bin 0 -> 106655 bytes src/main/java/frc/robot/RobotContainer.java | 30 +- src/main/java/frc/robot/climber/Climber.java | 293 +++++++++--------- .../commands/ClimberPivotCommands.java | 17 - .../climber/commands/SetClimberAngle.java | 37 --- .../java/frc/robot/driver/DriverXbox.java | 1 - .../java/frc/robot/operator/OperatorXbox.java | 150 +++++---- 7 files changed, 256 insertions(+), 272 deletions(-) create mode 100644 docs/imgs/climber-state-machine.png delete mode 100644 src/main/java/frc/robot/climber/commands/ClimberPivotCommands.java delete mode 100644 src/main/java/frc/robot/climber/commands/SetClimberAngle.java diff --git a/docs/imgs/climber-state-machine.png b/docs/imgs/climber-state-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb1ceb23c1ac3eba186692617385c095d311562 GIT binary patch literal 106655 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 literal 0 HcmV?d00001 diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index b304cb7..66c01a9 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -9,12 +9,11 @@ import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; import edu.wpi.first.wpilibj2.command.ConditionalCommand; -import edu.wpi.first.wpilibj2.command.InstantCommand; import frc.robot.algaeflywheel.AlgaeRoller; import frc.robot.algaepivot.AlgaeSubsystem; import frc.robot.auton.AutonMaster; +import frc.robot.climber.Climber; import frc.robot.driver.DriverXbox; import frc.robot.drivetrain.CommandSwerveDrivetrain; import frc.robot.drivetrain.TunerConstants; @@ -24,7 +23,6 @@ import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType; import frc.robot.operator.OperatorXbox; import frc.robot.vision.PoseEstimatorSubsystem; -import frc.robot.vision.VisionConfig; import frc.robot.rushinator.*; import frc.robot.rushinator.commands.*; @@ -38,7 +36,7 @@ public class RobotContainer { public static double kMaxVelocity = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond); public static double kMaxAngularVelocity = RotationsPerSecond.of(1.0).in(RadiansPerSecond); - + public static boolean modeFast = true; /* Setting up bindings for necessary control of the swerve drive platform */ @@ -70,7 +68,7 @@ public RobotContainer() { * @return the command to run in autonomous */ public Command getAutonomousCommand() { - // return CommandSwerveDrivetrain.getInstance().applyRequest(() -> + // return CommandSwerveDrivetrain.getInstance().applyRequest(() -> // RobotContainer.drive.withVelocityX(0.25 * RobotContainer.kMaxVelocity) // Drive forward with negative Y (forward) // .withVelocityY(0.0) // Drive left with negative X (left) // .withRotationalRate(0.0) // Drive counterclockwise with negative X (left) @@ -84,6 +82,10 @@ public void setDefaultCommands() { final var operator = OperatorXbox.getInstance(); final var currAlliance = DriverStation.getAlliance().get(); + // TODO: Re-enable climber once setpoints have been tuned + // final var climber = new Climber(operator::getClimberDeploy, operator::getClimberRetract, operator::getClimberOverride, Climber.OperatingMode.kManual); + // climber.setDefaultCommand(new Climber.DefaultCommand(climber)); + CommandSwerveDrivetrain.getInstance().setDefaultCommand( CommandSwerveDrivetrain.getInstance().applyRequest(() -> { if (currAlliance == Alliance.Blue){ @@ -143,7 +145,7 @@ public void setDefaultCommands() { // } // RushinatorWrist.getInstance().setDefaultCommand(new HoldWristPosition()); // RushinatorWrist.getInstance().setDefaultCommand(new ManualWristControl(() -> operator.getLeftY())); - + // CommandSwerveDrivetrain.getInstance().setDefaultCommand( // CommandSwerveDrivetrain.getInstance().applyRequest(() -> { @@ -172,12 +174,12 @@ public void setDefaultCommands() { ); RushinatorWrist.getInstance().setDefaultCommand( new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelRight), - new SetWristState(RushinatorWrist.State.kTravelLeft), + new SetWristState(RushinatorWrist.State.kTravelRight), + new SetWristState(RushinatorWrist.State.kTravelLeft), () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid || RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || @@ -185,10 +187,10 @@ public void setDefaultCommands() { RushinatorWrist.kLastState == RushinatorWrist.State.kClimblRight ) ); - + AlgaeRoller.getInstance().setDefaultCommand(new AlgaeRoller.DefaultCommand()); - + // CoralSubsystem.getInstance().setDefaultCommand(new CoralSubsystem.TuningCommand(() -> (driver.getRightX() + 1) / 2.0f)); } } - \ No newline at end of file + diff --git a/src/main/java/frc/robot/climber/Climber.java b/src/main/java/frc/robot/climber/Climber.java index 63df640..43cc6ea 100644 --- a/src/main/java/frc/robot/climber/Climber.java +++ b/src/main/java/frc/robot/climber/Climber.java @@ -1,12 +1,5 @@ package frc.robot.climber; -import com.ctre.phoenix6.configs.CurrentLimitsConfigs; -import com.ctre.phoenix6.configs.MotorOutputConfigs; -import com.ctre.phoenix6.configs.TalonFXConfiguration; -import com.ctre.phoenix6.hardware.CANcoder; -import com.ctre.phoenix6.hardware.TalonFX; -import com.ctre.phoenix6.signals.InvertedValue; -import com.ctre.phoenix6.signals.NeutralModeValue; import com.revrobotics.RelativeEncoder; import com.revrobotics.spark.SparkBase.PersistMode; import com.revrobotics.spark.SparkBase.ResetMode; @@ -15,173 +8,195 @@ import com.revrobotics.spark.config.SparkMaxConfig; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import edu.wpi.first.math.controller.ArmFeedforward; -import edu.wpi.first.math.controller.BangBangController; -import edu.wpi.first.math.controller.ProfiledPIDController; import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.trajectory.TrapezoidProfile; -import edu.wpi.first.math.trajectory.TrapezoidProfile.Constraints; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.SubsystemBase; -import frc.robot.rushinator.RushinatorPivot; -public class Climber extends SubsystemBase{ - public static class Settings { - static final int kClimberPivotId = 27; //TODO: change this to sparkmax ID - - // static final InvertedValue kClimberPivotInverted = InvertedValue.Clockwise_Positive; - static final boolean kClimberPivotInverted = false; - - static final int kStallCurrentLimit = 80; // in amps - - static final double kG = 0.0; // V - static final double kS = 0.0; // V / rad - static final double kV = 0.0; // V * sec / rad - static final double kA = 0.0; // V * sec^2 / rad - - static final double kP = 0.0; - static final double kI = 0.0; - static final double kD = 0.0; +import java.util.ArrayList; +import java.util.function.Supplier; +import java.util.stream.Collectors; - public static final Rotation2d kMaxVelocity = Rotation2d.fromDegrees(200); //120 - public static final Rotation2d kMaxAcceleration = Rotation2d.fromDegrees(300); +public class Climber extends SubsystemBase { + public static class Settings { + static final int kClimberPivotId = 27; - public static final Rotation2d kMaxPos = Rotation2d.fromRotations(0.8); //TODO: change this - public static final Rotation2d kMinPos = Rotation2d.fromRotations(0.0); //TODO: change this + public static final Rotation2d kMaxPos = Rotation2d.fromRotations(270.0); + public static final Rotation2d kMinPos = Rotation2d.fromRotations(0.0); - public static final Rotation2d kAFFAngleOffset = Rotation2d.fromDegrees(0); + public static final Rotation2d kHoldPos = Rotation2d.fromRotations(263.0); + public static final Rotation2d kDeployPos = Rotation2d.fromRotations(180.0); - static final double kCurrentLimit = 40.0; + static final double kMaxVoltage = 12.0f; + static final int kMaxCurrent = 40; } - public enum State { - //TODO: redo these states based on the climber encoder position - kDeploy(Rotation2d.fromRotations(150.91650390625)), //TODO - kRetract(Rotation2d.fromRotations(80.5693359375)), //TODO - kStow(Rotation2d.fromRotations(0)); - - State(Rotation2d pos) { - this.pos = pos; - - } - public final Rotation2d pos; + private enum State { + kFloating, + kStowed, + kDeploying, + kDeployed, + kRetracting, + kHold; } - public static Climber mInstance; - - // private TalonFX ClimberPivot; - // private final ProfiledPIDController mPPIDController; - private Constraints mConstraints; - private final BangBangController mBBController; - private final ArmFeedforward mAFFController; - - private SparkMax mClimberPivotMotor; - private SparkMaxConfig mClimberPivotMotorConfig; - private RelativeEncoder mClimberPivotMotorEncoder; - - public static State kLastState; - - public Climber() { - mClimberPivotMotor = new SparkMax(Settings.kClimberPivotId, MotorType.kBrushless); - - mClimberPivotMotorConfig = new SparkMaxConfig(); - mClimberPivotMotorConfig.inverted(Settings.kClimberPivotInverted); - mClimberPivotMotorConfig.smartCurrentLimit(Settings.kStallCurrentLimit); - mClimberPivotMotorConfig.idleMode(IdleMode.kBrake); - mClimberPivotMotor.configure(mClimberPivotMotorConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); - - mClimberPivotMotorEncoder = mClimberPivotMotor.getEncoder(); - - mAFFController = new ArmFeedforward(Settings.kS, Settings.kG, Settings.kV, Settings.kA); - - mBBController = new BangBangController(2.0f); // Tolerance in rotations - - if (kLastState == null) { - kLastState = State.kStow; - } - // mPPIDController.setGoal(kLastState.pos.getRotations()); - - - // ClimberPivot = new TalonFX(Settings.kClimberPivotId); - - // var ElbowPivotConfigurator = ClimberPivot.getConfigurator(); - - // var ElbowPivotConfigs = new MotorOutputConfigs(); - - // ClimberPivot.getConfigurator().apply(new TalonFXConfiguration().withMotorOutput(new MotorOutputConfigs() - // .withInverted(InvertedValue.Clockwise_Positive) - // .withNeutralMode(NeutralModeValue.Brake) - // )); - // ClimberPivot.getConfigurator().apply(new CurrentLimitsConfigs().withSupplyCurrentLimit(Settings.kCurrentLimit)); - - // set invert to CW+ and apply config change - // ElbowPivotConfigs.Inverted = Settings.kClimberPivotInverted; + public enum OperatingMode { + kManual, + kCompetition + } - // ElbowPivotConfigurator.apply(ElbowPivotConfigs); + private final SparkMax spark; + private final RelativeEncoder encoder; - // mPPIDController = new ProfiledPIDController(Settings.kP, Settings.kI, Settings.kD, new TrapezoidProfile.Constraints( - // Settings.kMaxVelocity.getRadians(), - // Settings.kMaxAcceleration.getRadians() - // )); - // mPPIDController.setTolerance(0.01); - + private final Supplier deployProvider, retractProvider; + private final Supplier overrideProvider; - // ClimberPivot.setPosition(0.0); + private State state; + private final OperatingMode operatingMode; - // ClimberPivot.getConfigurator().apply(new CurrentLimitsConfigs().withSupplyCurrentLimit(Settings.kCurrentLimit)); + public Climber(Supplier deployProvider, Supplier retractProvider, Supplier overrideProvider) { + this(deployProvider, retractProvider, overrideProvider, OperatingMode.kCompetition); } - public static Climber getInstance() { - if (mInstance == null) { - mInstance = new Climber(); - } - return mInstance; + public Climber(Supplier deployProvider, Supplier retractProvider, Supplier overrideProvider, OperatingMode operatingMode) { + this.deployProvider = deployProvider; + this.retractProvider = retractProvider; + this.overrideProvider = overrideProvider; + + this.spark = new SparkMax(Settings.kClimberPivotId, MotorType.kBrushless); + this.encoder = spark.getEncoder(); + + final var sparkConfig = new SparkMaxConfig() + .inverted(true) + .smartCurrentLimit(Settings.kMaxCurrent) + .idleMode(IdleMode.kBrake) ; + spark.configure(sparkConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + + this.state = switch (operatingMode) { + case kManual -> State.kFloating; + case kCompetition -> State.kStowed; + }; + this.operatingMode = operatingMode; } - public void setTargetPos(Rotation2d pos) { - // mPPIDController.setGoal(pos.getRotations()); - mBBController.setSetpoint(pos.getRotations()); + public void setVoltage(double voltage) { + // Ensure we don't drive past either of the soft limits for the climber by clamping the voltage + if ((voltage < 0 && getPos().getRotations() <= Settings.kMinPos.getRotations()) + || (voltage > 0 && getPos().getRotations() >= Settings.kMaxPos.getRotations())) { + voltage = 0; + } + spark.setVoltage(voltage); } public Rotation2d getPos() { - return Rotation2d.fromRotations(mClimberPivotMotorEncoder.getPosition()); - } - - public Rotation2d getAngularVelocity() { - // return Rotation2d.fromRotations(ClimberPivot.getVelocity().getValueAsDouble()); - return Rotation2d.fromRotations(mClimberPivotMotorEncoder.getVelocity()); //TODO: i dont know what the unit conversions are + return Rotation2d.fromRotations(encoder.getPosition()); } - public static class DefaultCommand extends Command { - - public DefaultCommand() { - addRequirements(Climber.getInstance()); + private State nextState(State state) { + if (operatingMode == OperatingMode.kManual) { + return State.kFloating; } - @Override - public void execute() { - Climber.getInstance().setTargetPos(State.kStow.pos); + if (overrideProvider.get() != 0.0f) { + return State.kFloating; } + ArrayList observedStates = new ArrayList<>(); + while (true) { + var previousState = state; + observedStates.add(previousState); + switch (state) { + case kFloating: + if (deployProvider.get()) { + state = State.kDeploying; + } else if (retractProvider.get()) { + state = State.kRetracting; + } + break; + case kStowed: + if (deployProvider.get()) { + state = State.kDeploying; + } + break; + case kDeploying: + if (retractProvider.get()) { + state = State.kFloating; + } else if (getPos().getRotations() >= Settings.kDeployPos.getRotations()) { + state = State.kDeployed; + } + break; + case kDeployed: + if (retractProvider.get()) { + state = State.kRetracting; + } + break; + case kRetracting: + if (deployProvider.get()) { + state = State.kFloating; + } else if (getPos().getRotations() <= Settings.kHoldPos.getRotations()) { + state = State.kHold; + } + break; + case kHold: + if (deployProvider.get()) { + state = State.kFloating; + } + // TODO: If a low enough current is detected for a sufficiently long time, we should transition to floating. + // This will prevent over-driving the climber when it isn't under load. + break; + } + + // If we don't transition state in an iteration, we've reached the terminal state and can return + if (previousState == state) { + return state; + } + + // If the list of observed states contains the current state, we've entered a loop. This shouldn't occur and + // indicates an issue in the state machine, but we should log a warning before breaking the loop. + if (observedStates.contains(state)) { + System.out.printf("[WARN:CLIMBER] Encountered loop while transitioning climber state (states: %s)", observedStates.stream().map(Object::toString).collect(Collectors.joining(", "))); + return state; + } + } } @Override public void periodic() { - SmartDashboard.putNumber("Climber Pivot Angle (Rotations)", getPos().getRotations()); - SmartDashboard.putNumber("Climber Pivot Angular Velocity (Rotations / sec)", getAngularVelocity().getRotations() * 60.0); - SmartDashboard.putNumber("Climber Pivot Current (Amps)", mClimberPivotMotor.getOutputCurrent()); - - // SmartDashboard.putNumber("Climber Target Pos", mPPIDController.getSetpoint().position); - // SmartDashboard.putNumber("Target Vel", mPPIDController.getSetpoint().velocity); + SmartDashboard.putNumber("Climber Angle (Rotations)", getPos().getRotations()); + SmartDashboard.putNumber("Climber Current (Amps)", spark.getOutputCurrent()); + + switch (state) { + case kFloating: + setVoltage(overrideProvider.get() * Settings.kMaxVoltage); + break; + case kStowed: + setVoltage(0); + break; + case kDeploying: + setVoltage(8.0f); + break; + case kDeployed: + setVoltage(0.0f); + break; + case kRetracting: + setVoltage(-6.0f); + break; + case kHold: + // TODO: Make this value proportional to the distance from the zero point + setVoltage(-2.0f); + break; + } - SmartDashboard.putNumber("Climber Target Pos", mBBController.getSetpoint()); - SmartDashboard.putNumber("Target Vel (RPS)", mBBController.getSetpoint() / 60.0); + final var ns = nextState(state); + if (ns != state) { + System.out.printf("[INFO:CLIMBER] Transitioning state (previous: %s, new: %s)", state.toString(), ns.toString()); + state = ns; + } + } - // Method to run pivots - double voltage = mBBController.calculate(getPos().getRotations()) * 2.0f; - voltage += mAFFController.calculate(getPos().getRotations(), mBBController.getSetpoint() / 60.0); - mClimberPivotMotor.setVoltage(voltage); - SmartDashboard.putNumber("Climber Pivot Voltage", voltage); + public static class DefaultCommand extends Command { + public DefaultCommand(Climber climber) { + addRequirements(climber); + } } } diff --git a/src/main/java/frc/robot/climber/commands/ClimberPivotCommands.java b/src/main/java/frc/robot/climber/commands/ClimberPivotCommands.java deleted file mode 100644 index 1ac7762..0000000 --- a/src/main/java/frc/robot/climber/commands/ClimberPivotCommands.java +++ /dev/null @@ -1,17 +0,0 @@ -package frc.robot.climber.commands; - -import java.util.function.Supplier; - -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.wpilibj2.command.Command; -import frc.robot.climber.Climber; - -public class ClimberPivotCommands { - public static Command setClimberAngle(Climber.State state) { - return new SetClimberAngle(state.pos); - } - - public static Command setClimberAngle(Supplier targetSupplier) { - return new SetClimberAngle(targetSupplier); - } -} diff --git a/src/main/java/frc/robot/climber/commands/SetClimberAngle.java b/src/main/java/frc/robot/climber/commands/SetClimberAngle.java deleted file mode 100644 index de70008..0000000 --- a/src/main/java/frc/robot/climber/commands/SetClimberAngle.java +++ /dev/null @@ -1,37 +0,0 @@ -package frc.robot.climber.commands; - -import java.util.function.Supplier; - -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.wpilibj2.command.Command; -import frc.robot.climber.Climber; - -public class SetClimberAngle extends Command{ - Climber mClimber; - Supplier targetSupplier; - - public SetClimberAngle(Rotation2d angleIn) { - mClimber = Climber.getInstance(); - targetSupplier = ()-> angleIn; - } - public SetClimberAngle(Supplier angleIn) { - mClimber = Climber.getInstance(); - targetSupplier = angleIn; - } - - @Override - public void initialize() { - mClimber.setTargetPos(targetSupplier.get()); - } - - - @Override - public boolean isFinished() { - return false; - } - - @Override - public void end(boolean interrupted) { - - } -} diff --git a/src/main/java/frc/robot/driver/DriverXbox.java b/src/main/java/frc/robot/driver/DriverXbox.java index 47ff131..5d37333 100644 --- a/src/main/java/frc/robot/driver/DriverXbox.java +++ b/src/main/java/frc/robot/driver/DriverXbox.java @@ -19,7 +19,6 @@ import frc.robot.algaepivot.commands.SetAngleAlgaePivot; import frc.robot.auton.AutonMaster; import frc.robot.climber.Climber; -import frc.robot.climber.commands.SetClimberAngle; import frc.robot.commands.RobotCommands; import frc.robot.drivetrain.CommandSwerveDrivetrain; import frc.robot.elevator.ElevatorSubsystem; diff --git a/src/main/java/frc/robot/operator/OperatorXbox.java b/src/main/java/frc/robot/operator/OperatorXbox.java index 8e0f6fb..63fab83 100644 --- a/src/main/java/frc/robot/operator/OperatorXbox.java +++ b/src/main/java/frc/robot/operator/OperatorXbox.java @@ -5,10 +5,7 @@ import edu.wpi.first.math.estimator.PoseEstimator; import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.wpilibj2.command.Commands; -import edu.wpi.first.wpilibj2.command.ConditionalCommand; -import edu.wpi.first.wpilibj2.command.InstantCommand; -import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import edu.wpi.first.wpilibj2.command.*; import edu.wpi.first.wpilibj2.command.button.RobotModeTriggers; import frc.crevolib.util.ExpCurve; import frc.crevolib.util.Gamepad; @@ -20,7 +17,6 @@ import frc.robot.algaepivot.commands.AlgaePivotCommands; import frc.robot.algaepivot.commands.SetAngleAlgaePivot; import frc.robot.climber.Climber; -import frc.robot.climber.commands.SetClimberAngle; import frc.robot.commands.RobotCommands; import frc.robot.driver.DriverXbox; import frc.robot.drivetrain.commands.DrivetrainCommands; @@ -47,6 +43,9 @@ private static class Settings { ExpCurve intakePivotManualCurve; ExpCurve positionTestCurve; ExpCurve elevatorCurve; + + final ExpCurve climberOverrideCurve; + private static OperatorXbox mInstance; ExpCurve shooterManualCurve; @@ -55,6 +54,7 @@ private OperatorXbox() { super(Settings.name, Settings.port); stickCurve = new ExpCurve(1, 0, 1, Settings.kDeadzone); + climberOverrideCurve = new ExpCurve(1, 0, 1, Settings.kDeadzone); } public static OperatorXbox getInstance() { @@ -68,6 +68,14 @@ public static OperatorXbox getInstance() { public void setupTeleopButtons() { /*Comp Bindings */ + // Climber bindings + // TODO: Enable climbing commands once setpoints have been tuned +// controller.povLeft().and(leftTriggerOnly()).onTrue(new SetElevatorState(State.kClimb)); +// controller.povLeft().and(leftTriggerOnly()).onTrue(new SequentialCommandGroup( +// new WaitCommand(0.4), +// new SetAngleAlgaePivot(AlgaeSubsystem.State.kClimb) +// )); + // Algae Reef Intake controller.leftBumper().and(leftTriggerOnly()).whileTrue(new AlgaeRoller.IntakeCommand()); controller.leftBumper().and(leftTriggerOnly()).whileTrue(new SetAngleAlgaePivot(AlgaeSubsystem.State.kReefIntake)); @@ -91,93 +99,93 @@ public void setupTeleopButtons() { // Algae SCorring for Process & Barge controller.rightBumper().and(leftTriggerOnly()).whileTrue(new AlgaeRoller.ProcessShootCommand()); controller.rightBumper().whileTrue(new AlgaeRoller.ShootCommand()); - + // ADjusting Coral ORinetaiton controller.povLeft().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelLeft), - new SetWristState(RushinatorWrist.State.kTravelL4Left), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight - ) + new SetWristState(RushinatorWrist.State.kTravelLeft), + new SetWristState(RushinatorWrist.State.kTravelL4Left), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight + ) ); controller.povRight().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelRight), - new SetWristState(RushinatorWrist.State.kTravelL4Right), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight - ) + new SetWristState(RushinatorWrist.State.kTravelRight), + new SetWristState(RushinatorWrist.State.kTravelL4Right), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight + ) ); // Score Prime L1 controller.a().whileTrue(RobotCommands.coralPrime( - RushinatorPivot.State.kScoreL1, ElevatorSubsystem.State.kZero) + RushinatorPivot.State.kScoreL1, ElevatorSubsystem.State.kZero) ); controller.a().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kScoreL1Mid), - new SetWristState(RushinatorWrist.State.kScoreL1Mid), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || - RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid - ) + new SetWristState(RushinatorWrist.State.kScoreL1Mid), + new SetWristState(RushinatorWrist.State.kScoreL1Mid), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || + RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid + ) ); // Score Prime L2 controller.x().whileTrue(RobotCommands.coralPrime( - RushinatorPivot.State.kStowTravel, ElevatorSubsystem.State.kCoralL2) + RushinatorPivot.State.kStowTravel, ElevatorSubsystem.State.kCoralL2) ); controller.x().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelRight), - new SetWristState(RushinatorWrist.State.kTravelLeft), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || - RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid - ) + new SetWristState(RushinatorWrist.State.kTravelRight), + new SetWristState(RushinatorWrist.State.kTravelLeft), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || + RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid + ) ); // Score Prime L3 controller.b().onTrue(RobotCommands.coralPrime( - RushinatorPivot.State.kStowTravel, ElevatorSubsystem.State.kCoralL3) + RushinatorPivot.State.kStowTravel, ElevatorSubsystem.State.kCoralL3) ); controller.b().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelRight), - new SetWristState(RushinatorWrist.State.kTravelLeft), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || - RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid - ) + new SetWristState(RushinatorWrist.State.kTravelRight), + new SetWristState(RushinatorWrist.State.kTravelLeft), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || + RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid + ) ); // Score Prime L4 controller.y().onTrue(RobotCommands.coralPrime( - RushinatorPivot.State.kStowL4, ElevatorSubsystem.State.kCoralL4) + RushinatorPivot.State.kStowL4, ElevatorSubsystem.State.kCoralL4) ); controller.y().onTrue(new ConditionalCommand( - new SetWristState(RushinatorWrist.State.kTravelL4Right), - new SetWristState(RushinatorWrist.State.kTravelL4Left), - () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || - RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || - RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid || - RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || - RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid - ) + new SetWristState(RushinatorWrist.State.kTravelL4Right), + new SetWristState(RushinatorWrist.State.kTravelL4Left), + () -> RushinatorWrist.kLastState == RushinatorWrist.State.kTravelRight || + RushinatorWrist.kLastState == RushinatorWrist.State.kTravelL4Right || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL4RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL3RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL2RightWrist || + RushinatorWrist.kLastState == RushinatorWrist.State.kScoreL1Mid || + RushinatorWrist.kLastState == RushinatorWrist.State.kGroundMid || + RushinatorWrist.kLastState == RushinatorWrist.State.kHPMid + ) ); // Algae L3 @@ -245,7 +253,7 @@ public void setupTeleopButtons() { // controller.leftTrigger().whileTrue(IndexerCommands.setOutput(() -> 1.0)); // controller.leftBumper().whileTrue(new AlgaeRoller.ShootCommand()); -/*Used Commands */ + /*Used Commands */ // controller.leftTrigger().whileTrue(new SetAngleAlgaePivot(AlgaeSubsystem.State.kFloorIntake)); // controller.leftTrigger().whileTrue(new AlgaeRoller.PrimeCommand()); // controller.leftBumper().whileTrue(new AlgaeRoller.ShootCommand()); @@ -285,6 +293,20 @@ public void setupDisabledButtons() { public void setupTestButtons() { } + public boolean getClimberRetract() { + return controller.leftTrigger().getAsBoolean() && controller.povLeft().getAsBoolean(); + } + + public boolean getClimberDeploy() { + return controller.leftTrigger().getAsBoolean() && controller.povRight().getAsBoolean(); + } + + public double getClimberOverride() { + if (!controller.leftTrigger().getAsBoolean()) { + return 0.0f; + } + return climberOverrideCurve.calculate(controller.getLeftX()); + } public Translation2d getDriveTranslation() { @@ -302,7 +324,7 @@ public double getDriveRotation() { return -stickCurve.calculate(-controller.getRightX()); } - public double getLeftY() { + public double getLeftY() { return controller.getLeftY(); } }