From ef2a32bcf3f7f95c76682e7c1cee68494bc8b2da Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Sat, 23 May 2026 03:17:21 -0400 Subject: [PATCH 1/4] Kill java files --- examples/test_robot_base_swerve/build.gradle | 23 -- .../snobotv2/examples/base_swerve/BUILD.bazel | 25 -- .../examples/base_swerve/Constants.java | 23 -- .../SwerveModuleOptimizationUtils.java | 77 ----- .../examples/base_swerve/commands/BUILD.bazel | 26 -- .../commands/TeleopSwerveDrive.java | 42 --- .../base_swerve/commands/auto/BUILD.bazel | 26 -- .../commands/auto/SetStartingPosition.java | 38 --- .../base_swerve/commands/tuning/BUILD.bazel | 26 -- .../tuning/ManualMoveSwerveModuleCommand.java | 43 --- .../base_swerve/subsystems/BUILD.bazel | 28 -- .../subsystems/BaseSwerveDriveSubsystem.java | 318 ------------------ .../subsystems/BaseSwerveModule.java | 42 --- .../subsystems/CatchallSubsystem.java | 5 - examples/test_robot_phoenix5/BUILD.bazel | 9 - examples/test_robot_phoenix5/build.gradle | 32 -- .../src/main/deploy/example.txt | 3 - .../java/org/snobotv2/examples/phoenix5/BUILD | 29 -- .../org/snobotv2/examples/phoenix5/Main.java | 32 -- .../org/snobotv2/examples/phoenix5/Robot.java | 136 -------- .../examples/phoenix5/RobotContainer.java | 52 --- .../examples/phoenix5/subsystems/BUILD | 23 -- .../phoenix5/subsystems/CtreDrivetrain.java | 175 ---------- .../subsystems/CtreElevatorSubsystem.java | 110 ------ .../subsystems/CtreShooterSubsystem.java | 75 ----- .../examples/phoenix5/subsystems/BUILD | 15 - .../subsystems/BasePhoenix5UnitTest.java | 25 -- .../subsystems/CtreDrivetrainTest.java | 96 ------ .../phoenix5/subsystems/CtreElevatorTest.java | 64 ---- .../rev/subsystems/RevDrivetrain.java | 13 +- examples/test_robot_rev_swerve/BUILD.bazel | 9 - examples/test_robot_rev_swerve/build.gradle | 33 -- .../org/snobotv2/examples/rev_swerve/BUILD | 32 -- .../snobotv2/examples/rev_swerve/Main.java | 32 -- .../snobotv2/examples/rev_swerve/Robot.java | 128 ------- .../examples/rev_swerve/RobotContainer.java | 51 --- .../rev_swerve/subsystems/BUILD.bazel | 30 -- .../rev_swerve/subsystems/DriveSubsystem.java | 20 -- .../rev_swerve/subsystems/SwerveModule.java | 271 --------------- .../rev_swerve/subsystems/BUILD.bazel | 12 - .../subsystems/RevDriveSubsystemTest.java | 160 --------- .../sim_wrappers/SwerveModuleSimWrapper.java | 78 ----- .../sim_wrappers/SwerveSimWrapper.java | 50 --- snobot_sim_java_navx/build.gradle | 36 -- .../snobotv2/module_wrappers/navx/BUILD.bazel | 13 - .../module_wrappers/navx/NavxWrapper.java | 37 -- snobot_sim_java_phoenix5/build.gradle | 41 --- .../module_wrappers/phoenix5/BUILD.bazel | 12 - .../phoenix5/CtreDigitalInputWrapper.java | 23 -- .../phoenix5/CtreEncoderSimWrapper.java | 22 -- .../CtreMotorControllerSimWrapper.java | 32 -- .../phoenix5/CtrePigeonImuWrapper.java | 13 - .../module_wrappers/phoenix5/BUILD.bazel | 15 - .../phoenix5/BasePhoenix5UnitTest.java | 37 -- .../phoenix5/TestPigeonImu.java | 56 --- .../phoenix5/TestTalonSRX.java | 43 --- .../phoenix5/TestTalonSrxMotionMagic.java | 23 -- .../phoenix5/TestTalonSrxPositionMode.java | 24 -- .../phoenix5/TestTalonSrxSpeedMode.java | 24 -- snobot_swerve_sim/build.gradle | 39 --- .../edu/wpi/first/wpilibj/shim/BUILD.bazel | 11 - .../edu/wpi/first/wpilibj/shim/Vector2d.java | 32 -- .../wpilibj/simulation/swerve/BUILD.bazel | 13 - .../wpilibj/simulation/swerve/Force2d.java | 210 ------------ .../simulation/swerve/ForceAtPose2d.java | 79 ----- .../swerve/MotorGearboxWheelSim.java | 92 ----- .../simulation/swerve/QuadSwerveSim.java | 203 ----------- .../swerve/SimpleMotorWithMassModel.java | 54 --- .../simulation/swerve/SwerveModuleSim.java | 237 ------------- .../wpilibj/simulation/swerve/BUILD.bazel | 13 - .../swerve/QuadSwerveDriveTest.java | 152 --------- .../swerve/SwerveModuleSimTest.java | 225 ------------- .../edu/wpi/first/wpilibj/utils/BUILD.bazel | 8 - .../first/wpilibj/utils/SimpleCSVWriter.java | 59 ---- 74 files changed, 6 insertions(+), 4409 deletions(-) delete mode 100644 examples/test_robot_base_swerve/build.gradle delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/BUILD.bazel delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/Constants.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/SwerveModuleOptimizationUtils.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/BUILD.bazel delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/TeleopSwerveDrive.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/BUILD.bazel delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/SetStartingPosition.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/BUILD.bazel delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/ManualMoveSwerveModuleCommand.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BUILD.bazel delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveDriveSubsystem.java delete mode 100644 examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveModule.java delete mode 100644 examples/test_robot_phoenix5/BUILD.bazel delete mode 100644 examples/test_robot_phoenix5/build.gradle delete mode 100644 examples/test_robot_phoenix5/src/main/deploy/example.txt delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/BUILD delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Main.java delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Robot.java delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/RobotContainer.java delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/BUILD delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrain.java delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorSubsystem.java delete mode 100644 examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreShooterSubsystem.java delete mode 100644 examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BUILD delete mode 100644 examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BasePhoenix5UnitTest.java delete mode 100644 examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrainTest.java delete mode 100644 examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorTest.java delete mode 100644 examples/test_robot_rev_swerve/BUILD.bazel delete mode 100644 examples/test_robot_rev_swerve/build.gradle delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/BUILD delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Main.java delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Robot.java delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/RobotContainer.java delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/DriveSubsystem.java delete mode 100644 examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/SwerveModule.java delete mode 100644 examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel delete mode 100644 examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/RevDriveSubsystemTest.java delete mode 100644 snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveModuleSimWrapper.java delete mode 100644 snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveSimWrapper.java delete mode 100644 snobot_sim_java_navx/build.gradle delete mode 100644 snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/BUILD.bazel delete mode 100644 snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/NavxWrapper.java delete mode 100644 snobot_sim_java_phoenix5/build.gradle delete mode 100644 snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel delete mode 100644 snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreDigitalInputWrapper.java delete mode 100644 snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreEncoderSimWrapper.java delete mode 100644 snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreMotorControllerSimWrapper.java delete mode 100644 snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtrePigeonImuWrapper.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BasePhoenix5UnitTest.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestPigeonImu.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSRX.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxMotionMagic.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxPositionMode.java delete mode 100644 snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxSpeedMode.java delete mode 100644 snobot_swerve_sim/build.gradle delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/BUILD.bazel delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/Vector2d.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/Force2d.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/ForceAtPose2d.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/MotorGearboxWheelSim.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveSim.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SimpleMotorWithMassModel.java delete mode 100644 snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSim.java delete mode 100644 snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel delete mode 100644 snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveDriveTest.java delete mode 100644 snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSimTest.java delete mode 100644 snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/BUILD.bazel delete mode 100644 snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/SimpleCSVWriter.java diff --git a/examples/test_robot_base_swerve/build.gradle b/examples/test_robot_base_swerve/build.gradle deleted file mode 100644 index bfafb23..0000000 --- a/examples/test_robot_base_swerve/build.gradle +++ /dev/null @@ -1,23 +0,0 @@ -plugins { - id 'java' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext.baseId = "test_robot_base_swerve" -apply from: "${rootDir}/build_scripts/base_java.gradle" -dependencies { - - implementation wpilibTools.deps.wpilibJava("wpiunits") - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("ntcore") - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation wpilibTools.deps.wpilibJava("cscore") - implementation wpilibTools.deps.wpilibJava("cameraserver") - implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - - implementation project(":snobot_sim_java_base") -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/BUILD.bazel b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/BUILD.bazel deleted file mode 100644 index ff3c3a5..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/BUILD.bazel +++ /dev/null @@ -1,25 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "base_swerve", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_base_swerve:__subpackages__", - "//examples/test_robot_phoenix5_swerve:__subpackages__", - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/Constants.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/Constants.java deleted file mode 100644 index 7d748c9..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/Constants.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.snobotv2.examples.base_swerve; - -@SuppressWarnings("PMD.DataClass") -public class Constants -{ - public static final int FRONT_LEFT_DRIVE_MOTOR_PORT = 3; - public static final int FRONT_LEFT_TURNING_MOTOR_PORT = 4; - public static final int FRONT_LEFT_TURNING_ENCODER_PORTS = 5; - - public static final int FRONT_RIGHT_DRIVE_MOTOR_PORT = 6; - public static final int FRONT_RIGHT_TURNING_MOTOR_PORT = 7; - public static final int FRONT_RIGHT_TURNING_ENCODER_PORTS = 8; - - public static final int REAR_RIGHT_DRIVE_MOTOR_PORT = 9; - public static final int REAR_RIGHT_TURNING_MOTOR_PORT = 10; - public static final int REAR_RIGHT_TURNING_ENCODER_PORTS = 11; - - public static final int REAR_LEFT_DRIVE_MOTOR_PORT = 12; - public static final int REAR_LEFT_TURNING_MOTOR_PORT = 13; - public static final int REAR_LEFT_TURNING_ENCODER_PORTS = 14; - - public static final int GYRO_PORT = 15; -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/SwerveModuleOptimizationUtils.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/SwerveModuleOptimizationUtils.java deleted file mode 100644 index 0c8daea..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/SwerveModuleOptimizationUtils.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.snobotv2.examples.base_swerve; - -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.kinematics.SwerveModuleState; - -public final class SwerveModuleOptimizationUtils -{ - private SwerveModuleOptimizationUtils() - { - } - - /** - * Minimizes the rotation done by the azimuth motor by potentially reversing - * the direction the wheel spins. Customized from WPILib's version, but allowing for - * CTRE's closed loop position control - * - * @param desiredState The desired state - * @param currentAngle the current module angle - * @return The optimized state - */ - @SuppressWarnings("PMD.AvoidLiteralsInIfCondition") - public static SwerveModuleState optimize(SwerveModuleState desiredState, Rotation2d currentAngle) - { - double targetSpeed = desiredState.speedMetersPerSecond; - double targetAngle = placeInAppropriate0To360Scope(currentAngle.getDegrees(), desiredState.angle.getDegrees()); - - double delta = targetAngle - currentAngle.getDegrees(); - if (Math.abs(delta) > 90) - { - targetSpeed = -targetSpeed; - targetAngle = delta > 90 ? targetAngle - 180 : targetAngle + 180; - } - return new SwerveModuleState(targetSpeed, Rotation2d.fromDegrees(targetAngle)); - } - - /*** - * Wraps the current position of the swerve module around a - * 0 - 360 boundary so that it can be used in the optimize method - * - * @param scopeReference The current angle the swerve module is at - * @param newAngle The desired angle - * @return The optimized angle - */ - @SuppressWarnings({"PMD.AvoidReassigningParameters", "PMD.AvoidLiteralsInIfCondition"}) - private static double placeInAppropriate0To360Scope(double scopeReference, double newAngle) - { - double lowerBound; - double upperBound; - double lowerOffset = scopeReference % 360; - - if (lowerOffset >= 0) - { - lowerBound = scopeReference - lowerOffset; - upperBound = scopeReference + (360 - lowerOffset); - } else - { - upperBound = scopeReference - lowerOffset; - lowerBound = scopeReference - (360 + lowerOffset); - } - while (newAngle < lowerBound) - { - newAngle += 360; - } - while (newAngle > upperBound) - { - newAngle -= 360; - } - if (newAngle - scopeReference > 180) - { - newAngle -= 360; - } else if (newAngle - scopeReference < -180) - { - newAngle += 360; - } - return newAngle; - } -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/BUILD.bazel b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/BUILD.bazel deleted file mode 100644 index 069e961..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/BUILD.bazel +++ /dev/null @@ -1,26 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "commands", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_base_swerve:__subpackages__", - "//examples/test_robot_phoenix5_swerve:__subpackages__", - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/TeleopSwerveDrive.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/TeleopSwerveDrive.java deleted file mode 100644 index a117983..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/TeleopSwerveDrive.java +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// 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 org.snobotv2.examples.base_swerve.commands; - -import edu.wpi.first.wpilibj.XboxController; -import edu.wpi.first.wpilibj2.command.Command; -import org.snobotv2.examples.base_swerve.subsystems.BaseSwerveDriveSubsystem; - -public class TeleopSwerveDrive extends Command -{ - private final BaseSwerveDriveSubsystem mDrive; - private final XboxController mController; - - public TeleopSwerveDrive(BaseSwerveDriveSubsystem drive, XboxController controller) - { - mDrive = drive; - mController = controller; - addRequirements(drive); - } - - @Override - public void execute() - { - double xSpeed = mController.getLeftX() * BaseSwerveDriveSubsystem.kMaxSpeedMetersPerSecond; - double ySpeed = -mController.getLeftY() * BaseSwerveDriveSubsystem.kMaxSpeedMetersPerSecond; - double rot = mController.getRightX() * BaseSwerveDriveSubsystem.kMaxRotationRadiansPerSecond; - mDrive.teleDrive(xSpeed, ySpeed, rot); - } - - @Override - public void end(boolean interrupted) - { - } - - @Override - public boolean isFinished() - { - return false; - } -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/BUILD.bazel b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/BUILD.bazel deleted file mode 100644 index b5279db..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/BUILD.bazel +++ /dev/null @@ -1,26 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "auto", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_base_swerve:__subpackages__", - "//examples/test_robot_phoenix5_swerve:__subpackages__", - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/SetStartingPosition.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/SetStartingPosition.java deleted file mode 100644 index ea74d51..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto/SetStartingPosition.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.snobotv2.examples.base_swerve.commands.auto; - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.wpilibj2.command.Command; -import org.snobotv2.examples.base_swerve.subsystems.BaseSwerveDriveSubsystem; - -public class SetStartingPosition extends Command -{ - private final BaseSwerveDriveSubsystem mDriveSubsystem; - private final Pose2d mPose; - - private int mResetCounter; - - public SetStartingPosition(BaseSwerveDriveSubsystem drive, Pose2d pose) - { - mDriveSubsystem = drive; - mPose = pose; - } - - @Override - public void initialize() - { - mResetCounter = 0; - } - - @Override - public void execute() - { - ++mResetCounter; - mDriveSubsystem.resetOdometry(mPose); - } - - @Override - public boolean isFinished() - { - return mResetCounter >= 20; - } -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/BUILD.bazel b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/BUILD.bazel deleted file mode 100644 index 7927a32..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/BUILD.bazel +++ /dev/null @@ -1,26 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "tuning", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_base_swerve:__subpackages__", - "//examples/test_robot_phoenix5_swerve:__subpackages__", - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/ManualMoveSwerveModuleCommand.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/ManualMoveSwerveModuleCommand.java deleted file mode 100644 index 818670c..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning/ManualMoveSwerveModuleCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.snobotv2.examples.base_swerve.commands.tuning; - -import edu.wpi.first.wpilibj2.command.Command; -import org.snobotv2.examples.base_swerve.subsystems.BaseSwerveDriveSubsystem; - - -public class ManualMoveSwerveModuleCommand extends Command -{ - private final BaseSwerveDriveSubsystem mDriveSubsystem; - private final BaseSwerveDriveSubsystem.SwerveModulePositionTypes mModulePosition; - private static final double TURNING_SPEED = 1; - private static final double DRIVING_SPEED = 0; - - public ManualMoveSwerveModuleCommand(BaseSwerveDriveSubsystem driveSubsystem, BaseSwerveDriveSubsystem.SwerveModulePositionTypes modulePosition) - { - mDriveSubsystem = driveSubsystem; - mModulePosition = modulePosition; - addRequirements(this.mDriveSubsystem); - } - - @Override - public void initialize() - { - } - - @Override - public void execute() - { - mDriveSubsystem.manuallyMoveModule(mModulePosition, TURNING_SPEED, DRIVING_SPEED); - } - - @Override - public boolean isFinished() - { - return false; - } - - @Override - public void end(boolean interrupted) - { - mDriveSubsystem.stop(); - } -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BUILD.bazel b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BUILD.bazel deleted file mode 100644 index b59e1f9..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BUILD.bazel +++ /dev/null @@ -1,28 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "subsystems", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_base_swerve:__subpackages__", - "//examples/test_robot_phoenix5_swerve:__subpackages__", - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve", - "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers/wpi", - "//snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveDriveSubsystem.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveDriveSubsystem.java deleted file mode 100644 index 991b09d..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveDriveSubsystem.java +++ /dev/null @@ -1,318 +0,0 @@ -package org.snobotv2.examples.base_swerve.subsystems; - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.math.kinematics.ChassisSpeeds; -import edu.wpi.first.math.kinematics.SwerveDriveKinematics; -import edu.wpi.first.math.kinematics.SwerveDriveOdometry; -import edu.wpi.first.math.kinematics.SwerveModulePosition; -import edu.wpi.first.math.kinematics.SwerveModuleState; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.util.sendable.Sendable; -import edu.wpi.first.util.sendable.SendableBuilder; -import edu.wpi.first.wpilibj.ADXRS450_Gyro; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard; -import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab; -import edu.wpi.first.wpilibj.smartdashboard.Field2d; -import edu.wpi.first.wpilibj2.command.SubsystemBase; -import org.snobotv2.examples.base_swerve.Constants; -import org.snobotv2.module_wrappers.wpi.ADXRS450GyroWrapper; -import org.snobotv2.sim_wrappers.SwerveModuleSimWrapper; -import org.snobotv2.sim_wrappers.SwerveSimWrapper; - -import java.util.List; - -public class BaseSwerveDriveSubsystem extends SubsystemBase implements AutoCloseable -{ - // Distance between centers of right and left wheels on robot - private static final double kTrackWidth = Units.inchesToMeters(20.733); - - // Distance between front and back wheels on robot - private static final double kWheelBase = Units.inchesToMeters(20.733); - - public static final SwerveDriveKinematics kDriveKinematics = new SwerveDriveKinematics( - new Translation2d(kWheelBase / 2, kTrackWidth / 2), - new Translation2d(kWheelBase / 2, -kTrackWidth / 2), - new Translation2d(-kWheelBase / 2, kTrackWidth / 2), - new Translation2d(-kWheelBase / 2, -kTrackWidth / 2)); - - public static final double kMaxSpeedMetersPerSecond = 3; - public static final double kMaxRotationRadiansPerSecond = Units.degreesToRadians(450); - public static final double kWheelDiameterMeters = Units.inchesToMeters(4.0); - public static final double kWheelCircumfranceMeters = kWheelDiameterMeters * Math.PI; - - private final BaseSwerveModule mFrontLeft; - private final BaseSwerveModule mRearLeft; - private final BaseSwerveModule mFrontRight; - private final BaseSwerveModule mRearRight; - - private final BaseSwerveModule[] mModules; - - private final ADXRS450_Gyro mGyro; - - private final Field2d mField; - private final SwerveDriveOdometry mOdometry; - private boolean mFieldRelative; - - private SwerveSimWrapper mSimulator; // NOPMD(ImmutableField) - - private final SwerveModulePosition[] mModulePositions; - - public interface ModuleFactory - { - BaseSwerveModule createModule( - int driveMotorChannel, - int turningMotorChannel, - int turningEncoderChannels, - double encoderOffset, - String name); - } - - public enum SwerveModulePositionTypes - { - FRONT_LEFT, - FRONT_RIGHT, - REAR_LEFT, - REAR_RIGHT - } - - protected BaseSwerveDriveSubsystem(ModuleFactory factory, boolean addDebugTab) - { - mGyro = new ADXRS450_Gyro(); - - mFrontLeft = factory.createModule( - Constants.FRONT_LEFT_DRIVE_MOTOR_PORT, - Constants.FRONT_LEFT_TURNING_MOTOR_PORT, - Constants.FRONT_LEFT_TURNING_ENCODER_PORTS, - 0, - "FL"); - - mRearLeft = factory.createModule( - Constants.REAR_LEFT_DRIVE_MOTOR_PORT, - Constants.REAR_LEFT_TURNING_MOTOR_PORT, - Constants.REAR_LEFT_TURNING_ENCODER_PORTS, - 0, - "RL"); - - mFrontRight = factory.createModule( - Constants.FRONT_RIGHT_DRIVE_MOTOR_PORT, - Constants.FRONT_RIGHT_TURNING_MOTOR_PORT, - Constants.FRONT_RIGHT_TURNING_ENCODER_PORTS, - 0, - "FR"); - - mRearRight = factory.createModule( - Constants.REAR_RIGHT_DRIVE_MOTOR_PORT, - Constants.REAR_RIGHT_TURNING_MOTOR_PORT, - Constants.REAR_RIGHT_TURNING_ENCODER_PORTS, - 0, - "RR"); - - mModulePositions = new SwerveModulePosition[]{ - mFrontLeft.getPosition(), - mFrontRight.getPosition(), - mRearLeft.getPosition(), - mRearLeft.getPosition(), - }; - - mModules = new BaseSwerveModule[]{ - mFrontLeft, - mFrontRight, - mRearLeft, - mRearRight - }; - - mOdometry = new SwerveDriveOdometry(kDriveKinematics, mGyro.getRotation2d(), mModulePositions, new Pose2d()); - mField = new Field2d(); - - // Shuffleboard debugging - if (addDebugTab) - { - ShuffleboardTab debugTab = Shuffleboard.getTab("Drivetrain"); - - debugTab.add("SwerveState", new SwerveModuleSendable()); - for (BaseSwerveModule module : mModules) // NOPMD(CloseResource) - { - debugTab.add(module.getName() + " Module", module); - } - debugTab.add(mField); - } - - // Simulation - if (RobotBase.isSimulation()) - { - List moduleSims = List.of( - mFrontLeft.getSimWrapper(), - mFrontRight.getSimWrapper(), - mRearLeft.getSimWrapper(), - mRearRight.getSimWrapper()); - mSimulator = new SwerveSimWrapper(kWheelBase, kTrackWidth, 64.0, 1.0, moduleSims, new ADXRS450GyroWrapper(mGyro)); - } - } - - @Override - public void close() - { - for (BaseSwerveModule module : mModules) // NOPMD(CloseResource) - { - module.close(); - } - - mGyro.close(); - } - - - public List getModuleStates() - { - return List.of( - mFrontLeft.getState(), - mFrontRight.getState(), - mRearLeft.getState(), - mRearRight.getState()); - } - - public void stop() - { - for (BaseSwerveModule module : mModules) // NOPMD(CloseResource) - { - module.stop(); - } - } - - - public void setGoalPosition(Pose2d poseMeters) - { - mField.getObject("Goal").setPose(poseMeters); - } - - - private final class SwerveModuleSendable implements Sendable - { - @Override - public void initSendable(SendableBuilder builder) - { - builder.setSmartDashboardType("SwerveDrive"); - for (BaseSwerveModule module : mModules) // NOPMD(CloseResource) - { - builder.addDoubleProperty(module.getName() + "/CurrentStateAngle", module.getState().angle::getDegrees, null); - builder.addDoubleProperty(module.getName() + "/CurrentStateSpeed", () -> module.getState().speedMetersPerSecond, null); - builder.addDoubleProperty(module.getName() + "/DesiredStateAngle", module.getDesiredState().angle::getDegrees, null); - builder.addDoubleProperty(module.getName() + "/DesiredStateSpeed", () -> module.getDesiredState().speedMetersPerSecond, null); - builder.addDoubleProperty(module.getName() + "/DrivePercentage", module::getDriveMotorPercentage, null); - builder.addDoubleProperty(module.getName() + "/TurningPercentage", module::getTurningMotorPercentage, null); - } - } - } - - public void manuallyMoveModule(SwerveModulePositionTypes modulePosition, double turnSpeed, double driveSpeed) - { - mModules[modulePosition.ordinal()].setOpenLoop(turnSpeed, driveSpeed); - } - - @Override - public void periodic() - { - for (int i = 0; i < mModules.length; ++i) // NOPMD(CloseResource) - { - mModules[i].periodic(); - mModulePositions[i] = mModules[i].getPosition(); - } - - // Update the odometry in the periodic block - if (RobotBase.isSimulation()) - { - mOdometry.resetPosition(mGyro.getRotation2d(), mModulePositions, mSimulator.getPose()); - } else - { - mOdometry.update( - mGyro.getRotation2d(), - mModulePositions); - } - - mField.setRobotPose(mOdometry.getPoseMeters()); - } - - @Override - public void simulationPeriodic() - { - mSimulator.update(); - } - - /** - * Returns the currently-estimated pose of the robot. - * - * @return The pose. - */ - public Pose2d getPose() - { - return mOdometry.getPoseMeters(); - } - - /** - * Resets the odometry to the specified pose. - * - * @param pose The pose to which to set the odometry. - */ - public void resetOdometry(Pose2d pose) - { - mOdometry.resetPosition(mGyro.getRotation2d(), mModulePositions, pose); - } - - public void setTeleDriveFieldRelative(boolean fieldRelative) - { - mFieldRelative = fieldRelative; - } - - /** - * Method to drive the robot using joystick info. - * - * @param xSpeed Speed of the robot in the x direction (forward). - * @param ySpeed Speed of the robot in the y direction (sideways). - * @param rot Angular rate of the robot. - */ - @SuppressWarnings("ParameterName") - public void teleDrive(double xSpeed, double ySpeed, double rot) - { - ChassisSpeeds chassisSpeed; - if (mFieldRelative) - { - chassisSpeed = ChassisSpeeds.fromFieldRelativeSpeeds( - xSpeed, - ySpeed, - rot, - mGyro.getRotation2d()); - } - else - { - chassisSpeed = new ChassisSpeeds(xSpeed, ySpeed, rot); - } - setModuleStates(kDriveKinematics.toSwerveModuleStates(chassisSpeed)); - } - - /** - * Sets the swerve ModuleStates. - * - * @param desiredStates The desired SwerveModule states. - */ - public void setModuleStates(SwerveModuleState... desiredStates) - { - SwerveDriveKinematics.desaturateWheelSpeeds( - desiredStates, kMaxSpeedMetersPerSecond); - for (int i = 0; i < mModules.length; ++i) - { - mModules[i].setDesiredState(desiredStates[i], true); - } - } - - /** - * Resets the drive encoders to currently read a position of 0. - */ - public void resetEncoders() - { - for (BaseSwerveModule module : mModules) // NOPMD(CloseResource) - { - module.resetEncoders(); - } - } -} diff --git a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveModule.java b/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveModule.java deleted file mode 100644 index 73c3df4..0000000 --- a/examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems/BaseSwerveModule.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.snobotv2.examples.base_swerve.subsystems; - -import edu.wpi.first.math.kinematics.SwerveModulePosition; -import edu.wpi.first.math.kinematics.SwerveModuleState; -import edu.wpi.first.util.sendable.Sendable; -import org.snobotv2.sim_wrappers.SwerveModuleSimWrapper; - -public interface BaseSwerveModule extends Sendable, AutoCloseable -{ - // MK4i - L1 - @SuppressWarnings("PMD.UselessParentheses") - double TURNING_GEAR_RATION = (50.0 / 14.0) * (60.0 / 10.0); - @SuppressWarnings("PMD.UselessParentheses") - double DRIVE_GEAR_RATION = (50.0 / 14.0) * (19.0 / 25.0) * (45.0 / 15.0); - - @Override - void close(); - - String getName(); - - SwerveModulePosition getPosition(); - - SwerveModuleState getState(); - - SwerveModuleState getDesiredState(); - - double getDriveMotorPercentage(); - - double getTurningMotorPercentage(); - - void setOpenLoop(double turnSpeed, double driveSpeed); - - void periodic(); - - void setDesiredState(SwerveModuleState desiredState, boolean openLoopDriving); - - void resetEncoders(); - - SwerveModuleSimWrapper getSimWrapper(); - - void stop(); -} diff --git a/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/CatchallSubsystem.java b/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/CatchallSubsystem.java index 6134177..13b5eda 100644 --- a/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/CatchallSubsystem.java +++ b/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/CatchallSubsystem.java @@ -6,8 +6,6 @@ import com.revrobotics.spark.SparkFlex; import com.revrobotics.spark.SparkLowLevel; import com.revrobotics.spark.SparkMax; -import com.studica.frc.AHRS; -import com.studica.frc.AHRS.NavXComType; import edu.wpi.first.wpilibj.ADXL345_I2C; import edu.wpi.first.wpilibj.ADXL345_SPI; import edu.wpi.first.wpilibj.ADXL362; @@ -77,7 +75,6 @@ public class CatchallSubsystem extends SubsystemBase protected final Ultrasonic mUltrasonic; protected final VictorSP mVictorSP; - protected final AHRS mNavx; protected final SparkMax mCanSparkMax; protected final SparkFlex mCanSparkFlex; protected final WPI_TalonSRX mTalonSrx; @@ -125,8 +122,6 @@ public CatchallSubsystem() mCanSparkFlex = new SparkFlex(17, SparkLowLevel.MotorType.kBrushed); mTalonSrx = new WPI_TalonSRX(16); mVictorSpx = new WPI_VictorSPX(18); - - mNavx = new AHRS(NavXComType.kMXP_SPI); } public void simulationPeriodic() diff --git a/examples/test_robot_phoenix5/BUILD.bazel b/examples/test_robot_phoenix5/BUILD.bazel deleted file mode 100644 index 0641c42..0000000 --- a/examples/test_robot_phoenix5/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -alias( - name = "test_robot_phoenix5", - actual = "//examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5:Main", -) - -alias( - name = "sim", - actual = "//examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5:Main.sim", -) diff --git a/examples/test_robot_phoenix5/build.gradle b/examples/test_robot_phoenix5/build.gradle deleted file mode 100644 index 12b42b4..0000000 --- a/examples/test_robot_phoenix5/build.gradle +++ /dev/null @@ -1,32 +0,0 @@ -plugins { - id 'java' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext.baseId = "test_robot_ctre" -apply from: "${rootDir}/build_scripts/base_java.gradle" -dependencies { - - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("cscore") - implementation wpilibTools.deps.wpilibJava("ntcore") - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation wpilibTools.deps.wpilibJava("cameraserver") - implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - - implementation "com.ctre.phoenix:api-java:${phoenix5Version}" - implementation "com.ctre.phoenix:wpiapi-java:${phoenix5Version}" - - implementation project(":snobot_sim_java_base") - implementation project(":snobot_sim_java_phoenix5") - implementation project(":examples:test_robot_base") - - testImplementation project(":snobot_sim_java_test_utils") - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} diff --git a/examples/test_robot_phoenix5/src/main/deploy/example.txt b/examples/test_robot_phoenix5/src/main/deploy/example.txt deleted file mode 100644 index d6ec5cf..0000000 --- a/examples/test_robot_phoenix5/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/BUILD b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/BUILD deleted file mode 100644 index cc2710a..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library", "snobot_sim_java_robot") - -snobot_sim_java_library( - name = "phoenix5", - srcs = glob(["*.java"]), - visibility = [ - "//examples/test_robot_phoenix5:__subpackages__", - "//snobot_sim_java_base/src/test:__subpackages__", - "//snobot_sim_java_phoenix5/src/test:__subpackages__", - ], - deps = [ - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base", - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base/auton_modes", - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base/subsystems", - "//examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - ], -) - -snobot_sim_java_robot( - name = "Main", - main_class = "org.snobotv2.examples.phoenix5.Main", - visibility = ["//examples/test_robot_phoenix5:__subpackages__"], - runtime_deps = [":phoenix5"], -) diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Main.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Main.java deleted file mode 100644 index ec788d2..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Main.java +++ /dev/null @@ -1,32 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */ -/* Open Source Software - may be modified and shared by FRC teams. The code */ -/* must be accompanied by the FIRST BSD license file in the root directory of */ -/* the project. */ -/*----------------------------------------------------------------------------*/ - -package org.snobotv2.examples.phoenix5; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main -{ - private Main() - { - } - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main frc.robot class, change the parameter type. - */ - public static void main(String... args) - { - RobotBase.startRobot(Robot::new); - } -} diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Robot.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Robot.java deleted file mode 100644 index d985cd0..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/Robot.java +++ /dev/null @@ -1,136 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) 2017-2019 FIRST. All Rights Reserved. */ -/* Open Source Software - may be modified and shared by FRC teams. The code */ -/* must be accompanied by the FIRST BSD license file in the root directory of */ -/* the project. */ -/*----------------------------------------------------------------------------*/ - -package org.snobotv2.examples.phoenix5; - -import com.ctre.phoenix.unmanaged.Unmanaged; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -/** - * The VM is configured to automatically run this class, and to call the functions corresponding to - * each mode, as described in the TimedRobot documentation. If you change the name of this class or - * the package after creating this project, you must also update the build.gradle file in the - * project. - */ -@SuppressWarnings("PMD.TooManyMethods") -public class Robot extends TimedRobot -{ - private Command mAutonomousCommand; - - private RobotContainer mRobotContainer; - - /** - * This function is run when the frc.robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() - { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - mRobotContainer = new RobotContainer(); - - } - - /** - * This function is called every frc.robot packet, no matter the mode. Use this for items like - * diagnostics that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before - * LiveWindow and SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() - { - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the frc.robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** - * This function is called once each time the frc.robot enters Disabled mode. - */ - @Override - public void disabledInit() - { - } - - @Override - public void disabledPeriodic() - { - } - - /** - * This autonomous runs the autonomous command selected by your {@link RobotContainer} class. - */ - @Override - public void autonomousInit() - { - mAutonomousCommand = mRobotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (mAutonomousCommand != null) - { - CommandScheduler.getInstance().schedule(mAutonomousCommand); - } - } - - /** - * This function is called periodically during autonomous. - */ - @Override - public void autonomousPeriodic() - { - } - - @Override - public void teleopInit() - { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (mAutonomousCommand != null) - { - mAutonomousCommand.cancel(); - } - } - - /** - * This function is called periodically during operator control. - */ - @Override - public void teleopPeriodic() - { - } - - @Override - public void testInit() - { - // Cancels all running commands at the start of test mode. - CommandScheduler.getInstance().cancelAll(); - } - - /** - * This function is called periodically during test mode. - */ - @Override - public void testPeriodic() - { - } - - @Override - public void simulationPeriodic() - { - Unmanaged.feedEnable(100); -// SnobotSim.update(); - } -} diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/RobotContainer.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/RobotContainer.java deleted file mode 100644 index 589dadf..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/RobotContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.snobotv2.examples.phoenix5; - -import edu.wpi.first.cameraserver.CameraServer; -import edu.wpi.first.wpilibj2.command.Command; -import org.snobotv2.examples.base.auton_modes.AutonomousFactory; -import org.snobotv2.examples.base.ButtonMapping; -import org.snobotv2.examples.phoenix5.subsystems.CtreDrivetrain; -import org.snobotv2.examples.phoenix5.subsystems.CtreElevatorSubsystem; -import org.snobotv2.examples.phoenix5.subsystems.CtreShooterSubsystem; -import org.snobotv2.examples.base.subsystems.DrivetrainSubsystem; -import org.snobotv2.examples.base.subsystems.ElevatorSubsystem; -import org.snobotv2.examples.base.subsystems.LedSubsystem; -import org.snobotv2.examples.base.subsystems.PunchSubsystem; -import org.snobotv2.examples.base.subsystems.ShooterSubsystem; - -public class RobotContainer -{ - private final DrivetrainSubsystem mDrivetrain; - private final ElevatorSubsystem mElevatorSubsystem; - private final ShooterSubsystem mShooter; - - private final PunchSubsystem mPunch; - private final LedSubsystem mLeds; // NOPMD - - private final AutonomousFactory mAutonFactory; - - public RobotContainer() - { - mDrivetrain = new CtreDrivetrain(); - mElevatorSubsystem = new CtreElevatorSubsystem(); - mShooter = new CtreShooterSubsystem(); - - mPunch = new PunchSubsystem(); - mLeds = new LedSubsystem(); - - mAutonFactory = new AutonomousFactory(mDrivetrain, mElevatorSubsystem, mPunch, mShooter, mLeds); - - configureButtonBindings(); - CameraServer.startAutomaticCapture(); - } - - private void configureButtonBindings() - { - new ButtonMapping(mDrivetrain, mElevatorSubsystem, mPunch, mShooter); - } - - public Command getAutonomousCommand() - { - return mAutonFactory.getAutonCommand(); - } - -} diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/BUILD b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/BUILD deleted file mode 100644 index 222df8e..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "subsystems", - srcs = glob(["*.java"]), - visibility = [ - "//examples/test_robot_phoenix5:__subpackages__", - "//snobot_sim_java_base/src/test:__subpackages__", - "//snobot_sim_java_phoenix5/src/test:__subpackages__", - ], - deps = [ - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base", - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base/subsystems", - "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers/wpi", - "//snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers", - "//snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - ], -) diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrain.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrain.java deleted file mode 100644 index bf6fec4..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrain.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - -import com.ctre.phoenix.motorcontrol.ControlMode; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import edu.wpi.first.wpilibj.ADXRS450_Gyro; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.wpilibj.RobotController; -import edu.wpi.first.wpilibj.drive.DifferentialDrive; -import edu.wpi.first.math.geometry.Pose2d; -import org.snobotv2.examples.base.BaseConstants; -import org.snobotv2.examples.base.subsystems.BaseDrivetrainSubsystem; -import org.snobotv2.module_wrappers.phoenix5.CtreEncoderSimWrapper; -import org.snobotv2.module_wrappers.phoenix5.CtreMotorControllerSimWrapper; -import org.snobotv2.module_wrappers.wpi.ADXRS450GyroWrapper; -import org.snobotv2.sim_wrappers.DifferentialDrivetrainSimWrapper; - -public class CtreDrivetrain extends BaseDrivetrainSubsystem -{ - private static final DrivetrainConstants DRIVETRAIN_CONSTANTS = new CimDrivetrainConstants(); - - private static final double TICKS_TO_POSITION = 1.0 / 1024; - private static final double RAW_TO_RPM = 1.0 / 100; - - private final WPI_TalonSRX mLeftLead; - private final WPI_TalonSRX mLeftFollower; - private final WPI_TalonSRX mRightLead; - private final WPI_TalonSRX mRightFollower; - private final DifferentialDrive mDrive; - - private final ADXRS450_Gyro mGyro; - - private DifferentialDrivetrainSimWrapper mSimulator; - - public CtreDrivetrain() - { - mLeftLead = new WPI_TalonSRX(BaseConstants.DRIVETRAIN_LEFT_MOTOR_A); - mRightLead = new WPI_TalonSRX(BaseConstants.DRIVETRAIN_RIGHT_MOTOR_A); - - mLeftFollower = new WPI_TalonSRX(BaseConstants.DRIVETRAIN_LEFT_MOTOR_B); - mLeftFollower.follow(mLeftLead); - - mRightFollower = new WPI_TalonSRX(BaseConstants.DRIVETRAIN_RIGHT_MOTOR_B); - mRightFollower.follow(mRightLead); - - mDrive = new DifferentialDrive(mLeftLead, mRightLead); - - mGyro = new ADXRS450_Gyro(); - - if (RobotBase.isSimulation()) - { - mSimulator = new DifferentialDrivetrainSimWrapper(DRIVETRAIN_CONSTANTS.createSim(), - new CtreMotorControllerSimWrapper(mLeftLead), - new CtreMotorControllerSimWrapper(mRightLead), - new CtreEncoderSimWrapper(mLeftLead, TICKS_TO_POSITION), - new CtreEncoderSimWrapper(mRightLead, TICKS_TO_POSITION), - new ADXRS450GyroWrapper(mGyro)); - mSimulator.setRightInverted(false); - mSimulator.setLeftPdpChannels(BaseConstants.DRIVETRAIN_LEFT_MOTOR_A_PDP, BaseConstants.DRIVETRAIN_LEFT_MOTOR_B_PDP); - mSimulator.setRightPdpChannels(BaseConstants.DRIVETRAIN_RIGHT_MOTOR_A_PDP, BaseConstants.DRIVETRAIN_RIGHT_MOTOR_B_PDP); - } - } - - @Override - public void close() - { - mLeftLead.close(); - mLeftFollower.close(); - mRightLead.close(); - mRightFollower.close(); - mDrive.close(); - mGyro.close(); - } - - ///////////////////////////////////// - // Accessors - ///////////////////////////////////// - @Override - public double getLeftDistance() - { - return mLeftLead.getSelectedSensorPosition() * TICKS_TO_POSITION; - } - - @Override - public double getRightDistance() - { - return mRightLead.getSelectedSensorPosition() * TICKS_TO_POSITION; - } - - @Override - public double getLeftRate() - { - return mLeftLead.getSelectedSensorVelocity() * RAW_TO_RPM; - } - - @Override - public double getRightRate() - { - return mRightLead.getSelectedSensorVelocity() * RAW_TO_RPM; - } - - @Override - public double getHeadingDegrees() - { - return mGyro.getAngle(); - } - - @Override - public DrivetrainConstants getConstants() - { - return DRIVETRAIN_CONSTANTS; - } - - ///////////////////////////////////// - // Control - ///////////////////////////////////// - @Override - public void arcadeDrive(double speed, double rotation) - { - mDrive.arcadeDrive(speed, rotation); - } - - @Override - public void tankDriveVolts(double left, double right) - { - mLeftLead.set(left / RobotController.getBatteryVoltage()); - mRightLead.set(right / RobotController.getBatteryVoltage()); - mDrive.feed(); - } - - - - @Override - public void smartVelocityControlMetersPerSec(double leftVelocityMetersPerSec, double rightVelocityMetersPerSec) - { - mLeftLead.set(ControlMode.Velocity, leftVelocityMetersPerSec); - mRightLead.set(ControlMode.Velocity, rightVelocityMetersPerSec); - mDrive.feed(); - } - - @Override - public void driveDistance(double leftPosition, double rightPosition) - { - mLeftLead.set(ControlMode.Position, leftPosition); - mRightLead.set(ControlMode.Position, rightPosition); - mDrive.feed(); - } - - @Override - public void resetEncoders() - { - mLeftLead.setSelectedSensorPosition(0); - mRightLead.setSelectedSensorPosition(0); - } - - @Override - protected void resetSimOdometry(Pose2d pose) - { - mSimulator.resetOdometry(pose); - } - - /////////////////////////////// - // Life Cycle - /////////////////////////////// - @Override - public void periodic() - { - updateOdometry(); - } - - @Override - public void simulationPeriodic() - { - mSimulator.update(); - } -} diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorSubsystem.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorSubsystem.java deleted file mode 100644 index a6a3494..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorSubsystem.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - -import com.ctre.phoenix.motorcontrol.ControlMode; -import com.ctre.phoenix.motorcontrol.FeedbackDevice; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.wpilibj2.command.SubsystemBase; -import org.snobotv2.examples.base.BaseConstants; -import org.snobotv2.examples.base.subsystems.ElevatorSubsystem; -import org.snobotv2.module_wrappers.phoenix5.CtreDigitalInputWrapper; -import org.snobotv2.module_wrappers.phoenix5.CtreEncoderSimWrapper; -import org.snobotv2.module_wrappers.phoenix5.CtreMotorControllerSimWrapper; -import org.snobotv2.sim_wrappers.ElevatorSimWrapper; -import org.snobotv2.sim_wrappers.ISimWrapper; - -public class CtreElevatorSubsystem extends SubsystemBase implements ElevatorSubsystem -{ - private static final double kTicksPerRotation = 4096; - - private final WPI_TalonSRX mLeadTalon; - private final WPI_TalonSRX mFollowerTalon; // NOPMD - private ISimWrapper mElevatorSim; - - public CtreElevatorSubsystem() - { - mLeadTalon = new WPI_TalonSRX(BaseConstants.ELEVATOR_MOTOR_A); - mFollowerTalon = new WPI_TalonSRX(BaseConstants.ELEVATOR_MOTOR_B); - - mLeadTalon.configSelectedFeedbackSensor(FeedbackDevice.CTRE_MagEncoder_Relative, 0, 5); - mLeadTalon.config_kP(0, 0.08); - mFollowerTalon.follow(mLeadTalon); - - if (RobotBase.isSimulation()) - { - ElevatorSimWrapper elevatorSim = new ElevatorSimWrapper(ElevatorSimConstants.createSim(), - new CtreMotorControllerSimWrapper(mLeadTalon), - new CtreEncoderSimWrapper(mLeadTalon)); - elevatorSim.setLowerLimitSwitch(new CtreDigitalInputWrapper(mLeadTalon, false)); - elevatorSim.setUpperLimitSwitch(new CtreDigitalInputWrapper(mLeadTalon, true)); - - mElevatorSim = elevatorSim; - } - } - - @Override - public void close() - { - mLeadTalon.close(); - mFollowerTalon.close(); - } - - @Override - public void moveManually(double speed) - { - mLeadTalon.set(ControlMode.PercentOutput, speed); - } - - @Override - public void goToPosition(double inches) - { - double ticks = Units.inchesToMeters(inches) * kTicksPerRotation; - mLeadTalon.set(ControlMode.Position, ticks); - } - - @Override - public void goToPositionMotionMagic(double inches) - { - double ticks = Units.inchesToMeters(inches) * kTicksPerRotation; - mLeadTalon.set(ControlMode.MotionMagic, ticks); - } - - @Override - public double getHeightInches() - { - double meters = mLeadTalon.getSelectedSensorPosition() / kTicksPerRotation; - return Units.metersToInches(meters); - } - - @Override - public boolean isAtHeight(double inches, double allowableError) - { - return Math.abs(inches - getHeightInches()) < allowableError; - } - - @Override - public void simulationPeriodic() - { - mElevatorSim.update(); - } - - @Override - public void stop() - { - mLeadTalon.set(0); - } - - - @Override - public boolean isAtLowerLimit() - { - return mLeadTalon.getSensorCollection().isRevLimitSwitchClosed(); - } - - @Override - public boolean isAtUpperLimit() - { - return mLeadTalon.getSensorCollection().isFwdLimitSwitchClosed(); - } -} diff --git a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreShooterSubsystem.java b/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreShooterSubsystem.java deleted file mode 100644 index 001772e..0000000 --- a/examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems/CtreShooterSubsystem.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - -import com.ctre.phoenix.motorcontrol.ControlMode; -import com.ctre.phoenix.motorcontrol.FeedbackDevice; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.wpilibj2.command.SubsystemBase; -import org.snobotv2.examples.base.BaseConstants; -import org.snobotv2.examples.base.subsystems.ShooterSubsystem; -import org.snobotv2.module_wrappers.phoenix5.CtreEncoderSimWrapper; -import org.snobotv2.module_wrappers.phoenix5.CtreMotorControllerSimWrapper; -import org.snobotv2.sim_wrappers.FlywheelSimWrapper; -import org.snobotv2.sim_wrappers.ISimWrapper; - -public class CtreShooterSubsystem extends SubsystemBase implements ShooterSubsystem -{ - private static final double CTRE_VEL_TICKS_PER_RPM = 4096.0 / 100; - - private final WPI_TalonSRX mLeadMotor; - private final WPI_TalonSRX mFollwerMotor; // NOPMD - private ISimWrapper mSimulator; - - - public CtreShooterSubsystem() - { - mLeadMotor = new WPI_TalonSRX(BaseConstants.SHOOTER_MOTOR_A); - mLeadMotor.configSelectedFeedbackSensor(FeedbackDevice.CTRE_MagEncoder_Relative, 0, 5); - mLeadMotor.config_kP(0, .0004); - mLeadMotor.config_kF(0, .0032); - - mFollwerMotor = new WPI_TalonSRX(BaseConstants.SHOOTER_MOTOR_B); - mFollwerMotor.follow(mLeadMotor); - - if (RobotBase.isSimulation()) - { - mSimulator = new FlywheelSimWrapper( - FlywheelSimConstants.createSim(), - new CtreMotorControllerSimWrapper(mLeadMotor), - new CtreEncoderSimWrapper(mLeadMotor)); - } - } - - @Override - public void close() - { - mLeadMotor.close(); - mFollwerMotor.close(); - } - - @Override - public void spinAtRpm(double rpm) - { - double targetVelocityUnitsPer100ms = rpm * CTRE_VEL_TICKS_PER_RPM; - mLeadMotor.set(ControlMode.Velocity, targetVelocityUnitsPer100ms); - } - - @Override - public double getRPM() - { - return mLeadMotor.getSelectedSensorVelocity() / CTRE_VEL_TICKS_PER_RPM; - } - - @Override - public void simulationPeriodic() - { - mSimulator.update(); - } - - - @Override - public void stop() - { - mLeadMotor.set(0); - } -} diff --git a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BUILD b/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BUILD deleted file mode 100644 index 2f6b739..0000000 --- a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BUILD +++ /dev/null @@ -1,15 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_test") - -snobot_sim_java_test( - name = "tests", - srcs = glob(["*.java"]), - deps = [ - "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base/subsystems", - "//examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems", - "//snobot_sim_java_test_utils/src/main/java/org/snobotv2/test_utils", - "@bzlmodrio-allwpilib//libraries/java/hal", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - ], -) diff --git a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BasePhoenix5UnitTest.java b/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BasePhoenix5UnitTest.java deleted file mode 100644 index 3d7e6fe..0000000 --- a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/BasePhoenix5UnitTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - -import com.ctre.phoenix.unmanaged.Unmanaged; -import edu.wpi.first.hal.HAL; -import org.snobotv2.test_utils.BaseUnitTest; - - -@SuppressWarnings("PMD.TestClassWithoutTestCases") -public class BasePhoenix5UnitTest extends BaseUnitTest -{ - protected void ctreSimLoop() - { - HAL.simPeriodicBefore(); - Unmanaged.feedEnable(1000); - HAL.simPeriodicAfter(); - - try - { - Thread.sleep(250); - } catch (InterruptedException e) - { - e.printStackTrace(); // NOPMD - } - } -} diff --git a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrainTest.java b/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrainTest.java deleted file mode 100644 index 86a911b..0000000 --- a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreDrivetrainTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Tag("ctre") -@Tag("flaky") // TODO CTRE is acting weird, likely because of the lack of determinism -public class CtreDrivetrainTest extends BasePhoenix5UnitTest -{ - @Test - public void testDriveForwards() throws InterruptedException - { - try (CtreDrivetrain drivetrainSubsystem = new CtreDrivetrain()) - { - Thread.sleep(50); - for (int i = 0; i < 5; ++i) - { - drivetrainSubsystem.arcadeDrive(1, 0); - drivetrainSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - - assertPositive(drivetrainSubsystem.getLeftDistance()); - assertPositive(drivetrainSubsystem.getLeftRate()); - assertPositive(drivetrainSubsystem.getRightDistance()); - assertPositive(drivetrainSubsystem.getRightRate()); - assertEquals(drivetrainSubsystem.getHeadingDegrees(), 0, DEFAULT_EPSILON); - } - } - - @Test - public void testDriveBackwards() throws InterruptedException - { - try (CtreDrivetrain drivetrainSubsystem = new CtreDrivetrain()) - { - Thread.sleep(50); - for (int i = 0; i < 5; ++i) - { - drivetrainSubsystem.arcadeDrive(-1, 0); - drivetrainSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - - assertNegative(drivetrainSubsystem.getLeftDistance()); - assertNegative(drivetrainSubsystem.getLeftRate()); - assertNegative(drivetrainSubsystem.getRightDistance()); - assertNegative(drivetrainSubsystem.getRightRate()); - assertEquals(drivetrainSubsystem.getHeadingDegrees(), 0, DEFAULT_EPSILON); - } - } - - @Test - public void testTurnClockwise() throws InterruptedException - { - Thread.sleep(50); - try (CtreDrivetrain drivetrainSubsystem = new CtreDrivetrain()) - { - for (int i = 0; i < 5; ++i) - { - drivetrainSubsystem.arcadeDrive(0, 1); - drivetrainSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - - assertPositive(drivetrainSubsystem.getLeftDistance()); - assertPositive(drivetrainSubsystem.getLeftRate()); - assertNegative(drivetrainSubsystem.getRightDistance()); - assertNegative(drivetrainSubsystem.getRightRate()); - assertPositive(drivetrainSubsystem.getHeadingDegrees()); - } - } - - @Test - public void testTurnCounterClockwise() throws InterruptedException - { - Thread.sleep(50); - try (CtreDrivetrain drivetrainSubsystem = new CtreDrivetrain()) - { - for (int i = 0; i < 5; ++i) - { - drivetrainSubsystem.arcadeDrive(0, -1); - drivetrainSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - - assertNegative(drivetrainSubsystem.getLeftDistance()); - assertNegative(drivetrainSubsystem.getLeftRate()); - assertPositive(drivetrainSubsystem.getRightDistance()); - assertPositive(drivetrainSubsystem.getRightRate()); - assertNegative(drivetrainSubsystem.getHeadingDegrees()); - } - } -} diff --git a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorTest.java b/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorTest.java deleted file mode 100644 index 152b0ce..0000000 --- a/examples/test_robot_phoenix5/src/test/java/org/snobotv2/examples/phoenix5/subsystems/CtreElevatorTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.snobotv2.examples.phoenix5.subsystems; - - -import edu.wpi.first.math.util.Units; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.snobotv2.examples.base.subsystems.ElevatorSubsystem; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@Tag("ctre") -public class CtreElevatorTest extends BasePhoenix5UnitTest -{ - @Test - public void testManuallyMoveUp() throws InterruptedException - { - Thread.sleep(50); - try (CtreElevatorSubsystem elevator = new CtreElevatorSubsystem()) - { - for (int i = 0; i < 25; ++i) - { - elevator.moveManually(1); - elevator.simulationPeriodic(); - ctreSimLoop(); - } - - assertEquals(Units.metersToInches(ElevatorSubsystem.ElevatorSimConstants.kMaxElevatorHeight), elevator.getHeightInches(), .5); - - assertFalse(elevator.isAtLowerLimit()); - assertTrue(elevator.isAtUpperLimit()); - } - } - - @Test - public void testManuallyMoveDown() throws InterruptedException - { - Thread.sleep(50); - try (CtreElevatorSubsystem elevator = new CtreElevatorSubsystem()) - { - // The sim won't let it go negative, so move up first - for (int i = 0; i < 5; ++i) - { - elevator.moveManually(1); - elevator.simulationPeriodic(); - ctreSimLoop(); - } - assertPositive(elevator.getHeightInches()); - assertFalse(elevator.isAtLowerLimit()); - assertFalse(elevator.isAtUpperLimit()); - - for (int i = 0; i < 20; ++i) - { - elevator.moveManually(-1); - elevator.simulationPeriodic(); - ctreSimLoop(); - } - - assertTrue(elevator.isAtLowerLimit()); - assertFalse(elevator.isAtUpperLimit()); - } - } -} diff --git a/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/RevDrivetrain.java b/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/RevDrivetrain.java index 2045f2a..7868044 100644 --- a/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/RevDrivetrain.java +++ b/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/RevDrivetrain.java @@ -9,17 +9,16 @@ import com.revrobotics.spark.SparkMax; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.SparkMaxConfig; -import com.studica.frc.AHRS; -import com.studica.frc.AHRS.NavXComType; import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.math.util.Units; +import edu.wpi.first.wpilibj.ADXRS450_Gyro; import edu.wpi.first.wpilibj.RobotBase; import edu.wpi.first.wpilibj.drive.DifferentialDrive; import org.snobotv2.examples.base.BaseConstants; import org.snobotv2.examples.base.subsystems.BaseDrivetrainSubsystem; -import org.snobotv2.module_wrappers.navx.NavxWrapper; import org.snobotv2.module_wrappers.rev.RevEncoderSimWrapper; import org.snobotv2.module_wrappers.rev.RevMotorControllerSimWrapper; +import org.snobotv2.module_wrappers.wpi.ADXRS450GyroWrapper; import org.snobotv2.sim_wrappers.DifferentialDrivetrainSimWrapper; public class RevDrivetrain extends BaseDrivetrainSubsystem @@ -39,7 +38,7 @@ public class RevDrivetrain extends BaseDrivetrainSubsystem private final SparkClosedLoopController mLeftPidController; private final SparkClosedLoopController mRightPidController; - private final AHRS mGyro; + private final ADXRS450_Gyro mGyro; private final DifferentialDrive mDrive; @@ -108,7 +107,7 @@ public RevDrivetrain() mLeftEncoder.setPosition(0); mRightEncoder.setPosition(0); - mGyro = new AHRS(NavXComType.kMXP_SPI); + mGyro = new ADXRS450_Gyro(); mDrive = new DifferentialDrive(mLeadLeft, mLeadRight); @@ -120,7 +119,7 @@ public RevDrivetrain() new RevMotorControllerSimWrapper(mLeadRight, DRIVETRAIN_CONSTANTS.getMotor()), RevEncoderSimWrapper.create(mLeadLeft), RevEncoderSimWrapper.create(mLeadRight), - new NavxWrapper(mGyro).getYawGyro()); + new ADXRS450GyroWrapper(mGyro)); mSimulator.setRightInverted(false); mSimulator.setLeftPdpChannels(BaseConstants.DRIVETRAIN_LEFT_MOTOR_A_PDP, BaseConstants.DRIVETRAIN_LEFT_MOTOR_B_PDP); mSimulator.setRightPdpChannels(BaseConstants.DRIVETRAIN_RIGHT_MOTOR_A_PDP, BaseConstants.DRIVETRAIN_RIGHT_MOTOR_B_PDP); @@ -157,7 +156,7 @@ public double getRightRate() @Override public double getHeadingDegrees() { - return mGyro.getYaw(); + return mGyro.getAngle(); } @Override diff --git a/examples/test_robot_rev_swerve/BUILD.bazel b/examples/test_robot_rev_swerve/BUILD.bazel deleted file mode 100644 index 8f4cd6d..0000000 --- a/examples/test_robot_rev_swerve/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -alias( - name = "test_robot_rev_swerve", - actual = "//examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve:Main", -) - -alias( - name = "sim", - actual = "//examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve:Main.sim", -) diff --git a/examples/test_robot_rev_swerve/build.gradle b/examples/test_robot_rev_swerve/build.gradle deleted file mode 100644 index 1f79536..0000000 --- a/examples/test_robot_rev_swerve/build.gradle +++ /dev/null @@ -1,33 +0,0 @@ -plugins { - id 'java' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext.baseId = "test_robot_rev_swerve" -apply from: "${rootDir}/build_scripts/base_java.gradle" -dependencies { - - implementation wpilibTools.deps.wpilibJava("wpiunits") - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("cscore") - implementation wpilibTools.deps.wpilibJava("ntcore") - implementation wpilibTools.deps.wpilibJava("cameraserver") - implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - implementation project(":snobot_sim_java_base") - implementation project(":snobot_swerve_sim") - implementation project(":snobot_sim_java_revlib") - - implementation project(":examples:test_robot_base_swerve") - implementation "com.revrobotics.frc:REVLib-java:${revVersion}" - - testImplementation project(":snobot_sim_java_test_utils") - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/BUILD b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/BUILD deleted file mode 100644 index 68ce806..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library", "snobot_sim_java_robot") - -snobot_sim_java_library( - name = "rev_swerve", - srcs = glob(["*.java"]), - visibility = [ - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands", - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/auto", - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/commands/tuning", - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems", - "//examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) - -snobot_sim_java_robot( - name = "Main", - main_class = "org.snobotv2.examples.rev_swerve.Main", - visibility = ["//examples/test_robot_rev_swerve:__subpackages__"], - runtime_deps = [":rev_swerve"], -) diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Main.java b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Main.java deleted file mode 100644 index f49daeb..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Main.java +++ /dev/null @@ -1,32 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */ -/* Open Source Software - may be modified and shared by FRC teams. The code */ -/* must be accompanied by the FIRST BSD license file in the root directory of */ -/* the project. */ -/*----------------------------------------------------------------------------*/ - -package org.snobotv2.examples.rev_swerve; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main -{ - private Main() - { - } - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main frc.robot class, change the parameter type. - */ - public static void main(String... args) - { - RobotBase.startRobot(Robot::new); - } -} diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Robot.java b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Robot.java deleted file mode 100644 index 22220cc..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/Robot.java +++ /dev/null @@ -1,128 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) 2017-2019 FIRST. All Rights Reserved. */ -/* Open Source Software - may be modified and shared by FRC teams. The code */ -/* must be accompanied by the FIRST BSD license file in the root directory of */ -/* the project. */ -/*----------------------------------------------------------------------------*/ - -package org.snobotv2.examples.rev_swerve; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -/** - * The VM is configured to automatically run this class, and to call the functions corresponding to - * each mode, as described in the TimedRobot documentation. If you change the name of this class or - * the package after creating this project, you must also update the build.gradle file in the - * project. - */ -@SuppressWarnings("PMD.TooManyMethods") -public class Robot extends TimedRobot -{ - private Command mAutonomousCommand; - - private RobotContainer mRobotContainer; - - /** - * This function is run when the frc.robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() - { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - mRobotContainer = new RobotContainer(); - - } - - /** - * This function is called every frc.robot packet, no matter the mode. Use this for items like - * diagnostics that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before - * LiveWindow and SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() - { - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the frc.robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** - * This function is called once each time the frc.robot enters Disabled mode. - */ - @Override - public void disabledInit() - { - } - - @Override - public void disabledPeriodic() - { - } - - /** - * This autonomous runs the autonomous command selected by your {@link RobotContainer} class. - */ - @Override - public void autonomousInit() - { - mAutonomousCommand = mRobotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (mAutonomousCommand != null) - { - CommandScheduler.getInstance().schedule(mAutonomousCommand); - } - } - - /** - * This function is called periodically during autonomous. - */ - @Override - public void autonomousPeriodic() - { - } - - @Override - public void teleopInit() - { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (mAutonomousCommand != null) - { - mAutonomousCommand.cancel(); - } - } - - /** - * This function is called periodically during operator control. - */ - @Override - public void teleopPeriodic() - { - } - - @Override - public void testInit() - { - // Cancels all running commands at the start of test mode. - CommandScheduler.getInstance().cancelAll(); - } - - /** - * This function is called periodically during test mode. - */ - @Override - public void testPeriodic() - { - } -} diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/RobotContainer.java b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/RobotContainer.java deleted file mode 100644 index f322f72..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/RobotContainer.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.snobotv2.examples.rev_swerve; - -import edu.wpi.first.cameraserver.CameraServer; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.wpilibj.XboxController; -import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard; -import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab; -import edu.wpi.first.wpilibj2.command.Command; -import org.snobotv2.examples.base_swerve.commands.TeleopSwerveDrive; -import org.snobotv2.examples.base_swerve.commands.auto.SetStartingPosition; -import org.snobotv2.examples.base_swerve.commands.tuning.ManualMoveSwerveModuleCommand; -import org.snobotv2.examples.rev_swerve.subsystems.DriveSubsystem; - -public class RobotContainer -{ - private final DriveSubsystem mDrivetrain; - - private final XboxController mDriverJoystick = new XboxController(0); - - - public RobotContainer() - { - mDrivetrain = new DriveSubsystem(true); - configureButtonBindings(); - addTestCommands(); - CameraServer.startAutomaticCapture(); - } - - private void addTestCommands() - { - ShuffleboardTab debugTab = Shuffleboard.getTab("Test Commands"); - debugTab.add("Move FL", new ManualMoveSwerveModuleCommand(mDrivetrain, DriveSubsystem.SwerveModulePositionTypes.FRONT_LEFT)); - debugTab.add("Move FR", new ManualMoveSwerveModuleCommand(mDrivetrain, DriveSubsystem.SwerveModulePositionTypes.FRONT_RIGHT)); - debugTab.add("Move RL", new ManualMoveSwerveModuleCommand(mDrivetrain, DriveSubsystem.SwerveModulePositionTypes.REAR_LEFT)); - debugTab.add("Move RR", new ManualMoveSwerveModuleCommand(mDrivetrain, DriveSubsystem.SwerveModulePositionTypes.REAR_RIGHT)); - - debugTab.add("Reset Position", new SetStartingPosition(mDrivetrain, new Pose2d(0, 0, Rotation2d.fromDegrees(0)))); - } - - private void configureButtonBindings() - { - mDrivetrain.setDefaultCommand(new TeleopSwerveDrive(mDrivetrain, mDriverJoystick)); - } - - public Command getAutonomousCommand() - { - return null; - } - -} diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel deleted file mode 100644 index 879346a..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel +++ /dev/null @@ -1,30 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "subsystems", - srcs = glob( - [ - "*.java", - ], - ), - visibility = [ - "//examples/test_robot_rev_swerve:__subpackages__", - ], - deps = [ - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve", - "//examples/test_robot_base_swerve/src/main/java/org/snobotv2/examples/base_swerve/subsystems", - "//snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers", - "//snobot_sim_java_revlib/src/main/java/com/revrobotics/spark:simmable_rev", - "//snobot_sim_java_revlib/src/main/java/org/snobotv2/module_wrappers/rev", - "//snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve", - "@bzlmodrio-allwpilib//libraries/cpp/wpiutil:jni", - "@bzlmodrio-allwpilib//libraries/java/cameraserver", - "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@bzlmodrio-allwpilib//libraries/java/wpiutil", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - "@bzlmodrio-revlib//libraries/java/revlib-java", - ], -) diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/DriveSubsystem.java b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/DriveSubsystem.java deleted file mode 100644 index ad6abcc..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/DriveSubsystem.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// 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 org.snobotv2.examples.rev_swerve.subsystems; - -import org.snobotv2.examples.base_swerve.subsystems.BaseSwerveDriveSubsystem; - -public class DriveSubsystem extends BaseSwerveDriveSubsystem -{ - public DriveSubsystem() - { - this(false); - } - - public DriveSubsystem(boolean addDebugTab) - { - super(SwerveModule::new, addDebugTab); - } -} diff --git a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/SwerveModule.java b/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/SwerveModule.java deleted file mode 100644 index 35c9005..0000000 --- a/examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems/SwerveModule.java +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// 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 org.snobotv2.examples.rev_swerve.subsystems; - -import com.revrobotics.AbsoluteEncoder; -import com.revrobotics.PersistMode; -import com.revrobotics.RelativeEncoder; -import com.revrobotics.ResetMode; -import com.revrobotics.spark.SparkBase; -import com.revrobotics.spark.SparkClosedLoopController; -import com.revrobotics.spark.SparkMax; -import com.revrobotics.spark.config.SparkMaxConfig; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.kinematics.SwerveModulePosition; -import edu.wpi.first.math.kinematics.SwerveModuleState; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.util.sendable.SendableBuilder; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.wpilibj.simulation.swerve.SwerveModuleSim; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import org.snobotv2.examples.base_swerve.SwerveModuleOptimizationUtils; -import org.snobotv2.examples.base_swerve.subsystems.BaseSwerveModule; -import org.snobotv2.module_wrappers.rev.RevEncoderSimWrapper; -import org.snobotv2.module_wrappers.rev.RevMotorControllerSimWrapper; -import org.snobotv2.sim_wrappers.SwerveModuleSimWrapper; - -public class SwerveModule implements BaseSwerveModule -{ - private static final double DRIVE_ENCODER_CONSTANT = 1.0 / DRIVE_GEAR_RATION * DriveSubsystem.kWheelCircumfranceMeters; - - private static final double DEFAULT_FF = 0.34; - private static final double DEFAULT_P = 0.001; - - private final String mName; - - private final AbsoluteEncoder mAbsoluteEncoder; - - private final SparkMax mDriveMotor; - private final SparkClosedLoopController mDriveController; - private final RelativeEncoder mDriveEncoder; - - private final SparkMax mAzimuthMotor; - private final SparkClosedLoopController mAzimuthController; - private final RelativeEncoder mAzimuthEncoder; - - private SwerveModuleState mCurrentState; - private SwerveModuleState mDesiredState; - private SwerveModulePosition mCurrentPosition; - - private SwerveModuleSimWrapper mSimWrapper; - - private final SparkMaxConfig mAzimuthConfig; - private final SparkMaxConfig mDriveConfig; - - @SuppressWarnings("PMD.UnusedFormalParameter") - public SwerveModule( - int driveMotorChannel, - int turningMotorChannel, - int turningEncoderChannels, - double encoderOffset, - String name) - { - mAzimuthConfig = new SparkMaxConfig(); - mAzimuthConfig.inverted(false); - mAzimuthConfig.encoder.positionConversionFactor(360 / TURNING_GEAR_RATION); - mAzimuthConfig.encoder.velocityConversionFactor(360 / TURNING_GEAR_RATION / 60); - mAzimuthConfig.closedLoop.p(0.01); - mAzimuthConfig.closedLoop.d(0.0); - - mAzimuthMotor = new SparkMax(turningMotorChannel, SparkBase.MotorType.kBrushless); - mAzimuthMotor.configure(mAzimuthConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); - mAzimuthEncoder = mAzimuthMotor.getEncoder(); - mAzimuthController = mAzimuthMotor.getClosedLoopController(); - - mAbsoluteEncoder = mAzimuthMotor.getAbsoluteEncoder(); - - mDriveConfig = new SparkMaxConfig(); - mDriveConfig.inverted(false); - mDriveConfig.encoder.positionConversionFactor(DRIVE_ENCODER_CONSTANT); - mDriveConfig.encoder.velocityConversionFactor(DRIVE_ENCODER_CONSTANT / 60); - mDriveConfig.closedLoop.p(0.01); - mDriveConfig.closedLoop.d(0.0); - - mDriveMotor = new SparkMax(driveMotorChannel, SparkBase.MotorType.kBrushless); - mDriveMotor.configure(mDriveConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); - mDriveEncoder = mDriveMotor.getEncoder(); - mDriveController = mDriveMotor.getClosedLoopController(); - - mDesiredState = new SwerveModuleState(0, Rotation2d.fromDegrees(0)); - mCurrentState = new SwerveModuleState(0, Rotation2d.fromDegrees(0)); - mName = name; - - mCurrentPosition = new SwerveModulePosition( - getDrivePosition(), - getTurningMotorAngle()); - - - SmartDashboard.putNumber("FF", DEFAULT_FF); - SmartDashboard.putNumber("P", DEFAULT_P); - - - if (RobotBase.isSimulation()) - { - SwerveModuleSim moduleSim = new SwerveModuleSim( - DCMotor.getNEO(1), - DCMotor.getNEO(1), - DriveSubsystem.kWheelDiameterMeters / 2, - TURNING_GEAR_RATION, - DRIVE_GEAR_RATION - ); - mSimWrapper = new SwerveModuleSimWrapper( - moduleSim, - new RevMotorControllerSimWrapper(mDriveMotor, DCMotor.getNEO(1)), - new RevMotorControllerSimWrapper(mAzimuthMotor, DCMotor.getNEO(1)), - RevEncoderSimWrapper.create(mDriveMotor), - RevEncoderSimWrapper.create(mAzimuthMotor), - DriveSubsystem.kWheelDiameterMeters * Math.PI); - } - } - - @Override - public void close() - { - mDriveMotor.close(); - mAzimuthMotor.close(); - } - - /** - * Returns the current state of the module. - * - * @return The current state of the module. - */ - @Override - public SwerveModuleState getState() - { - return mCurrentState; - } - - @Override - public SwerveModulePosition getPosition() - { - return mCurrentPosition; - } - - public Rotation2d getCancoderCurrentAngle() - { - return new Rotation2d(Units.degreesToRadians(mAbsoluteEncoder.getPosition())); - } - - public final Rotation2d getTurningMotorAngle() - { - return Rotation2d.fromDegrees(mAzimuthEncoder.getPosition()); - } - - public double getDriveSpeedMps() - { - return mDriveEncoder.getVelocity(); - - } - - @Override - public SwerveModuleState getDesiredState() - { - return mDesiredState; - } - - /** - * Sets the desired state for the module. - * - * @param inputState Desired state with speed and angle. - */ - @Override - public void setDesiredState(SwerveModuleState inputState, boolean openLoopDriving) - { - // Optimize the reference state to avoid spinning further than 90 degrees - mDesiredState = SwerveModuleOptimizationUtils.optimize(inputState, getState().angle); - - if (openLoopDriving) - { - mDriveMotor.set(mDesiredState.speedMetersPerSecond / DriveSubsystem.kMaxSpeedMetersPerSecond); - } else - { - mDriveController.setSetpoint(mDesiredState.speedMetersPerSecond, SparkBase.ControlType.kVelocity); - } - mAzimuthController.setSetpoint(mDesiredState.angle.getDegrees(), SparkBase.ControlType.kPosition); - } - - @Override - public double getDriveMotorPercentage() - { - return mDriveMotor.getAppliedOutput(); - } - - @Override - public double getTurningMotorPercentage() - { - return mAzimuthMotor.getAppliedOutput(); - } - - /** - * Zeroes all the SwerveModule encoders. - */ - @Override - public void resetEncoders() - { - mDriveEncoder.setPosition(0); - } - - @Override - public String getName() - { - return mName; - } - - @Override - public void initSendable(SendableBuilder builder) - { - builder.addDoubleProperty("CancoderAngle", () -> getCancoderCurrentAngle().getDegrees(), null); - builder.addDoubleProperty("MotorAngle", () -> getTurningMotorAngle().getDegrees(), null); - - builder.addDoubleProperty("TurnDegrees", mAzimuthEncoder::getPosition, null); - builder.addDoubleProperty("TurnGoalDegrees", mDesiredState.angle::getDegrees, null); - - builder.addDoubleProperty("DriveMps", mDriveEncoder::getVelocity, null); - builder.addDoubleProperty("DriveGoalMps", () -> mDesiredState.speedMetersPerSecond, null); - } - - - @Override - public void periodic() - { - mDriveConfig.closedLoop.feedForward.kV(SmartDashboard.getNumber("FF", DEFAULT_FF)); - mDriveConfig.closedLoop.p(SmartDashboard.getNumber("P", DEFAULT_P)); - mDriveMotor.configure(mDriveConfig, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); - - mCurrentState = new SwerveModuleState( - getDriveSpeedMps(), - getTurningMotorAngle()); - mCurrentPosition = new SwerveModulePosition( - getDrivePosition(), - getTurningMotorAngle()); - } - - private double getDrivePosition() - { - return mDriveEncoder.getPosition(); - } - - @Override - public SwerveModuleSimWrapper getSimWrapper() - { - return mSimWrapper; - } - - @Override - public void stop() - { - mAzimuthMotor.stopMotor(); - mDriveMotor.stopMotor(); - } - - @Override - public void setOpenLoop(double turnSpeed, double driveSpeed) - { - mAzimuthMotor.set(turnSpeed); - mDriveMotor.set(driveSpeed); - } -} diff --git a/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel b/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel deleted file mode 100644 index 63678bd..0000000 --- a/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_test") - -snobot_sim_java_test( - name = "test", - srcs = glob(["*.java"]), - deps = [ - "//examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve", - "//examples/test_robot_rev_swerve/src/main/java/org/snobotv2/examples/rev_swerve/subsystems", - "//snobot_sim_java_test_utils/src/main/java/org/snobotv2/test_utils", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - ], -) diff --git a/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/RevDriveSubsystemTest.java b/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/RevDriveSubsystemTest.java deleted file mode 100644 index 89f4956..0000000 --- a/examples/test_robot_rev_swerve/src/test/java/org/snobotv2/examples/rev_swerve/subsystems/RevDriveSubsystemTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.snobotv2.examples.rev_swerve.subsystems; - -import edu.wpi.first.math.kinematics.SwerveModuleState; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.snobotv2.test_utils.BaseUnitTest; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Tag("rev") -@SuppressWarnings("PMD.UseUnderscoresInNumericLiterals") -public class RevDriveSubsystemTest extends BaseUnitTest -{ - private static final int LOOPS_TO_TEST = 50; - private static final double VELOCITY_TOLERANCE = 1e-6; - private static final double POSITION_TOLERANCE = 1e-6; - private static final double ANGLE_TOLERANCE = 1e-6; - - private void runLoop(DriveSubsystem drive, double x, double y, double rot) - { - drive.periodic(); - drive.simulationPeriodic(); - drive.teleDrive(x, y, rot); - } - - private void runLoops(DriveSubsystem drive, double x, double y, double rot) - { - for (int i = 0; i < LOOPS_TO_TEST; ++i) - { - runLoop(drive, x, y, rot); - } - } - - private void assertModuleState(SwerveModuleState state, double expectedSpeed, double expectedDegrees) - { - assertEquals(expectedSpeed, state.speedMetersPerSecond, VELOCITY_TOLERANCE); - assertEquals(expectedDegrees, state.angle.getDegrees()); - } - - @Test - public void testDriveForwards() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, DriveSubsystem.kMaxSpeedMetersPerSecond, 0, 0); - - assertEquals(2.218769509611857, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(2.218769509611857, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - for (SwerveModuleState state : drive.getModuleStates()) - { - assertModuleState(state, 2.9068093299865723, 0); - } - } - } - - @Test - public void testDriveBackwards() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, -DriveSubsystem.kMaxSpeedMetersPerSecond, 0, 0); - - assertEquals(2.218769509611857, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(-2.218769509611857, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - for (SwerveModuleState state : drive.getModuleStates()) - { - assertModuleState(state, -2.9068093299865723, 0); - } - } - } - - - @Test - public void testDriveLeft() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, 0, DriveSubsystem.kMaxSpeedMetersPerSecond, 0); - - assertEquals(2.180822825435927, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(0.10008672844112536, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(2.1785249235967656, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - for (SwerveModuleState state : drive.getModuleStates()) - { - assertModuleState(state, 2.9046378135681152, 90); - } - } - } - - @Test - public void testDriveRight() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, 0, -DriveSubsystem.kMaxSpeedMetersPerSecond, 0); - - assertEquals(2.180822825435927, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(0.10008672844112536, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(-2.1785249235967656, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - for (SwerveModuleState state : drive.getModuleStates()) - { - assertModuleState(state, 2.9046378135681152, -90); - } - } - } - - @Test - public void testRotateClockwise() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, 0, 0, -DriveSubsystem.kMaxSpeedMetersPerSecond); - - assertEquals(0, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(-160.00101848197687, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - - - List states = drive.getModuleStates(); - double expectedSpeed = 1.0927140712738037; - assertModuleState(states.get(0), expectedSpeed, -45.0); - assertModuleState(states.get(1), -expectedSpeed, 45.0); - assertModuleState(states.get(2), expectedSpeed, 45.0); - assertModuleState(states.get(3), -expectedSpeed, -45.0); - - } - } - - @Test - public void testRotateCounterClockwise() - { - try (DriveSubsystem drive = new DriveSubsystem()) - { - runLoops(drive, 0, 0, DriveSubsystem.kMaxSpeedMetersPerSecond); - - assertEquals(0, drive.getPose().getTranslation().getNorm(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getX(), POSITION_TOLERANCE); - assertEquals(0, drive.getPose().getY(), POSITION_TOLERANCE); - assertEquals(160.00101848197687, drive.getPose().getRotation().getDegrees(), ANGLE_TOLERANCE); - - - List states = drive.getModuleStates(); - double expectedSpeed = 1.0927140712738037; - assertModuleState(states.get(0), -expectedSpeed, -45.0); - assertModuleState(states.get(1), expectedSpeed, 45.0); - assertModuleState(states.get(2), -expectedSpeed, 45.0); - assertModuleState(states.get(3), expectedSpeed, -45.0); - - } - } -} diff --git a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveModuleSimWrapper.java b/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveModuleSimWrapper.java deleted file mode 100644 index af87af4..0000000 --- a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveModuleSimWrapper.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.snobotv2.sim_wrappers; - -import edu.wpi.first.wpilibj.RobotController; -import edu.wpi.first.wpilibj.simulation.swerve.SwerveModuleSim; -import org.snobotv2.interfaces.IEncoderWrapper; -import org.snobotv2.interfaces.IMotorControllerWrapper; - -public class SwerveModuleSimWrapper extends BaseSimWrapper -{ - private final IMotorControllerWrapper mDriveMotor; - private final IMotorControllerWrapper mTurnMotor; - private final IEncoderWrapper mDriveEncoder; - private final IEncoderWrapper mTurnEncoder; - - private final SwerveModuleSim mModuleSim; - - private final boolean mUseDegrees; - private final double mWheelCircumferenceMeters; - - public SwerveModuleSimWrapper(SwerveModuleSim moduleSim, - IMotorControllerWrapper driveMotor, - IMotorControllerWrapper turnMotor, - IEncoderWrapper driveEncoder, - IEncoderWrapper turnEncoder, - double wheelCircumferenceMeters) - { - this(moduleSim, driveMotor, turnMotor, driveEncoder, turnEncoder, wheelCircumferenceMeters, true); - } - - public SwerveModuleSimWrapper(SwerveModuleSim moduleSim, - IMotorControllerWrapper driveMotor, - IMotorControllerWrapper turnMotor, - IEncoderWrapper driveEncoder, - IEncoderWrapper turnEncoder, - double wheelCircumferenceMeters, - boolean useDegrees) - { - mModuleSim = moduleSim; - - mDriveMotor = driveMotor; - mTurnMotor = turnMotor; - mDriveEncoder = driveEncoder; - mTurnEncoder = turnEncoder; - mWheelCircumferenceMeters = wheelCircumferenceMeters; - mUseDegrees = useDegrees; - } - - @Override - public void update() - { - mDriveMotor.update(); - mTurnMotor.update(); - - mModuleSim.setInputVoltages( - mDriveMotor.getVoltagePercentage() * RobotController.getBatteryVoltage(), - mTurnMotor.getVoltagePercentage() * RobotController.getBatteryVoltage()); - - mDriveEncoder.setDistance(mModuleSim.getWheelEncoderPositionRev() * mWheelCircumferenceMeters); - mDriveEncoder.setVelocity(mModuleSim.getWheelEncoderMetersPerSecond()); - - double azimuthPosition = mModuleSim.getAzimuthEncoderPositionRads(); - double azimuthVelocity = mModuleSim.getAzimuthEncoderVelocityRadPerSec(); - - if (mUseDegrees) - { - azimuthPosition = Math.toDegrees(azimuthPosition); - azimuthVelocity = Math.toDegrees(azimuthVelocity); - } - - mTurnEncoder.setDistance(azimuthPosition); - mTurnEncoder.setVelocity(azimuthVelocity); - } - - public SwerveModuleSim getBaseSim() - { - return mModuleSim; - } -} diff --git a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveSimWrapper.java b/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveSimWrapper.java deleted file mode 100644 index fbda9db..0000000 --- a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/SwerveSimWrapper.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.snobotv2.sim_wrappers; - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.wpilibj.simulation.swerve.QuadSwerveSim; -import edu.wpi.first.wpilibj.simulation.swerve.SwerveModuleSim; -import org.snobotv2.interfaces.IGyroWrapper; - -import java.util.ArrayList; -import java.util.List; - -public class SwerveSimWrapper extends BaseSimWrapper -{ - private final QuadSwerveSim mSwerveSim; - private final List mModules; - private final IGyroWrapper mGyro; - - public SwerveSimWrapper( - double wheelBaseWidthM, - double wheelBaseLengthM, - double robotMasskg, - double robotMOI, - List modules, - IGyroWrapper gyro) - { - List baseSims = new ArrayList<>(); - for (SwerveModuleSimWrapper module : modules) - { - baseSims.add(module.getBaseSim()); - } - mSwerveSim = new QuadSwerveSim(wheelBaseWidthM, wheelBaseLengthM, robotMasskg, robotMOI, baseSims); - mModules = modules; - mGyro = gyro; - } - - @Override - public void update() - { - for (SwerveModuleSimWrapper module : mModules) - { - module.update(); - } - mSwerveSim.update(mUpdatePeriod); - mGyro.setAngle(-mSwerveSim.getCurPose().getRotation().getDegrees()); - } - - public Pose2d getPose() - { - return mSwerveSim.getCurPose(); - } -} diff --git a/snobot_sim_java_navx/build.gradle b/snobot_sim_java_navx/build.gradle deleted file mode 100644 index 996a435..0000000 --- a/snobot_sim_java_navx/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -plugins { - id 'java' - id 'maven-publish' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext { - baseId = "snobot_sim_java_phoenix5" -} - -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -apply from: "${rootDir}/build_scripts/base_java.gradle" - -dependencies { - - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("wpiunits") - implementation wpilibTools.deps.wpilibJava("ntcore") - implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - implementation project(":snobot_sim_java_base") - - implementation "com.studica.frc:Studica-java:${navxVersion}" - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -apply from: "${rootDir}/build_scripts/base_java_publish.gradle" diff --git a/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/BUILD.bazel b/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/BUILD.bazel deleted file mode 100644 index 50d9250..0000000 --- a/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "navx", - srcs = glob(["*.java"]), - visibility = ["//visibility:public"], - deps = [ - "//snobot_sim_java_base/src/main/java/org/snobotv2/interfaces", - "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-studica//libraries/java/studica-java", - ], -) diff --git a/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/NavxWrapper.java b/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/NavxWrapper.java deleted file mode 100644 index d159071..0000000 --- a/snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx/NavxWrapper.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.snobotv2.module_wrappers.navx; - -import com.studica.frc.AHRS; -import edu.wpi.first.wpilibj.simulation.SimDeviceSim; -import org.snobotv2.interfaces.IGyroWrapper; -import org.snobotv2.module_wrappers.BaseGyroWrapper; - -public class NavxWrapper -{ - private final IGyroWrapper mYawGyro; - private final IGyroWrapper mPitchGyro; - private final IGyroWrapper mRollGyro; - - public NavxWrapper(AHRS gyro) - { - SimDeviceSim deviceSim = new SimDeviceSim("navX-Sensor[" + gyro.getPort() + "]"); - - mYawGyro = new BaseGyroWrapper(deviceSim.getDouble("Yaw")); - mPitchGyro = new BaseGyroWrapper(deviceSim.getDouble("Pitch")); - mRollGyro = new BaseGyroWrapper(deviceSim.getDouble("Roll")); - } - - public IGyroWrapper getYawGyro() - { - return mYawGyro; - } - - public IGyroWrapper getPitchGyro() - { - return mPitchGyro; - } - - public IGyroWrapper getRollGyro() - { - return mRollGyro; - } -} diff --git a/snobot_sim_java_phoenix5/build.gradle b/snobot_sim_java_phoenix5/build.gradle deleted file mode 100644 index f8bff78..0000000 --- a/snobot_sim_java_phoenix5/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -plugins { - id 'java' - id 'maven-publish' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext { - baseId = "snobot_sim_java_phoenix5" -} - -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -apply from: "${rootDir}/build_scripts/base_java.gradle" - -dependencies { - - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("wpiunits") - implementation wpilibTools.deps.wpilibJava("ntcore") - implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - implementation project(":snobot_sim_java_base") - - implementation "com.ctre.phoenix:api-java:${phoenix5Version}" - implementation "com.ctre.phoenix:wpiapi-java:${phoenix5Version}" - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' - - testImplementation project(":snobot_sim_java_test_utils") - testImplementation project(":examples:test_robot_base") - testImplementation project(":examples:test_robot_phoenix5") -} - -apply from: "${rootDir}/build_scripts/base_java_publish.gradle" diff --git a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel b/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel deleted file mode 100644 index 110267e..0000000 --- a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "phoenix5", - srcs = glob(["*.java"]), - visibility = ["//visibility:public"], - deps = [ - "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - ], -) diff --git a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreDigitalInputWrapper.java b/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreDigitalInputWrapper.java deleted file mode 100644 index 0ba2edb..0000000 --- a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreDigitalInputWrapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import org.snobotv2.module_wrappers.BaseDigitalInputWrapper; - -import java.util.function.Consumer; - -public class CtreDigitalInputWrapper extends BaseDigitalInputWrapper -{ - private static Consumer getConsumer(WPI_TalonSRX talonSrx, boolean isFwd) - { - if (isFwd) - { - return state -> talonSrx.getSimCollection().setLimitFwd(state); - } - return state -> talonSrx.getSimCollection().setLimitRev(state); - } - - public CtreDigitalInputWrapper(WPI_TalonSRX talonSrx, boolean fwd) - { - super(getConsumer(talonSrx, fwd)); - } -} diff --git a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreEncoderSimWrapper.java b/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreEncoderSimWrapper.java deleted file mode 100644 index a47f3b5..0000000 --- a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreEncoderSimWrapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import org.snobotv2.module_wrappers.BaseEncoderWrapper; - -@SuppressWarnings("removal") -public class CtreEncoderSimWrapper extends BaseEncoderWrapper -{ - public CtreEncoderSimWrapper(WPI_TalonSRX talonSrx) - { - this(talonSrx, 1.0 / 4096); - } - - public CtreEncoderSimWrapper(WPI_TalonSRX talonSrx, double ticksToPosition) - { - super( - () -> talonSrx.getSelectedSensorPosition() * ticksToPosition, - (double position) -> talonSrx.getSimCollection().setQuadratureRawPosition((int) (position / ticksToPosition)), - (double velocity) -> talonSrx.getSimCollection().setQuadratureVelocity((int) (velocity * 100)) - ); - } -} diff --git a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreMotorControllerSimWrapper.java b/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreMotorControllerSimWrapper.java deleted file mode 100644 index f1f5fb3..0000000 --- a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtreMotorControllerSimWrapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import edu.wpi.first.wpilibj.RobotController; -import org.snobotv2.module_wrappers.BaseMotorControllerWrapper; - -import java.util.function.DoubleConsumer; - -@SuppressWarnings("removal") -public class CtreMotorControllerSimWrapper extends BaseMotorControllerWrapper -{ - private final DoubleConsumer mBusVoltageSetter; - - public CtreMotorControllerSimWrapper(WPI_TalonSRX motorController) - { - super(motorController.getDeviceID(), motorController::getMotorOutputPercent); - mBusVoltageSetter = voltage -> motorController.getSimCollection().setBusVoltage(voltage); - } - - @Override - public void update() - { - mBusVoltageSetter.accept(RobotController.getBatteryVoltage()); - } - - @Override - public void setCurrent(double current) - { -// mTalon.getSimCollection().setStatorCurrent(current); -// mTalon.getSimCollection().setSupplyCurrent(current); - } -} diff --git a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtrePigeonImuWrapper.java b/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtrePigeonImuWrapper.java deleted file mode 100644 index e93cfec..0000000 --- a/snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5/CtrePigeonImuWrapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.sensors.WPI_PigeonIMU; -import org.snobotv2.module_wrappers.BaseGyroWrapper; - -@SuppressWarnings("removal") -public class CtrePigeonImuWrapper extends BaseGyroWrapper -{ - public CtrePigeonImuWrapper(WPI_PigeonIMU pigeon) - { - super((double angle) -> pigeon.getSimCollection().setRawHeading(-angle)); - } -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel deleted file mode 100644 index b46fd4a..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BUILD.bazel +++ /dev/null @@ -1,15 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_test") - -snobot_sim_java_test( - name = "test", - srcs = glob(["*.java"]), - deps = [ - "//examples/test_robot_phoenix5/src/main/java/org/snobotv2/examples/phoenix5/subsystems", - "//snobot_sim_java_base/src/main/java/org/snobotv2/interfaces", - "//snobot_sim_java_phoenix5/src/main/java/org/snobotv2/module_wrappers/phoenix5", - "//snobot_sim_java_test_utils/src/main/java/org/snobotv2/test_utils", - "@bzlmodrio-allwpilib//libraries/java/hal", - "@bzlmodrio-phoenix//libraries/java/api-java", - "@bzlmodrio-phoenix//libraries/java/wpiapi-java", - ], -) diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BasePhoenix5UnitTest.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BasePhoenix5UnitTest.java deleted file mode 100644 index 23244c6..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/BasePhoenix5UnitTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import com.ctre.phoenix.unmanaged.Unmanaged; -import edu.wpi.first.hal.HAL; -import org.snobotv2.test_utils.BaseUnitTest; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@SuppressWarnings("PMD.TestClassWithoutTestCases") -public class BasePhoenix5UnitTest extends BaseUnitTest -{ - protected void ctreSimLoop() - { - HAL.simPeriodicBefore(); - Unmanaged.feedEnable(1000); - HAL.simPeriodicAfter(); - - try - { - Thread.sleep(250); - } catch (InterruptedException e) - { - e.printStackTrace(); // NOPMD - } - } - - @SuppressWarnings("PMD.CloseResource") - protected void testVoltagePercentage(double expected, WPI_TalonSRX... motorControllers) - { - for (WPI_TalonSRX motorController : motorControllers) - { - assertEquals(expected, motorController.getMotorOutputPercent(), DEFAULT_EPSILON, () -> "For " + motorController.getDeviceID()); - } - } - -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestPigeonImu.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestPigeonImu.java deleted file mode 100644 index 09a9a69..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestPigeonImu.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import com.ctre.phoenix.sensors.WPI_PigeonIMU; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.snobotv2.interfaces.IGyroWrapper; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class TestPigeonImu extends BasePhoenix5UnitTest -{ - private static final double PIGEON_EPSILON = 1e-2; - - @Test - public void testBasicInline() - { - try (WPI_PigeonIMU pigeon = new WPI_PigeonIMU(3)) - { - pigeon.reset(); - ctreSimLoop(); - - runTests(pigeon); - } - } - - @Disabled("Ribbon cable pigeons have a sim bug in the CTRE library") - @Test - public void testBasicAttached() - { - try (WPI_TalonSRX talon = new WPI_TalonSRX(1); - WPI_PigeonIMU pigeon = new WPI_PigeonIMU(talon)) - { - pigeon.reset(); - ctreSimLoop(); - - runTests(pigeon); - } - - } - - private void runTests(WPI_PigeonIMU pigeon) - { - IGyroWrapper wrapper = new CtrePigeonImuWrapper(pigeon); - - assertEquals(0, pigeon.getAngle(), PIGEON_EPSILON); - - wrapper.setAngle(20); - ctreSimLoop(); - assertEquals(20, pigeon.getAngle(), PIGEON_EPSILON); - - wrapper.setAngle(-43.2); - ctreSimLoop(); - assertEquals(-43.2, pigeon.getAngle(), PIGEON_EPSILON); - } -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSRX.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSRX.java deleted file mode 100644 index 995021c..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSRX.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - - -@Tag("ctre") -public class TestTalonSRX extends BasePhoenix5UnitTest -{ - @Test - public void testBasic() - { - try (WPI_TalonSRX talon = new WPI_TalonSRX(0); - WPI_TalonSRX follower = new WPI_TalonSRX(1)) - { - follower.follow(talon); - - for (int i = 0; i < 5; ++i) - { - talon.set(.4); - ctreSimLoop(); - } - - CtreMotorControllerSimWrapper talonWrapper = new CtreMotorControllerSimWrapper(talon); - CtreMotorControllerSimWrapper followerWrapper = new CtreMotorControllerSimWrapper(follower); - - talon.set(.4); - ctreSimLoop(); - talonWrapper.update(); - testVoltagePercentage(.4, talon, follower); - testVoltagePercentage(.4, talonWrapper, followerWrapper); - - talon.set(-.25); - ctreSimLoop(); - talon.set(-.25); - ctreSimLoop(); - talonWrapper.update(); - testVoltagePercentage(-.25, talon, follower); - testVoltagePercentage(-.25, talonWrapper, followerWrapper); - } - } -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxMotionMagic.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxMotionMagic.java deleted file mode 100644 index dd8752f..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxMotionMagic.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import org.junit.jupiter.api.Tag; -import org.snobotv2.examples.phoenix5.subsystems.CtreElevatorSubsystem; -import org.junit.jupiter.api.Test; - -@Tag("ctre") -public class TestTalonSrxMotionMagic extends BasePhoenix5UnitTest -{ - @Test - public void testMotionMagic() - { - try (CtreElevatorSubsystem elevatorSubsystem = new CtreElevatorSubsystem()) - { - for (int i = 0; i < 5; ++i) - { - elevatorSubsystem.goToPositionMotionMagic(30); - elevatorSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - } - } -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxPositionMode.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxPositionMode.java deleted file mode 100644 index 12c40ec..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxPositionMode.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import org.junit.jupiter.api.Tag; -import org.snobotv2.examples.phoenix5.subsystems.CtreElevatorSubsystem; -import org.junit.jupiter.api.Test; - -@Tag("ctre") -public class TestTalonSrxPositionMode extends BasePhoenix5UnitTest -{ - @Test - public void testGoToPosition() - { - try (CtreElevatorSubsystem elevatorSubsystem = new CtreElevatorSubsystem()) - { - for (int i = 0; i < 5; ++i) - { - elevatorSubsystem.goToPosition(30); - elevatorSubsystem.simulationPeriodic(); - ctreSimLoop(); - } - } - - } -} diff --git a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxSpeedMode.java b/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxSpeedMode.java deleted file mode 100644 index 4ed4a75..0000000 --- a/snobot_sim_java_phoenix5/src/test/java/org/snobotv2/module_wrappers/phoenix5/TestTalonSrxSpeedMode.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.snobotv2.module_wrappers.phoenix5; - -import org.junit.jupiter.api.Tag; -import org.snobotv2.examples.phoenix5.subsystems.CtreShooterSubsystem; -import org.junit.jupiter.api.Test; - -@Tag("ctre") -public class TestTalonSrxSpeedMode extends BasePhoenix5UnitTest -{ - @Test - public void testSpeedControl() - { - try (CtreShooterSubsystem shooterSubsystem = new CtreShooterSubsystem()) - { - for (int i = 0; i < 5; ++i) - { - shooterSubsystem.spinAtRpm(2500); - ctreSimLoop(); - } - } - - - } -} diff --git a/snobot_swerve_sim/build.gradle b/snobot_swerve_sim/build.gradle deleted file mode 100644 index c123abc..0000000 --- a/snobot_swerve_sim/build.gradle +++ /dev/null @@ -1,39 +0,0 @@ -plugins { - id 'java' - id 'maven-publish' - id 'edu.wpi.first.WpilibTools' version '1.1.0' -} - -group 'org.snobotv2' - -ext { - baseId = "snobot_swerve_sim" -} - -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -apply from: "${rootDir}/build_scripts/base_java.gradle" - -dependencies { - implementation wpilibTools.deps.wpilibJava("hal") - implementation wpilibTools.deps.wpilibJava("wpiunits") - implementation wpilibTools.deps.wpilibJava("wpimath") - implementation wpilibTools.deps.wpilibJava("wpiutil") - implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation "org.ejml:ejml-simple:0.43.1" - implementation "us.hebi.quickbuf:quickbuf-runtime:1.3.2" - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -checkstyleMain.enabled = false; -checkstyleTest.enabled = false; -pmdMain.enabled = false; -pmdTest.enabled = false; -spotbugsMain.enabled = false; -spotbugsTest.enabled = false; - -apply from: "${rootDir}/build_scripts/base_java_publish.gradle" diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/BUILD.bazel b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/BUILD.bazel deleted file mode 100644 index 2be7c39..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "shim", - srcs = glob(["*.java"]), - visibility = ["//visibility:public"], - deps = [ - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - ], -) diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/Vector2d.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/Vector2d.java deleted file mode 100644 index a88b0ef..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim/Vector2d.java +++ /dev/null @@ -1,32 +0,0 @@ -package edu.wpi.first.wpilibj.shim; - -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Translation2d; - -public class Vector2d extends Translation2d -{ - public Vector2d() - { - } - - public Vector2d(double x, double y) - { - super(x, y); - } - - /** - * Returns dot product of this vector with argument. - * - * @param vec Vector with which to perform dot product. - * @return Dot product of this vector with argument. - */ - public double dot(Vector2d vec) { - return getX() * vec.getX() + getY() * vec.getY(); - } - - public Vector2d rotateBy(Rotation2d other) - { - Translation2d rotated = super.rotateBy(other); - return new Vector2d(rotated.getX(), rotated.getY()); - } -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel deleted file mode 100644 index 34176e9..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "swerve", - srcs = glob(["*.java"]), - visibility = ["//visibility:public"], - deps = [ - "//snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - "@maven//:org_ejml_ejml_simple", - ], -) diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/Force2d.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/Force2d.java deleted file mode 100644 index 341838d..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/Force2d.java +++ /dev/null @@ -1,210 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.Matrix; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N2; -import edu.wpi.first.wpilibj.shim.Vector2d; -import org.ejml.simple.SimpleMatrix; - -@SuppressWarnings("overrides") -public class Force2d { - Matrix m_matrix; - - /** - * Constructs a Force2d with X and Y components equal to zero. - */ - public Force2d() { - this(0.0, 0.0); - } - - /** - * Constructs a Force2d with the X and Y components equal to the - * provided values. - * - * @param x The x component of the force. - * @param y The y component of the force. - */ - public Force2d( double x, double y) { - m_matrix = new Matrix<>(new SimpleMatrix(2, 1)); - m_matrix.set(0, 0, x); - m_matrix.set(1, 0, y); - } - - /** - * Constructs a Force2d with the provided force magnitude and angle. This is - * essentially converting from polar coordinates to Cartesian coordinates. - * - * @param mag The magnititude of the force - * @param angle The angle from the x-axis to the force vector. - */ - public Force2d(double mag, Rotation2d angle) { - this(mag * angle.getCos(), mag * angle.getSin()); - } - - /** - * Constructs a Force2d with the provided 2-element column matrix as the x/y components. - * - * @param m 2 row, 1 column input matrix - */ - public Force2d(Matrix m) { - m_matrix = m; - } - - /** - * Constructs a Force2d with the provided vector assumed to represent the force. - * - * @param forceVec vector which represents some force in two dimensions - */ - public Force2d(Vector2d forceVec) { - this(forceVec.getX(), forceVec.getY()); - } - - /** - * Returns the X component of the force. - */ - public double getX() { - return m_matrix.get(0, 0); - } - - /** - * Returns the Y component of the force. - */ - public double getY() { - return m_matrix.get(1, 0); - } - - /** - * Returns the norm, or distance from the origin to the force. - */ - public double getNorm() { - return m_matrix.normF(); - } - - /** - * Gets a unit vector in the direction this force points. - */ - public Vector2d getUnitVector() { - return new Vector2d(this.getX() / this.getNorm(), this.getY() / this.getNorm()); - } - - /** - * Applies a rotation to the force in 2d space. - * - *

This multiplies the force vector by a counterclockwise rotation - * matrix of the given angle. - * [x_new] [other.cos, -other.sin][x] - * [y_new] = [other.sin, other.cos][y] - * - *

For example, rotating a Force2d of {2, 0} by 90 degrees will return a - * Force2d of {0, 2}. - * - * @param angle The rotation to rotate the force by. - * @return The new rotated force. - */ - public Force2d rotateBy(Rotation2d angle) { - return new Force2d( - this.getX() * angle.getCos() - this.getY() * angle.getSin(), - this.getX() * angle.getSin() + this.getY() * angle.getCos() - ); - } - - /** - * Adds two forces in 2d space and returns the sum. This is similar to - * vector addition. - * - *

For example, Force2d{1.0, 2.5} + Force2d{2.0, 5.5} = - * Force2d{3.0, 8.0} - * - * @param other The force to add. - * @return The sum of the forces. - */ - public Force2d plus(Force2d other) { - return new Force2d(this.m_matrix.plus(other.m_matrix)); - } - - /** - * Accumulates another force into this force. Returns nothing, acts "in-place" on this force. - * @param other The force to add. - */ - public void accum(Force2d other) { - this.m_matrix = this.m_matrix.plus(other.m_matrix); - } - - /** - * Subtracts the other force from the other force and returns the - * difference. - * - *

For example, Force2d{5.0, 4.0} - Force2d{1.0, 2.0} = - * Force2d{4.0, 2.0} - * - * @param other The force to subtract. - * @return The difference between the two forces. - */ - public Force2d minus(Force2d other) { - return new Force2d(this.m_matrix.minus(other.m_matrix)); - } - - /** - * Returns the inverse of the current force. This is equivalent to - * rotating by 180 degrees, flipping the point over both axes, or simply - * negating both components of the force. - * - * @return The inverse of the current force. - */ - public Force2d unaryMinus() { - return new Force2d(this.m_matrix.times(-1.0)); - } - - /** - * Multiplies the force by a scalar and returns the new force. - * - *

For example, Force2d{2.0, 2.5} * 2 = Force2d{4.0, 5.0} - * - * @param scalar The scalar to multiply by. - * @return The scaled force. - */ - public Force2d times(double scalar) { - return new Force2d(this.m_matrix.times(scalar)); - } - - /** - * Divides the force by a scalar and returns the new force. - * - *

For example, Force2d{2.0, 2.5} / 2 = Force2d{1.0, 1.25} - * - * @param scalar The scalar to multiply by. - * @return The reference to the new mutated object. - */ - public Force2d div(double scalar) { - return new Force2d(this.m_matrix.div(scalar)); - } - - /** - * Creates a Vector2d object from the force this object represents. - */ - public Vector2d getVector2d() { - return new Vector2d(this.getX(), this.getY()); - } - - @Override - public String toString() { - return String.format("Force2d(X: %.2f, Y: %.2f)", this.getX(), this.getY()); - } - - /** - * Checks equality between this Force2d and another object. - * - * @param obj The other object. - * @return Whether the two objects are equal or not. - */ - @Override - @SuppressWarnings("EqualsHashCode") - public boolean equals(Object obj) { - if (obj instanceof Force2d) { - return this.m_matrix.isEqual(((Force2d) obj).m_matrix, 1E-9); - } else { - return false; - } - } -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/ForceAtPose2d.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/ForceAtPose2d.java deleted file mode 100644 index 94b8f7a..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/ForceAtPose2d.java +++ /dev/null @@ -1,79 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Transform2d; -import edu.wpi.first.wpilibj.shim.Vector2d; -import java.util.Objects; - -public class ForceAtPose2d { - public Force2d m_force; - public Pose2d m_pos; - - /** - * Constructs a ForceAtDistance2d that's all zeroed out. - */ - public ForceAtPose2d() { - this(new Force2d(), new Pose2d()); - } - - /** - * Constructs from a given force and position that force acts at. - * @param force The force - * @param pos The position the force is acting at - */ - public ForceAtPose2d( Force2d force, Pose2d pos) { - m_force = force; - m_pos = pos; - } - - /** - * Returns the torque associated with this force at distance. - * positive is counter-clockwise, negative is clockwise - */ - public double getTorque(Pose2d centerOfRotation) { - Transform2d transCORtoF = new Transform2d(centerOfRotation, m_pos); - - //Align the force to the reference frame of the center of rotation - Force2d alignedForce = getForceInRefFrame(centerOfRotation); - - //Calculate the lever arm the force acts at - Vector2d leverArm = new Vector2d(transCORtoF.getX(), transCORtoF.getY()); - return vector2dCross(leverArm, alignedForce.getVector2d()); - } - - public double vector2dCross(Vector2d left, Vector2d other) { - return left.getX() * other.getY() - left.getY() * other.getX(); - } - - public Force2d getForceInRefFrame(Pose2d refFrame) { - Transform2d trans = new Transform2d(refFrame, m_pos); - return m_force.rotateBy(trans.getRotation()); - } - - @Override - public String toString() { - return String.format("ForceAtDistance2D(X: %.2fN, Y: %.2fN)", m_force.getX(), m_force.getY()); - } - - /** - * Checks equality between this Force2d and another object. - * - * @param obj The other object. - * @return Whether the two objects are equal or not. - */ - @Override - public boolean equals(Object obj) { - if (obj instanceof ForceAtPose2d) { - return Math.abs(((ForceAtPose2d) obj).m_force.getX() - m_force.getX()) < 1E-9 - && Math.abs(((ForceAtPose2d) obj).m_force.getY() - m_force.getY()) < 1E-9 - && Math.abs(((ForceAtPose2d) obj).m_pos.getX() - m_pos.getX()) < 1E-9 - && Math.abs(((ForceAtPose2d) obj).m_pos.getY() - m_pos.getY()) < 1E-9; - } - return false; - } - - @Override - public int hashCode() { - return Objects.hash(m_force.getX(), m_force.getY(), m_pos.getX(), m_pos.getY()); - } -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/MotorGearboxWheelSim.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/MotorGearboxWheelSim.java deleted file mode 100644 index ca333b7..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/MotorGearboxWheelSim.java +++ /dev/null @@ -1,92 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.util.Units; - -class MotorGearboxWheelSim { - private final DCMotor m_motor; - private final double m_gearRatio; - private final double m_wheelRadiusM; - private final double m_gearboxFricCoefNmPerRadPerSec; - - private double m_curGroundForceN; - private double m_wheelRotationsRad; - private double m_prevWheelRotationalSpeedRadPerSec; - - private double m_wheelSpeedRPM; - private double m_motorSpeedRPM; - - /** - * 1D simulation of a motor, gearbox, and wheel. - * Provides an output torque, given an input speed and voltage. - * @param motor Motor set used to provide power input. - * @param gearRatio Gearbox Ratio. Gearboxes which slow - * down motors (ie all of them) should have this greater than 1.0. - * @param wheelRadiusM Radius of the wheel in meters - * @param gearboxFricCoefNmPerRadPerSec Kinetic Friction Losses - * in the gearbox (expressed in units of Nm of "fighting" force per - * radian per second of motor speed). Set to 0 if you're awesome - * with white lithium grease, make it positive if your team maybe - * forget the grease sometimes. - */ - MotorGearboxWheelSim(DCMotor motor, - double gearRatio, - double wheelRadiusM, - double gearboxFricCoefNmPerRadPerSec) { - this.m_motor = motor; - this.m_gearRatio = gearRatio; - this.m_wheelRadiusM = wheelRadiusM; - this.m_gearboxFricCoefNmPerRadPerSec = gearboxFricCoefNmPerRadPerSec; - } - - private double groundVelocityMPS; - - public void update(double groundVelocityMPS, double motorVoltage, double dtSeconds) { - this.groundVelocityMPS = groundVelocityMPS; - - double wheelRotSpd = groundVelocityMPS / m_wheelRadiusM; - double motorRotSpd = wheelRotSpd * m_gearRatio; - - double motorTq = m_motor.KtNMPerAmp * m_motor.getCurrent(motorRotSpd, - motorVoltage); - - double gboxFricTq = motorRotSpd * m_gearboxFricCoefNmPerRadPerSec; - - //div by 1/torque ratio, or mul by gear ratio - double curWheelTq = motorTq * m_gearRatio - gboxFricTq; - - m_curGroundForceN = curWheelTq / m_wheelRadiusM / 2; - - //Trapezoidal integration - m_wheelRotationsRad += (wheelRotSpd + m_prevWheelRotationalSpeedRadPerSec) / 2 - * dtSeconds; - - m_prevWheelRotationalSpeedRadPerSec = wheelRotSpd; - -// System.out.println("******" + groundVelocityMPS + ", " + wheelRotSpd + ", " + motorRotSpd); - - m_wheelSpeedRPM = Units.radiansPerSecondToRotationsPerMinute(wheelRotSpd); - m_motorSpeedRPM = Units.radiansPerSecondToRotationsPerMinute(motorRotSpd); - } - - public double getPositionRev() { - return m_wheelRotationsRad / 2 / Math.PI; - } - - public double getGroundForce_N() { - return m_curGroundForceN; - } - - public double getWheelSpeed_RPM() { - return m_wheelSpeedRPM; - } - - public double getWheelSpeedMetersPerSecond() { - return groundVelocityMPS; - } - - public double getMotorSpeed_RPM() { - return m_motorSpeedRPM; - } - -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveSim.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveSim.java deleted file mode 100644 index bb965d1..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveSim.java +++ /dev/null @@ -1,203 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Transform2d; -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.math.geometry.Twist2d; -import edu.wpi.first.wpilibj.shim.Vector2d; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - - -public class QuadSwerveSim { - public static final int FL = 0; // Front Left Module Index - public static final int FR = 1; // Front Right Module Index - public static final int BL = 2; // Back Left Module Index - public static final int BR = 3; // Back Right Module Index - public static final int NUM_MODULES = 4; - - List m_modules; - - Vector2d m_accelPrev = new Vector2d(); - Vector2d m_velPrev = new Vector2d(); - double m_rotAccelPrev = 0; - double m_rotVelPrev = 0; - - public final List m_robotToModuleTL; - public final List m_robotToModule; - - Pose2d m_curPose = new Pose2d(); - - double m_robotMasskg; - double m_robotMOI; - - /** - * Simulates a drivetrain powered by four swerve modules. - * @param wheelBaseWidthM left-to-right distance between the wheel/ground - * contact patches, in meters - * @param wheelBaseLengthM front-to-back distance between the wheel/ground - * contact patches, in meters - * @param robotMasskg Total mass of the robot, in kilograms. - * @param robotMOI Effective moment of inertia of the robot, in kilogram-meters-squared - * @param modules Set of swerve modules controlling the drivetrain. - * Order must be 0=FL, 1=FR, 2=BL, 3=BR - */ - public QuadSwerveSim( - double wheelBaseWidthM, - double wheelBaseLengthM, - double robotMasskg, - double robotMOI, - List modules - ) { - this.m_modules = modules; - - m_robotToModuleTL = Arrays.asList( - new Translation2d( wheelBaseWidthM / 2, wheelBaseLengthM / 2), - new Translation2d( wheelBaseWidthM / 2, -wheelBaseLengthM / 2), - new Translation2d(-wheelBaseWidthM / 2, wheelBaseLengthM / 2), - new Translation2d(-wheelBaseWidthM / 2, -wheelBaseLengthM / 2) - ); - - m_robotToModule = Arrays.asList( - new Transform2d(m_robotToModuleTL.get(FL), new Rotation2d(0.0)), - new Transform2d(m_robotToModuleTL.get(FR), new Rotation2d(0.0)), - new Transform2d(m_robotToModuleTL.get(BL), new Rotation2d(0.0)), - new Transform2d(m_robotToModuleTL.get(BR), new Rotation2d(0.0)) - ); - - this.m_robotMasskg = robotMasskg; - this.m_robotMOI = robotMOI; - - } - - /** - * Resets the robot to a non-moving state somewhere on the field. - * @param pose Position on the field to reset the robot to. - */ - public void modelReset(Pose2d pose) { - m_accelPrev = new Vector2d(); - m_velPrev = new Vector2d(); - m_rotAccelPrev = 0; - m_rotVelPrev = 0; - for (int idx = 0; idx < NUM_MODULES; idx++) { - m_modules.get(idx).reset(pose.transformBy(m_robotToModule.get(idx))); - } - m_curPose = pose; - } - - /** - * Steps the module simulation forward by one discrete step. - * @param dtSeconds size of the discrete step to take - */ - public void update(double dtSeconds) { - Pose2d fieldRF = new Pose2d(); // global origin - Transform2d fieldToRobot = new Transform2d(fieldRF, m_curPose); - - //////////////////////////////////////////////////////////////// - // Component-Force Calculations to populate the free-body diagram - - // Calculate each module's new position, and step it through simulation. - for (int idx = 0; idx < NUM_MODULES; idx++) { - Pose2d tmp = fieldRF.transformBy(fieldToRobot); - Pose2d modPose = tmp.transformBy(m_robotToModule.get(idx)); - m_modules.get(idx).setModulePose(modPose); - m_modules.get(idx).update(dtSeconds); - } - - // Force on frame from wheel motive forces (along-tread) - ArrayList wheelMotiveForces = new ArrayList(NUM_MODULES); - for (int idx = 0; idx < NUM_MODULES; idx++) { - wheelMotiveForces.add(m_modules.get(idx).getWheelMotiveForce()); - } - - // Friction Model - Force2d preFricNetForce = new Force2d(); - wheelMotiveForces.forEach((ForceAtPose2d mf) -> { - //Add up all the forces that friction gets a chance to fight against - preFricNetForce.accum(mf.getForceInRefFrame(m_curPose)); - }); - - Force2d sidekickForce = new Force2d(0, 0); //TODO - make a generic "external force" input? - - preFricNetForce.accum(sidekickForce); - - //calculate force on the robot, "pre friction" (pf) - ForceAtPose2d pfRobotForce = new ForceAtPose2d(preFricNetForce, m_curPose); - - // Calculate the forces from cross-tread friction at each module - ArrayList xtreadFricFrc = new ArrayList(NUM_MODULES); - for (int idx = 0; idx < NUM_MODULES; idx++) { - SwerveModuleSim mod = m_modules.get(idx); - //Assume force evenly applied to all modules. - double ffrac = 1.0 / NUM_MODULES; - Force2d pfModForce = pfRobotForce.getForceInRefFrame(mod.getPose()).times(ffrac); - xtreadFricFrc.add(mod.getCrossTreadFricForce(pfModForce, dtSeconds)); - } - - //////////////////////////////////////////////////////////////// - // Combine forces in free-body diagram - - // Using all the above force components, do Sum of Forces - Force2d forceOnRobotCenter = preFricNetForce; - - xtreadFricFrc.forEach((ForceAtPose2d f) -> { - forceOnRobotCenter.accum(f.getForceInRefFrame(m_curPose)); - }); - - ForceAtPose2d netForce = new ForceAtPose2d(forceOnRobotCenter, m_curPose); - - Force2d robotForceInFieldRefFrame = netForce.getForceInRefFrame(fieldRF); - - //Sum of Torques - double netTorque = 0; - - for (int idx = 0; idx < NUM_MODULES; idx++) { - netTorque += wheelMotiveForces.get(idx).getTorque(m_curPose); - netTorque += xtreadFricFrc.get(idx).getTorque(m_curPose); - } - - - //////////////////////////////////////////////////////////////// - // Apply Newton's 2nd law to get motion from forces - - //a = F/m in field frame - Vector2d accel = robotForceInFieldRefFrame.times(1 / m_robotMasskg).getVector2d(); - - //Trapezoidal integration - Vector2d velocity = new Vector2d( m_velPrev.getX() + (accel.getX() + m_accelPrev.getX()) / 2 * dtSeconds, - m_velPrev.getY() + (accel.getY() + m_accelPrev.getY()) / 2 * dtSeconds); - - //Trapezoidal integration - Translation2d posChange = new Translation2d( (velocity.getX() + m_velPrev.getX()) / 2 * dtSeconds, - (velocity.getY() + m_velPrev.getY()) / 2 * dtSeconds); - - //Twist needs to be relative to robot reference frame - posChange = posChange.rotateBy(m_curPose.getRotation().unaryMinus()); - - m_velPrev = velocity; - m_accelPrev = accel; - - //alpha = T/I in field frame - double rotAccel = netTorque / m_robotMOI; - double rotVel = m_rotVelPrev + (rotAccel + m_rotAccelPrev) / 2 * dtSeconds; - double rotPosChange = (rotVel + m_rotVelPrev) / 2 * dtSeconds; - - m_rotVelPrev = rotVel; - m_rotAccelPrev = rotAccel; - - Twist2d motionThisLoop = new Twist2d(posChange.getX(), posChange.getY(), rotPosChange); - - m_curPose = m_curPose.exp(motionThisLoop); - } - - /** - * Returns the current pose of the drivetrain. - */ - public Pose2d getCurPose() { - return m_curPose; - } - -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SimpleMotorWithMassModel.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SimpleMotorWithMassModel.java deleted file mode 100644 index 3c14ad8..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SimpleMotorWithMassModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.system.LinearSystem; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.system.plant.LinearSystemId; -import edu.wpi.first.wpilibj.simulation.FlywheelSim; - - -class SimpleMotorWithMassModel { - double m_curDisplacementRev; - - FlywheelSim m_fwSim; - - /** - * So far - this is just a wrapper around FlywheelSim to get position as an output. - * @param motor Motor driving this mass - * @param gearing Gearing between motor and controlled mass - * @param moi Moment of inertia of the controlled mass - */ - SimpleMotorWithMassModel(DCMotor motor, double gearing, double moi) { - LinearSystem plant = - LinearSystemId.createFlywheelSystem(motor, moi, gearing); - m_fwSim = new FlywheelSim(plant, motor); - } - - void update(double motorVoltage, double dtSeconds) { - m_fwSim.setInputVoltage(motorVoltage); - m_fwSim.update(dtSeconds); - //Add additional state of displacement in a hacky-ish calculation - m_curDisplacementRev += m_fwSim.getAngularVelocityRPM() / 60.0 * dtSeconds; - } - - /** - * Gets the present speed of the rotating mass. - */ - double getMechanismSpeed_RPM() { - return m_fwSim.getAngularVelocityRPM(); - } - - /** - * Returns the present current draw of the mechanism. - */ - double getCurrent_A() { - return m_fwSim.getCurrentDrawAmps(); - } - - /** - * Returns the present displacement in Revolutions. - */ - double getMechanismPositionRev() { - return m_curDisplacementRev; - } -} diff --git a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSim.java b/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSim.java deleted file mode 100644 index 60b1d8d..0000000 --- a/snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSim.java +++ /dev/null @@ -1,237 +0,0 @@ -package edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.wpilibj.shim.Vector2d; - -public class SwerveModuleSim { - private SimpleMotorWithMassModel m_azmthMotor; - private MotorGearboxWheelSim m_wheelMotor; - - private final double m_azimuthEncGearRatio; //Motor-to-azimuth-encoder reduction - private final double m_wheelEncGearRatio; //Motor-to-wheel-encoder reduction - private final double m_treadStaticFricForce; - private final double m_treadKineticFricForce; - //TODO - make the "how much grease" factor configurable? - private final double m_wheelGearboxLossFactor = 0.01; - - Pose2d m_prevModulePose = null; - Pose2d m_curModulePose = null; - //Positive = in curAngle_deg, Negative = opposite of curAngle_deg - double m_curLinearSpeedMpS = 0; - //0 = toward front, 90 = toward left, 180 = toward back, 270 = toward right - Rotation2d m_curAzmthAngle = Rotation2d.fromDegrees(0); - - double m_crossTreadFricForceMag = 0; - double m_crossTreadVelMag = 0; - double m_crossTreadForceMag = 0; - - double m_wheelVoltage; - double m_azmthVoltage; - - public SwerveModuleSim( - DCMotor azimuthMotor, - DCMotor wheelMotor, - double wheelRadiusM, - double azimuthGearRatio, - double wheelGearRatio) - { - this( - azimuthMotor, wheelMotor, wheelRadiusM, azimuthGearRatio, wheelGearRatio, - 1.0, - 1.0, - 1.1, - 0.8, - 16.0, - 0.001 - ); - } - - /** - * Simulates a single swerve module's behavior. - * @param azimuthMotor Motor driving the azimuth angle portion of the mechanism - * @param wheelMotor Motor driving the wheel to rotate - * @param wheelRadiusM Wheel radius, in meters - * @param azimuthGearRatio Motor rotations per one azimuth module - * rotation. Should be greater than zero - * @param wheelGearRatio Motor rotations per one wheel rotation. - * Should be greater than zero - * @param azimuthEncGearRatio Encoder rotations per one azimuth module rotation. - * Should be 1.0 if you have a good swerve module. - * @param wheelEncGearRatio Encoder rotations per one wheel rotation. - * @param treadStaticCoefFric Static coefficient of friction of the wheel - * tread and ground interface - * @param treadKineticCoefFric Kinetic coefficient of friction of the wheel - * tread and ground interface - * @param moduleNormalForce Downward force the robot and its mechanisms exert on this module. - * @param azimuthEffectiveMOI Effective moment of inertia of the azimuth module. - * The Azimuth motion is modeled as a simple flywheel. - */ - public SwerveModuleSim( - DCMotor azimuthMotor, - DCMotor wheelMotor, - double wheelRadiusM, - double azimuthGearRatio, - double wheelGearRatio, - double azimuthEncGearRatio, - double wheelEncGearRatio, - double treadStaticCoefFric, - double treadKineticCoefFric, - double moduleNormalForce, - double azimuthEffectiveMOI - ) { - this.m_azmthMotor = new SimpleMotorWithMassModel(azimuthMotor, - azimuthGearRatio, - azimuthEffectiveMOI); - this.m_wheelMotor = new MotorGearboxWheelSim(wheelMotor, - wheelGearRatio, - wheelRadiusM, - m_wheelGearboxLossFactor); - - this.m_azimuthEncGearRatio = azimuthEncGearRatio; - this.m_wheelEncGearRatio = wheelEncGearRatio; - this.m_treadStaticFricForce = treadStaticCoefFric * moduleNormalForce; - this.m_treadKineticFricForce = treadKineticCoefFric * moduleNormalForce; - - this.reset(new Pose2d()); - } - - /** - * Sets the voltages applied to each motor in the mechanism - * @param wheelVoltage voltage applied to the wheel motor - * @param azmthVoltage voltage applied to the azimuth motor - */ - public void setInputVoltages(double wheelVoltage, double azmthVoltage) { - this.m_wheelVoltage = wheelVoltage; - this.m_azmthVoltage = azmthVoltage; - } - - /** - * Returns the current physical rotation count of the azimuth encoder axle - * shaft in total rotations since last reset - not wrapped. - * IE, if you spin your module exactly two and a half times in the - * positive direction, this will return 2.5 (not 0.5). - */ - public double getAzimuthEncoderPositionRev() { - return m_azmthMotor.getMechanismPositionRev() * m_azimuthEncGearRatio; - } - public double getAzimuthEncoderPositionRads() { - return Units.rotationsToRadians(getAzimuthEncoderPositionRev()); - } - - public double getAzimuthEncoderVelocityRpm() { - return m_azmthMotor.getMechanismSpeed_RPM() * m_azimuthEncGearRatio; - } - - public double getAzimuthEncoderVelocityRadPerSec() { - return Units.rotationsPerMinuteToRadiansPerSecond(getAzimuthEncoderVelocityRpm()); - } - - /** - * Returns the total number of physical rotations the wheel has done - * since the last reset - not wrapped. IE, if your wheel rotated through - * 20.5 rotations, this function would return 20.5 (not 0.5). - */ - public double getWheelEncoderPositionRev() { - return m_wheelMotor.getPositionRev() * m_wheelEncGearRatio; - } - - public double getWheelEncoderMetersPerSecond() { - return m_wheelMotor.getWheelSpeedMetersPerSecond() * m_wheelEncGearRatio; - } - - void reset(Pose2d initModulePose) { - m_prevModulePose = m_curModulePose = initModulePose; - m_curLinearSpeedMpS = 0; - m_curAzmthAngle = Rotation2d.fromDegrees(0); - } - - public void update(double dtSeconds) { - Vector2d azimuthUnitVec = new Vector2d(1 , 0); - azimuthUnitVec = azimuthUnitVec.rotateBy(m_curAzmthAngle); - - // Assume the wheel does not lose traction along its wheel direction (on-tread) - double velocityAlongAzimuth = getModRelTransVel(dtSeconds).dot(azimuthUnitVec); -// System.out.println("Velocity along azimuth... " + velocityAlongAzimuth); - - m_wheelMotor.update(velocityAlongAzimuth, m_wheelVoltage, dtSeconds); - m_azmthMotor.update(m_azmthVoltage, dtSeconds); - - // Assume idealized azimuth control - no "twist" force at contact - // patch from friction or robot motion. - m_curAzmthAngle = Rotation2d.fromDegrees(m_azmthMotor.getMechanismPositionRev() * 360); - } - - - /** Get a vector of the velocity of the module's contact patch moving across the field. */ - Vector2d getModRelTransVel(double dtSeconds) { - double xvel = (m_curModulePose.getTranslation().getX() - - m_prevModulePose.getTranslation().getX()) / dtSeconds; - double yvel = (m_curModulePose.getTranslation().getY() - - m_prevModulePose.getTranslation().getY()) / dtSeconds; - Vector2d moduleTranslationVec = new Vector2d(xvel , yvel); - moduleTranslationVec = moduleTranslationVec.rotateBy(m_curModulePose.getRotation().unaryMinus()); - return moduleTranslationVec; - } - - /** - * Given a net force on a particular module, calculate the friction force - * generated by the tread interacting with the ground in the direction - * perpendicular to the wheel's rotation. - * @param netForce input force applied to the module - */ - ForceAtPose2d getCrossTreadFricForce(Force2d netForce, double dtSeconds) { - //Project net force onto cross-tread vector - Vector2d crossTreadUnitVector = new Vector2d(0 , 1); - crossTreadUnitVector = crossTreadUnitVector.rotateBy(m_curAzmthAngle); - m_crossTreadVelMag = getModRelTransVel(dtSeconds).dot(crossTreadUnitVector); - m_crossTreadForceMag = netForce.getVector2d().dot(crossTreadUnitVector); - - Force2d fricForce = new Force2d(); - - boolean useKinFric = Math.abs(m_crossTreadForceMag) > m_treadStaticFricForce - || Math.abs(m_crossTreadVelMag) > 0.001; - - if (useKinFric) { - // Force is great enough to overcome static friction, or we're already moving - // In either case, use kinetic frictional model - m_crossTreadFricForceMag = -1.0 * Math.signum(m_crossTreadVelMag) - * m_treadKineticFricForce; - } else { - // Static Friction Model - m_crossTreadFricForceMag = -1.0 * m_crossTreadForceMag; - } - - fricForce = new Force2d(crossTreadUnitVector); - fricForce = fricForce.times(m_crossTreadFricForceMag); - - return new ForceAtPose2d(fricForce, m_curModulePose); - } - - - /** Gets the modules on-axis (along wheel direction) force, - * which comes from the rotation of the motor. */ - ForceAtPose2d getWheelMotiveForce() { - return new ForceAtPose2d(new Force2d(m_wheelMotor.getGroundForce_N(), m_curAzmthAngle), - m_curModulePose); - } - - /** Set the motion of each module in the field reference frame. */ - void setModulePose(Pose2d curPos) { - //Handle init'ing module position history to current on first pass - if (m_prevModulePose == null) { - m_prevModulePose = curPos; - } else { - m_prevModulePose = m_curModulePose; - } - - m_curModulePose = curPos; - } - - Pose2d getPose() { - return m_curModulePose; - } - -} diff --git a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel b/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel deleted file mode 100644 index 30f1068..0000000 --- a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_test") - -snobot_sim_java_test( - name = "test", - srcs = glob(["*.java"]), - deps = [ - "//snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/shim", - "//snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve", - "//snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils", - "@bzlmodrio-allwpilib//libraries/java/wpilibj", - "@bzlmodrio-allwpilib//libraries/java/wpimath", - ], -) diff --git a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveDriveTest.java b/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveDriveTest.java deleted file mode 100644 index 268b3f0..0000000 --- a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/QuadSwerveDriveTest.java +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// 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 edu.wpi.first.wpilibj.simulation.swerve; - - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.RobotController; -import edu.wpi.first.wpilibj.shim.Vector2d; -import edu.wpi.first.wpilibj.motorcontrol.PWMVictorSPX; -import edu.wpi.first.wpilibj.simulation.EncoderSim; -import edu.wpi.first.wpilibj.utils.SimpleCSVWriter; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; - -import java.util.ArrayList; -import java.util.Arrays; - -public class QuadSwerveDriveTest { - final double SIM_TS = 0.020; - final double WHEEL_RAD_M = Units.inchesToMeters(1.5); - final double TEST_PLANT_MASS_RADPERSEC2_PER_N = 2.0 / 90.0; - - final Vector2d TEST_DIR_XHAT = new Vector2d(1, 0); - final Vector2d TEST_DIR_YHAT = new Vector2d(0, 1); - - final int FL = 0; - final int FR = 1; - final int BL = 2; - final int BR = 3; - final int NUM_MOD = 4; - - ArrayList wheelMotors = new ArrayList(NUM_MOD); - ArrayList azmthMotors = new ArrayList(NUM_MOD); - ArrayList wheelEncoders = new ArrayList(NUM_MOD); - ArrayList azmthEncoders = new ArrayList(NUM_MOD); - ArrayList modules = new ArrayList(NUM_MOD); - - QuadSwerveSim sim; - - private SwerveModuleSim moduleFactory(){ - return new SwerveModuleSim( - DCMotor.getCIM(1), - DCMotor.getCIM(1), - WHEEL_RAD_M, - 130, - 9.0, - 1.0, - 1.0, - 1.1, - 0.8, - 16.0, - 0.001); - } - - private void initHardware(){ - wheelMotors.add(new PWMVictorSPX(2)); - wheelMotors.add(new PWMVictorSPX(3)); - wheelMotors.add(new PWMVictorSPX(4)); - wheelMotors.add(new PWMVictorSPX(5)); - - azmthMotors.add(new PWMVictorSPX(6)); - azmthMotors.add(new PWMVictorSPX(7)); - azmthMotors.add(new PWMVictorSPX(8)); - azmthMotors.add(new PWMVictorSPX(9)); - - wheelEncoders.add(new Encoder(4, 5)); - wheelEncoders.add(new Encoder(6, 7)); - wheelEncoders.add(new Encoder(8, 9)); - wheelEncoders.add(new Encoder(10, 11)); - - azmthEncoders.add(new Encoder(12, 13)); - azmthEncoders.add(new Encoder(14, 15)); - azmthEncoders.add(new Encoder(16, 17)); - azmthEncoders.add(new Encoder(18, 19)); - - azmthEncoders.forEach(enc -> enc.setDistancePerPulse(1.0/4096.0)); - wheelEncoders.forEach(enc -> enc.setDistancePerPulse(1.0/128.0)); - - for(int idx = 0; idx < NUM_MOD; idx++){ - modules.add(moduleFactory()); - } - - sim = new QuadSwerveSim(0.75, 0.75, 64.0, 1.0, modules); - - } - - private void closeHardware(){ - wheelMotors.forEach(m -> {m.close();}); - azmthMotors.forEach(m -> {m.close();}); - wheelEncoders.forEach(m -> {m.close();}); - azmthEncoders.forEach(m -> {m.close();}); - } - - @Test - @SuppressWarnings({ "LocalVariableName", "resource" }) - public void testBasic(TestInfo testInfo) { - SimpleCSVWriter log = new SimpleCSVWriter(testInfo.getDisplayName(), - new ArrayList(Arrays.asList("u_wheel", "y_wheelforce", "wheelVel", "wheelVelEnc", "u_azmth", "y_azmthPos")), - new ArrayList(Arrays.asList("V", "N", "RPM", "RPM", "V", "rev"))); - - initHardware(); - - // Set up closed-loop controllers - var wheelControllers = new ArrayList(NUM_MOD); - var azmthControllers = new ArrayList(NUM_MOD); - - for(int idx = 0; idx < NUM_MOD; idx++){ - wheelControllers.add(new PIDController(3, 0, 0)); - azmthControllers.add(new PIDController(8, 0, 0)); - } - - // Set up sensor simulation - var wheelEncoderSim = new ArrayList(NUM_MOD); - var azmthEncoderSim = new ArrayList(NUM_MOD); - wheelEncoders.forEach(enc -> wheelEncoderSim.add(new EncoderSim(enc))); - azmthEncoders.forEach(enc -> azmthEncoderSim.add(new EncoderSim(enc))); - - for (int i = 0; i < 500; i++) { - // ------ User Periodic ------- - - wheelControllers.forEach(ctrl -> ctrl.setSetpoint(100)); - azmthControllers.forEach(ctrl -> ctrl.setSetpoint(0.125)); - - double currentBatteryVoltage = RobotController.getBatteryVoltage(); - - //todo set voltages - - // ------ Simulation Periodic ------- - - sim.update(SIM_TS); - - var logVals = new ArrayList(); - //todo populate logVals - log.writeData(i * SIM_TS, logVals); - } - - log.close(); - - azmthControllers.forEach(c -> c.close()); - wheelControllers.forEach(c -> c.close()); - - closeHardware(); - - //todo pass fail - } - -} diff --git a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSimTest.java b/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSimTest.java deleted file mode 100644 index 185ac97..0000000 --- a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/simulation/swerve/SwerveModuleSimTest.java +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// 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 edu.wpi.first.wpilibj.simulation.swerve; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.util.Units; -import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.RobotController; -import edu.wpi.first.wpilibj.shim.Vector2d; -import edu.wpi.first.wpilibj.motorcontrol.PWMVictorSPX; -import edu.wpi.first.wpilibj.simulation.EncoderSim; -import edu.wpi.first.wpilibj.utils.SimpleCSVWriter; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; - -import java.util.ArrayList; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SwerveModuleSimTest { - final double SIM_TS = 0.020; - final double WHEEL_RAD_M = Units.inchesToMeters(1.5); - final double TEST_PLANT_MASS_RADPERSEC2_PER_N = 2.0 / 90.0; - - final Vector2d TEST_DIR_XHAT = new Vector2d(1, 0); - final Vector2d TEST_DIR_YHAT = new Vector2d(0, 1); - - PWMVictorSPX wheelMotor; - PWMVictorSPX azmthMotor; - Encoder wheelEncoder; - Encoder azmthEncoder; - - SwerveModuleSim sim = new SwerveModuleSim( - DCMotor.getCIM(1), - DCMotor.getCIM(1), - WHEEL_RAD_M, - 130, - 9.0, - 1.0, - 1.0, - 1.1, - 0.8, - 16.0, - 0.001); - - private void initHardware(){ - wheelMotor = new PWMVictorSPX(2); - azmthMotor = new PWMVictorSPX(3); - wheelEncoder = new Encoder(4, 5); - wheelEncoder.setDistancePerPulse(1.0/128.0); - - azmthEncoder = new Encoder(6, 7); - azmthEncoder.setDistancePerPulse(1.0/4096.0); - } - - private void closeHardware(){ - wheelMotor.close(); - azmthMotor.close(); - wheelEncoder.close(); - azmthEncoder.close(); - } - - @Test - @SuppressWarnings({ "LocalVariableName", "resource" }) - public void testBasicWheel(TestInfo testInfo) { - SimpleCSVWriter log = new SimpleCSVWriter(testInfo.getDisplayName(), - new ArrayList(Arrays.asList("u_wheel", "y_wheelforce", "wheelVel", "wheelVelEnc", "u_azmth", "y_azmthPos")), - new ArrayList(Arrays.asList("V", "N", "RPM", "RPM", "V", "rev"))); - - var wheelVelRadPerSec = 0.0; - var wheelPosRad = 0.0; - - initHardware(); - - // Purposefully bad controller tuning to excite oscillation - // which helps test coverage. - var wheelController = new PIDController(3, 0.03, 0); - wheelController.setIntegratorRange(-99999, 99999); - - var wheelEncoderSim = new EncoderSim(wheelEncoder); - var azmthEncoderSim = new EncoderSim(azmthEncoder); - - for (int i = 0; i < 500; i++) { - // ------ User Periodic ------- - - wheelController.setSetpoint(100); // RPM - - double currentBatteryVoltage = RobotController.getBatteryVoltage(); - double nextWheelVoltage = wheelController.calculate(wheelEncoder.getRate()*60.0); - - wheelMotor.set(nextWheelVoltage / currentBatteryVoltage); - azmthMotor.set(0.0); - - // ------ Simulation Periodic ------- - - var u_wheel = wheelMotor.get() * currentBatteryVoltage; - var u_azmth = azmthMotor.get() * currentBatteryVoltage; - sim.setInputVoltages(u_wheel, u_azmth); - - var modulePose = new Pose2d(TEST_DIR_XHAT.getX() * wheelPosRad * WHEEL_RAD_M, 0, new Rotation2d()); - sim.setModulePose(modulePose); - - sim.update(SIM_TS); - - // 1D Wheel plant model with non-rotating azimuth - // Very simple test - F = ma - var y_wheelforce = sim.getWheelMotiveForce(); - wheelVelRadPerSec += y_wheelforce.m_force.getVector2d().dot(TEST_DIR_XHAT) - * TEST_PLANT_MASS_RADPERSEC2_PER_N * SIM_TS; - wheelEncoderSim.setRate(Units.radiansPerSecondToRotationsPerMinute(wheelVelRadPerSec)/60.0); - wheelPosRad += wheelVelRadPerSec * SIM_TS; - - // Azmth plant model is built into module simulation. - var y_azmthPos = sim.getAzimuthEncoderPositionRev(); - azmthEncoderSim.setDistance(y_azmthPos); - - var logVals = new ArrayList(); - logVals.add(u_wheel); - logVals.add(y_wheelforce.m_force.getVector2d().dot(TEST_DIR_XHAT)); - logVals.add(Units.radiansPerSecondToRotationsPerMinute(wheelVelRadPerSec)); - logVals.add(wheelEncoder.getRate()*60.0); - logVals.add(u_azmth); - logVals.add(y_azmthPos); - log.writeData(i * SIM_TS, logVals); - } - - log.close(); - - wheelController.close(); - - var actSpd = wheelEncoder.getRate()*60.0; - var expSpd = wheelController.getSetpoint(); - - closeHardware(); - - assertEquals(expSpd, actSpd, 10); - - } - - @Test - @SuppressWarnings({ "LocalVariableName", "resource" }) - public void testBasicAzmth(TestInfo testInfo) { - SimpleCSVWriter log = new SimpleCSVWriter(testInfo.getDisplayName(), - new ArrayList(Arrays.asList("u_wheel", "y_wheelforce", "wheelvel", "u_azmth", "y_azmthPos", "y_azmthEnc")), - new ArrayList(Arrays.asList("V", "N", "RPM", "V", "rev", "rev"))); - - var wheelVelRadPerSec = 0.0; - var wheelPosRad = 0.0; - - initHardware(); - - // Purposefully bad controller tuning to excite oscillation - // which helps test coverage. - var azmthController = new PIDController(10, 0, 0); - azmthController.setIntegratorRange(-99999, 99999); - - var wheelEncoderSim = new EncoderSim(wheelEncoder); - var azmthEncoderSim = new EncoderSim(azmthEncoder); - - for (int i = 0; i < 500; i++) { - // ------ User Periodic ------- - - azmthController.setSetpoint(0.5); // rev - - double currentBatteryVoltage = RobotController.getBatteryVoltage(); - double nextAzmthVoltage = azmthController.calculate(azmthEncoder.getDistance()); - - wheelMotor.set(0.0); - azmthMotor.set(nextAzmthVoltage / currentBatteryVoltage); - - // ------ Simulation Periodic ------- - - var u_wheel = wheelMotor.get() * currentBatteryVoltage; - var u_azmth = azmthMotor.get() * currentBatteryVoltage; - sim.setInputVoltages(u_wheel, u_azmth); - - var modulePose = new Pose2d(TEST_DIR_XHAT.getX() * wheelPosRad * WHEEL_RAD_M, - TEST_DIR_XHAT.getY() * wheelPosRad * WHEEL_RAD_M, new Rotation2d()); - sim.setModulePose(modulePose); - - sim.update(SIM_TS); - - // 1D Wheel plant model with non-rotating azimuth - // Very simple test - F = ma - var y_wheelforce = sim.getWheelMotiveForce(); - wheelVelRadPerSec += y_wheelforce.m_force.getVector2d().dot(TEST_DIR_XHAT) * TEST_PLANT_MASS_RADPERSEC2_PER_N - * SIM_TS; - wheelEncoderSim.setRate(Units.radiansPerSecondToRotationsPerMinute(wheelVelRadPerSec)); - wheelPosRad += wheelVelRadPerSec * SIM_TS; - - // Azmth plant model is built into module simulation. - var y_azmthPos = sim.getAzimuthEncoderPositionRev(); - azmthEncoderSim.setDistance(y_azmthPos); - - var logVals = new ArrayList(); - logVals.add(u_wheel); - logVals.add(y_wheelforce.m_force.getVector2d().dot(TEST_DIR_XHAT)); - logVals.add(Units.radiansPerSecondToRotationsPerMinute(wheelVelRadPerSec)); - logVals.add(u_azmth); - logVals.add(y_azmthPos); - logVals.add(azmthEncoder.getDistance()); - log.writeData(i * SIM_TS, logVals); - } - - log.close(); - - azmthController.close(); - - var actPos = azmthEncoder.getDistance(); - var expPos = azmthController.getSetpoint(); - - closeHardware(); - - assertEquals(expPos, actPos, 0.02); - - - } - -} diff --git a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/BUILD.bazel b/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/BUILD.bazel deleted file mode 100644 index 2ea9908..0000000 --- a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/BUILD.bazel +++ /dev/null @@ -1,8 +0,0 @@ -load("//build_scripts/bazel:java_rules.bzl", "snobot_sim_java_library") - -snobot_sim_java_library( - name = "utils", - testonly = True, - srcs = glob(["*.java"]), - visibility = ["//visibility:public"], -) diff --git a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/SimpleCSVWriter.java b/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/SimpleCSVWriter.java deleted file mode 100644 index 40d44ce..0000000 --- a/snobot_swerve_sim/src/test/java/edu/wpi/first/wpilibj/utils/SimpleCSVWriter.java +++ /dev/null @@ -1,59 +0,0 @@ -package edu.wpi.first.wpilibj.utils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; - -public class SimpleCSVWriter { - File m_csvOutputFile; - String m_fname; - - List> m_dataLines = new ArrayList<>(); - - public SimpleCSVWriter(String fname, List names, Listunits){ - m_fname = fname; - - names.add(0,"TIME"); - units.add(0,"sec"); - - m_dataLines.add(names); - m_dataLines.add(units); - } - - public void writeData(double time, List vals){ - ArrayList data = new ArrayList(vals.size()+1); - data.add(Double.toString(time)); - for(Double val : vals){ - data.add(val.toString()); - } - m_dataLines.add(data); - } - - public void close(){ - String fpath = "./" + m_fname + ".csv"; - m_csvOutputFile = new File(fpath); - System.out.println("Logging run data to " + m_csvOutputFile.getAbsolutePath()); - PrintWriter pw; - try { - pw = new PrintWriter(m_csvOutputFile); - } catch (FileNotFoundException e) { - System.out.println("Could not open CSV log file"); - e.printStackTrace(); - return; - } - - for(List line :m_dataLines){ - for(String item : line){ - pw.print(item); - pw.print(","); - } - pw.print("\n"); - } - - pw.close(); - - } - -} From 8eac04dd80eb313d72e2db389e5b7c87cdb81c61 Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Sat, 23 May 2026 03:29:09 -0400 Subject: [PATCH 2/4] Update build scripts --- MODULE.bazel | 1 - MODULE.bazel.lock | 305 +----------------- build_scripts/base_java.gradle | 14 +- examples/test_robot_catchall/build.gradle | 1 - .../examples/catchall/subsystems/BUILD | 1 - examples/test_robot_rev/build.gradle | 2 - .../snobotv2/examples/rev/subsystems/BUILD | 3 +- settings.gradle | 4 - snobot_sim_java_base/build.gradle | 1 - .../org/snobotv2/sim_wrappers/BUILD.bazel | 1 - 10 files changed, 22 insertions(+), 311 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index aab8f60..8ca9965 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -5,7 +5,6 @@ bazel_dep(name = "rules_bzlmodrio_toolchains", version = "2025-1.bcr6") bazel_dep(name = "rules_bzlmodrio_jdk", version = "17.0.12-7.bcr1") bazel_dep(name = "rules_pmd", version = "7.2.0.bcr1") bazel_dep(name = "bzlmodrio-allwpilib", version = "2026.1.1") -bazel_dep(name = "bzlmodrio-studica", version = "2026.0.0-beta") bazel_dep(name = "bzlmodrio-phoenix", version = "5.36.0") bazel_dep(name = "bzlmodrio-phoenix6", version = "26.1.0") bazel_dep(name = "bzlmodrio-revlib", version = "2026.0.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 0dbc922..852e2bd 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 24, + "lockFileVersion": 18, "registryFileHashes": { "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -35,7 +35,6 @@ "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", - "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-allwpilib/2026.1.1-beta-1/MODULE.bazel": "9cf636146e4e0587eb2c5443a329e1a8f219e537bdc515f51207c7fc173f1741", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-allwpilib/2026.1.1/MODULE.bazel": "71a817e0a62687bc20ffba8df30c287ddf615843cdc794bf053c354cfa0d7e97", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-allwpilib/2026.1.1/source.json": "a884a53f7fdef18fce563bbfe30e0cee4028f4619a0623567b4293aa29705e2e", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-ni/2026.1.0/MODULE.bazel": "cdc16d019219fde6a4d8c895e51664198df455cd6afe7c022a869d3c3e446171", @@ -48,8 +47,6 @@ "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-phoenix6/26.1.0/source.json": "9c56002b15a471ae41f561697c6a865d244dd8870698e837ec697cf6118c5c81", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-revlib/2026.0.0/MODULE.bazel": "89fb5cb26c173bd6a9ce4514264119b770db36bcad5f455c3c5216d49641089e", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-revlib/2026.0.0/source.json": "ebf42918c3e10a68ef343c011521539d2a1f3d1184a9635d519ef833caedd4ba", - "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-studica/2026.0.0-beta/MODULE.bazel": "7c8d41494b681926742296215fe78f13f6e3efc4752560f4769fa5f25ac8de26", - "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/bzlmodrio-studica/2026.0.0-beta/source.json": "b496250a458e8930ac125b7399b17c967d0557392dd5c4f7d87fd5423d02bc38", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://raw.githubusercontent.com/pjreiniger/bazel-central-registry/bzlmodrio/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", @@ -169,7 +166,7 @@ "moduleExtensions": { "@@bzlmodrio-allwpilib+//:maven_cpp_deps.bzl%setup_bzlmodrio_allwpilib_cpp_dependencies": { "general": { - "bzlTransitiveDigest": "cXojBM+sEY/46Zz1+Fu7lBhbPnXTVwRqmCOmBN8f1EM=", + "bzlTransitiveDigest": "p8pljil429fytdpEnvRaYDLGFtaddIHAB9faEVi2vuk=", "usagesDigest": "XeJ8GwwCoam1/ixPaLsLTgLOx7l0l4VR1pgqIQZusKs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -4428,7 +4425,7 @@ }, "@@bzlmodrio-allwpilib+//:maven_java_deps.bzl%setup_bzlmodrio_allwpilib_java_dependencies": { "general": { - "bzlTransitiveDigest": "U1GVhaZphRkyaL5A2bNfK2/lJX2MsT4McEAHhOH/EQE=", + "bzlTransitiveDigest": "IKM1iGq6wnrsrpuTbBNdTk0vgbL5V1MTsWSgC2ecXd4=", "usagesDigest": "qkGx6LtcVjky5+dHB5C0H1AW6DZJ5hognI9LQNvlCxI=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -4702,7 +4699,7 @@ }, "@@bzlmodrio-opencv+//:maven_cpp_deps.bzl%setup_bzlmodrio_opencv_cpp_dependencies": { "general": { - "bzlTransitiveDigest": "msQD/CRWcqBP5KGb5q6EP/uu9WjTaSgdoDKf5537pnA=", + "bzlTransitiveDigest": "5N3JdlHAWNyQ0uEIyfTjZGQgxD0prsgyvR8cBtNNhmg=", "usagesDigest": "PogDUHhIU2rcv9GK0RbjtSyXbhxInCA1To602PCvTII=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -5088,7 +5085,7 @@ }, "@@bzlmodrio-opencv+//:maven_java_deps.bzl%setup_bzlmodrio_opencv_java_dependencies": { "general": { - "bzlTransitiveDigest": "tYiGTX3oPNeQmlAiJXuwlfglJYJKPIL71GLH3vFc8tY=", + "bzlTransitiveDigest": "XijuK3v6Az8DB80cp/CKN2SNHBqjwGecZG6uhKDkZHw=", "usagesDigest": "0xn6hvPaPLZvM95llqO6sYcHGpJK3gE1nUtdzVK9Yxo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -5122,7 +5119,7 @@ }, "@@bzlmodrio-phoenix+//:maven_cpp_deps.bzl%setup_bzlmodrio_phoenix_cpp_dependencies": { "general": { - "bzlTransitiveDigest": "9R2N7iIUzJe0sA+XofO7X+DDWmjGvLIVXhN4Y27WsjM=", + "bzlTransitiveDigest": "XPhF7I7VIfKvvHyflvQeN9aJiqAc3L8JH7T4nMxBVvc=", "usagesDigest": "YbnolvqLlf1hXONp9MMulcJdk56Ix0sOjBCBzcHbLww=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -5425,7 +5422,7 @@ }, "@@bzlmodrio-phoenix+//:maven_java_deps.bzl%setup_bzlmodrio_phoenix_java_dependencies": { "general": { - "bzlTransitiveDigest": "N9/4zh37ztWN3vZik+i1tbSLD5/5L0x8m2s2ewCiafs=", + "bzlTransitiveDigest": "pm4uJYCvhPbExqyIXWLrun6BBgmnt67dqD2NQmskKFI=", "usagesDigest": "t06RzbWdPjbkJLqxUAoAcmlu3DrZFBpQBIECyMi2L30=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -5475,7 +5472,7 @@ }, "@@bzlmodrio-phoenix6+//:maven_cpp_deps.bzl%setup_bzlmodrio_phoenix6_cpp_dependencies": { "general": { - "bzlTransitiveDigest": "NWozu3lThoWCV1oDo99njFqOrO83igTzmcoiCPfC668=", + "bzlTransitiveDigest": "je5cUF31db0ZOB1NzRSlqLxI4+NaQl3pxBmPeAdXk1c=", "usagesDigest": "D6itGbax+AJjHjMI9a07xJvkZZb4VCFM0dKt+6XAfKs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -6176,7 +6173,7 @@ }, "@@bzlmodrio-phoenix6+//:maven_java_deps.bzl%setup_bzlmodrio_phoenix6_java_dependencies": { "general": { - "bzlTransitiveDigest": "Rsk8I3HW/ee52VSi4ZGYa1ZUAMHhhR0RjctUx+8EKOw=", + "bzlTransitiveDigest": "CYgYuFgtOjkt2sNB3GD7cGJP+OAu0/fSLgplM+w4o8M=", "usagesDigest": "HQESmoN0chRLC2YYcUO+dueIzQWmtWK8YHSIX6H0tHg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -6210,7 +6207,7 @@ }, "@@bzlmodrio-revlib+//:maven_cpp_deps.bzl%setup_bzlmodrio_revlib_cpp_dependencies": { "general": { - "bzlTransitiveDigest": "wN8exZ7zEJfXOrUw3f5nZf2v3/QQX7wCBk07wuicioU=", + "bzlTransitiveDigest": "dG6ETpI8zAqkpZ+Pi/V5+zfgHSpmEZG3a1MkyR02J5w=", "usagesDigest": "EYxYna/bnn77KqkSoJuz6eQGYn+pnQVXm5zES10u5nA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -6650,7 +6647,7 @@ }, "@@bzlmodrio-revlib+//:maven_java_deps.bzl%setup_bzlmodrio_revlib_java_dependencies": { "general": { - "bzlTransitiveDigest": "A8ECdykZ8wfQztrXzllMK9R9Zo6PnZrRIUmo3dIFRys=", + "bzlTransitiveDigest": "aLY+tjMeGiAizDkfGRq+I3gxLrFG3/ZYTJZlTnLXlwc=", "usagesDigest": "dY4W3fgtP7Hmbwlkv2zagWbtGSntEvcSdYgr19NKwBw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -6682,282 +6679,9 @@ ] } }, - "@@bzlmodrio-studica+//:maven_cpp_deps.bzl%setup_bzlmodrio_studica_cpp_dependencies": { - "general": { - "bzlTransitiveDigest": "WOzrxolY+Jf2JcGWL1lSoZGxwIDuDf55OdN2UcKJJnQ=", - "usagesDigest": "Hc34+i4ft17SnNcXNwvL3K3MB7PEZx9xV+HiLvG75Lc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "bazelrio_com_studica_frc_studica-cpp_headers": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-headers.zip", - "sha256": "bebf441979484ee699a330f82ab402b5363edc4a05522485a653e07263ae826a", - "build_file_content": "cc_library(\n name = \"headers\",\n hdrs = glob([\"**\"]),\n includes = [\".\"],\n visibility = [\"//visibility:public\"],\n)\n\nfilegroup(\n name = \"header_files\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n" - } - }, - "bazelrio_com_studica_frc_studica-cpp_windowsx86-64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-windowsx86-64.zip", - "sha256": "84c9ac6284c7b7ad02a64b24598a4173211e918613647ef721d091666f67e002", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_windowsx86-64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-windowsx86-64static.zip", - "sha256": "cfebec9aff50d3eebd69487ced6efe1234844829daac4ea22ecdb56894930312", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxarm64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxarm64.zip", - "sha256": "0f3c3dcb02d173aa9d4d25db57cef4e4b00e87288c70b8e38f204b7c50e0e7bb", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxarm64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxarm64static.zip", - "sha256": "72ca1c0d9f8dc00a8612f22bc584d3c385e6b41f3578ded615113928d46f5b5c", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxx86-64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxx86-64.zip", - "sha256": "c1d71e47b63867679d09bc232aafce8f17e9e1d5e23940ed74cebef3a01d99a1", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxx86-64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxx86-64static.zip", - "sha256": "a79272ea6969f1b7a4905ac5ecd2f2ee02c3353e3bcdc27446db98931fd1dd4e", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxathena": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxathena.zip", - "sha256": "f77e0da8314c61b35fcd443f396a7004d03ea0c049eb582400107186f2d7a6d6", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxathenastatic": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxathenastatic.zip", - "sha256": "02c264ec3c8c763d50741b577125f9dc09acb403a1ce6898bf22efa8d712496d", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxarm32": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxarm32.zip", - "sha256": "0736d333e5263cea524a6a5f13872d73e4a73ab5b3586f2e3961936266c64133", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_linuxarm32static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-linuxarm32static.zip", - "sha256": "de0e66759f8a84956456f99561bd96b56a666312c7fc0f944fba1e829ecd33bd", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-cpp_osxuniversal": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-osxuniversal.zip", - "sha256": "fa254a296da85a1a49130c40453b6bfd8718f3acc5d55702abc3aa5a99d9e575", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:shared.BUILD.bazel", - "patch_cmds": [ - "install_name_tool -id @rpath/libStudica.dylib osx/universal/shared/libStudica.dylib", - "install_name_tool -change libntcore.dylib @rpath/libntcore.dylib osx/universal/shared/libStudica.dylib", - "install_name_tool -change libwpinet.dylib @rpath/libwpinet.dylib osx/universal/shared/libStudica.dylib", - "install_name_tool -change libwpiutil.dylib @rpath/libwpiutil.dylib osx/universal/shared/libStudica.dylib" - ] - } - }, - "bazelrio_com_studica_frc_studica-cpp_osxuniversalstatic": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-cpp/2026.0.0-beta/Studica-cpp-2026.0.0-beta-osxuniversalstatic.zip", - "sha256": "076e970d675c2c4c3c9a198da4c38401bd2d9830e3cc5775dc066499ef478cfd", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-cpp:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_headers": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-headers.zip", - "sha256": "6542a526cadbacdc75495ac8a531d70d463dd7072e39aefe9c39d4d7a8d04d5d", - "build_file_content": "cc_library(\n name = \"headers\",\n hdrs = glob([\"**\"]),\n includes = [\".\"],\n visibility = [\"//visibility:public\"],\n)\n\nfilegroup(\n name = \"header_files\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n" - } - }, - "bazelrio_com_studica_frc_studica-driver_windowsx86-64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-windowsx86-64.zip", - "sha256": "1c54c1822670ab1d5de09203679b1106d49bc9368eda1938edc8e0efeb0dbeb3", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_windowsx86-64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-windowsx86-64static.zip", - "sha256": "d1628fee50b951045d353fddc16c8cc7bed4f7b78cd3d5a004ca93e2702e0952", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxarm64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxarm64.zip", - "sha256": "0c03ab9d616b3d93857af024b3bac7aaf27f67b74efaaad5ac002001abba010c", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxarm64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxarm64static.zip", - "sha256": "f06756dfb6a9ea9538939e3d8fdac029d4279238451c0e7dd5deac88339458cb", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxx86-64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxx86-64.zip", - "sha256": "d24fe5ace924627af057a58667b68c2ea26c1695d3f90b443ab4014eb850dfd7", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxx86-64static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxx86-64static.zip", - "sha256": "5772388d66c617811744b1eefd94169e646dda78b5f675d5af894113a84f6d3d", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxathena": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxathena.zip", - "sha256": "5ba2a0511ff4699e8a156fe82d541a4c2a402b21eaf2c6d59daa14acee338090", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxathenastatic": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxathenastatic.zip", - "sha256": "4132e09c8a92833d7ed6114f214dbfa047749f5fe72aebaf32ff6264b0a155f0", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxarm32": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxarm32.zip", - "sha256": "1ca3cd953de40bdfeb850bf7db5e9edca5cb99e7a1d1c22031ab6b51f0577430", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_linuxarm32static": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-linuxarm32static.zip", - "sha256": "ac7d07c1017edbc7a5f1f8630918b289eaf5d77d705b11c541d5eaf30981b25b", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - }, - "bazelrio_com_studica_frc_studica-driver_osxuniversal": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-osxuniversal.zip", - "sha256": "b62d8eee7c88945463aec1b83cbb0733170be99e640558634d71c3a47ae8b2c7", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:shared.BUILD.bazel", - "patch_cmds": [ - "install_name_tool -id @rpath/libStudicaDriver.dylib osx/universal/shared/libStudicaDriver.dylib", - "install_name_tool -change libwpiHal.dylib @rpath/libwpiHal.dylib osx/universal/shared/libStudicaDriver.dylib", - "install_name_tool -change libwpimath.dylib @rpath/libwpimath.dylib osx/universal/shared/libStudicaDriver.dylib", - "install_name_tool -change libwpinet.dylib @rpath/libwpinet.dylib osx/universal/shared/libStudicaDriver.dylib", - "install_name_tool -change libwpiutil.dylib @rpath/libwpiutil.dylib osx/universal/shared/libStudicaDriver.dylib" - ] - } - }, - "bazelrio_com_studica_frc_studica-driver_osxuniversalstatic": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "url": "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-driver/2026.0.0-beta/Studica-driver-2026.0.0-beta-osxuniversalstatic.zip", - "sha256": "6713e473a1a7525b9f8ccd140674d82dc917bc4501edae4992c5c13bf3a3e398", - "build_file": "@@bzlmodrio-studica+//private/cpp/Studica-driver:static.BUILD.bazel" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "bzlmodrio-studica+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@bzlmodrio-studica+//:maven_java_deps.bzl%setup_bzlmodrio_studica_java_dependencies": { - "general": { - "bzlTransitiveDigest": "U93R6bEj/8BSRVviDVcMlv8ZBEF4gzkYeUBSE1fmiBs=", - "usagesDigest": "fZIhcam6NQxHU5an1jhMpDURBcss2z9cW7xUoTa1g5Q=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_studica_frc_studica_java": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:jvm.bzl%jvm_import_external", - "attributes": { - "generated_rule_name": "com_studica_frc_studica_java", - "artifact_urls": [ - "https://dev.studica.com/maven/release/2026/com/studica/frc/Studica-java/2026.0.0-beta/Studica-java-2026.0.0-beta.jar" - ], - "srcjar_urls": [], - "canonical_id": "com.studica.frc:Studica-java:2026.0.0-beta", - "rule_name": "java_import", - "tags": [ - "maven_coordinates=com.studica.frc:Studica-java:2026.0.0-beta" - ], - "artifact_sha256": "9d9ca9f6d4a527aca32727045031cb2732b71a50152133655d719e406d961f0f" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "bzlmodrio-studica+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, "@@rules_bzlmodrio_jdk+//:maven_deps.bzl%deps": { "general": { - "bzlTransitiveDigest": "zV/mgXZYXXkWQN65A7vNJGv5KHH6f3SVD0HxMuRa+NE=", + "bzlTransitiveDigest": "Abngv/n7aBm8TDDCoNMMke9sICJvz3qyhHEggrNmTuM=", "usagesDigest": "077bD25ReoYwcXi/YMRPYj+3pT1wG/BoL1QL3mUFYFE=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -7162,7 +6886,7 @@ }, "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "rL/34P1aFDq2GqVC2zCFgQ8nTuOC6ziogocpvG50Qz8=", + "bzlTransitiveDigest": "OlvsB0HsvxbR8ZN+J9Vf00X/+WVz/Y/5Xrq2LgcVfdo=", "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -7224,6 +6948,5 @@ ] } } - }, - "facts": {} + } } diff --git a/build_scripts/base_java.gradle b/build_scripts/base_java.gradle index 9b0da95..a241a05 100644 --- a/build_scripts/base_java.gradle +++ b/build_scripts/base_java.gradle @@ -3,7 +3,6 @@ repositories { mavenLocal() maven { url "https://frcmaven.wpi.edu/artifactory/release/" } maven { url 'https://devsite.ctr-electronics.com/maven/release/' } - maven { url 'https://dev.studica.com/maven/release/2026/' } maven { url 'https://maven.revrobotics.com/' } } @@ -47,9 +46,10 @@ ext { phoenix5Version = '5.36.0' phoenix6Version = "26.1.0" revVersion = '2026.0.0' - navxVersion = '2026.0.0-beta' jacksonVersion = '2.19.2' + ejmlVersion = '0.44.0' + quickbufVersion = '1.4' nativeOs = getCurrentOs() + getCurrentArch() } @@ -61,9 +61,11 @@ configurations { } dependencies { - implementation group: "com.fasterxml.jackson.core", name: "jackson-annotations", version: jacksonVersion - implementation group: "com.fasterxml.jackson.core", name: "jackson-core", version: jacksonVersion - implementation group: "com.fasterxml.jackson.core", name: "jackson-databind", version: jacksonVersion + implementation "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion" + implementation "com.fasterxml.jackson.core:jackson-core:$jacksonVersion" + implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion" + implementation "org.ejml:ejml-simple:$ejmlVersion" + implementation "us.hebi.quickbuf:quickbuf-runtime:$quickbufVersion" nativeDesktopZip "edu.wpi.first.hal:hal-cpp:${wpiVersion}:${nativeOs}@zip" nativeDesktopZip "edu.wpi.first.ntcore:ntcore-cpp:${wpiVersion}:${nativeOs}@zip" @@ -73,8 +75,6 @@ dependencies { nativeDesktopZip "edu.wpi.first.wpimath:wpimath-cpp:${wpiVersion}:${nativeOs}@zip" nativeDesktopZip "edu.wpi.first.thirdparty.frc${opencvYear}.opencv:opencv-cpp:${opencvVersion}:${nativeOs}@zip" - nativeDesktopZip "com.studica.frc:Studica-driver:${navxVersion}:${nativeOs}@zip" - nativeDesktopZip "com.ctre.phoenix.sim:cci-sim:${phoenix5Version}:${nativeOs}@zip" nativeDesktopZip "com.ctre.phoenix6.sim:api-cpp-sim:${phoenix6Version}:${nativeOs}@zip" diff --git a/examples/test_robot_catchall/build.gradle b/examples/test_robot_catchall/build.gradle index b7cce36..4936399 100644 --- a/examples/test_robot_catchall/build.gradle +++ b/examples/test_robot_catchall/build.gradle @@ -19,7 +19,6 @@ dependencies { implementation wpilibTools.deps.wpilibJava("ntcore") implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - implementation "com.studica.frc:Studica-java:${navxVersion}" implementation "com.ctre.phoenix:api-java:${phoenix5Version}" implementation "com.ctre.phoenix:wpiapi-java:${phoenix5Version}" implementation "com.revrobotics.frc:REVLib-java:${revVersion}" diff --git a/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/BUILD b/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/BUILD index 52e380b..7f63585 100644 --- a/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/BUILD +++ b/examples/test_robot_catchall/src/main/java/org/snobotv2/examples/catchall/subsystems/BUILD @@ -9,6 +9,5 @@ snobot_sim_java_library( "@bzlmodrio-allwpilib//libraries/java/wpilibj", "@bzlmodrio-phoenix//libraries/java/wpiapi-java", "@bzlmodrio-revlib//libraries/java/revlib-java", - "@bzlmodrio-studica//libraries/java/studica-java", ], ) diff --git a/examples/test_robot_rev/build.gradle b/examples/test_robot_rev/build.gradle index 257f732..e6fb6e2 100644 --- a/examples/test_robot_rev/build.gradle +++ b/examples/test_robot_rev/build.gradle @@ -21,12 +21,10 @@ dependencies { implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") implementation project(":snobot_sim_java_base") - implementation project(":snobot_sim_java_navx") implementation project(":snobot_sim_java_revlib") implementation project(":examples:test_robot_base") implementation "com.revrobotics.frc:REVLib-java:${revVersion}" - implementation "com.studica.frc:Studica-java:${navxVersion}" testImplementation project(":snobot_sim_java_test_utils") testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' diff --git a/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/BUILD b/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/BUILD index 820fe13..c81ba19 100644 --- a/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/BUILD +++ b/examples/test_robot_rev/src/main/java/org/snobotv2/examples/rev/subsystems/BUILD @@ -11,14 +11,13 @@ snobot_sim_java_library( deps = [ "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base", "//examples/test_robot_base/src/main/java/org/snobotv2/examples/base/subsystems", + "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers/wpi", "//snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers", - "//snobot_sim_java_navx/src/main/java/org/snobotv2/module_wrappers/navx", "//snobot_sim_java_revlib/src/main/java/com/revrobotics/spark:simmable_rev", "//snobot_sim_java_revlib/src/main/java/org/snobotv2/module_wrappers/rev", "@bzlmodrio-allwpilib//libraries/java/wpilibNewCommands", "@bzlmodrio-allwpilib//libraries/java/wpilibj", "@bzlmodrio-allwpilib//libraries/java/wpimath", "@bzlmodrio-revlib//libraries/java/revlib-java", - "@bzlmodrio-studica//libraries/java/studica-java", ], ) diff --git a/settings.gradle b/settings.gradle index 2babc22..aa69bdc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,18 +1,14 @@ rootProject.name = 'SnobotSimV2' include 'snobot_sim_java_base' -include 'snobot_swerve_sim' include 'snobot_sim_java_test_utils' include 'snobot_sim_java_phoenix5' include 'snobot_sim_java_phoenix6' include 'snobot_sim_java_revlib' -include 'snobot_sim_java_navx' include 'examples:test_robot_base' -include 'examples:test_robot_base_swerve' include 'examples:test_robot_catchall' include 'examples:test_robot_phoenix5' include 'examples:test_robot_rev' -include 'examples:test_robot_rev_swerve' include 'examples:test_robot_wpi' diff --git a/snobot_sim_java_base/build.gradle b/snobot_sim_java_base/build.gradle index ed1a225..8e7c1bc 100644 --- a/snobot_sim_java_base/build.gradle +++ b/snobot_sim_java_base/build.gradle @@ -24,7 +24,6 @@ dependencies { implementation wpilibTools.deps.wpilibJava("wpiunits") implementation wpilibTools.deps.wpilibJava("ntcore") implementation wpilibTools.deps.wpilibJava("wpilibNewCommands") - implementation project(":snobot_swerve_sim") testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' diff --git a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/BUILD.bazel b/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/BUILD.bazel index c86f6ef..54f9cc1 100644 --- a/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/BUILD.bazel +++ b/snobot_sim_java_base/src/main/java/org/snobotv2/sim_wrappers/BUILD.bazel @@ -7,7 +7,6 @@ snobot_sim_java_library( deps = [ "//snobot_sim_java_base/src/main/java/org/snobotv2/interfaces", "//snobot_sim_java_base/src/main/java/org/snobotv2/module_wrappers/wpi", - "//snobot_swerve_sim/src/main/java/edu/wpi/first/wpilibj/simulation/swerve", "@bzlmodrio-allwpilib//libraries/java/hal", "@bzlmodrio-allwpilib//libraries/java/wpilibj", "@bzlmodrio-allwpilib//libraries/java/wpimath", From 855298a3a3309df6e133f1b9569b544f9da808a8 Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Sat, 23 May 2026 03:51:33 -0400 Subject: [PATCH 3/4] Fixup release --- examples/create_standalone_projects.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/examples/create_standalone_projects.py b/examples/create_standalone_projects.py index d7ae94c..0dea6f4 100644 --- a/examples/create_standalone_projects.py +++ b/examples/create_standalone_projects.py @@ -23,20 +23,11 @@ def run(): default_vendor_props = ["SnobotSim.json", "WPILibNewCommands.json"] projects = [] - projects.append(ExampleConfig("rev", "Rev", ["navx_frc.json", "REVLib.json"])) - projects.append(ExampleConfig("phoenix5", "Phoenix5", ["Phoenix.json"])) + projects.append(ExampleConfig("rev", "Rev", ["REVLib.json"])) projects.append(ExampleConfig("wpi", "Wpi", [])) projects.append( ExampleConfig( - "catchall", "Catchall", ["navx_frc.json", "REVLib.json", "Phoenix.json"] - ) - ) - projects.append( - ExampleConfig( - "rev_swerve", - "RevSwerve", - ["REVLib.json", "Phoenix.json"], - "test_robot_base_swerve", + "catchall", "Catchall", ["REVLib.json", "Phoenix.json"] ) ) From 9f3361aeefee6624e822b53109ed83a772686e19 Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Sat, 23 May 2026 12:50:52 -0400 Subject: [PATCH 4/4] Black --- examples/create_standalone_projects.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/create_standalone_projects.py b/examples/create_standalone_projects.py index 0dea6f4..ec3cf34 100644 --- a/examples/create_standalone_projects.py +++ b/examples/create_standalone_projects.py @@ -26,9 +26,7 @@ def run(): projects.append(ExampleConfig("rev", "Rev", ["REVLib.json"])) projects.append(ExampleConfig("wpi", "Wpi", [])) projects.append( - ExampleConfig( - "catchall", "Catchall", ["REVLib.json", "Phoenix.json"] - ) + ExampleConfig("catchall", "Catchall", ["REVLib.json", "Phoenix.json"]) ) this_dir = os.path.dirname(os.path.abspath(__file__))