Skip to content

Commit

Permalink
Merge pull request #29 from Spikes-2212-Programming-Guild/district-2-…
Browse files Browse the repository at this point in the history
…structure

fml
  • Loading branch information
Spikes-2212 authored Feb 23, 2025
2 parents 85a571e + e42dd4d commit 26a279b
Show file tree
Hide file tree
Showing 6 changed files with 151 additions and 21 deletions.
36 changes: 20 additions & 16 deletions src/main/java/frc/robot/Robot.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,27 @@

package frc.robot;

import com.pathplanner.lib.auto.NamedCommands;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj2.command.CommandScheduler;
import frc.robot.commands.*;
import frc.robot.subsystems.*;
import frc.robot.subsystems.AlgaeJoint;
import frc.robot.subsystems.Elevator;
import frc.robot.subsystems.Gripper;
import frc.robot.subsystems.Storage;
import frc.robot.subsystems.district2.District2CoralJoint;

public class Robot extends TimedRobot {

private Elevator elevator;
private Storage storage;
private Gripper gripper;
private CoralJoint coralJoint;
// private CoralJoint coralJoint;
private District2CoralJoint coralJoint;
private AlgaeJoint algaeJoint;

@Override
public void robotInit() {
getInstances();
registerNamedCommands();
// registerNamedCommands();
}

@Override
Expand Down Expand Up @@ -80,24 +83,25 @@ public void simulationPeriodic() {
}

private void registerNamedCommands() {
NamedCommands.registerCommand("OuttakeCoralAngle",
new RotateStorage(coralJoint, CoralJoint.StoragePose.PLACEMENT));
NamedCommands.registerCommand("ReleaseCoral", new ReleaseCoral(storage));
NamedCommands.registerCommand("ElevateToFeeder", new MoveToHeight(elevator, Elevator.ElevatorLevel.FEEDER));
NamedCommands.registerCommand("IntakeCoralAngle", new RotateStorage(coralJoint, CoralJoint.StoragePose.INTAKE));
NamedCommands.registerCommand("IntakeCoral", new IntakeCoral(storage));
NamedCommands.registerCommand("IntakeAlgaeAngle", new RotateAlgaeJointToBottom(algaeJoint));
NamedCommands.registerCommand("ElevateToL3", new MoveToHeight(elevator, Elevator.ElevatorLevel.L3));
NamedCommands.registerCommand("TakeAlgae", new IntakeAlgae(gripper));
NamedCommands.registerCommand("PlaceAlgae", new ReleaseAlgae(gripper));
// NamedCommands.registerCommand("OuttakeCoralAngle",
// new RotateStorage(coralJoint, CoralJoint.StoragePose.PLACEMENT));
// NamedCommands.registerCommand("ReleaseCoral", new ReleaseCoral(storage));
// NamedCommands.registerCommand("ElevateToFeeder", new MoveToHeight(elevator, Elevator.ElevatorLevel.FEEDER));
// NamedCommands.registerCommand("IntakeCoralAngle", new RotateStorage(coralJoint, CoralJoint.StoragePose.INTAKE));
// NamedCommands.registerCommand("IntakeCoral", new IntakeCoral(storage));
// NamedCommands.registerCommand("IntakeAlgaeAngle", new RotateAlgaeJointToBottom(algaeJoint));
// NamedCommands.registerCommand("ElevateToL3", new MoveToHeight(elevator, Elevator.ElevatorLevel.L3));
// NamedCommands.registerCommand("TakeAlgae", new IntakeAlgae(gripper));
// NamedCommands.registerCommand("PlaceAlgae", new ReleaseAlgae(gripper));
// NamedCommands.registerCommand("ElevateToL4", new MoveToHeight(elevator, Elevator.ElevatorLevel.L4));
}

private void getInstances() {
elevator = Elevator.getInstance();
storage = Storage.getInstance();
gripper = Gripper.getInstance();
coralJoint = CoralJoint.getInstance();
// coralJoint = CoralJoint.getInstance();
coralJoint = District2CoralJoint.getInstance();
algaeJoint = AlgaeJoint.getInstance();
}
}
4 changes: 2 additions & 2 deletions src/main/java/frc/robot/RobotMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface CAN {
int ELEVATOR_SLAVE_SPARK = -1;
int ALGAE_JOINT_SPARK = -1;
int CORAL_JOINT_TALON = -1;
int GRIPPER_TALON = -1;
int GRIPPER_VICTOR = 13;
int STORAGE_SPARK = -1;
}

Expand All @@ -35,7 +35,7 @@ public interface DIO {
int ALGAE_BOTTOM_LIMIT = -1;
int CORAL_JOINT_TOP_LIMIT = -1;
int CORAL_JOINT_BOTTOM_LIMIT = -1;
int GRIPPER_LIMIT = -1;
int GRIPPER_LIMIT = 1;
int STORAGE_INFRARED = -1;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package frc.robot.commands.district2;

import edu.wpi.first.wpilibj2.command.ParallelCommandGroup;
import edu.wpi.first.wpilibj2.command.SequentialCommandGroup;
import frc.robot.commands.MoveToHeight;
import frc.robot.commands.ReleaseCoral;
import frc.robot.commands.RotateStorage;
import frc.robot.subsystems.CoralJoint;
import frc.robot.subsystems.Elevator;
import frc.robot.subsystems.Storage;
import frc.robot.subsystems.district2.District2CoralJoint;

public class District2PlaceOnReef extends SequentialCommandGroup {

public District2PlaceOnReef(District2CoralJoint coralJoint, Storage storage, District2CoralJoint.StoragePose level) {
addCommands(
new District2RotateStorage(coralJoint, level),
new ReleaseCoral(storage),
new District2RotateStorage(coralJoint, District2CoralJoint.StoragePose.INTAKE)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package frc.robot.commands.district2;

import com.spikes2212.command.genericsubsystem.commands.smartmotorcontrollergenericsubsystem.MoveSmartMotorControllerGenericSubsystem;
import com.spikes2212.control.FeedForwardController;
import com.spikes2212.control.FeedForwardSettings;
import com.spikes2212.control.PIDSettings;
import com.spikes2212.dashboard.RootNamespace;
import com.spikes2212.util.UnifiedControlMode;
import frc.robot.subsystems.CoralJoint;
import frc.robot.subsystems.district2.District2CoralJoint;

import java.util.function.Supplier;

public class District2RotateStorage extends MoveSmartMotorControllerGenericSubsystem {

private static final RootNamespace namespace = new RootNamespace("district 2 rotate storage");
private static final PIDSettings pidSettings = namespace.addPIDNamespace("rotate storage");
private static final FeedForwardSettings feedForwardSettings = namespace.addFeedForwardNamespace("rotate storage",
FeedForwardController.ControlMode.LINEAR_POSITION);

private final District2CoralJoint coralJoint;

public District2RotateStorage(District2CoralJoint coralJoint, Supplier<Double> setpoint) {
super(coralJoint, pidSettings, feedForwardSettings, UnifiedControlMode.POSITION,
setpoint, true);
this.coralJoint = coralJoint;
}

public District2RotateStorage(District2CoralJoint coralJoint, District2CoralJoint.StoragePose pose) {
this(coralJoint, () -> pose.neededPitch);
}

@Override
public boolean isFinished() {
return !(coralJoint.canMove(coralJoint.getSpeed())) || super.isFinished();
}
}

6 changes: 3 additions & 3 deletions src/main/java/frc/robot/subsystems/Gripper.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package frc.robot.subsystems;

import com.ctre.phoenix.motorcontrol.NeutralMode;
import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX;
import com.ctre.phoenix.motorcontrol.can.WPI_VictorSPX;
import com.spikes2212.command.genericsubsystem.MotoredGenericSubsystem;
import edu.wpi.first.wpilibj.DigitalInput;
import frc.robot.RobotMap;
Expand All @@ -16,13 +16,13 @@ public class Gripper extends MotoredGenericSubsystem {

public static Gripper getInstance() {
if (instance == null) {
instance = new Gripper(NAMESPACE_NAME, new WPI_TalonSRX(RobotMap.CAN.GRIPPER_TALON),
instance = new Gripper(NAMESPACE_NAME, new WPI_VictorSPX(RobotMap.CAN.GRIPPER_VICTOR),
new DigitalInput(RobotMap.DIO.GRIPPER_LIMIT));
}
return instance;
}

private Gripper(String namespaceName, WPI_TalonSRX talon, DigitalInput limit) {
private Gripper(String namespaceName, WPI_VictorSPX talon, DigitalInput limit) {
super(namespaceName, talon);
this.limit = limit;
talon.setNeutralMode(NeutralMode.Brake);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package frc.robot.subsystems.district2;

import com.spikes2212.command.genericsubsystem.smartmotorcontrollersubsystem.SmartMotorControllerGenericSubsystem;
import com.spikes2212.util.smartmotorcontrollers.TalonFXWrapper;
import edu.wpi.first.wpilibj.DigitalInput;
import frc.robot.RobotMap;

public class District2CoralJoint extends SmartMotorControllerGenericSubsystem {

public enum StoragePose {

INTAKE(-1), L1(-1), L2(-1), L3(-1), RESTING(-1);

public final double neededPitch;

StoragePose(double neededPitch) {
this.neededPitch = neededPitch;
}
}

public static final double CORAL_JOINT_FORWARD_SPEED = 0.5;
public static final double CORAL_JOINT_BACKWARD_SPEED = 0.5;

private static final String NAMESPACE_NAME = "district 2 coral joint";
private static final double GEAR_RATIO = 1;
private static final double DEGREES_IN_ROTATIONS = 360;
private static final double DISTANCE_PER_PULSE = GEAR_RATIO * DEGREES_IN_ROTATIONS;

private final TalonFXWrapper talonFX;
private final DigitalInput bottomLimit;

private static District2CoralJoint instance;

public static District2CoralJoint getInstance() {
if (instance == null) {
instance = new District2CoralJoint(NAMESPACE_NAME,
new TalonFXWrapper(RobotMap.CAN.CORAL_JOINT_TALON),
new DigitalInput(RobotMap.DIO.CORAL_JOINT_BOTTOM_LIMIT));
}
return instance;
}

private District2CoralJoint(String namespaceName, TalonFXWrapper talonFX, DigitalInput bottomLimit) {
super(namespaceName, talonFX);
this.talonFX = talonFX;
this.bottomLimit = bottomLimit;
talonFX.setEncoderConversionFactor(DISTANCE_PER_PULSE);
configureDashboard();
}

@Override
public boolean canMove(double speed) {
return !(bottomLimit.get() && speed < 0);
}

public void calibrateEncoderPosition() {
if (bottomLimit.get()) {
talonFX.setPosition(StoragePose.RESTING.neededPitch);
}
}

public void configureDashboard() {
namespace.putBoolean("bottom limit", bottomLimit::get);
namespace.putNumber("storage pose", talonFX::getPosition);
}
}

0 comments on commit 26a279b

Please sign in to comment.