diff --git a/src/main/java/com/cyberknights4911/constants/DriveConstants.java b/src/main/java/com/cyberknights4911/constants/DriveConstants.java index 2ced313..f73cacd 100644 --- a/src/main/java/com/cyberknights4911/constants/DriveConstants.java +++ b/src/main/java/com/cyberknights4911/constants/DriveConstants.java @@ -23,6 +23,7 @@ public record DriveConstants( PidValues driveFeedBackValues, FeedForwardValues driveFeedForwardValues, int pigeonId, + String canBusId, ModuleConstants frontLeft, ModuleConstants frontRight, ModuleConstants backLeft, diff --git a/src/main/java/com/cyberknights4911/control/ButtonAction.java b/src/main/java/com/cyberknights4911/control/ButtonAction.java index fa97231..d1589d6 100644 --- a/src/main/java/com/cyberknights4911/control/ButtonAction.java +++ b/src/main/java/com/cyberknights4911/control/ButtonAction.java @@ -17,7 +17,7 @@ public enum ButtonAction { StowShooter, CollectNote, StowCollector, - FireNote, + FireNoteSpeaker, StowClimber, ExtendClimber, AimSubwoofer, diff --git a/src/main/java/com/cyberknights4911/drive/GyroIOPigeon2.java b/src/main/java/com/cyberknights4911/drive/GyroIOPigeon2.java index 7afc401..10e29c5 100644 --- a/src/main/java/com/cyberknights4911/drive/GyroIOPigeon2.java +++ b/src/main/java/com/cyberknights4911/drive/GyroIOPigeon2.java @@ -25,7 +25,7 @@ public class GyroIOPigeon2 implements GyroIO { private final StatusSignal rollVelocity; public GyroIOPigeon2(DriveConstants constants) { - pigeon = new Pigeon2(constants.pigeonId()); + pigeon = new Pigeon2(constants.pigeonId(), constants.canBusId()); yaw = pigeon.getYaw(); yawVelocity = pigeon.getAngularVelocityZWorld(); diff --git a/src/main/java/com/cyberknights4911/wham/drive/ModuleIOTalonFX.java b/src/main/java/com/cyberknights4911/drive/ModuleIOTalonFX.java similarity index 98% rename from src/main/java/com/cyberknights4911/wham/drive/ModuleIOTalonFX.java rename to src/main/java/com/cyberknights4911/drive/ModuleIOTalonFX.java index 5318a49..fc80e06 100644 --- a/src/main/java/com/cyberknights4911/wham/drive/ModuleIOTalonFX.java +++ b/src/main/java/com/cyberknights4911/drive/ModuleIOTalonFX.java @@ -5,7 +5,7 @@ // license that can be found in the LICENSE file at // the root directory of this project. -package com.cyberknights4911.wham.drive; +package com.cyberknights4911.drive; import com.ctre.phoenix6.BaseStatusSignal; import com.ctre.phoenix6.StatusSignal; @@ -18,7 +18,6 @@ import com.ctre.phoenix6.signals.InvertedValue; import com.ctre.phoenix6.signals.NeutralModeValue; import com.cyberknights4911.constants.DriveConstants; -import com.cyberknights4911.drive.ModuleIO; import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.math.util.Units; diff --git a/src/main/java/com/cyberknights4911/robot2024/Robot2024.java b/src/main/java/com/cyberknights4911/robot2024/Robot2024.java index a2fb83e..37626fb 100644 --- a/src/main/java/com/cyberknights4911/robot2024/Robot2024.java +++ b/src/main/java/com/cyberknights4911/robot2024/Robot2024.java @@ -16,6 +16,7 @@ import com.cyberknights4911.drive.GyroIOPigeon2; import com.cyberknights4911.drive.ModuleIO; import com.cyberknights4911.drive.ModuleIOSim; +import com.cyberknights4911.drive.ModuleIOTalonFX; import com.cyberknights4911.entrypoint.RobotContainer; import com.cyberknights4911.robot2024.climb.Climb; import com.cyberknights4911.robot2024.climb.ClimbIO; @@ -25,7 +26,6 @@ import com.cyberknights4911.robot2024.collect.CollectIOReal; import com.cyberknights4911.robot2024.collect.CollectIOSim; import com.cyberknights4911.robot2024.control.ControllerBinding; -import com.cyberknights4911.robot2024.drive.ModuleIOSparkFlex; import com.cyberknights4911.robot2024.indexer.Indexer; import com.cyberknights4911.robot2024.indexer.IndexerIO; import com.cyberknights4911.robot2024.indexer.IndexerIOReal; @@ -133,7 +133,7 @@ private void configureControls() { binding.triggersFor(ButtonAction.AimPodium).onTrue(shooter.aimPodium()); - binding.triggersFor(ButtonAction.FireNote).onTrue(shooter.fire()); + binding.triggersFor(ButtonAction.FireNoteSpeaker).onTrue(shooter.fire()); } private Command collectNote() { @@ -244,22 +244,16 @@ private Drive createDrive() { constants, Robot2024Constants.DRIVE_CONSTANTS, new GyroIOPigeon2(Robot2024Constants.DRIVE_CONSTANTS), - new ModuleIOSparkFlex( + new ModuleIOTalonFX( + Robot2024Constants.DRIVE_CONSTANTS, Robot2024Constants.DRIVE_CONSTANTS.frontLeft()), + new ModuleIOTalonFX( Robot2024Constants.DRIVE_CONSTANTS, - Robot2024Constants.DRIVE_CONSTANTS.frontLeft(), - burnManager), - new ModuleIOSparkFlex( + Robot2024Constants.DRIVE_CONSTANTS.frontRight()), + new ModuleIOTalonFX( + Robot2024Constants.DRIVE_CONSTANTS, Robot2024Constants.DRIVE_CONSTANTS.backLeft()), + new ModuleIOTalonFX( Robot2024Constants.DRIVE_CONSTANTS, - Robot2024Constants.DRIVE_CONSTANTS.frontRight(), - burnManager), - new ModuleIOSparkFlex( - Robot2024Constants.DRIVE_CONSTANTS, - Robot2024Constants.DRIVE_CONSTANTS.backLeft(), - burnManager), - new ModuleIOSparkFlex( - Robot2024Constants.DRIVE_CONSTANTS, - Robot2024Constants.DRIVE_CONSTANTS.backRight(), - burnManager)); + Robot2024Constants.DRIVE_CONSTANTS.backRight())); case REPLAY: default: return new Drive( @@ -305,3 +299,9 @@ private Command rumbleQuickTwice() { // TODO: // ehehehehehehehehehhehehehehehehehheehehhehehehehehehehehehehheehhehehehehehehehehehhehehehehehehehehehehehehe +// TODO: +// hows it going? +// TODO: +// pretty good, how about you? +// TODO: +// I am doing alright, bit tired though, can't wait to get vision working diff --git a/src/main/java/com/cyberknights4911/robot2024/Robot2024Constants.java b/src/main/java/com/cyberknights4911/robot2024/Robot2024Constants.java index faa55b3..ae607b4 100644 --- a/src/main/java/com/cyberknights4911/robot2024/Robot2024Constants.java +++ b/src/main/java/com/cyberknights4911/robot2024/Robot2024Constants.java @@ -60,6 +60,7 @@ private Robot2024Constants() {} .turnGearRatio(DriveConstants.TURN_GEAR_RATIO) .driveGearRatio(DriveConstants.L2_GEAR_RATIO) .pigeonId(0) + .canBusId("rio") .turnFeedBackValues(new PidValues(7.0, 0.0, 0.0)) .driveFeedBackValues(new PidValues(0.05, 0.0, 0.0)) .driveFeedForwardValues(new FeedForwardValues(0.1, 0.13)) diff --git a/src/main/java/com/cyberknights4911/robot2024/control/ControllerBinding.java b/src/main/java/com/cyberknights4911/robot2024/control/ControllerBinding.java index 6a93cd8..bc9d1b9 100644 --- a/src/main/java/com/cyberknights4911/robot2024/control/ControllerBinding.java +++ b/src/main/java/com/cyberknights4911/robot2024/control/ControllerBinding.java @@ -58,7 +58,7 @@ public Triggers triggersFor(ButtonAction action) { // case ZeroSpeaker: // return new Triggers(driver.start()); // case AmpLockOn: - // retaurn new Triggers(driver.leftTrigger()); + // return new Triggers(driver.leftTrigger()); // case SpeakerLockOn: // return new Triggers(driver.rightTrigger()); case CollectNote: @@ -69,7 +69,7 @@ public Triggers triggersFor(ButtonAction action) { return new Triggers(operator.povLeft()); case AimSubwoofer: return new Triggers(operator.povRight()); - case FireNote: + case FireNoteSpeaker: return new Triggers(operator.rightTrigger()); default: return new Triggers(ALWAYS_FALSE); diff --git a/src/main/java/com/cyberknights4911/robot2024/drive/ModuleIOSparkFlex.java b/src/main/java/com/cyberknights4911/robot2024/drive/ModuleIOSparkFlex.java deleted file mode 100644 index 70a1844..0000000 --- a/src/main/java/com/cyberknights4911/robot2024/drive/ModuleIOSparkFlex.java +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (c) 2024 FRC 4911 -// https://github.com/frc4911 -// -// Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file at -// the root directory of this project. - -package com.cyberknights4911.robot2024.drive; - -import com.ctre.phoenix6.BaseStatusSignal; -import com.ctre.phoenix6.StatusSignal; -import com.ctre.phoenix6.configs.CANcoderConfiguration; -import com.ctre.phoenix6.hardware.CANcoder; -import com.cyberknights4911.constants.DriveConstants; -import com.cyberknights4911.drive.ModuleIO; -import com.cyberknights4911.util.SparkBurnManager; -import com.revrobotics.CANSparkBase.IdleMode; -import com.revrobotics.CANSparkFlex; -import com.revrobotics.CANSparkLowLevel.MotorType; -import com.revrobotics.RelativeEncoder; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.util.Units; - -/** - * Module IO implementation for SparkMax drive motor controller, SparkMax turn motor controller (NEO - * or NEO 550), and analog absolute encoder connected to the RIO - * - *

NOTE: This implementation should be used as a starting point and adapted to different hardware - * configurations (e.g. If using a CANcoder, copy from "ModuleIOTalonFX") - * - *

To calibrate the absolute encoder offsets, point the modules straight (such that forward - * motion on the drive motor will propel the robot forward) and copy the reported values from the - * absolute encoders using AdvantageScope. These values are logged under - * "/Drive/ModuleX/TurnAbsolutePositionRad" - */ -public class ModuleIOSparkFlex implements ModuleIO { - - private final CANSparkFlex driveSparkMax; - private final CANSparkFlex turnSparkMax; - private final CANcoder cancoder; - - private final RelativeEncoder driveEncoder; - private final RelativeEncoder turnRelativeEncoder; - - private final StatusSignal turnAbsolutePosition; - - private final boolean isTurnMotorInverted = true; - private final Rotation2d absoluteEncoderOffset; - private final DriveConstants driveConstants; - private final SparkBurnManager sparkBurnManager; - - public ModuleIOSparkFlex( - DriveConstants driveConstants, - DriveConstants.ModuleConstants moduleConstants, - SparkBurnManager sparkBurnManager) { - this.driveConstants = driveConstants; - this.sparkBurnManager = sparkBurnManager; - driveSparkMax = new CANSparkFlex(moduleConstants.driveMotorId(), MotorType.kBrushless); - turnSparkMax = new CANSparkFlex(moduleConstants.turnMotorId(), MotorType.kBrushless); - cancoder = new CANcoder(moduleConstants.encoderId()); - absoluteEncoderOffset = new Rotation2d(moduleConstants.encoderOffset()); - - cancoder.getConfigurator().apply(new CANcoderConfiguration()); - turnAbsolutePosition = cancoder.getAbsolutePosition(); - BaseStatusSignal.setUpdateFrequencyForAll(50.0, turnAbsolutePosition); - - driveEncoder = driveSparkMax.getEncoder(); - turnRelativeEncoder = turnSparkMax.getEncoder(); - - sparkBurnManager.maybeBurnConfig( - () -> { - turnSparkMax.setInverted(isTurnMotorInverted); - driveSparkMax.setSmartCurrentLimit(40); - turnSparkMax.setSmartCurrentLimit(30); - driveSparkMax.enableVoltageCompensation(12.0); - turnSparkMax.enableVoltageCompensation(12.0); - - driveEncoder.setPosition(0.0); - driveEncoder.setMeasurementPeriod(10); - driveEncoder.setAverageDepth(2); - - turnRelativeEncoder.setPosition(0.0); - turnRelativeEncoder.setMeasurementPeriod(10); - turnRelativeEncoder.setAverageDepth(2); - }, - driveSparkMax, - turnSparkMax); - } - - @Override - public void updateInputs(ModuleIOInputs inputs) { - BaseStatusSignal.refreshAll(turnAbsolutePosition); - - inputs.drivePositionRad = - Units.rotationsToRadians(driveEncoder.getPosition()) / driveConstants.driveGearRatio(); - inputs.driveVelocityRadPerSec = - Units.rotationsPerMinuteToRadiansPerSecond(driveEncoder.getVelocity()) - / driveConstants.driveGearRatio(); - inputs.driveAppliedVolts = driveSparkMax.getAppliedOutput() * driveSparkMax.getBusVoltage(); - inputs.driveCurrentAmps = new double[] {driveSparkMax.getOutputCurrent()}; - - inputs.turnAbsolutePosition = - Rotation2d.fromRotations(turnAbsolutePosition.getValueAsDouble()) - .minus(absoluteEncoderOffset); - inputs.turnPosition = - Rotation2d.fromRotations( - turnRelativeEncoder.getPosition() / driveConstants.turnGearRatio()); - inputs.turnVelocityRadPerSec = - Units.rotationsPerMinuteToRadiansPerSecond(turnRelativeEncoder.getVelocity()) - / driveConstants.turnGearRatio(); - inputs.turnAppliedVolts = turnSparkMax.getAppliedOutput() * turnSparkMax.getBusVoltage(); - inputs.turnCurrentAmps = new double[] {turnSparkMax.getOutputCurrent()}; - } - - @Override - public void setDriveVoltage(double volts) { - driveSparkMax.setVoltage(volts); - } - - @Override - public void setTurnVoltage(double volts) { - turnSparkMax.setVoltage(volts); - } - - @Override - public void setDriveBrakeMode(boolean enable) { - driveSparkMax.setIdleMode(enable ? IdleMode.kBrake : IdleMode.kCoast); - } - - @Override - public void setTurnBrakeMode(boolean enable) { - turnSparkMax.setIdleMode(enable ? IdleMode.kBrake : IdleMode.kCoast); - } -} diff --git a/src/main/java/com/cyberknights4911/wham/Wham.java b/src/main/java/com/cyberknights4911/wham/Wham.java index e9dfffc..dc576bd 100644 --- a/src/main/java/com/cyberknights4911/wham/Wham.java +++ b/src/main/java/com/cyberknights4911/wham/Wham.java @@ -16,12 +16,12 @@ import com.cyberknights4911.drive.GyroIOPigeon2; import com.cyberknights4911.drive.ModuleIO; import com.cyberknights4911.drive.ModuleIOSim; +import com.cyberknights4911.drive.ModuleIOTalonFX; import com.cyberknights4911.entrypoint.RobotContainer; import com.cyberknights4911.robot2024.Robot2024Constants; import com.cyberknights4911.util.Alliance; import com.cyberknights4911.util.GameAlerts; import com.cyberknights4911.vision.simple.VisionSimple; -import com.cyberknights4911.wham.drive.ModuleIOTalonFX; import com.cyberknights4911.wham.slurpp.Slurpp; import com.cyberknights4911.wham.slurpp.SlurppIO; import com.cyberknights4911.wham.slurpp.SlurppIOReal; diff --git a/src/main/java/com/cyberknights4911/wham/WhamConstants.java b/src/main/java/com/cyberknights4911/wham/WhamConstants.java index 3c6ea2a..6529ef6 100644 --- a/src/main/java/com/cyberknights4911/wham/WhamConstants.java +++ b/src/main/java/com/cyberknights4911/wham/WhamConstants.java @@ -52,6 +52,7 @@ private WhamConstants() {} .turnGearRatio(DriveConstants.TURN_GEAR_RATIO) .driveGearRatio(DriveConstants.L1_GEAR_RATIO) .pigeonId(0) + .canBusId("rio") .turnFeedBackValues(new PidValues(7.0, 0.0, 0.0)) .driveFeedBackValues(new PidValues(0.05, 0.0, 0.0)) .driveFeedForwardValues(new FeedForwardValues(0.1, 0.13))