From b9331c575fa1ab851baa88d8a8f86c40633963a4 Mon Sep 17 00:00:00 2001 From: radsuperpunch Date: Thu, 29 Jan 2026 08:40:02 -0800 Subject: [PATCH] first draft --- src/main/java/frc/robot/Robot.java | 1 + .../subsystems/indexer/IndexerSubsystem.java | 1 + .../subsystems/intake/ExtensionSubsystem.java | 80 +++++++++++++++++++ .../subsystems/intake/IntakeSubsystem.java | 3 + vendordeps/playingwithfusion2026.json | 71 ++++++++++++++++ 5 files changed, 156 insertions(+) create mode 100644 src/main/java/frc/robot/subsystems/intake/ExtensionSubsystem.java create mode 100644 vendordeps/playingwithfusion2026.json diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 036f351..8163eba 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -386,6 +386,7 @@ private void addAutos() { @Override public void robotPeriodic() { + CommandScheduler.getInstance().run(); superstructure.periodic(); diff --git a/src/main/java/frc/robot/subsystems/indexer/IndexerSubsystem.java b/src/main/java/frc/robot/subsystems/indexer/IndexerSubsystem.java index af761a4..3f79fd7 100644 --- a/src/main/java/frc/robot/subsystems/indexer/IndexerSubsystem.java +++ b/src/main/java/frc/robot/subsystems/indexer/IndexerSubsystem.java @@ -159,6 +159,7 @@ public static TalonFXConfiguration getKickerConfigs() { @Override public void periodic() { + firstCANRangeIO.updateInputs(firstCANRangeInputs); Logger.processInputs("Indexer/First Beambreak", firstCANRangeInputs); secondCANRangeIO.updateInputs(secondCANRangeInputs); diff --git a/src/main/java/frc/robot/subsystems/intake/ExtensionSubsystem.java b/src/main/java/frc/robot/subsystems/intake/ExtensionSubsystem.java new file mode 100644 index 0000000..8ac39d6 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/intake/ExtensionSubsystem.java @@ -0,0 +1,80 @@ +package frc.robot.subsystems.intake; + +import static edu.wpi.first.units.Units.Volts; + +import com.ctre.phoenix6.configs.TalonFXConfiguration; +import com.ctre.phoenix6.signals.InvertedValue; +import com.ctre.phoenix6.signals.NeutralModeValue; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine; +import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.*; +import frc.robot.components.rollers.RollerIO; +import frc.robot.components.rollers.RollerIOInputsAutoLogged; +import org.littletonrobotics.junction.Logger; + +public class ExtensionSubsystem extends SubsystemBase { + public static final double GEAR_RATIO = 2.0; + + + + + private ExtensionIO io; + private ExtensionIOInputsAutoLogged inputs = new RollerIOInputsAutoLogged(); + + private SysIdRoutine intakeRollerSysid = + new SysIdRoutine( + new Config(null, null, null, (state) -> Logger.recordOutput("Extension/SysID State", state)), + new Mechanism((volts) -> io.setExtensionVoltage(volts.in(Volts)), null, this)); + + public ExtensionSubsystem(ExtensionIO io) { + this.io = io; + } + + public void periodic() { + io.updateInputs(inputs); + Logger.processInputs("Extension", inputs); + } + + // TODO get actual values + public Command extend() { + return this.run(() -> io.setExtensionVoltage(5)); + } + + public Command contract() { + return this.run(() -> io.setExtensionVoltage(-2)); + } + + public Command stop() { + return this.run(() -> io.setExtensionVoltage(0)); + } + + public Command runRollerSysid() { + return Commands.sequence( + intakeRollerSysid.quasistatic(Direction.kForward), + intakeRollerSysid.quasistatic(Direction.kReverse), + intakeRollerSysid.dynamic(Direction.kForward), + intakeRollerSysid.dynamic(Direction.kReverse)); + } + + public static TalonFXConfiguration getExtensionConfig() { + TalonFXConfiguration config = new TalonFXConfiguration(); + config.MotorOutput.NeutralMode = NeutralModeValue.Coast; + config.MotorOutput.Inverted = InvertedValue.Clockwise_Positive; + + config.Feedback.SensorToMechanismRatio = GEAR_RATIO; + + config.Slot0.kS = 0.24; + config.Slot0.kV = 0.6; + config.Slot0.kP = 110.0; + config.Slot0.kD = 0.0; + + config.CurrentLimits.StatorCurrentLimit = 80.0; + config.CurrentLimits.StatorCurrentLimitEnable = true; + config.CurrentLimits.SupplyCurrentLimit = 60.0; + config.CurrentLimits.SupplyCurrentLimitEnable = true; + + return config; + } +} diff --git a/src/main/java/frc/robot/subsystems/intake/IntakeSubsystem.java b/src/main/java/frc/robot/subsystems/intake/IntakeSubsystem.java index 89ab34d..677807f 100644 --- a/src/main/java/frc/robot/subsystems/intake/IntakeSubsystem.java +++ b/src/main/java/frc/robot/subsystems/intake/IntakeSubsystem.java @@ -17,6 +17,9 @@ public class IntakeSubsystem extends SubsystemBase { public static final double GEAR_RATIO = 2.0; + + + private RollerIO io; private RollerIOInputsAutoLogged inputs = new RollerIOInputsAutoLogged(); diff --git a/vendordeps/playingwithfusion2026.json b/vendordeps/playingwithfusion2026.json new file mode 100644 index 0000000..c67db89 --- /dev/null +++ b/vendordeps/playingwithfusion2026.json @@ -0,0 +1,71 @@ +{ + "fileName": "playingwithfusion2026.json", + "name": "PlayingWithFusion", + "version": "2026.1.16", + "uuid": "14b8ad04-24df-11ea-978f-2e728ce88125", + "frcYear": "2026", + "jsonUrl": "https://www.playingwithfusion.com/frc/playingwithfusion2026.json", + "mavenUrls": [ + "https://www.playingwithfusion.com/frc/maven/" + ], + "javaDependencies": [ + { + "groupId": "com.playingwithfusion.frc", + "artifactId": "PlayingWithFusion-java", + "version": "2026.1.16" + } + ], + "jniDependencies": [ + { + "groupId": "com.playingwithfusion.frc", + "artifactId": "PlayingWithFusion-driver", + "version": "2026.1.16", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.playingwithfusion.frc", + "artifactId": "PlayingWithFusion-cpp", + "version": "2026.1.16", + "libName": "PlayingWithFusion", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.playingwithfusion.frc", + "artifactId": "PlayingWithFusion-driver", + "version": "2026.1.16", + "libName": "PlayingWithFusionDriver", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ] +}