From 6cb76c01b2ee913870c9c77927c1a853b49acb06 Mon Sep 17 00:00:00 2001 From: Bradley Bickford Date: Sun, 29 Dec 2024 20:00:03 -0500 Subject: [PATCH] Many updates for CS20 and CS21 --- .../frc/robot/constants/ShooterConstants.java | 1 + .../java/frc/robot/subsystems/Shooter.java | 2 +- .../java/frc/robot/subsystems/Drivetrain.java | 4 +- .../{ => robot}/utils/MAXSwerveModule.java | 2 +- .../frc/{ => robot}/utils/SwerveUtils.java | 2 +- .../deploy/pathplanner/autos/Gremlin.auto | 31 ++++++ .../src/main/deploy/pathplanner/navgrid.json | 1 + .../pathplanner/paths/Example Path.path | 68 ++++++++++++ .../deploy/pathplanner/paths/New Path.path | 100 ++++++++++++++++++ .../main/java/frc/robot/RobotContainer.java | 20 +++- .../java/frc/robot/constants/OIConstants.java | 2 + ...lannerLib.json => PathplannerLib2024.json} | 12 +-- 12 files changed, 232 insertions(+), 13 deletions(-) rename CS20 - REV Swerve/src/main/java/frc/{ => robot}/utils/MAXSwerveModule.java (99%) rename CS20 - REV Swerve/src/main/java/frc/{ => robot}/utils/SwerveUtils.java (99%) create mode 100644 CS21 - PathPlanner Basics/src/main/deploy/pathplanner/autos/Gremlin.auto create mode 100644 CS21 - PathPlanner Basics/src/main/deploy/pathplanner/navgrid.json create mode 100644 CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/Example Path.path create mode 100644 CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/New Path.path rename CS21 - PathPlanner Basics/vendordeps/{PathplannerLib.json => PathplannerLib2024.json} (85%) diff --git a/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/constants/ShooterConstants.java b/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/constants/ShooterConstants.java index c3a30cd..8be0f0d 100644 --- a/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/constants/ShooterConstants.java +++ b/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/constants/ShooterConstants.java @@ -12,6 +12,7 @@ public class ShooterConstants { public static final double kEncoderConversionFactor = 0; public static final double kBangBangTolerance = 0; + public static final double kBangBangVoltageMultiplier = 10; public static final double kFFS = 0; public static final double kFFV = 0; diff --git a/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/subsystems/Shooter.java b/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/subsystems/Shooter.java index 1f327ff..fa25478 100644 --- a/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/subsystems/Shooter.java +++ b/CS18 - Sensors with Advanced Controls/src/main/java/frc/robot/subsystems/Shooter.java @@ -53,7 +53,7 @@ public class Shooter extends SubsystemBase { double output = controller.calculate( (motor1Encoder.getRate() + motor2Encoder.getRate()) / 2, speed - ) + ff.calculate(speed); + ) * ShooterConstants.kBangBangVoltageMultiplier + ff.calculate(speed); motor1.setVoltage(output); }); diff --git a/CS20 - REV Swerve/src/main/java/frc/robot/subsystems/Drivetrain.java b/CS20 - REV Swerve/src/main/java/frc/robot/subsystems/Drivetrain.java index 03f1319..04ec04f 100644 --- a/CS20 - REV Swerve/src/main/java/frc/robot/subsystems/Drivetrain.java +++ b/CS20 - REV Swerve/src/main/java/frc/robot/subsystems/Drivetrain.java @@ -20,8 +20,8 @@ import edu.wpi.first.util.WPIUtilJNI; import edu.wpi.first.wpilibj.ADIS16470_IMU; import edu.wpi.first.wpilibj.ADIS16470_IMU.IMUAxis; import frc.robot.constants.DrivetrainConstants; -import frc.utils.MAXSwerveModule; -import frc.utils.SwerveUtils; +import frc.robot.utils.MAXSwerveModule; +import frc.robot.utils.SwerveUtils; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.SubsystemBase; diff --git a/CS20 - REV Swerve/src/main/java/frc/utils/MAXSwerveModule.java b/CS20 - REV Swerve/src/main/java/frc/robot/utils/MAXSwerveModule.java similarity index 99% rename from CS20 - REV Swerve/src/main/java/frc/utils/MAXSwerveModule.java rename to CS20 - REV Swerve/src/main/java/frc/robot/utils/MAXSwerveModule.java index 76878ba..5971194 100644 --- a/CS20 - REV Swerve/src/main/java/frc/utils/MAXSwerveModule.java +++ b/CS20 - REV Swerve/src/main/java/frc/robot/utils/MAXSwerveModule.java @@ -2,7 +2,7 @@ // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. -package frc.utils; +package frc.robot.utils; import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.math.kinematics.SwerveModulePosition; diff --git a/CS20 - REV Swerve/src/main/java/frc/utils/SwerveUtils.java b/CS20 - REV Swerve/src/main/java/frc/robot/utils/SwerveUtils.java similarity index 99% rename from CS20 - REV Swerve/src/main/java/frc/utils/SwerveUtils.java rename to CS20 - REV Swerve/src/main/java/frc/robot/utils/SwerveUtils.java index 867fe0b..a0c9934 100644 --- a/CS20 - REV Swerve/src/main/java/frc/utils/SwerveUtils.java +++ b/CS20 - REV Swerve/src/main/java/frc/robot/utils/SwerveUtils.java @@ -1,4 +1,4 @@ -package frc.utils; +package frc.robot.utils; public class SwerveUtils { diff --git a/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/autos/Gremlin.auto b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/autos/Gremlin.auto new file mode 100644 index 0000000..ce1ae35 --- /dev/null +++ b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/autos/Gremlin.auto @@ -0,0 +1,31 @@ +{ + "version": 1.0, + "startingPose": { + "position": { + "x": 2.0, + "y": 7.0 + }, + "rotation": 0 + }, + "command": { + "type": "sequential", + "data": { + "commands": [ + { + "type": "path", + "data": { + "pathName": "New Path" + } + }, + { + "type": "named", + "data": { + "name": null + } + } + ] + } + }, + "folder": null, + "choreoAuto": false +} \ No newline at end of file diff --git a/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/navgrid.json b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/navgrid.json new file mode 100644 index 0000000..bab0da9 --- /dev/null +++ b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/navgrid.json @@ -0,0 +1 @@ +{"field_size":{"x":16.54,"y":8.21},"nodeSizeMeters":0.3,"grid":[[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true],[true,true,true,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]]} \ No newline at end of file diff --git a/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/Example Path.path b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/Example Path.path new file mode 100644 index 0000000..e74f9e1 --- /dev/null +++ b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/Example Path.path @@ -0,0 +1,68 @@ +{ + "version": 1.0, + "waypoints": [ + { + "anchor": { + "x": 2.0, + "y": 7.0 + }, + "prevControl": null, + "nextControl": { + "x": 3.0, + "y": 7.0 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 4.9219209708544644, + "y": 4.185419462073272 + }, + "prevControl": { + "x": 3.9219209708544644, + "y": 4.185419462073272 + }, + "nextControl": { + "x": 5.921920970854464, + "y": 4.185419462073272 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 7.124773319314081, + "y": 4.185419462073272 + }, + "prevControl": { + "x": 6.67504098644561, + "y": 3.190431108134944 + }, + "nextControl": null, + "isLocked": false, + "linkedName": null + } + ], + "rotationTargets": [], + "constraintZones": [], + "eventMarkers": [], + "globalConstraints": { + "maxVelocity": 3.0, + "maxAcceleration": 3.0, + "maxAngularVelocity": 540.0, + "maxAngularAcceleration": 720.0 + }, + "goalEndState": { + "velocity": 0, + "rotation": -91.7272598416291, + "rotateFast": false + }, + "reversed": false, + "folder": null, + "previewStartingState": { + "rotation": 0, + "velocity": 0 + }, + "useDefaultConstraints": true +} \ No newline at end of file diff --git a/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/New Path.path b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/New Path.path new file mode 100644 index 0000000..f2ceef7 --- /dev/null +++ b/CS21 - PathPlanner Basics/src/main/deploy/pathplanner/paths/New Path.path @@ -0,0 +1,100 @@ +{ + "version": 1.0, + "waypoints": [ + { + "anchor": { + "x": 2.0, + "y": 7.0 + }, + "prevControl": null, + "nextControl": { + "x": 3.0, + "y": 7.0 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 2.6077077608723753, + "y": 0.578382247674906 + }, + "prevControl": { + "x": 1.6077077608723753, + "y": 0.578382247674906 + }, + "nextControl": { + "x": 3.6077077608723753, + "y": 0.578382247674906 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 9.585609716676286, + "y": 1.026162052325425 + }, + "prevControl": { + "x": 9.52815390120199, + "y": -0.017618595457612685 + }, + "nextControl": { + "x": 9.641582192257601, + "y": 2.0429953587193106 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 8.512803934698777, + "y": 7.602927933128594 + }, + "prevControl": { + "x": 8.765079824050103, + "y": 7.436655187872565 + }, + "nextControl": { + "x": 8.102339113771444, + "y": 7.873461565106268 + }, + "isLocked": false, + "linkedName": null + }, + { + "anchor": { + "x": 6.572424781213199, + "y": 7.2857505715011435 + }, + "prevControl": { + "x": 6.2272611817974, + "y": 7.127161890688737 + }, + "nextControl": null, + "isLocked": false, + "linkedName": null + } + ], + "rotationTargets": [], + "constraintZones": [], + "eventMarkers": [], + "globalConstraints": { + "maxVelocity": 3.0, + "maxAcceleration": 3.0, + "maxAngularVelocity": 540.0, + "maxAngularAcceleration": 720.0 + }, + "goalEndState": { + "velocity": 0, + "rotation": 13.828650972347063, + "rotateFast": false + }, + "reversed": false, + "folder": null, + "previewStartingState": { + "rotation": 0, + "velocity": 0 + }, + "useDefaultConstraints": true +} \ No newline at end of file diff --git a/CS21 - PathPlanner Basics/src/main/java/frc/robot/RobotContainer.java b/CS21 - PathPlanner Basics/src/main/java/frc/robot/RobotContainer.java index 3b162a5..a8e765c 100644 --- a/CS21 - PathPlanner Basics/src/main/java/frc/robot/RobotContainer.java +++ b/CS21 - PathPlanner Basics/src/main/java/frc/robot/RobotContainer.java @@ -12,6 +12,9 @@ import com.pathplanner.lib.auto.NamedCommands; import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj.XboxController; import edu.wpi.first.wpilibj.DriverStation.Alliance; +import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets; +import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard; +import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab; import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; import frc.robot.constants.OIConstants; import frc.robot.subsystems.Drivetrain; @@ -42,12 +45,12 @@ public class RobotContainer { drivetrain = new Drivetrain(); driver = new CommandXboxController(OIConstants.kDriverControllerPort); - NamedCommands.registerCommand("Set Drivetrain X", drivetrain.setXCommand()); - autoChooser = AutoBuilder.buildAutoChooser(); // Configure the button bindings configureButtonBindings(); + configureShuffleboard(); + configureNamedCommands(); } /** @@ -86,6 +89,19 @@ public class RobotContainer { ); } + private void configureShuffleboard() { + ShuffleboardTab autoTab = Shuffleboard.getTab(OIConstants.kAutoTabName); + + autoTab.add("Auto Selection", autoChooser) + .withPosition(0, 0) + .withSize(2, 1) + .withWidget(BuiltInWidgets.kComboBoxChooser); + } + + private void configureNamedCommands() { + NamedCommands.registerCommand("Set Drivetrain X", drivetrain.setXCommand()); + } + /** * Use this to pass the autonomous command to the main {@link Robot} class. * diff --git a/CS21 - PathPlanner Basics/src/main/java/frc/robot/constants/OIConstants.java b/CS21 - PathPlanner Basics/src/main/java/frc/robot/constants/OIConstants.java index b2b84c4..ac30ff1 100644 --- a/CS21 - PathPlanner Basics/src/main/java/frc/robot/constants/OIConstants.java +++ b/CS21 - PathPlanner Basics/src/main/java/frc/robot/constants/OIConstants.java @@ -3,4 +3,6 @@ package frc.robot.constants; public class OIConstants { public static final int kDriverControllerPort = 0; public static final double kDriveDeadband = 0.05; + + public static final String kAutoTabName = "Autonomous"; } diff --git a/CS21 - PathPlanner Basics/vendordeps/PathplannerLib.json b/CS21 - PathPlanner Basics/vendordeps/PathplannerLib2024.json similarity index 85% rename from CS21 - PathPlanner Basics/vendordeps/PathplannerLib.json rename to CS21 - PathPlanner Basics/vendordeps/PathplannerLib2024.json index bfc31dc..f112e62 100644 --- a/CS21 - PathPlanner Basics/vendordeps/PathplannerLib.json +++ b/CS21 - PathPlanner Basics/vendordeps/PathplannerLib2024.json @@ -1,18 +1,18 @@ { - "fileName": "PathplannerLib.json", + "fileName": "PathplannerLib2024.json", "name": "PathplannerLib", - "version": "2024.2.7", + "version": "2024.2.8", "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", "frcYear": "2024", "mavenUrls": [ "https://3015rangerrobotics.github.io/pathplannerlib/repo" ], - "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", + "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib2024.json", "javaDependencies": [ { "groupId": "com.pathplanner.lib", "artifactId": "PathplannerLib-java", - "version": "2024.2.7" + "version": "2024.2.8" } ], "jniDependencies": [], @@ -20,7 +20,7 @@ { "groupId": "com.pathplanner.lib", "artifactId": "PathplannerLib-cpp", - "version": "2024.2.7", + "version": "2024.2.8", "libName": "PathplannerLib", "headerClassifier": "headers", "sharedLibrary": false, @@ -35,4 +35,4 @@ ] } ] -} +} \ No newline at end of file