From cafa9a21ce333db4dc932a35a2815e8aad70f78e Mon Sep 17 00:00:00 2001 From: KonnorR Date: Sun, 2 Mar 2025 10:06:29 -0500 Subject: [PATCH] 2025.0.0-beta0.5.5 --- docs/index-all.html | 56 +- docs/maniplib/ManipArm.html | 62 +- docs/maniplib/ManipElevator.html | 71 +- docs/maniplib/ManipShooterIntake.html | 70 +- docs/maniplib/motors/ManipMotor.html | 14 +- docs/maniplib/motors/ManipSparkMax.html | 8 +- docs/maniplib/utils/ManipArmConstants.html | 6 +- .../utils/ManipElevatorConstants.html | 6 +- docs/member-search-index.js | 2 +- maniplib/maniplib.json | 6 +- ...anipLib-cpp-2025.0.0-beta0.5.5-headers.zip | Bin 0 -> 4087 bytes ...Lib-cpp-2025.0.0-beta0.5.5-headers.zip.md5 | 1 + ...ib-cpp-2025.0.0-beta0.5.5-headers.zip.sha1 | 1 + ...-cpp-2025.0.0-beta0.5.5-headers.zip.sha256 | 1 + ...-cpp-2025.0.0-beta0.5.5-headers.zip.sha512 | 1 + ...anipLib-cpp-2025.0.0-beta0.5.5-sources.zip | Bin 0 -> 4087 bytes ...Lib-cpp-2025.0.0-beta0.5.5-sources.zip.md5 | 1 + ...ib-cpp-2025.0.0-beta0.5.5-sources.zip.sha1 | 1 + ...-cpp-2025.0.0-beta0.5.5-sources.zip.sha256 | 1 + ...-cpp-2025.0.0-beta0.5.5-sources.zip.sha512 | 1 + .../ManipLib-cpp-2025.0.0-beta0.5.5.pom | 9 + .../ManipLib-cpp-2025.0.0-beta0.5.5.pom.md5 | 1 + .../ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha1 | 1 + ...ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha256 | 1 + ...ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha512 | 1 + .../maniplib/ManipLib-cpp/maven-metadata.xml | 7 +- .../ManipLib-cpp/maven-metadata.xml.md5 | 2 +- .../ManipLib-cpp/maven-metadata.xml.sha1 | 2 +- .../ManipLib-cpp/maven-metadata.xml.sha256 | 2 +- .../ManipLib-cpp/maven-metadata.xml.sha512 | 2 +- ...nipLib-java-2025.0.0-beta0.5.4-javadoc.jar | Bin 151075 -> 151716 bytes ...ib-java-2025.0.0-beta0.5.4-javadoc.jar.md5 | 2 +- ...b-java-2025.0.0-beta0.5.4-javadoc.jar.sha1 | 2 +- ...java-2025.0.0-beta0.5.4-javadoc.jar.sha256 | 2 +- ...java-2025.0.0-beta0.5.4-javadoc.jar.sha512 | 2 +- ...nipLib-java-2025.0.0-beta0.5.4-sources.jar | Bin 21555 -> 21954 bytes ...ib-java-2025.0.0-beta0.5.4-sources.jar.md5 | 2 +- ...b-java-2025.0.0-beta0.5.4-sources.jar.sha1 | 2 +- ...java-2025.0.0-beta0.5.4-sources.jar.sha256 | 2 +- ...java-2025.0.0-beta0.5.4-sources.jar.sha512 | 2 +- .../ManipLib-java-2025.0.0-beta0.5.4.jar | Bin 33283 -> 33434 bytes .../ManipLib-java-2025.0.0-beta0.5.4.jar.md5 | 2 +- .../ManipLib-java-2025.0.0-beta0.5.4.jar.sha1 | 2 +- ...anipLib-java-2025.0.0-beta0.5.4.jar.sha256 | 2 +- ...anipLib-java-2025.0.0-beta0.5.4.jar.sha512 | 2 +- ...nipLib-java-2025.0.0-beta0.5.5-javadoc.jar | Bin 0 -> 151716 bytes ...ib-java-2025.0.0-beta0.5.5-javadoc.jar.md5 | 1 + ...b-java-2025.0.0-beta0.5.5-javadoc.jar.sha1 | 1 + ...java-2025.0.0-beta0.5.5-javadoc.jar.sha256 | 1 + ...java-2025.0.0-beta0.5.5-javadoc.jar.sha512 | 1 + ...nipLib-java-2025.0.0-beta0.5.5-sources.jar | Bin 0 -> 21954 bytes ...ib-java-2025.0.0-beta0.5.5-sources.jar.md5 | 1 + ...b-java-2025.0.0-beta0.5.5-sources.jar.sha1 | 1 + ...java-2025.0.0-beta0.5.5-sources.jar.sha256 | 1 + ...java-2025.0.0-beta0.5.5-sources.jar.sha512 | 1 + .../ManipLib-java-2025.0.0-beta0.5.5.jar | Bin 0 -> 33434 bytes .../ManipLib-java-2025.0.0-beta0.5.5.jar.md5 | 1 + .../ManipLib-java-2025.0.0-beta0.5.5.jar.sha1 | 1 + ...anipLib-java-2025.0.0-beta0.5.5.jar.sha256 | 1 + ...anipLib-java-2025.0.0-beta0.5.5.jar.sha512 | 1 + .../ManipLib-java-2025.0.0-beta0.5.5.pom | 8 + .../ManipLib-java-2025.0.0-beta0.5.5.pom.md5 | 1 + .../ManipLib-java-2025.0.0-beta0.5.5.pom.sha1 | 1 + ...anipLib-java-2025.0.0-beta0.5.5.pom.sha256 | 1 + ...anipLib-java-2025.0.0-beta0.5.5.pom.sha512 | 1 + .../maniplib/ManipLib-java/maven-metadata.xml | 7 +- .../ManipLib-java/maven-metadata.xml.md5 | 2 +- .../ManipLib-java/maven-metadata.xml.sha1 | 2 +- .../ManipLib-java/maven-metadata.xml.sha256 | 2 +- .../ManipLib-java/maven-metadata.xml.sha512 | 2 +- publish.gradle | 2 +- src/main/java/maniplib/ManipArm.java | 844 +++++++-------- src/main/java/maniplib/ManipElevator.java | 926 +++++++++-------- .../java/maniplib/ManipShooterIntake.java | 145 ++- src/main/java/maniplib/Telemetry.java | 31 +- src/main/java/maniplib/motors/ManipMotor.java | 456 +++++---- .../java/maniplib/motors/ManipSparkMax.java | 969 +++++++++--------- .../maniplib/utils/ManipArmConstants.java | 212 ++-- .../utils/ManipElevatorConstants.java | 207 ++-- src/main/java/maniplib/utils/ManipMath.java | 93 +- .../java/maniplib/utils/PIDControlType.java | 25 +- src/main/java/maniplib/utils/PIDFConfig.java | 155 +-- .../utils/deserializer/PIDFRange.java | 16 +- 83 files changed, 2418 insertions(+), 2063 deletions(-) create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-sources.zip create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-sources.zip.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-sources.zip.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-sources.zip.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-sources.zip.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha512 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.md5 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha1 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha256 create mode 100644 maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha512 diff --git a/docs/index-all.html b/docs/index-all.html index 435958b..8c3198f 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -429,8 +429,7 @@

M

ManipElevator(ManipMotor, ManipElevatorConstants) - Constructor for class maniplib.ManipElevator
-
Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to - true.
+
Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to true.
ManipElevator(ManipMotor, PIDFConfig) - Constructor for class maniplib.ManipElevator
@@ -490,8 +489,7 @@

M

maximumRetries - Variable in class maniplib.motors.ManipMotor
-
The maximum amount of times the swerve motor will attempt to configure a motor if failures - occur.
+
The maximum amount of times the swerve motor will attempt to configure a motor if failures occur.
min - Variable in class maniplib.utils.deserializer.PIDFRange
@@ -629,6 +627,30 @@

R

Runs runElevatorVoltage as a Command.
+
runkG() - Method in class maniplib.ManipArm
+
+
Powers the motor with the kG feedforward value.
+
+
runkG() - Method in class maniplib.ManipElevator
+
+
Powers the motor with the kG feedforward value.
+
+
runkGCommand() - Method in class maniplib.ManipArm
+
+
Powers the motor with the kG feedforward value as a command.
+
+
runkGCommand() - Method in class maniplib.ManipElevator
+
+
Powers the motor with the kG feedforward value as a command.
+
+
runSpeed(double) - Method in class maniplib.ManipShooterIntake
+
+
Set the percentage output as a command.
+
+
runSpeedCommand(double) - Method in class maniplib.ManipShooterIntake
+
+
Set the percentage output.
+
runSysIdRoutine() - Method in class maniplib.ManipArm
Runs the SysId routine to tune the Arm
@@ -637,6 +659,14 @@

R

Runs the SysId routine to tune the elevator
+
runVoltage(double) - Method in class maniplib.ManipShooterIntake
+
+
Set the motor voltage.
+
+
runVoltageCommand(double) - Method in class maniplib.ManipShooterIntake
+
+
Set the motor voltage as a command.
+

S

@@ -670,13 +700,13 @@

S

setCurrentLimit(int) - Method in class maniplib.motors.ManipMotor
-
Set the current limit for the swerve drive motor, remember this may cause jumping if used in - conjunction with voltage compensation.
+
Set the current limit for the swerve drive motor, remember this may cause jumping if used in conjunction with + voltage compensation.
setCurrentLimit(int) - Method in class maniplib.motors.ManipSparkMax
-
Set the current limit for the motor, remember this may cause jumping if used in conjunction - with voltage compensation.
+
Set the current limit for the motor, remember this may cause jumping if used in conjunction with + voltage compensation.
setGearbox(DCMotor) - Method in class maniplib.motors.ManipMotor
@@ -750,17 +780,15 @@

S

Set the closed loop PID controller reference point.
-
setSpeed(double) - Method in class maniplib.ManipShooterIntake
-
-
Set the percentage output.
-
setSyncAbsEncoderInit(boolean) - Method in class maniplib.ManipArm
-
Determines whether to sync the absolute encoder in the ManipArm class or not.
+
Determines whether to sync the absolute encoder in the + ManipArm class or not.
setSyncAbsEncoderInit(boolean) - Method in class maniplib.ManipElevator
-
Determines whether to sync the absolute encoder in the ManipElevator class or not.
+
Determines whether to sync the absolute encoder in the + ManipElevator class or not.
setTopLimitSwitch(boolean) - Method in class maniplib.ManipArm
diff --git a/docs/maniplib/ManipArm.html b/docs/maniplib/ManipArm.html index f552f79..544ae3a 100644 --- a/docs/maniplib/ManipArm.html +++ b/docs/maniplib/ManipArm.html @@ -189,6 +189,16 @@

Method Summary

Runs runArmVoltage as a Command.
+
void
+ +
+
Powers the motor with the kG feedforward value.
+
+ + +
+
Powers the motor with the kG feedforward value as a command.
+
@@ -210,7 +220,8 @@

Method Summary

void
setSyncAbsEncoderInit(boolean syncAbsEncoderInit)
-
Determines whether to sync the absolute encoder in the ManipArm class or not.
+
Determines whether to sync the absolute encoder in the + ManipArm class or not.
void
setTopLimitSwitch(boolean topLimit)
@@ -301,7 +312,8 @@

periodic

simulationPeriodic

public void simulationPeriodic()
-
Ran periodically in simulation. Controls the arm simulation.
+
Ran periodically in simulation. + Controls the arm simulation.
  • @@ -331,23 +343,25 @@

    addFollower

    addAbsoluteEncoderValue

    public void addAbsoluteEncoderValue(double absEncoderDegrees)
    -
    Adds an absolute encoder to sync to on init. This is not used for actual control but - recommended to keep arm position on boot. Can be called in init.
    +
    Adds an absolute encoder to sync to on init. This is not used for actual control + but recommended to keep arm position on boot. Can be called in init. + Value must be in 0-360.
  • setSyncAbsEncoderInit

    public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit)
    -
    Determines whether to sync the absolute encoder in the ManipArm class or not. This is - enabled by default.
    +
    Determines whether to sync the absolute encoder in the + ManipArm class or not. This is enabled by default.
  • synchronizeAbsoluteEncoder

    public void synchronizeAbsoluteEncoder()
    -
    Seeds inbuilt encoder with absolute encoder value. Syncs on init by default.
    +
    Seeds inbuilt encoder with absolute encoder value. + Syncs on init by default.
  • @@ -398,14 +412,32 @@

    reachSetpoint

    runArmSpeed

    public void runArmSpeed(double speed)
    -
    Basic method to run the arm at commanded speed. This does not stop!!
    +
    Basic method to run the arm at commanded speed. + This does not stop!!
  • runArmVoltage

    public void runArmVoltage(Voltage volts)
    -
    Basic method to run the arm at commanded voltage. This does not stop!!
    +
    Basic method to run the arm at commanded voltage. + This does not stop!!
    +
    +
  • +
  • +
    +

    runkG

    +
    public void runkG()
    +
    Powers the motor with the kG feedforward value. + "Voltage required to counteract gravity".
    +
    +
  • +
  • +
    +

    runkGCommand

    +
    public Command runkGCommand()
    +
    Powers the motor with the kG feedforward value as a command. + "Voltage required to counteract gravity".
  • @@ -441,14 +473,16 @@

    setGoal

    runArmSpeedCommand

    public Command runArmSpeedCommand(double speed)
    -
    Runs runArmSpeed as a Command. This stops after command is finished.
    +
    Runs runArmSpeed as a Command. + This stops after command is finished.
  • runArmVoltageCommand

    public Command runArmVoltageCommand(Voltage volts)
    -
    Runs runArmVoltage as a Command. This stops after command is finished.
    +
    Runs runArmVoltage as a Command. + This stops after command is finished.
  • @@ -469,9 +503,9 @@

    setBottomLimitSwitch

    autoStowWithOverride

    public Command autoStowWithOverride(double stowAngle)
    -
    A command to be used as a default command to stow the arm. Use toggleAutoStow() to toggle it on - and off. It's good for if you want it to stow but want safety or to be able to control - manually.
    +
    A command to be used as a default command to stow the arm. + Use toggleAutoStow() to toggle it on and off. + It's good for if you want it to stow but want safety or to be able to control manually.
  • diff --git a/docs/maniplib/ManipElevator.html b/docs/maniplib/ManipElevator.html index f642c64..0a15e34 100644 --- a/docs/maniplib/ManipElevator.html +++ b/docs/maniplib/ManipElevator.html @@ -101,8 +101,7 @@

    Constructor Summary

    -
    Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to - true.
    +
    Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to true.
    ManipElevator(ManipMotor motor, PIDFConfig pidfConfig)
    @@ -206,6 +205,16 @@

    Method Summary

    Runs runElevatorVoltage as a Command.
    +
    void
    + +
    +
    Powers the motor with the kG feedforward value.
    +
    + + +
    +
    Powers the motor with the kG feedforward value as a command.
    +
    @@ -227,7 +236,8 @@

    Method Summary

    void
    setSyncAbsEncoderInit(boolean syncAbsEncoderInit)
    -
    Determines whether to sync the absolute encoder in the ManipElevator class or not.
    +
    Determines whether to sync the absolute encoder in the + ManipElevator class or not.
    void
    setTopLimitSwitch(boolean topLimit)
    @@ -282,8 +292,7 @@

    Constructor Details

    ManipElevator

    public ManipElevator(ManipMotor motor, ManipElevatorConstants config)
    -
    Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to - true.
    +
    Subsystem constructor, advanced ManipElevator when config.kEnableAdvanced is set to true.
  • @@ -319,7 +328,8 @@

    periodic

    simulationPeriodic

    public void simulationPeriodic()
    -
    Ran periodically in simulation. Controls the elevator simulation.
    +
    Ran periodically in simulation. + Controls the elevator simulation.
  • @@ -349,23 +359,24 @@

    addFollower

    addAbsoluteEncoderValue

    public void addAbsoluteEncoderValue(double absEncoderDegrees)
    -
    Adds an absolute encoder to sync to on init. This is not used for actual control but - recommended to keep elevator position on boot. Can be called in init.
    +
    Adds an absolute encoder to sync to on init. This is not used for actual control + but recommended to keep elevator position on boot. Can be called in init.
  • setSyncAbsEncoderInit

    public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit)
    -
    Determines whether to sync the absolute encoder in the ManipElevator class or not. This - is enabled by default.
    +
    Determines whether to sync the absolute encoder in the + ManipElevator class or not. This is enabled by default.
  • synchronizeAbsoluteEncoder

    public void synchronizeAbsoluteEncoder()
    -
    Seeds inbuilt encoder with absolute encoder value. Syncs on init by default.
    +
    Seeds inbuilt encoder with absolute encoder value. + Syncs on init by default.
  • @@ -468,22 +479,24 @@

    nearMin

    reachSetpoint

    public void reachSetpoint(double setpointInches)
    -
    Run the control loop to reach and maintain the setpoint from the preferences. If using basic - control setpoint is in sensor units.
    +
    Run the control loop to reach and maintain the setpoint from the preferences. + If using basic control setpoint is in sensor units.
  • runElevatorSpeed

    public void runElevatorSpeed(double speed)
    -
    Basic method to run the elevator at commanded speed. This does not stop!!
    +
    Basic method to run the elevator at commanded speed. + This does not stop!!
  • runElevatorVoltage

    public void runElevatorVoltage(Voltage volts)
    -
    Basic method to run the elevator at commanded voltage. This does not stop!!
    +
    Basic method to run the elevator at commanded voltage. + This does not stop!!
  • @@ -497,14 +510,32 @@

    setGoal

    runElevatorSpeedCommand

    public Command runElevatorSpeedCommand(double speed)
    -
    Runs runElevatorSpeed as a Command. This stops after command is finished.
    +
    Runs runElevatorSpeed as a Command. + This stops after command is finished.
  • runElevatorVoltageCommand

    public Command runElevatorVoltageCommand(Voltage volts)
    -
    Runs runElevatorVoltage as a Command. This stops after command is finished.
    +
    Runs runElevatorVoltage as a Command. + This stops after command is finished.
    +
    +
  • +
  • +
    +

    runkG

    +
    public void runkG()
    +
    Powers the motor with the kG feedforward value. + "Voltage required to counteract gravity".
    +
    +
  • +
  • +
    +

    runkGCommand

    +
    public Command runkGCommand()
    +
    Powers the motor with the kG feedforward value as a command. + "Voltage required to counteract gravity".
  • @@ -525,9 +556,9 @@

    setBottomLimitSwitch

    autoStowWithOverride

    public Command autoStowWithOverride(double stowHeight)
    -
    A command to be used as a default command to stow the elevator. Use toggleAutoStow() to toggle - it on and off. It's good for if you want it to stow but want safety or to be able to control - manually.
    +
    A command to be used as a default command to stow the elevator. + Use toggleAutoStow() to toggle it on and off. + It's good for if you want it to stow but want safety or to be able to control manually.
  • diff --git a/docs/maniplib/ManipShooterIntake.html b/docs/maniplib/ManipShooterIntake.html index 5a31aad..54a167c 100644 --- a/docs/maniplib/ManipShooterIntake.html +++ b/docs/maniplib/ManipShooterIntake.html @@ -118,24 +118,39 @@

    Method Summary

    Sets the ManipMotor to follow another ManipMotor.
    - -
    setReference(double setpoint)
    +
    void
    +
    runSpeed(double speed)
    -
    Set the closed loop PID controller reference point.
    +
    Set the percentage output as a command.
    -
    setSpeed(double speed)
    +
    runSpeedCommand(double speed)
    Set the percentage output.
    void
    - +
    runVoltage(double voltage)
    - +
    Set the motor voltage.
    - +
    runVoltageCommand(double voltage)
    +
    Set the motor voltage as a command.
    +
    + +
    setReference(double setpoint)
    +
    +
    Set the closed loop PID controller reference point.
    +
    +
    void
    + +
    + +
    + + +
    A command that stops the ManipShooterIntake
  • @@ -194,10 +209,32 @@

    addFollower

  • -
    -

    setSpeed

    -
    public Command setSpeed(double speed)
    -
    Set the percentage output.
    +
    +

    runVoltage

    +
    public void runVoltage(double voltage)
    +
    Set the motor voltage.
    +
    +
    Parameters:
    +
    voltage - to run the motor at.
    +
    +
    +
  • +
  • +
    +

    runVoltageCommand

    +
    public Command runVoltageCommand(double voltage)
    +
    Set the motor voltage as a command.
    +
    +
    Parameters:
    +
    voltage - to run the motor at.
    +
    +
    +
  • +
  • +
    +

    runSpeed

    +
    public void runSpeed(double speed)
    +
    Set the percentage output as a command.
    Parameters:
    speed - percent out for the motor controller.
    @@ -205,6 +242,17 @@

    setSpeed

  • +
    +

    runSpeedCommand

    +
    public Command runSpeedCommand(double speed)
    +
    Set the percentage output.
    +
    +
    Parameters:
    +
    speed - percent out for the motor controller as a command.
    +
    +
    +
  • +
  • setReference

    public Command setReference(double setpoint)
    diff --git a/docs/maniplib/motors/ManipMotor.html b/docs/maniplib/motors/ManipMotor.html index a3e10d7..df8744c 100644 --- a/docs/maniplib/motors/ManipMotor.html +++ b/docs/maniplib/motors/ManipMotor.html @@ -97,8 +97,7 @@

    Field Summary

    final int
    -
    The maximum amount of times the swerve motor will attempt to configure a motor if failures - occur.
    +
    The maximum amount of times the swerve motor will attempt to configure a motor if failures occur.
    @@ -220,8 +219,8 @@

    Method Summary

    abstract void
    setCurrentLimit(int currentLimit)
    -
    Set the current limit for the swerve drive motor, remember this may cause jumping if used in - conjunction with voltage compensation.
    +
    Set the current limit for the swerve drive motor, remember this may cause jumping if used in conjunction with + voltage compensation.
    abstract void
    @@ -329,8 +328,7 @@

    Field Details

    maximumRetries

    public final int maximumRetries
    -
    The maximum amount of times the swerve motor will attempt to configure a motor if failures - occur.
    +
    The maximum amount of times the swerve motor will attempt to configure a motor if failures occur.
    See Also:
    @@ -685,8 +683,8 @@

    setVoltageCompensation

    setCurrentLimit

    public abstract void setCurrentLimit(int currentLimit)
    -
    Set the current limit for the swerve drive motor, remember this may cause jumping if used in - conjunction with voltage compensation. This is useful to protect the motor from current spikes.
    +
    Set the current limit for the swerve drive motor, remember this may cause jumping if used in conjunction with + voltage compensation. This is useful to protect the motor from current spikes.
    Parameters:
    currentLimit - Current limit in AMPS at free speed.
    diff --git a/docs/maniplib/motors/ManipSparkMax.html b/docs/maniplib/motors/ManipSparkMax.html index 3b0b7f7..efd7b9e 100644 --- a/docs/maniplib/motors/ManipSparkMax.html +++ b/docs/maniplib/motors/ManipSparkMax.html @@ -254,8 +254,8 @@

    Method Summary

    void
    setCurrentLimit(int currentLimit)
    -
    Set the current limit for the motor, remember this may cause jumping if used in conjunction - with voltage compensation.
    +
    Set the current limit for the motor, remember this may cause jumping if used in conjunction with + voltage compensation.
    void
    @@ -530,8 +530,8 @@

    setVoltageCompensation

    setCurrentLimit

    public void setCurrentLimit(int currentLimit)
    -
    Set the current limit for the motor, remember this may cause jumping if used in conjunction - with voltage compensation. This is useful to protect the motor from current spikes.
    +
    Set the current limit for the motor, remember this may cause jumping if used in conjunction with + voltage compensation. This is useful to protect the motor from current spikes.
    Specified by:
    setCurrentLimit in class ManipMotor
    diff --git a/docs/maniplib/utils/ManipArmConstants.html b/docs/maniplib/utils/ManipArmConstants.html index a55375e..14eab4d 100644 --- a/docs/maniplib/utils/ManipArmConstants.html +++ b/docs/maniplib/utils/ManipArmConstants.html @@ -392,13 +392,11 @@

    ManipArmConstants

    kMaxAngle - Arms min height in degrees. Used for soft limits as well.
    kArmInverted - Whether to invert the drive direction of the arm. runArm(.1); should go up.
    kArmRampRate - Elevators ramp rate. 0.5 is recommended for most.
    -
    kArmOffsetToHorizantalZero - Absolute encoder offset. Arm should be horizontal to the - floor at 0.
    +
    kArmOffsetToHorizantalZero - Absolute encoder offset. Arm should be horizontal to the floor at 0.
    kArmAllowedClosedLoopError - Allowed error in the pid control in degrees.
    kArmStallCurrentLimitAmps - The arms stall limit. 30 is recommended for most.
    kArmMaxVelocityRPM - Arms max velocity in rotations per second.
    -
    kArmMaxAccelerationRPMperSecond - Arms max Acceleration in rotations per second. Depends - on specific arm config for accurate sim speed.
    +
    kArmMaxAccelerationRPMperSecond - Arms max Acceleration in rotations per second. Depends on specific arm config for accurate sim speed.
    kEnableAdvanced - Determines whether to use advanced control and sim.
    diff --git a/docs/maniplib/utils/ManipElevatorConstants.html b/docs/maniplib/utils/ManipElevatorConstants.html index 29820e5..102b1b3 100644 --- a/docs/maniplib/utils/ManipElevatorConstants.html +++ b/docs/maniplib/utils/ManipElevatorConstants.html @@ -376,8 +376,7 @@

    ManipElevatorConstants

    kElevatorGearing - Gear ratio of the elevator, use gearbox w/o sprockets.
    kElevatorDrumRadiusInches - Radius of the drum, sprocket radius if using chain.
    kElevatorCarriageMassLbs - How much the carriage weighs in pounds.
    -
    kStartingSimHeightInches - Where the elevator sim should set the elevator on start, in - inches.
    +
    kStartingSimHeightInches - Where the elevator sim should set the elevator on start, in inches.
    kMaxHeightInches - Elevators max height in inches. Used for soft limits as well.
    kMinHeightInches - Elevators min height in inches. Used for soft limits as well.
    kIsInverted - Whether to invert the lead motor. Positive speed should go up.
    @@ -385,8 +384,7 @@

    ManipElevatorConstants

    kElevatorCurrentLimit - Elevators current limit. 40 is recommended for most.
    kMaxVelocityMps - Elevators max velocity in meters per second.
    kMaxAccelerationMps - Elevators max acceleration in meters per second.
    -
    kAbsEncoderOffset - Offset for an optional but heavily recommended abs encoder. Set - elevator to kMinHeight then input the raw abs output.
    +
    kAbsEncoderOffset - Offset for an optional but heavily recommended abs encoder. Set elevator to kMinHeight then input the raw abs output.
    kEnableAdvanced - Determines whether to use advanced control and sim.
    diff --git a/docs/member-search-index.js b/docs/member-search-index.js index aaec3f1..1a27af7 100644 --- a/docs/member-search-index.js +++ b/docs/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"maniplib","c":"ManipArm","l":"addAbsoluteEncoderValue(double)"},{"p":"maniplib","c":"ManipElevator","l":"addAbsoluteEncoderValue(double)"},{"p":"maniplib","c":"ManipArm","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib","c":"ManipElevator","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib","c":"ManipShooterIntake","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"Arm()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipElevator","l":"atHeight(double, double)","u":"atHeight(double,double)"},{"p":"maniplib","c":"ManipArm","l":"autoStowWithOverride(double)"},{"p":"maniplib","c":"ManipElevator","l":"autoStowWithOverride(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"burnFlash()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"burnFlash()"},{"p":"maniplib.motors","c":"ManipMotor","l":"clearStickyFaults()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"clearStickyFaults()"},{"p":"maniplib.motors","c":"ManipMotor","l":"configureMotor(int, double, boolean, boolean)","u":"configureMotor(int,double,boolean,boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configureMotor(int, double, boolean, boolean)","u":"configureMotor(int,double,boolean,boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(maniplib.utils.PIDFConfig)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(maniplib.utils.PIDFConfig)"},{"p":"maniplib.motors","c":"ManipMotor","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"maniplib.utils","c":"PIDControlType","l":"controlType"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"convertAngleToSensorUnits(double, Angle)","u":"convertAngleToSensorUnits(double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"convertDistanceToRotations(double, double, Distance)","u":"convertDistanceToRotations(double,double,edu.wpi.first.units.measure.Distance)"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"convertRotationsToDistance(double, double, Angle)","u":"convertRotationsToDistance(double,double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"convertSensorUnitsToAngle(double, Angle)","u":"convertSensorUnitsToAngle(double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"createPIDController()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"d"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"Elevator()","u":"%3Cinit%3E()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"encoder"},{"p":"maniplib.utils","c":"PIDFConfig","l":"f"},{"p":"maniplib.motors","c":"ManipMotor","l":"factoryDefaults()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"factoryDefaults()"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"gearbox"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"gearbox"},{"p":"maniplib","c":"ManipArm","l":"getAngle()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getAppliedOutput()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getAppliedOutput()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getConfig()"},{"p":"maniplib","c":"ManipElevator","l":"getHeightMeters()"},{"p":"maniplib","c":"ManipElevator","l":"getLinearPosition()"},{"p":"maniplib","c":"ManipElevator","l":"getLinearVelocity()"},{"p":"maniplib","c":"ManipArm","l":"getMechAngle()"},{"p":"maniplib","c":"ManipElevator","l":"getMechLength()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getMotor()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getMotor()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getMotorID()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getMotorID()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getPosition()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getPosition()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getRioController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getRioController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getSparkController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getSparkMax()"},{"p":"maniplib","c":"ManipArm","l":"getVelocity()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getVelocity()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getVelocity()"},{"p":"maniplib","c":"ManipElevator","l":"getVelocityMetersPerSecond()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getVoltage()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getVoltage()"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"HIGH"},{"p":"maniplib.utils","c":"PIDFConfig","l":"i"},{"p":"maniplib.motors","c":"ManipMotor","l":"iterateCTRESim()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"iterateCTRESim()"},{"p":"maniplib.motors","c":"ManipMotor","l":"iterateRevSim(double, double, double)","u":"iterateRevSim(double,double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"iterateRevSim(double, double, double)","u":"iterateRevSim(double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"iz"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kAbsEncoderOffset"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmAllowedClosedLoopError"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmInverted"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKa"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKd"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmkG"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKi"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKp"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmkS"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKv"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmLength"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMass"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMaxAccelerationRPMperSecond"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMaxVelocityRPM"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmOffsetToHorizantalZero"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmRampRate"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmReduction"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmStallCurrentLimitAmps"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmStartingAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorCarriageMass"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorCurrentLimit"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorDrumRadius"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorGearing"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkA"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKd"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkG"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKi"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKp"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkS"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkV"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorRampRate"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kEnableAdvanced"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kEnableAdvanced"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kIsInverted"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxAcceleration"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kMaxAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxHeight"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxVelocity"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kMinAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMinHeight"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kStartingHeightSim"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"LOW"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor, ManipArmConstants)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.ManipArmConstants)"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor, PIDFConfig)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.PIDFConfig)"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"ManipArmConstants(DCMotor, double, double, double, double, double, double, double, double, double, double, double, double, double, boolean, double, double, double, int, double, double, boolean)","u":"%3Cinit%3E(edu.wpi.first.math.system.plant.DCMotor,double,double,double,double,double,double,double,double,double,double,double,double,double,boolean,double,double,double,int,double,double,boolean)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor, ManipElevatorConstants)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.ManipElevatorConstants)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor, PIDFConfig)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.PIDFConfig)"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"ManipElevatorConstants(DCMotor, double, double, double, double, double, double, double, double, double, double, double, double, double, boolean, double, int, double, double, double, boolean)","u":"%3Cinit%3E(edu.wpi.first.math.system.plant.DCMotor,double,double,double,double,double,double,double,double,double,double,double,double,double,boolean,double,int,double,double,double,boolean)"},{"p":"maniplib.utils","c":"ManipMath","l":"ManipMath()","u":"%3Cinit%3E()"},{"p":"maniplib.motors","c":"ManipMotor","l":"ManipMotor()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipShooterIntake","l":"ManipShooterIntake(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"ManipSparkMax(int)","u":"%3Cinit%3E(int)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"ManipSparkMax(SparkMax)","u":"%3Cinit%3E(com.revrobotics.spark.SparkMax)"},{"p":"maniplib","c":"Telemetry","l":"manipVerbosity"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"max"},{"p":"maniplib.motors","c":"ManipMotor","l":"maximumRetries"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"min"},{"p":"maniplib","c":"ManipArm","l":"nearMax(double)"},{"p":"maniplib","c":"ManipElevator","l":"nearMax(double)"},{"p":"maniplib","c":"ManipArm","l":"nearMin(double)"},{"p":"maniplib","c":"ManipElevator","l":"nearMin(double)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"NONE"},{"p":"maniplib.utils","c":"PIDFConfig","l":"output"},{"p":"maniplib.utils","c":"PIDFConfig","l":"p"},{"p":"maniplib","c":"ManipArm","l":"periodic()"},{"p":"maniplib","c":"ManipElevator","l":"periodic()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"pid"},{"p":"maniplib.utils","c":"PIDControlType","l":"PIDControlType()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double)","u":"%3Cinit%3E(double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double)","u":"%3Cinit%3E(double,double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double, double)","u":"%3Cinit%3E(double,double,double,double,double)"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"PIDFRange()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"POSITION"},{"p":"maniplib","c":"ManipArm","l":"reachSetpoint(double)"},{"p":"maniplib","c":"ManipElevator","l":"reachSetpoint(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"rioPID"},{"p":"maniplib","c":"ManipArm","l":"runArmSpeed(double)"},{"p":"maniplib","c":"ManipArm","l":"runArmSpeedCommand(double)"},{"p":"maniplib","c":"ManipArm","l":"runArmVoltage(Voltage)","u":"runArmVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipArm","l":"runArmVoltageCommand(Voltage)","u":"runArmVoltageCommand(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorSpeed(double)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorSpeedCommand(double)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorVoltage(Voltage)","u":"runElevatorVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorVoltageCommand(Voltage)","u":"runElevatorVoltageCommand(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipArm","l":"runSysIdRoutine()"},{"p":"maniplib","c":"ManipElevator","l":"runSysIdRoutine()"},{"p":"maniplib.motors","c":"ManipMotor","l":"set(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"set(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setAsFollower(ManipMotor, Boolean)","u":"setAsFollower(maniplib.motors.ManipMotor,java.lang.Boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setAsFollower(ManipMotor, Boolean)","u":"setAsFollower(maniplib.motors.ManipMotor,java.lang.Boolean)"},{"p":"maniplib","c":"ManipArm","l":"setAutoStow(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setAutoStow(boolean)"},{"p":"maniplib","c":"ManipArm","l":"setBottomLimitSwitch(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setBottomLimitSwitch(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setCurrentLimit(int)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setCurrentLimit(int)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setGearbox(DCMotor)","u":"setGearbox(edu.wpi.first.math.system.plant.DCMotor)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setGearbox(DCMotor)","u":"setGearbox(edu.wpi.first.math.system.plant.DCMotor)"},{"p":"maniplib","c":"ManipArm","l":"setGoal(double)"},{"p":"maniplib","c":"ManipElevator","l":"setGoal(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setInverted(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setInverted(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setLoopRampRate(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setLoopRampRate(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setMotorBrake(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setMotorBrake(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setPIDControlType(PIDControlType.ControlType)","u":"setPIDControlType(maniplib.utils.PIDControlType.ControlType)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setPIDControlType(PIDControlType.ControlType)","u":"setPIDControlType(maniplib.utils.PIDControlType.ControlType)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setPosition(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setPosition(double)"},{"p":"maniplib","c":"ManipShooterIntake","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"maniplib","c":"ManipShooterIntake","l":"setSpeed(double)"},{"p":"maniplib","c":"ManipArm","l":"setSyncAbsEncoderInit(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setSyncAbsEncoderInit(boolean)"},{"p":"maniplib","c":"ManipArm","l":"setTopLimitSwitch(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setTopLimitSwitch(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setupRioPID(PIDFConfig, double, double, double, boolean)","u":"setupRioPID(maniplib.utils.PIDFConfig,double,double,double,boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setupRioPID(PIDFConfig, double, double, double, boolean)","u":"setupRioPID(maniplib.utils.PIDFConfig,double,double,double,boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVelocity(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVelocity(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltage(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltage(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltage(Voltage)","u":"setVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltage(Voltage)","u":"setVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltageCompensation(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltageCompensation(double)"},{"p":"maniplib","c":"ManipArm","l":"simulationPeriodic()"},{"p":"maniplib","c":"ManipElevator","l":"simulationPeriodic()"},{"p":"maniplib","c":"ManipArm","l":"stopArm()"},{"p":"maniplib","c":"ManipElevator","l":"stopElevator()"},{"p":"maniplib.motors","c":"ManipMotor","l":"stopMotor()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"stopMotor()"},{"p":"maniplib.motors","c":"ManipMotor","l":"stopMotorCommand()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"stopMotorCommand()"},{"p":"maniplib","c":"ManipShooterIntake","l":"stopShooter()"},{"p":"maniplib","c":"ManipShooterIntake","l":"stopShooterCommand()"},{"p":"maniplib","c":"ManipArm","l":"synchronizeAbsoluteEncoder()"},{"p":"maniplib","c":"ManipElevator","l":"synchronizeAbsoluteEncoder()"},{"p":"maniplib","c":"Telemetry","l":"Telemetry()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipArm","l":"toggleAutoStow()"},{"p":"maniplib","c":"ManipElevator","l":"toggleAutoStow()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"updateConfig(SparkMaxConfig)","u":"updateConfig(com.revrobotics.spark.config.SparkMaxConfig)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"useRioPID"},{"p":"maniplib.motors","c":"ManipMotor","l":"useRioPID(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"useRioPID(boolean)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"values()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"values()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"VELOCITY"}];updateSearchResults(); \ No newline at end of file +memberSearchIndex = [{"p":"maniplib","c":"ManipArm","l":"addAbsoluteEncoderValue(double)"},{"p":"maniplib","c":"ManipElevator","l":"addAbsoluteEncoderValue(double)"},{"p":"maniplib","c":"ManipArm","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib","c":"ManipElevator","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib","c":"ManipShooterIntake","l":"addFollower(ManipMotor, boolean)","u":"addFollower(maniplib.motors.ManipMotor,boolean)"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"Arm()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipElevator","l":"atHeight(double, double)","u":"atHeight(double,double)"},{"p":"maniplib","c":"ManipArm","l":"autoStowWithOverride(double)"},{"p":"maniplib","c":"ManipElevator","l":"autoStowWithOverride(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"burnFlash()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"burnFlash()"},{"p":"maniplib.motors","c":"ManipMotor","l":"clearStickyFaults()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"clearStickyFaults()"},{"p":"maniplib.motors","c":"ManipMotor","l":"configureMotor(int, double, boolean, boolean)","u":"configureMotor(int,double,boolean,boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configureMotor(int, double, boolean, boolean)","u":"configureMotor(int,double,boolean,boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(maniplib.utils.PIDFConfig)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(maniplib.utils.PIDFConfig)"},{"p":"maniplib.motors","c":"ManipMotor","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"maniplib.utils","c":"PIDControlType","l":"controlType"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"convertAngleToSensorUnits(double, Angle)","u":"convertAngleToSensorUnits(double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"convertDistanceToRotations(double, double, Distance)","u":"convertDistanceToRotations(double,double,edu.wpi.first.units.measure.Distance)"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"convertRotationsToDistance(double, double, Angle)","u":"convertRotationsToDistance(double,double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"ManipMath.Arm","l":"convertSensorUnitsToAngle(double, Angle)","u":"convertSensorUnitsToAngle(double,edu.wpi.first.units.measure.Angle)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"createPIDController()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"d"},{"p":"maniplib.utils","c":"ManipMath.Elevator","l":"Elevator()","u":"%3Cinit%3E()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"encoder"},{"p":"maniplib.utils","c":"PIDFConfig","l":"f"},{"p":"maniplib.motors","c":"ManipMotor","l":"factoryDefaults()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"factoryDefaults()"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"gearbox"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"gearbox"},{"p":"maniplib","c":"ManipArm","l":"getAngle()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getAppliedOutput()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getAppliedOutput()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getConfig()"},{"p":"maniplib","c":"ManipElevator","l":"getHeightMeters()"},{"p":"maniplib","c":"ManipElevator","l":"getLinearPosition()"},{"p":"maniplib","c":"ManipElevator","l":"getLinearVelocity()"},{"p":"maniplib","c":"ManipArm","l":"getMechAngle()"},{"p":"maniplib","c":"ManipElevator","l":"getMechLength()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getMotor()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getMotor()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getMotorID()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getMotorID()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getPosition()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getPosition()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getRioController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getRioController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getSparkController()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getSparkMax()"},{"p":"maniplib","c":"ManipArm","l":"getVelocity()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getVelocity()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getVelocity()"},{"p":"maniplib","c":"ManipElevator","l":"getVelocityMetersPerSecond()"},{"p":"maniplib.motors","c":"ManipMotor","l":"getVoltage()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"getVoltage()"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"HIGH"},{"p":"maniplib.utils","c":"PIDFConfig","l":"i"},{"p":"maniplib.motors","c":"ManipMotor","l":"iterateCTRESim()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"iterateCTRESim()"},{"p":"maniplib.motors","c":"ManipMotor","l":"iterateRevSim(double, double, double)","u":"iterateRevSim(double,double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"iterateRevSim(double, double, double)","u":"iterateRevSim(double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"iz"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kAbsEncoderOffset"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmAllowedClosedLoopError"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmInverted"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKa"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKd"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmkG"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKi"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKp"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmkS"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmKv"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmLength"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMass"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMaxAccelerationRPMperSecond"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmMaxVelocityRPM"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmOffsetToHorizantalZero"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmRampRate"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmReduction"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmStallCurrentLimitAmps"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kArmStartingAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorCarriageMass"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorCurrentLimit"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorDrumRadius"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorGearing"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkA"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKd"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkG"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKi"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorKp"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkS"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorkV"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kElevatorRampRate"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kEnableAdvanced"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kEnableAdvanced"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kIsInverted"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxAcceleration"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kMaxAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxHeight"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMaxVelocity"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"kMinAngle"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kMinHeight"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"kStartingHeightSim"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"LOW"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor, ManipArmConstants)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.ManipArmConstants)"},{"p":"maniplib","c":"ManipArm","l":"ManipArm(ManipMotor, PIDFConfig)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.PIDFConfig)"},{"p":"maniplib.utils","c":"ManipArmConstants","l":"ManipArmConstants(DCMotor, double, double, double, double, double, double, double, double, double, double, double, double, double, boolean, double, double, double, int, double, double, boolean)","u":"%3Cinit%3E(edu.wpi.first.math.system.plant.DCMotor,double,double,double,double,double,double,double,double,double,double,double,double,double,boolean,double,double,double,int,double,double,boolean)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor, ManipElevatorConstants)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.ManipElevatorConstants)"},{"p":"maniplib","c":"ManipElevator","l":"ManipElevator(ManipMotor, PIDFConfig)","u":"%3Cinit%3E(maniplib.motors.ManipMotor,maniplib.utils.PIDFConfig)"},{"p":"maniplib.utils","c":"ManipElevatorConstants","l":"ManipElevatorConstants(DCMotor, double, double, double, double, double, double, double, double, double, double, double, double, double, boolean, double, int, double, double, double, boolean)","u":"%3Cinit%3E(edu.wpi.first.math.system.plant.DCMotor,double,double,double,double,double,double,double,double,double,double,double,double,double,boolean,double,int,double,double,double,boolean)"},{"p":"maniplib.utils","c":"ManipMath","l":"ManipMath()","u":"%3Cinit%3E()"},{"p":"maniplib.motors","c":"ManipMotor","l":"ManipMotor()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipShooterIntake","l":"ManipShooterIntake(ManipMotor)","u":"%3Cinit%3E(maniplib.motors.ManipMotor)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"ManipSparkMax(int)","u":"%3Cinit%3E(int)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"ManipSparkMax(SparkMax)","u":"%3Cinit%3E(com.revrobotics.spark.SparkMax)"},{"p":"maniplib","c":"Telemetry","l":"manipVerbosity"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"max"},{"p":"maniplib.motors","c":"ManipMotor","l":"maximumRetries"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"min"},{"p":"maniplib","c":"ManipArm","l":"nearMax(double)"},{"p":"maniplib","c":"ManipElevator","l":"nearMax(double)"},{"p":"maniplib","c":"ManipArm","l":"nearMin(double)"},{"p":"maniplib","c":"ManipElevator","l":"nearMin(double)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"NONE"},{"p":"maniplib.utils","c":"PIDFConfig","l":"output"},{"p":"maniplib.utils","c":"PIDFConfig","l":"p"},{"p":"maniplib","c":"ManipArm","l":"periodic()"},{"p":"maniplib","c":"ManipElevator","l":"periodic()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"pid"},{"p":"maniplib.utils","c":"PIDControlType","l":"PIDControlType()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double)","u":"%3Cinit%3E(double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double)","u":"%3Cinit%3E(double,double,double,double)"},{"p":"maniplib.utils","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double, double)","u":"%3Cinit%3E(double,double,double,double,double)"},{"p":"maniplib.utils.deserializer","c":"PIDFRange","l":"PIDFRange()","u":"%3Cinit%3E()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"POSITION"},{"p":"maniplib","c":"ManipArm","l":"reachSetpoint(double)"},{"p":"maniplib","c":"ManipElevator","l":"reachSetpoint(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"rioPID"},{"p":"maniplib","c":"ManipArm","l":"runArmSpeed(double)"},{"p":"maniplib","c":"ManipArm","l":"runArmSpeedCommand(double)"},{"p":"maniplib","c":"ManipArm","l":"runArmVoltage(Voltage)","u":"runArmVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipArm","l":"runArmVoltageCommand(Voltage)","u":"runArmVoltageCommand(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorSpeed(double)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorSpeedCommand(double)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorVoltage(Voltage)","u":"runElevatorVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipElevator","l":"runElevatorVoltageCommand(Voltage)","u":"runElevatorVoltageCommand(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib","c":"ManipArm","l":"runkG()"},{"p":"maniplib","c":"ManipElevator","l":"runkG()"},{"p":"maniplib","c":"ManipArm","l":"runkGCommand()"},{"p":"maniplib","c":"ManipElevator","l":"runkGCommand()"},{"p":"maniplib","c":"ManipShooterIntake","l":"runSpeed(double)"},{"p":"maniplib","c":"ManipShooterIntake","l":"runSpeedCommand(double)"},{"p":"maniplib","c":"ManipArm","l":"runSysIdRoutine()"},{"p":"maniplib","c":"ManipElevator","l":"runSysIdRoutine()"},{"p":"maniplib","c":"ManipShooterIntake","l":"runVoltage(double)"},{"p":"maniplib","c":"ManipShooterIntake","l":"runVoltageCommand(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"set(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"set(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setAsFollower(ManipMotor, Boolean)","u":"setAsFollower(maniplib.motors.ManipMotor,java.lang.Boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setAsFollower(ManipMotor, Boolean)","u":"setAsFollower(maniplib.motors.ManipMotor,java.lang.Boolean)"},{"p":"maniplib","c":"ManipArm","l":"setAutoStow(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setAutoStow(boolean)"},{"p":"maniplib","c":"ManipArm","l":"setBottomLimitSwitch(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setBottomLimitSwitch(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setCurrentLimit(int)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setCurrentLimit(int)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setGearbox(DCMotor)","u":"setGearbox(edu.wpi.first.math.system.plant.DCMotor)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setGearbox(DCMotor)","u":"setGearbox(edu.wpi.first.math.system.plant.DCMotor)"},{"p":"maniplib","c":"ManipArm","l":"setGoal(double)"},{"p":"maniplib","c":"ManipElevator","l":"setGoal(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setInverted(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setInverted(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setLoopRampRate(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setLoopRampRate(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setMotorBrake(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setMotorBrake(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setPIDControlType(PIDControlType.ControlType)","u":"setPIDControlType(maniplib.utils.PIDControlType.ControlType)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setPIDControlType(PIDControlType.ControlType)","u":"setPIDControlType(maniplib.utils.PIDControlType.ControlType)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setPosition(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setPosition(double)"},{"p":"maniplib","c":"ManipShooterIntake","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setReference(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"maniplib","c":"ManipArm","l":"setSyncAbsEncoderInit(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setSyncAbsEncoderInit(boolean)"},{"p":"maniplib","c":"ManipArm","l":"setTopLimitSwitch(boolean)"},{"p":"maniplib","c":"ManipElevator","l":"setTopLimitSwitch(boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setupRioPID(PIDFConfig, double, double, double, boolean)","u":"setupRioPID(maniplib.utils.PIDFConfig,double,double,double,boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setupRioPID(PIDFConfig, double, double, double, boolean)","u":"setupRioPID(maniplib.utils.PIDFConfig,double,double,double,boolean)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVelocity(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVelocity(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltage(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltage(double)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltage(Voltage)","u":"setVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltage(Voltage)","u":"setVoltage(edu.wpi.first.units.measure.Voltage)"},{"p":"maniplib.motors","c":"ManipMotor","l":"setVoltageCompensation(double)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"setVoltageCompensation(double)"},{"p":"maniplib","c":"ManipArm","l":"simulationPeriodic()"},{"p":"maniplib","c":"ManipElevator","l":"simulationPeriodic()"},{"p":"maniplib","c":"ManipArm","l":"stopArm()"},{"p":"maniplib","c":"ManipElevator","l":"stopElevator()"},{"p":"maniplib.motors","c":"ManipMotor","l":"stopMotor()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"stopMotor()"},{"p":"maniplib.motors","c":"ManipMotor","l":"stopMotorCommand()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"stopMotorCommand()"},{"p":"maniplib","c":"ManipShooterIntake","l":"stopShooter()"},{"p":"maniplib","c":"ManipShooterIntake","l":"stopShooterCommand()"},{"p":"maniplib","c":"ManipArm","l":"synchronizeAbsoluteEncoder()"},{"p":"maniplib","c":"ManipElevator","l":"synchronizeAbsoluteEncoder()"},{"p":"maniplib","c":"Telemetry","l":"Telemetry()","u":"%3Cinit%3E()"},{"p":"maniplib","c":"ManipArm","l":"toggleAutoStow()"},{"p":"maniplib","c":"ManipElevator","l":"toggleAutoStow()"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"updateConfig(SparkMaxConfig)","u":"updateConfig(com.revrobotics.spark.config.SparkMaxConfig)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"useRioPID"},{"p":"maniplib.motors","c":"ManipMotor","l":"useRioPID(boolean)"},{"p":"maniplib.motors","c":"ManipSparkMax","l":"useRioPID(boolean)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"maniplib","c":"Telemetry.ManipTelemetry","l":"values()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"values()"},{"p":"maniplib.utils","c":"PIDControlType.ControlType","l":"VELOCITY"}];updateSearchResults(); \ No newline at end of file diff --git a/maniplib/maniplib.json b/maniplib/maniplib.json index 0672f93..ec2fc29 100644 --- a/maniplib/maniplib.json +++ b/maniplib/maniplib.json @@ -1,7 +1,7 @@ { - "fileName": "maniplib-2025.0.0-beta0.5.4.json", + "fileName": "maniplib-2025.0.0-beta0.5.5.json", "name": "ManipLib", - "version": "2025.0.0-beta0.5.4", + "version": "2025.0.0-beta0.5.5", "frcYear": "2025", "uuid": "67953b3f-32a5-41cf-84d7-2f6989d3d38d", "mavenUrls": [ @@ -12,7 +12,7 @@ { "groupId": "maniplib", "artifactId": "ManipLib-java", - "version": "2025.0.0-beta0.5.4" + "version": "2025.0.0-beta0.5.5" } ], "requires": [ diff --git a/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5-headers.zip new file mode 100644 index 0000000000000000000000000000000000000000..8b39308ed6e9dc628f9463391264e1677e06e509 GIT binary patch literal 4087 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 + + 4.0.0 + maniplib + ManipLib-cpp + 2025.0.0-beta0.5.5 + pom + diff --git a/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.md5 b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.md5 new file mode 100644 index 0000000..c07d541 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.md5 @@ -0,0 +1 @@ +7b94d22f9c0727bc40cf51e71d9551a4 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha1 b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha1 new file mode 100644 index 0000000..c79b0fb --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha1 @@ -0,0 +1 @@ +4f5c6c735a1cbfe1ba69b70486404584b97939b4 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha256 b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha256 new file mode 100644 index 0000000..d91ce81 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha256 @@ -0,0 +1 @@ +98c4333c8f66db39c868b3e60a5d92ae55fc1c86b98860d32d3149088b1a09d8 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha512 b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha512 new file mode 100644 index 0000000..540a3d2 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-cpp/2025.0.0-beta0.5.5/ManipLib-cpp-2025.0.0-beta0.5.5.pom.sha512 @@ -0,0 +1 @@ +3dd04d0ab3023c7794e34f850e51e3c8f7aa81de25db4c70cd620a843dee08cf7b39fb3d7796024dda10000c818a744f66225b7f9bb1e0e9359392af265a4fb3 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml index 8697dd5..5f10882 100644 --- a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml +++ b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml @@ -3,8 +3,8 @@ maniplib ManipLib-cpp - 2025.0.0-beta0.5.4 - 2025.0.0-beta0.5.4 + 2025.0.0-beta0.5.5 + 2025.0.0-beta0.5.5 test 2025.0.0-beta0 @@ -17,7 +17,8 @@ 2025.0.0-beta0.5.2 2025.0.0-beta0.5.3 2025.0.0-beta0.5.4 + 2025.0.0-beta0.5.5 - 20250301012854 + 20250302150604 diff --git a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.md5 b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.md5 index 725bb4c..c4b0e51 100644 --- a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.md5 +++ b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.md5 @@ -1 +1 @@ -52e350d021b4f393d2fa755b91b91cc1 \ No newline at end of file +0260e19efacdfd6f1e528a4a504c7818 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha1 b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha1 index 6d3d1f2..5f901b6 100644 --- a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha1 +++ b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha1 @@ -1 +1 @@ -e9f9173b274dfab25bc0cda8f632679f1004f1b1 \ No newline at end of file +bbab56b8683e91acd82a594d57280fd52778da9c \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha256 b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha256 index d06d2df..688d4e8 100644 --- a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha256 +++ b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha256 @@ -1 +1 @@ -7d92b039a67b03b50b954fc9dc747517c975358a2eb88f63bc173cdf7c7120d6 \ No newline at end of file +355fb6fc06bd323f1aea9df9c0927679e37277583c8769ce40917a4bf32aea3d \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha512 b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha512 index b826472..8fd043f 100644 --- a/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha512 +++ b/maniplib/repos/maniplib/ManipLib-cpp/maven-metadata.xml.sha512 @@ -1 +1 @@ -175eb3c5bf034143b0656a06550e4944528d3911b904f0889f046658660536d259aab694ee73d224ad339c50c8575d12c4275789b6b25a778d9a2c173f5683a3 \ No newline at end of file +b44f716852408cbfe6e5e1b0e61a6af8f420fdb6c11031f76ac42e8eeb5e9e48d351c7ba90c6a4b0d7933ba5aeae200f2b53391310dbbaff11cfc1895accb22f \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar index c30414fb6fe775f6a393a245e5dc893e48ba2f89..418f06fddd85d87f43156c14d14cc113ee5cb37a 100644 GIT binary patch delta 35443 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≊^TgSUV%qJM5p^p&c8Riip>+bMfwfL0O@OI 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 D74?ZE diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.md5 index 53acdf1..d5a9d96 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.md5 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.md5 @@ -1 +1 @@ -95813d2055a41c79fdc9edb3aec1cd36 \ No newline at end of file +ac8277cd8947f9b50069716614519ae0 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha1 index d6857ce..e3bc954 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha1 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha1 @@ -1 +1 @@ -b96fabb961da8ed1fe639590e3c1cca126df3401 \ No newline at end of file +88908f3dd017dd5053869821153c350b61e8a0c4 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha256 index 2b16ac9..b7b071d 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha256 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha256 @@ -1 +1 @@ -4197e2c87ef59b7f13c913d3e7c691c2169a46b1c4ccd48ad2e7895325e15f6b \ No newline at end of file +1996c7d7dffb1eb8fbfe9a590b55ea95d4199b7502b54636f739a31981bb0d81 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha512 index 84069c3..b96f082 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha512 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-javadoc.jar.sha512 @@ -1 +1 @@ -d5bf51bc783df51ff66e65148f5e0084bc8ecd170e4b904376215c1eeaf78f88be562d97b529279ca875ae98c422b3ba94dfd2987514698d0005ae2f1966b31d \ No newline at end of file +4b267a6f73fd73cfe31f23b033fef3ba42ff63acc52de7b1424cf3a3206bdcf5dee4ecae821bd948a1a044719aea55aa2647c58aea8c878c2a6e34a6f231e61c \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar index e84bafdbda1c5b69991d8c770ee4b4bd01fa5e65..bd03433168ed4d6e4cbd40b544e5d70047974b6f 100644 GIT binary patch delta 20038 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 e!z`l(<1Jdfp)BgZwf67+? delta 19689 zcmY(Kb8N3cyR~cEHg;|7YS*@H+irigZQIzjZQHhOw`afSe94!0lF1}9|2?_0)~suu zyT1~+p$r&aUJ4Wp4G0Jd3MjQuJ09K%H0a+FNP!$!sI3{jD-sBd1O((O00e}QNF$F8 z*uvFu!fm-j#vsCg~HP(&>*KZfm(py>JQ z(S4|R)>+=F`Ud&%Gl0Yeu_50zjae`cP)s6Ee5>2+G^|pG@sKgObKan(J7ciU5AGae zAgf-p3&6Z7R=-b(o@x-b!BUAf4yhu;@&?5KjLDJp7&?YrhFfCZwxz*-WmU`#k@jNJ zO?334@30o<69HtKOz%yHIo#5MCbFFzS|nI>t0kWi`)HE2 zb-+e6`XO&#YVJ)hK^iP-9Fh%F1mhc18628{1=`}>npevEwm4OT24lD`npv=M;^{$JnT55_n>SA1>*s69HAb@nJ*?ypodQ08(fh z_*}p&jlGsIvu28+K{R6g(ynKjsqq+%Cdqbe!Q!c(1w2_p|BtumE$%CTwZqYs(<39x zH|kls?Cl5pH|BEb6&s>=z~`tR*I&EQI3=m<*&PYFhq-Z!QDo%G0 za28334FfWXziqmSl1NQ?nvZ|VF`2NifZ@pp|vod zbj!wT%CIyQNK>2rfe=e}Nb6IObMzJ#lkQNk24ay@zufgiz2x`O@07`Y!>2r5co!u^ zih7Kr;RyB-HQV$O_a4hf%c%!@#_fZlSq?iZ*_otP9_&Y`!m4%xSi>T!XU|JC@mf4R zVMJkfHQ6mr1L!Q2EKjU<1X74R`rh}0E+IwH(gN$BG=z^BpshpRL+P*dqzulC0+S&^5}UbT~C{CiXr zbp2bxk|^S}h^E*9Lr_>3C{TEO)S5rLkWneF5)(GM1mT`kLQ}}Y6bE#4?kax> zA)dCB!rcy5Z&>}@B(UkS0;(e}i7yiU`Uyj?R^3Gm_JBZSOznKA;%9FORVK8bhRg9B zLNF}IApeC{ZxW$>2(LCx3pd!2KeFR7@hxgYSVkqWWsi9gmn(U0m=mV?ZnvHfIXA?R?yJlA$mjI zpG?2c9cJo=zLKL<#x)?BF=#D`VP*Q1wOqW4#+3 z9S)q~Z&?JTFup}Mp@%>bmLyw*J8~TfJr{J2#i~r z@VsMJ;yg1K#ga}I5pXb4y9Ed%q=CNmyb0bv?S@p+LbExK*#c&jZv<~B#x#V`$d4`hH%88WIXdEBs z!^;IMEuLue!(%dqV5}~=tofA!mVHcbiRE}{DK>OiPoruQ@|f45y*kxv6C_9x{6aJA zhxHpG%=Zm^U$=-9;e?TjLJl=@KRBcDF5mqcCo}@yCRV7zwTlVnfjtaVe-|-G^FuB^ z0Xw$DHXnnho2Z(jI-l*xl>EgCA(Yz<#cu#yf7_$j>7jUK{*Xrxc#1M==`SSjfF`|C z4Z-Mq-B=j;fj#4$22>XqQxQ+FN>u2wBo#M2JWBUkHSuziOrH;-FRQvC_qaMW>8nKsW

    0AyUoy=FV`QmvD}3yByNnZ&%Oya8`+?2W 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 P$U_S&f{ZOjzkB`zY#|{O diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.md5 index 2cb8bc2..e64d061 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.md5 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.md5 @@ -1 +1 @@ -286da4c30203635b0a97adca5b61705f \ No newline at end of file +83c1fa68b65772d457d0bf80121deb8f \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha1 index af03bb3..08e295b 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha1 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha1 @@ -1 +1 @@ -201f9d767084b6e67e216d09051c6acd62bb10e7 \ No newline at end of file +e2cb0b0c201dbbdfc4d23d3b0877ee982a6d55fc \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha256 index ccbb1c1..9c281cc 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha256 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha256 @@ -1 +1 @@ -7755768f3fcd41e8af201cc1533674e407026c03415d556f06a7cc9eec33ac83 \ No newline at end of file +76f54fff7578906b80b4b5629cfa944de05491e809e303780a64c15c63ac1754 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha512 index 44aadf0..5a85ccc 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha512 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4-sources.jar.sha512 @@ -1 +1 @@ -06b2f848099cf8267127717847aa67e6fa252717fd679e034816e435d9a9baffeedf92e7af3b5c1e491b4d5d094ab2b68db4f7b3380c4e1933511cf4e9d69aa8 \ No newline at end of file +bfc71db8405a32ee43652ac2d75f4ec4be51e242d6fa7cab078c46d2fa9c223a8716306c8ab95b40a4704ae28fec5bef8f7d1d5428293d067367a3796642783c \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar index 987d6560b356ee0978e0ee4e467d6f90f3bdbd4c..db8691ab61181dcc3088fc388f1216afa9a3fd3c 100644 GIT binary patch delta 29425 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 COnuq_ diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.md5 index 1d2ed0e..df3aab3 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.md5 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.md5 @@ -1 +1 @@ -2bc41da2a8539e050f9b31b73aab741e \ No newline at end of file +ce2d79bb2fc5cc5bc33b51052b923261 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha1 index f8a1693..382293a 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha1 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha1 @@ -1 +1 @@ -32a21123a89d8718f246ee00ef42397c56244bf0 \ No newline at end of file +04e7aadf33a93f4bff45232b8ab18f18d5d2ad89 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha256 index 2fdc92b..cb176e9 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha256 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha256 @@ -1 +1 @@ -cc17e56a068ea4d2668a9ee88bef6a1d7f66342246e5931c5c23bf6ea3a8c149 \ No newline at end of file +0ab51b13af11c5fdff70c75806a7192f3e1f305111b8fd89b871e4a1c47758e8 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha512 index 4449166..4787d8c 100644 --- a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha512 +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.4/ManipLib-java-2025.0.0-beta0.5.4.jar.sha512 @@ -1 +1 @@ -d02f8d0068ec1434f34d4338cbd2b823bbd3df81d0a80d1a9e9d4e1a43bafdde94615a906aab004862dfc46e4544ea51d8ae37a1fef0241705b48de40e9d713e \ No newline at end of file +ef3ad4a99ec7c5a926893b6baaa624b47458727a2bd04375dee05db45f431230358625366d58a301d03c999c598e5f392c5b3f6523d282212a23b8991bddcc0d \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..418f06fddd85d87f43156c14d14cc113ee5cb37a GIT binary patch literal 151716 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 literal 0 HcmV?d00001 diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.md5 new file mode 100644 index 0000000..e64d061 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.md5 @@ -0,0 +1 @@ +83c1fa68b65772d457d0bf80121deb8f \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha1 new file mode 100644 index 0000000..08e295b --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha1 @@ -0,0 +1 @@ +e2cb0b0c201dbbdfc4d23d3b0877ee982a6d55fc \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha256 new file mode 100644 index 0000000..9c281cc --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha256 @@ -0,0 +1 @@ +76f54fff7578906b80b4b5629cfa944de05491e809e303780a64c15c63ac1754 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha512 new file mode 100644 index 0000000..5a85ccc --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5-sources.jar.sha512 @@ -0,0 +1 @@ +bfc71db8405a32ee43652ac2d75f4ec4be51e242d6fa7cab078c46d2fa9c223a8716306c8ab95b40a4704ae28fec5bef8f7d1d5428293d067367a3796642783c \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..db8691ab61181dcc3088fc388f1216afa9a3fd3c GIT binary patch literal 33434 zcmZs?W0WO46s}n|PuaF@+qSxFn_aeTo2P8Mx@_Z=*=2NBSIu{4X3f1bclJv1BkN7} z%AX`V&yK1BBornX7#ti}tE!nk*nbA`Kbrpx{=cdur76ZFr!36^38wl#g~`17Ek7ad z2>uh`{a61R{y&9EV#;#TQW~1fO43hCv%eG-n3$K46`1JfXBS%4Sywp@PeG>;|LbJ` zKVBV8oornkY|Z}PUjGw5hK8s45P^ZsD}aIF{O9%m5i0$U5n^tR%;pZJ?(Pi&@IIPr zYv;RikEuu0A(SojP;db1VIX2S6D8wt_z%Ev@Q%V66&^bW%REGA`?~&HM~9u3!y+|XlST5pm6e7AM~+rx!S6fsor zY2(T+=}?7OVz}XyL^XHcQf|S&fm|mOTEe5;gN^P$W2G!SxC=37C4)AOJ_bTIh`JYG zNOI>a&a;#@X&1e<>77Qv4->f8mB&mZSA;_mGjqiIMTSXEtNT`UYT@F8MI#RPkXC zaOTmvCL$@uE3+9rs$eCuzpIEx?ODXC3Hj~=vT02Lgh{H4cGAz$3rK($jb(^x#Mk%Z zHkC*^{B(|64Rqxxege~VxC^Znto9Wu%^@Uygo0i)Wx~tlfNZ)FfYnk-r;}Z!BZnIL z%XP_I60gjNVRlsV;OL!HwmYK>wyf?{ zAN{((sC}qW8P|gUr7aKLt+%FWi#k1^X`B85sB~V26qYTt6Ad#f~Ey=?X~#E_WM*O=JRo zo9yP;&g8G`UrP2o5#+wby+&qc5Z#(dN{rA3i0F1Gj0i>}U&_yU_ey#Ze;*1GRq zx(jjg#OWj!WJ%>^^;8WLI8+5%QK}30D1Jt{B-Kgx>Y+8I;aFI=U-=deBY4)@KR)=Z zvEG*_c~V$r^L4{SAb&4sVz}h~p*+0K0}QlKCClc@kGt}I_ak=VKc(SyzOot;RWBT< zgN#S`U77XN=&>%_Q@po%&k zu1s~mH+*jA;27vv=5Vq3b{=W#oigq{-(jSXtbjt8R4B*>l1sOk^!ktG80%jwLuQ(S7u8<)8$~z}wv+e%C%a>P{>~H5ej(Jn< zLLW%DL?ul1@J3&0PFO?^OM{5nP3bHg>>P9rn(7fKJ_6zYZU&q-NAOn^_1&cB(S-e2?9)SsFoqxT%kx2(N`+C_2~X;@8)Litcy?cqu6 z$s!~GAiePtc1rSPRe?QRQhVglEw_ZgOLCTLfa1t8N=cyO?n`-i6~O4a>lz0Tl=EW} z<<3ufqzS{Qhk!WbfITW`lDc=;N)1nt;fT+taOzU|CeB5@hhr|&9rA!|D@MAGLgH+gRD#1+eYtlZf)viktbyt zht(1AM&(**ulfBJ+wqB`fTXuQxj+`toD7g|UeZbxGA5x~+w4Opizqerq#WS_b%(0d zHk8yumJGFg{uqT5u`PS3P>S)Luo%eVZoZRHnfGRboiU3St11PWdjy>XPrt0YB4tFh zWvP|dViF;S<6bg$=MSx6eQV3XrJmNXTwt?0h*9~tU3>3(CG1E|H)0KcKGO%VPO3)k*Wf=41pgEnVPiM`+oZOY{Ke<_>5UqPqCjF!>XfB`)8U^HZ8bB~r?iXb<`VY|9SI8!yh6x=f#IeKlivjS7w;QP0$qkZKxL6ZcEyr(|j zx}lDmE&xGxHrFc~{mHtVVNw7vd{^*M^NIZ^(=}{6KrkYl$w_p^K#60-pG#pknu)$X z&V@u=!wqZ~8y-DjtPUx}c7g~G`?mI|Ca2G1qC#naSV(mGQqWmgUD(Ls{MB_;k5eVB zOE1PMYzc!s9vE3gp;>+)z18Hm;v9+H^eTnm!r-)Wj}&7K(v$eSUF2$$G5K$KrY;>q zyACal2KR)*!UaV8_fON@AnF?s)_(f#sA=FR@JBW)bS;5D=S{}N=xvUY#yW;M^u=!; zUP1)R5fO~=%=uesoT5KV2yv~+mU}F0!4}+{sh)))z-QWFDyV1<)SE0H=4CN#{!Uav zV~wsXrW@-1Q8;O?T{2f1^;&h%tYa0g$PY>J^e60^`8gO%4pYxl?ta^gHUz3}mao&ODDlU&Z;FaBr`(I(zzPXJ28w@y{I6?Q($kR$K;i+ilgdbx^ zE%EO;B9Te<@8M%K4|MWI%SMTu8W*Z1g%Z?g_yIdL>m7NN*`^#8BELDcE4R-*{wBcD zRF9aj;tiIAnL$|~_4JTLEF3m*eImnJ4-&cM>upqaM^1k>vekt^zrF#APOnqNO~RW5 zH`I`NG1f7x@P{O=Ol!UfXB~On@cMLAlHZTLgBEmT37iL zdN=ln=TUp*f%Bb39uLc3B9Q72Oiwta6Z=w8gic&8N(6=PHtA0|Neb&IB!ubSYOSmg z5G%vYLK+?n zzHZygJ8H%4xfiRc&O89t-ryQsPP#`7yt*Q0+I#yHPJASXvB0<<8^B=nhf1nPQM4ryhqZEiNRR7AF`q7D`EK=P8ME5o3(4;b6z^60`bNTaq=4p{ey!(C`Y3&l}Ei@!JFV*bw&b-6zfmKGJDt|>)LYxB){gSSazmAV^L1} zL0RrDZ5!#e))w^~WZrrCwB4%-Z0DBc>xkjtbgjg+eyG?EH3t{BTXT+LK)NIRf(Q#; zl9426ZC5~G`Rf#P?*7h>aB3)#MOh0px?6^tP*=GcvuSV^w+i@?%wEM^j+tF z;Z=y53k7sXsY$FmUu{BEgWQ8%uWbbSN$cnhFec(<5~LLAb3lYCRf%cK7%k2wQ2F-n8}I@9g4d^tUrR zo!t(rTUa5nWJGLcjX20PugeJIARUB)y@IFbWR=QvfD5n|IE^+yY0e6}aYl_{VGoS1 ziusKcqrXy^WUxy$P!-c#(IvB+_p!{%P>}C2mR8CkW7C+JQQ{pFsJ=^cch0iPm?6L0 z>hNp8`;TV8n1Bi6qwilxb)@L9m|G0nHnyABFo#Jt^3+cHgPHiPTA?Af&oE3;YaY-R z)2Fubknm9_MIPOs>Z+5N_hm_3180{^luX*qz zuC^Q|1L+z9wqi2~c`r}(2K<23CG@mG7qY0^VBpz3g9%&Cafg_5ZOi29KloEdQeyqi z-1YV__6sk<40;F(Bv5@Ex&Y=Za_jG6x2Tu?mw5CovRswuw+0Fit;=$2uF(S`)MYCW z^v^AeN2TB5RzvCSR18^e!>1qd8 zW8Trqox};*j_B^^*e2yXU+qjpuGu{f!_2YSLYg(LH2PWIG1>!nnq2ypfnLH}O|bm^ zep37wSnlUk)aB-K4Lvs1C%?y{k`rhm)n-_5mq8EkIqb?c2qT61E`fSWTe zU7t5Z)+B2^!@LE8UEMY=?nl4_0%xMWAH#=dpTl#$VR`PbJTW16+#L8;AR=@96(-e|;V+p{Z1u%lr!X#sIl|c98fA_Vfd+b z7h$LCq^VZ3n^33PO^CaeJy?uhNc0nc3LZ-V)(HE9@nrF^pb#>+Ft8YFyx2t~UELEx zOJx&vrP_~NOXzP2^^(BB@iuDQ`-1vcYyNlrqf6=G0;^sd= zHa+mMs1kZIYv8<|zl@tVHQGtGh1UKac^G%aQg^P@b6j{Uqx^fAD4ul3g&-=F_yIu} zd>^!l{(IBWJD=qDd)uC?Y2R_H*W`F@*%g|howp(S@AtmF2k7k&@jpiBVJvFR6fhgU za6`yoZ0~kRPFvyyI4i#q^(MT1YHLx49jA@X>ly`8d$R|e#}5Szg^;|xRiBLi?8yvn zg7eCbqh7qJ;(gN6z=)6uk{r<`E&qo9BcwEFLKJ*(6Lqk%h)5K5RDr_Z9C$B}^rcA{ zHmF*L^o1A3^EN#A>u?XZ&l^mbKVJ4m6sI6yjcm1=H~0=xw~Iu^AH^Kc`M%-muPfs} z>c!vh;Q3}cRli4bV3#O@uiQbN{CN2!&L>}@*De`HrR$0LrR$JgJ|gRY*$g72Vx;Ro zpi}VrgCt7Kt`1C|%|)6qplzA;tLg5lT5N+CjhK^8a!lfASA{u=7vWGV>JMwA1d1+O zk=MW?$xW&txY_ls=gyF^PQq9@HkuJm^}b71*jicWI#W8j6M6M%m~7MpAQ<0@ zFdq=y?+_DCf}>_vTD=n+kg0Lx$4m4o4vUnG|1aN47}0vfOp@q!h6*E9{ip0i=Yu3+9d%Ob|dc6B`h1#f6T8-%VU_x40e~UF}!!Y;hyNh zu}kGsmd+IAWdTD3TLc`ZuIRnSC!0ggwMyMylS|u%EJ%9KeE5Zp>~6VOG0ZrDH7fOO z9HL?-Nw-!J6D|_EOtAik)*2gUj-EJMoh&j@xFIi;6K{PoZD-|VXQbLgL(T7VkQzkP z=XbTkJ>-~8N5Jj3xx%nCX~;P_ZTX-~B1rY8Ebf==636<;LP^zLCG5C)vbDwo($XyE z-G0;&?%j42&ho)di3gZSFD!z>gB$iTcptm)Clyy;GiKAv*gb>mCE<{ef&7D&_A&0h zUAt4KzPE0JGlN9P0p3t=wWqT>1KAKUKYVah%zV+X>ph%e$mAiV58>4zJYbqe?z1pb z_#N6e%!KYwc|^BV5g<+wO=F)XMe4yPU;J5OAoq=2O+9ZE;fl1QsfjBRwrdaxb@CpZ zcr!|*9OS_cR=z5TIa)M!Zw>iQTTo2S9jUU?O+048w)b~+=0K0M=$PE|C9bBW3w{2oEP4_c<{vr)i{rMc%e=&+Ns^L0?9A9&-PI(vW`qZBnK6jh0>au8*r zEU(Xv(3<6MnIahrmsOqp_Qg;B?rc?DJ{Fg`LmXe}AjXL`QLPvCV+@LsaX2J^S12?Q z2c9obYMPTfBVHdrV%mpTwvD>7!c0=z>cq4v#JpoYq_$tTg(U3%0~--5AqISh>lLH#-FlcS5Y~#&u>}eBlxMp3*;1;ogL66vO9O;88<-T zQL{?L7PF@^Q@Mh=!p!=DDNPm8_)-qR=0nM!hbZeqFLjYKRvSmQFP2mwYMZH z%ua)=k6-&M%!q!C1l#m&phsbp1W)lsjFrG!{otq{NdP9~JHqj#q&bG}Z6e^98Z0*( zrdmL|gCA4{qkZIzR6ZfIhX(NM*e`X@v5DMrz!DT9&!om!?W8Zn#%N@nYzMM6`_@dn zJnTOGh2Q>X#_-K2K>gg9eX*+mpiqy5n+(H4}kJ|)ND(GXN=H*|wY8$$$1EoLK}EBcQs1XQ{ne+%a~s9ozv z-SO|ZVQxmhRO%;?o|NTKGDD+WKs>ZCG5bpnfm>g;Lg-*&1lAmSp>-AD4fT^7YaM;btT~C0vo^Y^J|rO$Gp;VhK=Bfcl2jeve5uaF}JiJ?43 z)o@3vpga3IG9ZYNT}jMU@@4 zF*NOCwEXoebu8m%lkjZn1Ej)DZEC=P!$HmS03&dVYzGRhizk3TWyUr!y~8Ntr)8!L zqZamuDw6wQig%X>A7>C9W1=$h!xaGIfgsiPVh{2p2+`_LNhV&Hl>nu--R$Oh%r5g; z(S126%$X3{*b||SE;7>;08^=4rRZn<*?ls*C0{|3Hl@4A=GtTl z2G3EQz8pf3>y_+>RAxiJF7ZgeEIAIDU{9et3Z|Yg$H%fXO#7vQ#wsH#kzD%sR2j%e zj5{cqdYnm*$xMAtEH)>e9p%zwDk&X;N@`OqC74BWBh9nJ&9i287!h4IO`Sv(-K!<} zj3>zO4pFh@>}&Fb@bdyF^9qjnPqD!9&wSy!yt>jI5bdjd*qg0j~(?UzEKO1#$-a&3Y` zZ$Uxgn`TOP`N8urpR67AuEJj@8nHVivq_)7(h2tYeiXO&re{QF76-!$0v;7M z`;c#Qm9ciGHK>5u_Wkw{h_0H|pEI@aW_fkf?J3*dF?mKztP}0iYgcwr@ZYHa3nKmx z)=pON&;0oh);_9$ff4?1uvW^!(#zDt+3o)(wuJDygliw)2WT*vljx)|-AHPwXtI=9 z_+iw^4k!RwG&pn+7Z9?ZQQ(?5CdP5C*75deZM3XGXH~bInA3r|skYs_p?!P3Zp}~I z{#wmnxBXj$L!g(j_ZRhgK&$iqi^=bw-w*qT3&O(pU|{*>`L__@u?T#C2{Gmo!99$c zJ>vWISHG|l*1?ayJ!_`gTQ(S2uEDAfre&gSbcE|LhW6ydWdG8Q-^eU7sOO(~*P z%b~0F-Zr1m{);k`VKpcfBW&Tu=lpb0BlVwuEPU7hs&74eO zm54ydoKy_o+ES9xO^;xep69T1YYUgpj!5pDbCRkSvS9UPl@Z69r3!4umEonQLhIzg zT>lhm&S(nprJuD{P7JW`Q$Ct$vGiI|#FCFL@p8e8zszjPK>(yfDiN`H?-%fduy`jo-HXgbH8{k?;-~Up1M1BaCx!P9 zEKU^+#Ac>u<~V9T1WVb(J5XO}!dDGnT1>(quP`dwy9MVkakp6o@kseqLLv9W1O{@3 z@+s-5saHYZ#eSIMUfjVk#SC@`UEKZ$YAP&F{HdPBL_%*?Mv=*^>9TaVD!AP|-Sg&` zJ8Y?$+WXOeqF#G82sJU8Z4Z*#x}xTfE1L)7R?k?$2t>Q#rXRwFrBhTIlp)XH3a({9 zh_j3$$iuPKhe8Q4QvJj>P3$DQu+^JY2kFU$((%cRpj2AqV>`Y6Q4kA(P~&GaSq%Vs6ZKj zHz2;RZ(h{O*J~*-wq`15lIB8pj1FV_gV~Vz2%#%=5r(4NXEMIRM|kc)X9xcwueULg z=Zyzs?g;-;GICG|m#lX)=f-bESwvGVJrv==7k?&wROA)pQ!E#0NTKSL@Q(Q9~)ewX}6 zds9i8Q>X#1F`3wyK!S}$&+pRp{_6nZAk9T!H-y!6=!gY?boB*vL;|MB1e%N(x$xvD zSZmgC;?^n!=`Tc?|vnRlTf!~F!>*$cO)gH zHfnY6ImP{(r2Nc|ngM5rYetI^2%e2%=cx~R{3>@R%xq9v{xk7i^i=*iN zHiTD6yYVbe+zzJQ|1E!Q-~EaYw@%wuS})4F7gzTWLo5syX-+pjfp*(5qmL3%@WC@K zY3_H`N5igKZl6U;UI}o-JTBvAzO2h~%Ofh0R;d#MJYUoI{Rg~~tF$K4X;Jsn@3B8K zutl&zBsuJ0_HQT?7zKlJ?*e@ik?h5=N+c<+(pNxMIs+fneVro`fN=27%9s+FGx(8< zIr1})(7(HXD26_hroWSyKC@DD*s5qwBuNzB!%xfg-4IUKSvtu|L;2_vDT-x7_SzI% zifx=2^99pS9{A5v226#;N!_o`fZ13y=4F*a(a><7QH>gNekvl4{~fM$C*~z%eW)D-oI6nw+lNs4jyxeY%9SrzX zAfoZOTzs1Pdx80%m$n^m#rz!X=~#Ey*s&VfngJxLcznl^7BHhKP|78Wm7T=?aP-16 zM&gV86H03L_rpEOym%is#mELlBk1<<2zD(d{$goSnI z6CD}{WNkv(o$ErmJ-Gss&d-)ZI)K=eAFq0Wlw3HhS(;I)=8 zxFEN-Wu_+6@AR6LjlFb*NMca9qIXwGUD7JXH8P{-$t6=DNlVq4hT~mR$1wS{;3Y(M zBbU&z`8XrC(x=`mL#^2^u``M{m>KYY=X=?ub*d1Q%etq~pz=_p??k~Ny zk1Z(U%)SY-Ph$3SYkj!@dcT|qKV1>S7H$Rm>lcup9VH$(J z8>xC>K}A@ip_onQRy7xUeu#qQEiZ^8B4IFxx1*eobaixyBJVLffl~0;oa`&?@3C@W znn5k4oRNOz?o$|huFwZ2lEmshi&x$zy?Fd$FZ@(L$W{bqNcmt!tzf&|Muj>kyUV9t zoS<@g5BO|}HA#8b`o#Ags1M(p(DJUA*M&r{jpRbeSGRF%VfpcboKop(X1HTDnC^H`biD29>q8~pEYWxh;iEQ4_K^3^BriDapm)B>#Hih}K)7y|$cmv7`Cu2b zkxjFo@KqQjG&b_yG4}h=8~rh+Dj{XqDe-}(a=XaA_wn8@Tn;4=dA&knyizv%tVMi} z_JMj=YQF&WrQW!1#gMoY(RtWFYnSPPn^=pZ^2zo;q9RYDWTGX@DuDmb%jTEygIA3A zVF8?Px)=8!CC200&7;%C_sD|$(-;P)gf;Dz^yup&p$+wv2}8o~7VI21SDi{j{JpxZ9p zQ8A2qI0AAEaOvbSPFo{w)QiQtQ#?e;UyFZ0< zVN5evWW1>6-5q5)h)q6%9i-&Sm`;pJ$8h=7L@7KkLlv>lTI7Gx@P|8bs`?y0X7DKN zA9=5}mjAV#fbQRhu`1mLpVo(+@{TT3H4F|Zt zoV<@nsJ`g9NhiQH9#Y3dIIt=tBLXu|QS5dIU?AJBO@?)}0+c}4@6y~mE*03+kKWlk zz!sUO7ni8J4hXE?*6Bq-c%0-jX-=NcJivh&1fm4Rn=``z(}VMFnu?H8&mhb0?-B2N zBdmk8cj2!vN?acCdFYTHr6;LprGAI<9zYWDEqZ`W^mqC@%V%dqD_PsbAu#fGyL9%v zpe!V3()_(->|6gl=s}@aslOj8U+cp>rs&==?`r*TC_kQ7h!jaHZznN`$@Ap35EQYnT$>Oo%kC!!ElSI#{boQ;YI7|?(mQbSxZN){OvUcao zQrLQ=U-QrkQt(>_Y=z4m%{L8!T(mQi-SpJ5Y-)=9^=U|*Jk@WyZD+{!F+|q|9=Mks zkTGrdT5Ni;bY}E)k=9Wr1kbP8G$=(dHm^DeW<9*>SRCcmXk|^uD@tWX1P^IZ;=HHd z?yxJR&|F0-Z|$kdP008u!QHwt3To2~89btA>Gh>|fYxzBEloK#9nC5QRt`}rcnyF5 zL1n~EqxP3?FW2SDA|kTZ%e8=4%s5!%ZC~}-^9m+jfzpW0kH~%@X0=}qjK!S)fMDk_ zQkeN&JdTF90EMyUT3+SY<8k$HzAd&f5+IZfj~cFrSu9g#`{PNBrA4sW+l+046ea6I z8#P&j4(jjf9~qwRos$IYEQ>iY7!|y7j5Lj(FeDsWNeEgThOxJR7j;e`BEyA(ha>D5 zJ>9OEr=XP^d4(565Hp9>tc70Ejk$HRcC6>wl5gvV3Uxc!dE5)8L=5s7*+^A%QtE)B z>3UwpCa$^A*{jx)_=9wS5nt$RLy_RqsMp&kg?x!7XELY!$ zO-9-mR-xP=miVYy9Z?=$o9~SwU_Jj)p6v*slFH`UPmYEzAwlKDL+@FBX)=_V8mK*B z8DYnKgk@c0CW=smOPE1z1ziL|K=a>z*1elQduzH0PB)J&W*@Ti>@vjqcDuZqA0CEZ zM1VU?)P5_*RQ#K>kC?!cs#nh|)D&H9ocoLU>Q0S@d<)!l7z0E|=fyghMmW>yGy1Q? z&hJI_PGZH(+V?e1A)jVmXB=8Rz}PUFl?&QRdv&hT1aISb1qQOYP6owgd|W*sBusQ* zFkw7$^^=N@`N&FcuEDQK`N2ME>j8^yV1@|6)8(IfE(`N9CvP1=N;gpj={Odk5iQ+* zqw;{x)~OwF9IKxDKcs2^qBjc{uUNa`GtdZvyssHRq>UhVMaJ-RoTy8#?^2#qWHU5I zpu(2fkaHFK)gI0lTkrwnF)+Z4!z1sShBpf9*-#}?*|h84irEQ#SHP$o&rIPo=W%}B zF+<$XpmCxh4U0kQ8Y=+(t?g16u?5{dPft|?tEY=q-2z{On7N|mIUcKU5OVIYBx>J7 zF#R`)XXTN@Q7K1a4D!5lQgWwjpMW9?hs?q-i!D&8}Ec8}PCgpa0Y&DHZ=vh!O|gF-t`ooOehZ~QpC z=5NJypMHJ>Rfj>0X{DQ`;#grfNKAQM+g~nIhZ(9xVL!X=Ie940HZbHLqx^1(1V;Yt z$K)bOneRy5Yf+wS*!LwP1;D-N&67z&Ud46&YVXX3-p5Sp6DU41I;XeU^nwW4ba9Emri``J>iQpxEBV4m<^-pWKzP_F* zrCw@8+F)~Ye%SiP-3|r4hOT2>%CsyA&;{dP?g@t9bZR?aS8fac zlfjiTqIi$EfgLMxCL(ScYX@=}p}~!e>WV`qNgmVhbR=S|MQFl!aV7#0qsV=RRzGO#iAmD?{Sn3KOsO=PR8P#);&+psl_iujgK(5%dB|1cDgrq`I; zhG=9;pTV?bU&D5HjL}Ri)^Btp+(^utp|m7lQ$E~guTfN`&J<-v7LFmvRG><->y{VV zz%N&4E-c@sZ|ts6r!HhvTTdR9ORx3pRL(UPRKB4{&qA+%5ey2`jLk>|RN$G4ZO46a z=0*N+FvDe1r_+qBUY}{_u8}1y-L`7PzUm(8f~Vq*&ggNbQc>=?pmU)79!bQ9-?>4USLo z#T6wrM=z^I6KZWyH_>978nPmmM=}UArA`k63zk!z`FSAiT=8jbWYvv^opb7@Ynu7r zD~2Y*mp@GFXT6cJO_oX9uMFS}z|JRgitnKBRq92swRj6L>p6g5%Sx=w!R9 zsu2g0fj452p7sJkB!|!PpR2IN6}><(kKq18A{di;vL8J8j$E?>V5Ys6y(=v%PJ9~< zHGE)2tpv=`T!t1rhKf**Rp+6!0WkAfO zj0h6|hRS_1&82T{p~&LXuJQXZYoDZ1lNWLLhJfu+yiQo_MR!c0){C0bh=ZgjsKvjf zoBk+Ti3wU0dsSZal2-QC%4*lfhWzoKP!3Yopl~+_R=_pIUu`@gf7ch*#=8Bm>lq+j zH&04Dt<$cq&^Kv^SEi{yIo|1}7!t{t27eULo~5uG$G>#*FIopm*>7WYUnxPU!K5V^ z=xql+R>;^Ah{{E)LTH&`i0Tk?Q)0%lFRZqRJz#dnE?`sExoX6Y7h_$Fq#YL+lHL^4 z;m%>ZNxdA4-4()pgw{4(wuquKY~_R1@q;-(w6z3LC77cb{tpnbuZsx6hv`OgSuOyR zc?|VPo(;YcATzpV25!i(K8##SaZM&omsQ^2M}NC8GH`n=kgoVEy!A{OD4{zlytQFJM) z^neq3!JraM`E1anGWGSs7-@Aj&MZ2DM)3$M#|YMxa2J-j>wvO!1fN&}8JcZ%^)>XJ zB1Gb=@fXZs64XLw>%VUY+s)*$OF7k^9B6B8X(ZoNOxZsPYY%Z$VFxMsNq8>Pu&v^R-Sy;3)9hnfaLk`mA{IDg`o&gP zPw!tnRQCiI@yCC=`tt>e#Ci*O!CUK%BLPIbWgcMF;_pWPS*X7rhe1T%Fa3MRp#HLQ zzhYs^9-Id|n#K(u|NCIO-}7?{rhu!9u!tZUgvk9OcsRZu`2HyTiMSR}$w?GHUea2d4zwIJjN2V^m>L%CTw*d@q#|5LyeZy&e@HLlS0OFQvcDFc>PvHZa)YRItlDGiD= z0wq}_F3XWLPj=MD1Zy2QR(U%*DDx1;oAvn<4{R1TrZHSe_kz~3#AkdzJOZSJfEG>u zfRC~@Bwz#i^iBu$cZ_eH|Fg;&P9zp#b0p8saXEAHp^dPD74H|IV+s>?2lIiSZOY&T z`2mL@O4@uDZ5jarp|)z-cn`UeJtePI1)-W3E7q0&zjS4IS!zC6>Kt^` z3C@A+)2^+p6oQ(Bt%e`2DF|%V)Dlu^YWc-Kr^)k?Ib4)S^fh_yA1Za7MuR4dIT8uh zO(1t%D|Nk$`$^mxTC;_@FV9KBfFP( z*d`v*O++AOv~$d)fJ$S|)IF8w!pyxY4vTUo(Cjo>x7CCbp=%QTR5BE16AWV!S)(Rj z?$p6Sc1VzhTKfxs^??(+2hVnqOYZ_?!>Hvz&B+vA$p`+4WWDw$-?3}LxZReUlb}zH zS-Arp1&Q)j{zfsFZ;s4&Go*VzQqL4I+#x*$dABef|Fz>iudJUw4o!achu8crWa(VI z)^E8`b4rI-fVFjc^kCjj(!qWS&!ZB^=%LVD&TZ~NV~bD^)6Id)TGm5S>O9C*A7wWu z{A@QInRiW$L#xmE_v23s2xBgodzN_cPwGjYhwkbw8=f4pt0D|6llUDHdjccroeQ@X5gk!1 zWBB%WPhI&_dAl7^gq=v8szl^5SjG145;w5`I0D&<5ANl&;^7X^2lqA$OX96T_*@{1ALcnz&H2szo@CUp|!L*iz^GymwZT& z8;7ghdRH%?SPnL~?VXzU+q1Z#xg;ZZaX@*gCWAf3nQ}CqdWg~UMyUh_phO z2g-DVCRD++E~3T9)LA#~-Xx)PNLs|`^S`F`8c_?+sxfs3K>(AlVpKO0b zIOxjb@4YL_?;FcC5XdLCC(iK7oE3BwPw1o#88kw3S@WE@>=GYDVyFBThaboyZFztv zt|OGhuw*U*LTNQFp_WZ6F$HH@fCq>|yj$CWt4dqIlP-|?#xziOuVIP>@Zhb>KwTe0 z@jL2Lg)U4xz*X(!4eo-vi*u2NkbA|bXa=bGK7BK07wj#9_Ji32I6@}eq9)uF>XqNi z(3rE#@iO`H)ATm6s=S`hWDmEu38AWnN_=ya+?g@{?pg3Iak|VVD7aYI@$yiPb~7O7 zqdM?L$fqDzMOXpNJ?2c~M7)c-xbBqeU53Cyz^90g@QqLuvySnNGVLiZDESHgymY+T zkmV&_AH@1ms=!yN{&Sl0aR=qF<2xkn+K$EC3 zMN;D|9b zKXQr{+nT#>ZThoEA_-y}d*->}y!m@a5L&ruwoMR=iF#v4{33bjkjLr<(_qZ}t)fF! z{y0V_?8=@(p*ZToVcKJA#P*nc>dT?n6*Gmrz|V&&1NCqM3X)+Qw5Wj%=D`KEimk)z zEgxpmvMhVkKlA}z#OJ!Tmvl56G%EX?e(ba}DT4AjC7PINC?S;W_lg-_bo zeN1lqiJtqJ+s>XdG0(cr4EdcIuRC^@4K4FQ_L{jj-2?^QGy)vk1)WUu23b#D_(IkY zB;TiM|lQQIqu1q}vPj06To_P;S>4I5`?4@);WCl6D5%l``;7iin+>_}twkD8fM zK=6iBQc`ky4skOn%jPnp(D}RAXPSX9w<}X_!J%4CWZBd2{{FW0*Uue|`U)=msw^Bx z2}gqwC?}yD%<=s_@V6u7`|ItH1R?=`$vBVJ({xq)FSvxSa4Kpk5*QvG?=^*_GbP%P>}zKX*R3=P z?9N$ow9I2P_!a4xjil2$klSkBz5OJv9Oa5q0O+yspqNR%*Q)EN)vKwPeNHdgsVr%@ z(ehy=$rrKgwZPLwnkRs z_2$ziP7qYQVX}(Vz_Q`-uuY+nb@i2O&A>#g1B#SS%2v5t@!%m91T+i0>n^b2a?i!*Wu}Zc| zt1Ugo*2K1VZkajPrh~pBjYbz6)8%EtSQnGWa(^r}-`V;f6R9=C4~!}qKn<_kgqb~7 ziEZ7~Hw6XcbI-Vrt9s^{0V19tDsG^(2VS9-=y2ra z8FjNaX-BD?2VsPzAy>UUJOm>*nGpD`HRs5Sw4|I1-HNp^mYvNmk6WI>q^*Ug zQqXGD{6|rGiI1S_9I^SSB0iME5zpwq9L-ouSA`KCPAFs%?)14K`H?pyo`rN}coB9( z`+9ktraDEFLhc@HF&#h6fDgG;Ij3>KejJ+@@PgQ&gT$kg-^q=_lc#}(BB6=A zX#Xs{=0XTvG6JVi1l>p@(kIQAt=`eXh~L9uiLo~&{`&kMg?$5bCfm|>Jn_VKGO=yj zwr$(Cor!H56WjJg6Jug$l0WC3doXj({r=8+^S-@S*VEm5*RGAHs&*raYpg#mq%F*I zw_b(*#P$IMo1r}5cu5TUEnU46S@fcOhYZrt zvFuBKfX9x)xChcRR=5qEkiV8!v`5TG@FUg*hv|zx*(e`y7bRpt?S_0*#cu`)RAToq*d#X3 zhrw(|U$0dw=Jb6fY}8M}fWY!d-koQCyl{GOF`!?Q-k^mS>AZ^Ys@$ zoOd(&XHEyWzuQzRn|J>khkqnlNTIOiaRdecr~v~2!26f$|C4J$>NnZnO>mT=h65rC z61O;32CE%HPGOKeSxT~#cs-+)A2YAmBAR4oydC{_Xq&62Ww~XoGtpIFA7xzj%p(CG zULVC`5%o`Zvcoq$ua4C0Pm{&iS za0Y!_;{tII*Qq_0(}z^uoRo^WO&}39{af;*3~?lRxJ9#~g?-o-=gUk1dx>4hW^v9l zq<)_PEf`8f=;wk>iiQ$^Ov3uH0>p_v4C@vW(!UgnK9}6N@!(IjMn}5MeiK(+=x9hgr`bUj0S%)>4%cpwfYj*t9L~ z>L$*8B6FDDN}N+d%=)ybiMfZ6w5ih5s2&4fa5 ztz#dkNp4yToT8|!ND%u(4!LWL*<47fw!XGf9BRz#g=;3r=T12!T9FO)Pl6_yrx?^G zDIBo6s-<@1B%_@9r4Fm6+Li7k3e{?r2Eo%)7$BbX1|ru^(am*0SIFX#Bbgbn6Cg`B zHtiVzW0PG|%N&`Mq&*r0JFXGUw#!5%8OWfJ4<^@aK925wUbLdt666?@6>^-ya6&HW z8+^+eC4U*;8ZAAVzfM$YmA3f`%_Vyyw7e8uBfSVs*(aqw=OFe*vFpamEv%~X47|Mh zaxVL0Vy{v?yIeK|(vx4QTd8)#!4@ZnpIsI?0@tI1*A0ayC<2zI#{`z<`2o4*_yWW8 z`vv>Dtt+B6+Y3;qqbnv*2uybK{w0OZ0j%elEjE9Mi`T1`jnB7h<}Hno&7OPM^T!9S zmh%h1m#qsC+|8SZ=>x8-I|G}y-Af2dw)Hz_5UJu7h5Jo^6X{Q2Q`?}9S(-1XKYQ9e z*i%?Pq5uHoa{vGk{;w9RV5?_uA*JW~d!udCfO17zxaBcHpkJAg8U`l7=S5K+AqGqi zAw>|x8zW@ql%$QzSsXD25@2pW;r3rvex6n?Uu3`;nQK@H&m?~W7Y-!#6^9fw22vZ)2oLV~=GF0ncO4uS zEzFQSwa9N|OXwv6uL(UaG;Y4H)|BV#w#no%!O+MvK~`5()vqm6QcNNj{ER1Asy>?&M^vqA3AwJy#`2N@xWZ`30XV4_mN17Se>EA<#geCy+ZM z^magAm=#^}>LG`XG4+#mLbLXT06Y{7xT(MK=ZcGN?Z8ji3R^RyHxZzeeudy!j`HV> z`W$Nl1v1qil6<mBCdZOr%QE44dU7j=l9$#rp}`VFyQyvU)OW3*zYYXTp%}KP5qC zQf*-+tC4+R&${Y!0Il#-zS5bkD;Pt|J3^=FN2`k}#E-vp16u5P1fL6*%y_;k6?UxD zCRoMOC9F<80#;8gfepR^q{0^a^r$AjbHmM8e+H&o7-8Vz2WQ~Z>`GkEZx zml~YDage)0+cd~(R9iMvaEoHWv(1W=A71LNH4-tz=%jNWT!1uyJ#CqiMCM{+#a|5OHMPobbqwv|&5sX;dZY~#yP zc0mlN(#M1-odx11a>^SbjqroM{&UX^M+;q?^!JFvk=_25EMIl%&1PFz9}1e;J2H6| zCx`jAUhuA*bIBV+XA#^U%L>K4<}1Z^xNleDwh7P}!Ivcf;+)K!uTqhyoPAXKSIz9k?ym z7w#&AEKVfiV#&h_vkCfGGtexz^)ZnDG@!W;d)E-^No8UF~{RsI0w=R{W z&?}x(zV3>0rAA?K2M>rFC8O&6TeNnv7aDg}?++ku zz>j#0QTKI(UeOaXg&Z!9jpyc@wVClALj_0bYC9yLp5X&Y&Nj!(GmD)TET~Y~C>OLQ zR#UpojlH8=47P$n`5mbY;J0qdn7xs{5|kI+cCLa!h(OZ4CSiRov^AyeeTQp_qPEbK z80&Py5$scV_7?^hEs)uW7jAcUKbFPvP#$%=Dvm?98@#C}T?f46x>L3w$k|D8f^PH( zE1K`ej$6Kb9zCuGcSXp`b7U`oIo>U=Nj|2NepNttmrzU#vUd3lcl68}_cEY?_v2*LIFm^Rq; zxgjH$)hL<<@&U?1jY~bj$z0$jW%kPjeMere4(Lmi2xS(eP1&V^VP%3A6H*_KtM_Y| zt@k#FlC8fs@`VknkY1RDmV~Ko@9`owgXK;H4y#lWa~>~f1ZlU-fV7W?kKm?o5~LCM z=qnO2++^A;1az38Bw=^=!8OIoC6M117IX)n6_2jZgrjLIh6oU zAd^F&iF0OajJ(S`c0nkeW61|#H&C1jE98Sp5=AiuL9*{&8+l z-;rGLQT2p&eV98Xwx~No37k|T0_Wgc^;?c%loXcF^q6RpJ$hcu=~1q1PQ+_d($3-@ z3jyl+J2+iSyT>kW4TT7>_mVhT!wEE;M^;Rg)sKa9j?foVp|Ip-fCT^$BP7J#=%P( zEw2=z+4QGWeHNGO$eYv`*sfnBMn~C>w-RK+Rqig!rl<;HR<2@;&XHURHv~&fQ=Qi7 z-s^D~LTHXOeCfPbL(#Lj`+my<{^h%$HDj-nkUm)z|3e$J-V8{b9VMXI4Yy}kI4+zk z=7#jbGSWwgiAuX-?i>ZRF^zAAc#MS%`y*y*!{z6F94o%`kX-2(SE zMyRH6jt3z$Gn3^q{mNd5>TR>Vg-^I4=ZDTY2tnD7D%fIU&h#L-Y|G##{=?7HVx`IVIX;Q=SUE1xr(HC|nUd&^>K&jLFFvQ!YEiw?!dy#R~VM zOmRERcFm-St#QR|f$-Ef*2*}X$r?v#JQhCb@AEMkg5zyiH0?y~@rocqZiSY@z9rS%)qV2bzsHV^$K{a4G3GNbm(}S=(8iYc=|0U7^F4hJ(6@nleSdz>oga{9 z$GOT~OcoATGlcUkHF#7z?gWw!=~RvqV&$&mTO-upRGfip`vIwX%19JyPnS@VoY%;+ z;Xe-v#Y0F~F+8sgtAx~7GLR?{q{HFDxS#3`ebqK8Wh2akxxKaU7Wr|+<00viJlhpc zK0agJu6&)%#P=rt+S_Y|$-^wM5Iq|$-Q)w>dq*bY0w}hSOoXZbx|dkJzA+YqKZbF@ z*>R;{bb1zE2!WmslZG&4*jiYDmFvqWaj8-Gz|7T1vzVQsoj32Aggz>%REj)`K1vzR zlkbc+v%Q>ya~iu7%3t3py+yR&@%-6g$^J=@0I1F zRNSLk`XG;0e$I-JUP&VY{T!D#*I8;J8^4^bPa!?c{Y0En!Za&xOgc@X{<=)3=AqKd zXj)mFXm^4*;hEK77~KT(=BDN3)A`-om$!;-kE<^1sav7aS;4(=a#j?&8BOYc}ELjD$y`{B8rrOPPR`?H-E@p6&*mX6|#Ha>>P^O?W~KTZQc0wnS= z`9up>n!nzNX@BI$fQwPk=n*;Wg!o(<^+Fcc;Vcl-;SK&hdFfM4;?UIrA}o7Q*G&8m zi=3pYG1FbfmT2LOoc5F))zPl1M>O4Q@Dhd`PT)Ba-F-q@3BP>W>PMmn7u*0Lk=)wW zL(+!noGm%kg-8)SCx`%LR^pNXrL7RD`BmXj9Z{F|kwk5b`VY*# zg|>j2V41dTK0F{0hXEG&k=dV))#qqEk#G}qXtYVNBP_YOt<$=aG<)*NM@FgIPeiuL z3@-K!E}G<|I<6k^ju7o^D;rvscMdMD$C0~ybsAbW`0}|NwWKvSJKOibHD!EQ<~G}9 zdMn$3>%(Juo@08>M7F8zd$j7s=`XhT(+bfamP=H<+reyoFYK5mo|p_D(hDD)WP2m6 zF2^n<9zenl7E>U2!Y#dm)CcNri5iK51Vu^(N4%0hpO`Yn(3n*fyG<}Xy4z2{z$Qq% z2foImroSL@TU|nm4*^LUL~vWxlgDMUNHF(e>DKbSkUOgNQ&8^66KG3pjTHLC1a!_9 zy#&bt2EBV$VuvHixQW79V8UH@XX7#-ffW-ABZ-FuHIctDB zcT7F0pSay-*#eBekusmtFC{NNnCgQnz#n@B@u?bPM#^LRnyxDP_SFxqjz$}+YJFJ!(J{pjm)cyAyJeBTSr3UcengUcp>1qT+Lo_OfMXEUdRR)Nm@(Jq1XAp;>h;6C0Tz3lTF5 z8 zFG?El@a)XEY`QIaRX){yK6L33{NUvRO^I^V|XReWI|CN5mV8gM*rhE926Rz)$gbt4B(og)jbD$X|njB~@!mMlkvS_3zh z3s0d7q0HWUChx(VyhF1~>2M;V+@clURbZ=1sWByIfiVMOD#eWG5`2arD?MjVEtd-z z0jDHxd~g` zfQZ9cPmq+)DM{#@?I8;B4xV63k>M#l;OTleO}ucZed3ys>2!w|dnjw`R7fh>v7Il7 zd(aAW0f%fE3mW0@`;!)yqg!BP$r`zudI$0d8UnEvg(GYqjlZ#TbR%MFsB*ooTv>5- zl6plvpmMl;RL?C_4lb)r-JE4$k09o3>Xx*0NmaCvC>=;)O&MEZ2TnW-6a*{k?cUYt zf*47$>S3cpXx<+bJuN_9VB(9UY=#U`u@pS51?s~}<0oegn%8X~$Dbg%aAGSJNETX_ zps@JJb}nx}u?M>~PWQEgn(L#DQQMv!4IQCC}a1CpRPJHjy;S_qe{YzP!J&ur6&lDB$%)X27&F`dcm z@%ko3PSr~`5_QLP4+cU?zpgJk0<~+MwPr0|!!!un6g+xW_u-hdUY7-N;J&8YrBHdA zj~0O4FL$&2SfSMpfSla|`R=T=MJ>M-P|*E#x5@*1pLrRQF%@!I|I0kL(YHM;D4N+A zWNL3u-QgI<;$ABJ@th%!?n$-1v7YVY@o}7NOKVy)h$T}s7h~OD zD&&=&Tb4SYVYw6g4(vW;i>J$Y@|y}eNV$hgy02nmI9l)%MvJ9qw(@^!Plncx8~cu~ ze}5`?ij;WzJ(y%Y;+lpt)!?g)R)j;}-7H@@@12SzS9B?dZc&;et8L}vR!?O}?)cT_ z;$Vnn&G>$QL>InT*QctkfTKh~V})fcUz)c0Fvwe)Ccb=sdq`u{QeV#-Lz!fK8D;*( z!|c9t`iH^wk*Ab3Lo%T|!$!3Pr9rqZVQWK&AI}(|ZF8_xW0r5pYL5ty6=OoRz=#w@ ziEVj@*iHKQ7F>|64;#nI>SPPDMf0qTh)u>XIwYd?;z2Ral+g!kMYFQz>nd-)*5tHUnu!k`1RaPw~>lB{AMG+Ski3Gn0CC4~3%}$lUcd!LC?_WJ$ zfN0#PP_2n0#|+qg$PN5vl9WLB>4d{xZDSWaezJ@llc;LML5GUx~nlrpARP$J#hkJq!ejcNei<5o4SzS?v^q(*uTShPNWJ18 zv^H}r6`ZGUm5qw|2OzPO+jg(#F6!)Op4dCG2VLfF@!Reysuie}-IFA8zW?fPfT!?i zVDX;t{0j&G0LkB1&J~R;jjW6u?cIp}LwEgo`d`XR;ap};7Ktmy`9vL;mV!Pc2MCc_ zc7HysO$-kt$j~~h4}GWDTAA{Qea?yKRfQe_9|I=)M}Fiz7dfnnqt{6L7oN%1gRh<5 zZRHztPRA=&YmMp7TRx&(sJRR(9|A_<`4TN#M3lwZOai;50 zW|Ez$Ju5FZc6_xg>@;BkDwEm@4<;G{sgfVs1jW=Y7OT9cYBo^Wpx>S2I&@kxZ-(OX zGvDIau+D7`z>9rRz*@4+#8-FZBvI8vles5srf)x*0!-9*VBgP9W`Yb zFJuUa^!@yUzvQHn#qnt-{@co)biMWSn)27e;VT_QL$DoYiOS%;MaoThN&L)XH7SkV zCs8ug4hPY2Z6{|gio*xR;sOSyHlTrEOxRCvLx;#8uDO&QZmBFQ*lQORCBn<9oQ=&D1&eB>4@@!M^K{ayn%?1LnaqC^D?uQ zx0#a-v#L*=n z>0VhlE>y@M`3M5;3wQy?+`;93D$__}NQfH08k;dD?b#1UR!p8KZM1gVA0Ffe%|4;! zhoz@6nCy=eUcX*Gfo);6W6%$m$vW=Fny_x?FMDQyUrPtli^o!&UZx#^WSKk?*5j_( zlM{Z|Qj2HUP47jW0TsBrFjW-<6hi(Sjo=u}4$&XDyYJh+{!NaR>yUV!z))8GYz?K) z`(Sfb7#?htJlUy&=qp7RGPJNbtefcvc|oza6J0@zWRBj0FU$3AtTmP?sp2HIlrE-0 z1YrjS2w$N_WPcc>g9+pwwOm^?dc%dlcEN{@sv>1ZSAK}do&QFEd}WB?G`H3{)n~C3 zAFp8g!U^TXP9adOOG+F9KMGf*6I&^37;m!cFhrwU&-g{0`AsNKTsiw2Q$+%et^xjr z1cUDr$St}=z2juFrVvWH*%(ICFhxH~jg+WFoL}bHD#_0k@?HmjlItJ;ULj77W|sft z*8hI_PdPDuzueHs!N}fB&(h4@$o?O^yaztva(`=!t#37Cja%4 zijp0X?xThC65!7(!Z(vxiN=D96}SeZOi@mXCE)dScaewEG~!c(+o@(%6vf(_T)F@a zwd2jG-Mj2abDPR~d~o*yw)MyUKtXGnO0BF1?+$f|*Q>bOye-rbD<)MFtyFca;BRNk zTED?FQw59VXw^c!xCMVlA6NdYIH0Fc-T-+}7hi}_>Kc*U=U0YxnCAkOk+0=bX zNXH>ck`rOvj_v@6N4}NQrcO1Pg+Q8(J~UjgfT71e(kH;!tC+mk`=;6@27J*@jnaqkNqVCY^)s|^{gEoes5-# z%4#Y|B1o^05QGM$rXV6f1peTac8uv_(?p22_>(OF@u3)2#*n6mM>y>sa8WB0ooQYS zVJr7S_N)DzyB~IU>39fe+@=(yzf)n@^37z}!a8(yDmk4js_1+z+kAc8QvtxVV~<7{ z56@NH!AOKqgia$go@LJT+l}tTPl5p%Wmb(wUdN{`Z!Ijws+YqN(A0-5=&tKHQUzT* zmOud>yGuZSm2`V#Ub+OHgYfiw>`TY0pHePe4?QwelIFd!Pjo}Lmcxg`lr361h=yz^ zP^wDh)U1jBk$muBqyrtA_y?hP&eaG|ArjHr8ol+FdnKoLZhxby;1SH6=NcqZQ|4DC zgoxsGl=fs%MVVIn)3UgdOh*`(+Hz_Al|&1u_GAf0Nf<1>CCIQMvXqf3<1iHG2_qE} zDtt`UDurkzRqVc71dCWCRr}Z3@cxqQ^@%Q^y*0`;?2B>E?ZTrYc4NuSgUL!Pr_6pB ztUAkL4M%%#ESBwkH0wCk7!6Q!Y8Gu>=|v~uL{!VW^^WeV{kyTLr98GTT6sw-tm!Jl zRvClBVH~z3g)`fRACL<>Jy&JVP@wS39a~uCTR4K5!<;P%ZpRsUbNbIn^cb6UN}?`1 z-He`uWTc{JUM%C5%Miy(c->yH)&s2Q3O>;r7+hQMElw?HGb1d@0QB(B^{~@{_DIdu_FEmhLoxjvhW=G0JH-p( z*{-V_NV=AS_Di=tm}5O}AMzk8sh)l0)pq2bDT_xvLhG$Lf5+9)wkCZIRs566k04^3h!Ant-Lw{-Rh)rmwO5IkL?f%87m(y2xx>dPNbp_0A#}YEQlL2rcWDBP z(_h5ERdUA;3$-Mh&Wij1bPvL?Xz9Ul3mu(wwP-2dlEng4XO67n40=H z0fE~^vmwyrQWJXWn$L?*cR^{KqQ?EnNRnmhAIm>d9iS3?8)c>`F02NFsr9vP`LRn>CS9E&{@*fxOYo z+F9!s;wqy~>xP*Ho5<=E`x>mmIyDH}De9i{of+y{hhc@z9uLzYyP8M{-b#n%F9|6g z&PpnCL=Hl3p5bNfp^X@61lJ!RdQ*`Jj4L4NmP}!5yG0X&OBfN1@DYUdokLF|1v&fW z3GoHyF~i*OF`@*8LX!s3BKv#kD!2kL1=fYLF%cprx2otYxg(+x0+;zZCj}SKZvvOg z?fAa|W2jiHn@$_nQ(_vhR#nZ40U_3GT-+%jaq`N^%o?bz;GW4Xj^`_;R)fEc*$ zP-bnj=|r+KYAySnjU1cRavpqng(BgiTAFZ0!wN?2 z;tqzFw5a(FXs#PZ?JPOtQ~Wf4R3|}$X#Nkwaz=WHPmH7RWs9Lo%K7jo)ynytx$IHG z;0qT0Wfs$+x638)6m?>Ri~0ev8<#(`u!rOX=K5{Y2U?M zKALNP4heJPnHW=2Rts@h#i}1BZhr~2tRE#;JJ{X$jDtlSx|=bccg}LJyjk|Vpwj%b z)aCPp-i^OrCIoVlSAyUQuz-QFKMu-}%ycGsDrhfVm$XVno!{W>1ACt=AB?t>qMp)#e=Bgy@_UdkWLdC&MpiXst`r>_3!<$YeVVv_= z!npx~+Zh|ENpg61-D?$Ih^j;iX|#Z}!jgmssE8Rqx!nLtKi72QOsa9|7aJFhbP>mH3typto(~i!B>Mv z2?nGTZc^HQ2^%%_C*PyCST;^_TK@w^!3=bHOPdb)hJgk)Gj~uG>e_sybU3sD zI~b{J#LlCqh94q@Noltvl>07cZi67w_F1csa@Y2BpzS0e!~)Gmn@%zi8H3jqBk(qY zRwa^iY-#(;4c%(g&32{hb_^-FEM6ls*FdNjz4Y{uRTNe{dV8q~R)Ng}NTLKnYxMYH zv_~FRdj&}p=7zvT#(Bfwa92)7a1;!sl6f>mb&>- zhW>ck*~Un)E)7pIQO_c%7~Kx<*Tc6RQ~?p^qV)`ECq=5lgVMf~khU8qR9; zv~!TNi0OThGik$oUJ@7j>d15!%(r=jBrWhaosVZx)A5ptT$PkgVo&Z*zFD|Harq@h z`5-SwFW?i)$av;AV6M~CUUrOK{_M&NK7IEt-lxy$g8%9@wIYkAR5W~S4~wyl^T`s7nMTz zb>gZOa;qVn$oh|ul|yeA1d=@SA71Wof40sMGXeSs?-QuocL!&J|1r*&(sMK=`g1e6 zDETvKL_Q?0W{oz>b|7WJGTGg}S%SKcvP}4lg7N-gimx(b0KjYLbsQ1Zg|E|xA91@w z=r_J9=NBbg*WFKkVRNwGUw{5Fv}6OIty>(5g@x*dt3V33PdyL?&YwFKu=G`8r9QCN zp)koy%=S16@#EZuCX!d;79#l-BgBSQ`Ie+mEerzKV9y#OLI=wrWO?NNwYUe8tx9$X zy%38;YEMN38?K8SaYZ!$ePL*VD6BQSy*T3HaWfo?y3qKy&InN4k2RvII1wi54#Fi1 z8c}imK4zwEuA-{PP?c2z3or=fy{xQ~V*+|K%+C4T_+2K_YG;-jW^Rc$?exc?)@5Dm z%v|tUp`wMiHEGSL;b&z{LvhS2_gOP6^mS>`(QL`=%rn#X0qzz+X9*oKCTMhJDX?+8 zRQzV(hY}Ool`{R85+}F>9LB8uJGEkYS?elhbl1;G97iY!MKOk!I%&&ouHvdM*(4xu zycXzZK?KpCIJRoURE2_6IDTNswyk5~+9BH#Pbz3+^Wi?k_8|=MFH-8I6(rXBk*r_Kwg=5cZdF9@ zIo70YpO_lDL9Jy(c-HqGm|S=R{j4TuDe~Zc?`tee?;ZJ1>w>?}(|>n?|4mK)=*j=P zE~u!bFvp9;wU!*5e1V?_B)wNYkL342rOq4MeJI(3UeWQ;V3krAODtK}(^bfMxD~+D z-L)I}O-fwjL%9{s-NwYa!&Ixw`S%!|%}!v|K4}cPekLNv8~hPk`|+t3Glyd1PAc4p zaDCA#agj2o;FdTZ(Og_I7&C0(X>?*iCR&~>@oQQ4PI_R-n~D4F(b!cNWR+Q`;cRke z$aP2aCh&YHy;XedJ~aGJt=vG7oRw%iiKlRmBrt1${FW*`$sw3^!(nHjdC+@cnFe2I zx+B_g%&&6?mAhaV*}-DLxy~-mt?c5~1;*aV6@{0K-*v_N8lvChZwy~GC@-5V7sN7iVg9jJzun0C7P1+>oRCkwtBRN&v<9j zQMp~K7;Tz1iB@M+1D~3?+O!&31aDmx9mT#l>+HLi-(_ODBG(f3380%h`LK0hC|+b; zELbe5U^Jl(zBwsFKVc5RZzNB6>A<=8Twj>tr5uVucCo5Hkj|LTP7;j`-%)vjK1)hN z-=~g@J5sfMeCkI&Wg9sBWxC*+jPrHtS43Dl7rrd^5sh1hL zYQiHytQZrmcHiYoFCi(;HXDwc?gz>_9H+GHhADsWg*!`}&PO@XteZ0_EELL+3 zxm08^kang0fUL0}xA1czi3$p^c)!^6hFdp^$<`hD*zxalf4GnXC*ibKlfa4Lx>J9B zaeo7_4Ku@~Qe|GHW>>g-FAb*>uw3{M) z)ccVF1G1i=;b0|!C=w`XR47f5-UlgeKN8ijc3L8?Jp7G#&A1SX09`*Fc z?G=1WG`c0X#%*ZS$Ds|q{Uxl!j7~poHq+dxP7M-l=;d}Epg}5Os6KV3-j>D2nkWco zw!7oyL7aOjwEJyO;GfHNeOSI#_uV>7zq1B3|18({#kco?y`#O2rJ|dy5z*g%|6b5Z zf3XM3qrP-KQnHV^RnW{NIk;%7^mNo}XkrHlztacmv%k>?Kw)rE!BektgU?w?A#giS z@h+QQ_v;Qa=N{+JF;klWmRo85_+VcQ+U{}5j57>vz@BPElUMuVtc#NdI^=i{b-U=d01KYpO9h&MQDmEre~DUicE?V% zJ?!YN`~$mBy@{rMC-v)h_swAVho<(f4IMv3@Yl#-j#T5&WXmO3W_03u6^3$mhTu?f zpX@OF$+L=Jw()Cfa2Ty%Pi5SKkBXNrMVglz@=(GSO%`W2>{MemsZ=4(SvrJ5xFy1M z`;Ah?W>3r}&}K$Ur>dOJK^giz9_d5_Fdmys0a-GvWaTVJu!*bE%ehfLPpTNav&0Ls zFx3aml_|`q40h-l2lI+nL&sp%9o9LzNqYOj-e8r-ZOJsznfDGYG^*6IdWDDZVtb4} z9|2Zan+?#tW5^KjeE_cmJ$N^;)Lu(TWO?xI{AOZy={O76$o0v$i!Vs~tMw0;tmCP& z40eDbzlBh5*E3pds}JRc&K2gTF(Bd303;5q-=NP9u@q1Y+a0MQr0&rr>GaBm!m5Ge z#(09RB}n6;dt5;veJguKyHbUnYwB%Sp-D{2h?}&%M~b)oKGG{UY4?V7e2M!xFg87B z|5F@3JKMZMw}D=SE5Rw`q9B{F0jSK_QTETuica#Xh52p(w%PO6n#GdH759G)F@)34yGJ@RO zVFZP!CS)oKS!3aE;Z1Jwpnb1bC^r=@*-38XRYpn+Z|U5nuaXKeLVDJM3w5@&BeW0q z>(D)-7I7lss6jb?FTw~PY|Tah`pB`Xg)7uqgtApt9dfulfjvG=^YhM>3PD*Q1>gcN z&XhJ-(&tc40l2#HptB73 zAxaeQTCmBmfjYKImcC*vb(-oye*?;sdLuvAtg}@+6O9%} zAy%5-H68732zO>{Gu8{v59FjL%P@f02Ngage{)?t0g~{pKk&Aea8Yq?i}N@XdbTFC z6w0Ipmu_DPB}9a3=}{VGjH)yTFJSI1qLD2bNq(zyQN8Cl?{MekFlemV23^CE60Y5l z6nd_spmkFA&y}?R3f5W}n7b>*wsG{Nxq3Sm?rx-Ld^61^Pq*pQF5b2g|6WKNSang~ zja8bMW0K&fyD)-S(O8$TDs91$Po>q)9j9C_HN!wO0xX;f80Y|GVB%|uyU(&Jk;8A1 zMbFzxCf~rz0V}k4gifiarc^XGd)q1N9DRC~<}TeT6Df`>RGj$TpqC8YOVdvL=Il6@ zDF$9$h3Nz*yhUb?GY0}kA3i4ZUiEUR)JNZx+oQry7Nw!&l)L3LTUvSgEf9dbfts-+qI_2}pOEOR>=wt=zi zkTrs5^=+(pe|ZB<>cKsIP3doFb$R$qt9xLg_nv#2gC8)S^7Y5d$c@Ko4T4L_uYv9C zBviDEDRyiI5GhYtha5|X9E*oi(R42@#)nHX261Bw(Rh;A$WJD1WF-KBkbwX9HsJ57 z{eHj!obmnk{pY6OKZ*Uzrr^I_{M%9BNA~{zPqDvk5&jdxd(QaZu6}P%|2ZK3`~CZk zo!`%_{@54%SFvCB1^+{`z%TpnVt=qWzqiI;L4M6w{}+hl`{3!%d;bUI=VAY^NWW$= z_zTIG^H-#Q$!YK_+;8H46v}S_yuTm6)yDjLef;@g{|)E;Rr=R(-aq6E{6P5sDgB?f z`&)4DuV}x98vcdWB=kSfehxhR74TONjK2UcH2((prvt{n`eXbG`YTQT7if;ozk&X{ zLi{H6N4fvT?f!oJR_=6qe?$3iKl*<(q2HL^zl3%FDf}~c`wP;qyzd`a1%4U-Kct^o z;9pDWSI+Y<;79#`yx)Hm<9$)&mnG|8F@IhC{tHvU?B6l}XiEPd;9nPR{sP{%{&(P? zmvMf5&|hcxf8l}K{U3OLJng@0%&!x!zd$D){x|5qWBoeG_zR2J=^t1>kK+D0<@ojO ye;pM51wQBU{{jE^r~P##^cNtF+rI(+G%k{r0DY(40RT|m|9swmfqMRS_WuBrQ2ulP literal 0 HcmV?d00001 diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.md5 new file mode 100644 index 0000000..df3aab3 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.md5 @@ -0,0 +1 @@ +ce2d79bb2fc5cc5bc33b51052b923261 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha1 new file mode 100644 index 0000000..382293a --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha1 @@ -0,0 +1 @@ +04e7aadf33a93f4bff45232b8ab18f18d5d2ad89 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha256 new file mode 100644 index 0000000..cb176e9 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha256 @@ -0,0 +1 @@ +0ab51b13af11c5fdff70c75806a7192f3e1f305111b8fd89b871e4a1c47758e8 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha512 new file mode 100644 index 0000000..4787d8c --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.jar.sha512 @@ -0,0 +1 @@ +ef3ad4a99ec7c5a926893b6baaa624b47458727a2bd04375dee05db45f431230358625366d58a301d03c999c598e5f392c5b3f6523d282212a23b8991bddcc0d \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom new file mode 100644 index 0000000..23236a8 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom @@ -0,0 +1,8 @@ + + + 4.0.0 + maniplib + ManipLib-java + 2025.0.0-beta0.5.5 + diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.md5 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.md5 new file mode 100644 index 0000000..f47af87 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.md5 @@ -0,0 +1 @@ +dbe203c8fbd742daea430570e801cb5d \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha1 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha1 new file mode 100644 index 0000000..1bc2182 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha1 @@ -0,0 +1 @@ +3d4cbcfe7fe128035b01d8ba7bcaf3aa4e71d629 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha256 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha256 new file mode 100644 index 0000000..d51a5fb --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha256 @@ -0,0 +1 @@ +d772dd007e5280b395495358e3a60efde7e761930448ac9757f19df62bdf51e5 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha512 b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha512 new file mode 100644 index 0000000..cbac526 --- /dev/null +++ b/maniplib/repos/maniplib/ManipLib-java/2025.0.0-beta0.5.5/ManipLib-java-2025.0.0-beta0.5.5.pom.sha512 @@ -0,0 +1 @@ +d291ded4f4cb5159a59beab6b57357caaa5b67afd3333eeccc512409e6391ea00a7346527620d33b8223736019b449e9154d5807479d0df7e9f1fc4d8301952d \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml index 5718b8d..8ff007b 100644 --- a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml +++ b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml @@ -3,8 +3,8 @@ maniplib ManipLib-java - 2025.0.0-beta0.5.4 - 2025.0.0-beta0.5.4 + 2025.0.0-beta0.5.5 + 2025.0.0-beta0.5.5 2025.0.0-unreleased test @@ -18,7 +18,8 @@ 2025.0.0-beta0.5.2 2025.0.0-beta0.5.3 2025.0.0-beta0.5.4 + 2025.0.0-beta0.5.5 - 20250301012855 + 20250302150604 diff --git a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.md5 b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.md5 index 127880d..9a8b74f 100644 --- a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.md5 +++ b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.md5 @@ -1 +1 @@ -5fe9207667a44990ba78af0cfb62501d \ No newline at end of file +ee74021674753697e52729e0ff8ab3dc \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha1 b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha1 index d212568..f37657d 100644 --- a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha1 +++ b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha1 @@ -1 +1 @@ -2d60a23979cd8d5f227e93289e82e1dda8b46db0 \ No newline at end of file +f1d672b8a10b523664e890f323467013bc99492a \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha256 b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha256 index 1571459..4b7cbcd 100644 --- a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha256 +++ b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha256 @@ -1 +1 @@ -04ca7b53a2dd90854d4f84c67211cd5cdd35ad3ccd82e6d27b20dafb2604a5c0 \ No newline at end of file +46ddc9a267c34755e76f679d0080b92eef4c81c6e2c2c7801c1dd2873105bdc0 \ No newline at end of file diff --git a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha512 b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha512 index a6a77fc..cb873c3 100644 --- a/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha512 +++ b/maniplib/repos/maniplib/ManipLib-java/maven-metadata.xml.sha512 @@ -1 +1 @@ -0ae243a6c62f6b619c4f499146fc8d6d1c0f3b326d2ee3d542d87afe33ca8d80657bae6853114d718995e37c8e09a69eb73af2639e26cac96a8f695a5260ebb0 \ No newline at end of file +92233c7aeaf62f38eed214bb0e15d4709283b5b97abf9bae80d79c101788f6f91abf08707ebe9909509a75b964aba4a76f41d620f048e603b53a8379f849dbb6 \ No newline at end of file diff --git a/publish.gradle b/publish.gradle index d655a98..3cb183b 100644 --- a/publish.gradle +++ b/publish.gradle @@ -2,7 +2,7 @@ apply plugin: 'maven-publish' ext.licenseFile = files("$rootDir/LICENSE.txt") -def pubVersion = System.getenv("releaseVersion") ?: "2025.0.0-beta0.5.4" +def pubVersion = System.getenv("releaseVersion") ?: "2025.0.0-beta0.5.5" def releasesRepoUrl = "maniplib/repos/" diff --git a/src/main/java/maniplib/ManipArm.java b/src/main/java/maniplib/ManipArm.java index 87c6418..631abff 100644 --- a/src/main/java/maniplib/ManipArm.java +++ b/src/main/java/maniplib/ManipArm.java @@ -1,7 +1,5 @@ package maniplib; -import static edu.wpi.first.units.Units.*; - import edu.wpi.first.math.controller.ArmFeedforward; import edu.wpi.first.math.trajectory.TrapezoidProfile; import edu.wpi.first.units.measure.*; @@ -27,418 +25,464 @@ import maniplib.utils.ManipMath; import maniplib.utils.PIDFConfig; +import static edu.wpi.first.units.Units.*; + public class ManipArm extends SubsystemBase { - // Mutable holders for unit-safe values, persisted to avoid reallocation. - private final MutVoltage appliedVoltage = Volts.mutable(0); - private final MutAngle angle = Rotations.mutable(0); - private final MutAngularVelocity velocity = RPM.mutable(0); - private final MutAngle absEncoderAngle = Rotations.mutable(0); - // Mutable holder for a dimensionless value with no scaling. Should be clamped 0-1. - // Triggers for when reaching max movements. - private Trigger atMin; - private Trigger atMax; - private Trigger goingDown; - private Trigger goingUp; - // Booleans for limit switch functions. - private boolean topLimitBoolean = false; - private boolean bottomLimitBoolean = false; - // Triggers for limit switch functions. - private Trigger topLimit; - private Trigger bottomLimit; - // Various booleans to determine what to enable - private boolean absSetup = false; - private boolean isAdvancedEnabled = false; - private boolean syncAbsEncoderInit = true; - private boolean defaultCommandOverride = false; - // Universal motor init - private ManipMotor motor; - private ArmFeedforward feedforward; - private ManipArmConstants armConstants; - // SysId Routine - private SysIdRoutine sysIdRoutine; - // Simulation class to help simulate what is going on, including gravity. - private SingleJointedArmSim armSim; - private Mechanism2d arm2d; - // Mechanism for simulation, needs overridden for anything more than a basic arm. - private MechanismLigament2d armMech; - - /** - * Subsystem constructor, advanced {@link ManipArm} when config.kEnableAdvanced is set to true. - */ - public ManipArm(ManipMotor motor, ManipArmConstants armConstants) { - - if (absSetup && syncAbsEncoderInit) { - synchronizeAbsoluteEncoder(); + // Mutable holders for unit-safe values, persisted to avoid reallocation. + private final MutVoltage appliedVoltage = Volts.mutable(0); + private final MutAngle angle = Rotations.mutable(0); + private final MutAngularVelocity velocity = RPM.mutable(0); + private final MutAngle absEncoderAngle = Rotations.mutable(0); + // Mutable holder for a dimensionless value with no scaling. Should be clamped 0-1. + // Triggers for when reaching max movements. + private Trigger atMin; + private Trigger atMax; + private Trigger goingDown; + private Trigger goingUp; + // Booleans for limit switch functions. + private boolean topLimitBoolean = false; + private boolean bottomLimitBoolean = false; + // Triggers for limit switch functions. + private Trigger topLimit; + private Trigger bottomLimit; + // Various booleans to determine what to enable + private boolean absSetup = false; + private boolean isAdvancedEnabled = false; + private boolean syncAbsEncoderInit = true; + private boolean defaultCommandOverride = false; + // Universal motor init + private ManipMotor motor; + private ArmFeedforward feedforward; + private ManipArmConstants armConstants; + // SysId Routine + private SysIdRoutine sysIdRoutine; + // Simulation class to help simulate what is going on, including gravity. + private SingleJointedArmSim armSim; + private Mechanism2d arm2d; + // Mechanism for simulation, needs overridden for anything more than a basic arm. + private MechanismLigament2d armMech; + + /** + * Subsystem constructor, advanced {@link ManipArm} when config.kEnableAdvanced is set to true. + */ + public ManipArm(ManipMotor motor, ManipArmConstants armConstants) { + + if (absSetup && syncAbsEncoderInit) { + synchronizeAbsoluteEncoder(); + } + + if (!armConstants.kEnableAdvanced) { + new ManipArm(motor); + } else { + this.motor = motor; + this.armConstants = armConstants; + this.isAdvancedEnabled = true; + + this.motor.configureMotor( + armConstants.kArmStallCurrentLimitAmps, + armConstants.kArmRampRate, + true, + armConstants.kArmInverted + ); + + this.topLimit = new Trigger(() -> topLimitBoolean); + this.bottomLimit = new Trigger(() -> bottomLimitBoolean); + + this.atMin = new Trigger(() -> getAngle().isNear(this.armConstants.kMinAngle, Degrees.of(3))); + this.atMax = new Trigger(() -> getAngle().isNear(this.armConstants.kMaxAngle, Degrees.of(3))); + this.goingDown = new Trigger(() -> motor.getAppliedOutput() < 0); + this.goingUp = new Trigger(() -> motor.getAppliedOutput() > 0); + + this.atMin.and(goingDown).or(topLimit).onTrue(run(this::stopArm)); + this.atMax.and(goingUp).or(topLimit).onTrue(run(this::stopArm)); + + this.topLimit.onTrue(run(() -> + motor.setPosition((ManipMath.Arm.convertAngleToSensorUnits( + armConstants.kArmReduction, + armConstants.kMaxAngle)).in(Rotations)))); + this.bottomLimit.onTrue(run(() -> + motor.setPosition((ManipMath.Arm.convertAngleToSensorUnits( + armConstants.kArmReduction, + armConstants.kMinAngle)).in(Rotations)))); + + this.motor.setGearbox(armConstants.gearbox); + + this.motor.setupRioPID( + new PIDFConfig(armConstants.kArmKp, + armConstants.kArmKi, + armConstants.kArmKd), + armConstants.kArmMaxVelocityRPM, + armConstants.kArmMaxAccelerationRPMperSecond, + 0.01, + true + ); + + + this.feedforward = new ArmFeedforward( + armConstants.kArmkS, + armConstants.kArmkG, + armConstants.kArmKv, + armConstants.kArmKa + ); + + this.sysIdRoutine = new SysIdRoutine( + + new SysIdRoutine.Config(Volts.per(Second).of(1), Volts.of(6), Seconds.of(30)), + new SysIdRoutine.Mechanism( + this::runArmVoltage, + log -> { + // Record a frame for the arm motor. + log.motor("manipArm") + .voltage(appliedVoltage.mut_replace(motor.getAppliedOutput() * + RobotController.getBatteryVoltage(), Volts)) + .angularPosition(angle.mut_replace(motor.getPosition(), Rotations)) + .angularVelocity(velocity.mut_replace(motor.getVelocity(), RPM)); + }, + this)); + + this.armSim = new SingleJointedArmSim( + armConstants.gearbox, + armConstants.kArmReduction, + SingleJointedArmSim.estimateMOI( + armConstants.kArmLength, + armConstants.kArmMass), + armConstants.kArmLength, + armConstants.kMinAngle.in(Radians), + armConstants.kMaxAngle.in(Radians), + true, + armConstants.kArmStartingAngle.in(Radians), + 0.02 / 4096.0, + 0.0 + ); + + // Mechanism 2d for simulation, needs overridden for anything more than a basic arm. + arm2d = new Mechanism2d( + armConstants.kArmLength * 2, + armConstants.kArmLength * 2 + ); + + // Mechanism root for simulation, needs overridden for anything more than a basic arm. + MechanismRoot2d armRoot = arm2d.getRoot("ManipArm Root", + armConstants.kArmLength, + armConstants.kArmLength); + + this.armMech = + armRoot.append( + new MechanismLigament2d( + "defaultManipArm", + armConstants.kArmLength, + armConstants.kArmStartingAngle.in(Degrees), + 6, + new Color8Bit(Color.kOrange) + )); + } } - if (!armConstants.kEnableAdvanced) { - new ManipArm(motor); - } else { - this.motor = motor; - this.armConstants = armConstants; - this.isAdvancedEnabled = true; - - this.motor.configureMotor( - armConstants.kArmStallCurrentLimitAmps, - armConstants.kArmRampRate, - true, - armConstants.kArmInverted); - - this.topLimit = new Trigger(() -> topLimitBoolean); - this.bottomLimit = new Trigger(() -> bottomLimitBoolean); - - this.atMin = new Trigger(() -> getAngle().isNear(this.armConstants.kMinAngle, Degrees.of(3))); - this.atMax = new Trigger(() -> getAngle().isNear(this.armConstants.kMaxAngle, Degrees.of(3))); - this.goingDown = new Trigger(() -> motor.getAppliedOutput() < 0); - this.goingUp = new Trigger(() -> motor.getAppliedOutput() > 0); - - this.atMin.and(goingDown).or(topLimit).onTrue(run(this::stopArm)); - this.atMax.and(goingUp).or(topLimit).onTrue(run(this::stopArm)); - - this.topLimit.onTrue( - run( - () -> - motor.setPosition( - (ManipMath.Arm.convertAngleToSensorUnits( - armConstants.kArmReduction, armConstants.kMaxAngle)) - .in(Rotations)))); - this.bottomLimit.onTrue( - run( - () -> - motor.setPosition( - (ManipMath.Arm.convertAngleToSensorUnits( - armConstants.kArmReduction, armConstants.kMinAngle)) - .in(Rotations)))); - - this.motor.setGearbox(armConstants.gearbox); - - this.motor.setupRioPID( - new PIDFConfig(armConstants.kArmKp, armConstants.kArmKi, armConstants.kArmKd), - armConstants.kArmMaxVelocityRPM, - armConstants.kArmMaxAccelerationRPMperSecond, - 0.01, - true); - - this.feedforward = - new ArmFeedforward( - armConstants.kArmkS, armConstants.kArmkG, armConstants.kArmKv, armConstants.kArmKa); - - this.sysIdRoutine = - new SysIdRoutine( - new SysIdRoutine.Config(Volts.per(Second).of(1), Volts.of(6), Seconds.of(30)), - new SysIdRoutine.Mechanism( - this::runArmVoltage, - log -> { - // Record a frame for the arm motor. - log.motor("manipArm") - .voltage( - appliedVoltage.mut_replace( - motor.getAppliedOutput() * RobotController.getBatteryVoltage(), - Volts)) - .angularPosition(angle.mut_replace(motor.getPosition(), Rotations)) - .angularVelocity(velocity.mut_replace(motor.getVelocity(), RPM)); - }, - this)); - - this.armSim = - new SingleJointedArmSim( - armConstants.gearbox, - armConstants.kArmReduction, - SingleJointedArmSim.estimateMOI(armConstants.kArmLength, armConstants.kArmMass), - armConstants.kArmLength, - armConstants.kMinAngle.in(Radians), - armConstants.kMaxAngle.in(Radians), - true, - armConstants.kArmStartingAngle.in(Radians), - 0.02 / 4096.0, - 0.0); - - // Mechanism 2d for simulation, needs overridden for anything more than a basic arm. - arm2d = new Mechanism2d(armConstants.kArmLength * 2, armConstants.kArmLength * 2); - - // Mechanism root for simulation, needs overridden for anything more than a basic arm. - MechanismRoot2d armRoot = - arm2d.getRoot("ManipArm Root", armConstants.kArmLength, armConstants.kArmLength); - - this.armMech = - armRoot.append( - new MechanismLigament2d( - "defaultManipArm", - armConstants.kArmLength, - armConstants.kArmStartingAngle.in(Degrees), - 6, - new Color8Bit(Color.kOrange))); + /** + * Subsystem constructor, basic {@link ManipArm} with a {@link PIDFConfig}. + */ + public ManipArm(ManipMotor motor, PIDFConfig pidfConfig) { + this(motor); + motor.configurePIDF(pidfConfig); } - } - - /** Subsystem constructor, basic {@link ManipArm} with a {@link PIDFConfig}. */ - public ManipArm(ManipMotor motor, PIDFConfig pidfConfig) { - this(motor); - motor.configurePIDF(pidfConfig); - } - - /** Subsystem constructor, basic {@link ManipArm}. */ - public ManipArm(ManipMotor motor) { - this.motor = motor; - } - - @Override - public void periodic() { - if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.LOW.ordinal()) { - if (RobotBase.isSimulation()) { - SmartDashboard.putData("Arm Side View", arm2d); - } + + /** + * Subsystem constructor, basic {@link ManipArm}. + */ + public ManipArm(ManipMotor motor) { + this.motor = motor; } - if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.HIGH.ordinal()) { - SmartDashboard.putNumber("Arm Angle", getAngle().in(Degrees)); - SmartDashboard.putNumber("Arm Motor Rotations", motor.getPosition()); - SmartDashboard.putNumber("Arm Applied Output", motor.getAppliedOutput()); - SmartDashboard.putBoolean("Top Limit", topLimit.getAsBoolean()); - SmartDashboard.putBoolean("Bottom Limit", topLimit.getAsBoolean()); + @Override + public void periodic() { + if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.LOW.ordinal()) { + if (RobotBase.isSimulation()) { + SmartDashboard.putData("Arm Side View", arm2d); + } + } + if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.HIGH.ordinal()) { + SmartDashboard.putNumber("Arm Angle", getAngle().in(Degrees)); + SmartDashboard.putNumber("Arm Motor Rotations", motor.getPosition()); + SmartDashboard.putNumber("Arm Applied Output", motor.getAppliedOutput()); + + SmartDashboard.putBoolean("Top Limit", topLimit.getAsBoolean()); + SmartDashboard.putBoolean("Bottom Limit", topLimit.getAsBoolean()); + } } - } - - /** Ran periodically in simulation. Controls the arm simulation. */ - @Override - public void simulationPeriodic() { - // Set the armSim input, we use volts for this. - armSim.setInput(motor.getAppliedOutput() * RoboRioSim.getVInVoltage()); - - // Update the arm sim, Standard loop time is 20ms. - armSim.update(0.02); - - motor.iterateRevSim( - RotationsPerSecond.of( - ManipMath.Arm.convertAngleToSensorUnits( - armConstants.kArmReduction, Radians.of(armSim.getVelocityRadPerSec())) - .in(Rotations)) - .in(RPM), - RoboRioSim.getVInVoltage(), // Simulated battery voltage, in Volts - 0.02); // Time interval, in Seconds - - // Not implemented, will error when implemented. - motor.iterateCTRESim(); - - // Finally, we set our simulated encoder's readings and simulated battery voltage - motor.setPosition( - ManipMath.Arm.convertAngleToSensorUnits( - armConstants.kArmReduction, Radians.of(armSim.getAngleRads())) - .in(Rotations)); - - motor.setVelocity( - ManipMath.Arm.convertAngleToSensorUnits( - armConstants.kArmReduction, Radians.of(armSim.getVelocityRadPerSec())) - .in(Rotations) - * 60); - - // SimBattery estimates loaded battery voltages - RoboRioSim.setVInVoltage( - BatterySim.calculateDefaultBatteryLoadedVoltage(armSim.getCurrentDrawAmps())); - - // Update the Arm Mechanism based on simulated arm angle - armMech.setAngle(Degrees.convertFrom(armSim.getAngleRads(), Radians)); - } - - /** - * @return The angle used to update an arm {@link MechanismLigament2d}. - */ - public double getMechAngle() { - return Degrees.convertFrom(armSim.getAngleRads(), Radians); - } - - /** - * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. - * - * @param followerMotor {@link ManipMotor} to follow the lead motor. - * @param isInverted whether to invert the follower or not. - */ - public void addFollower(ManipMotor followerMotor, boolean isInverted) { - followerMotor.setAsFollower(motor, isInverted); - } - - /** - * Adds an absolute encoder to sync to on init. This is not used for actual control but - * recommended to keep arm position on boot. Can be called in init. - */ - public void addAbsoluteEncoderValue(double absEncoderDegrees) { - absEncoderAngle.mut_replace(absEncoderDegrees, Degrees); - this.absSetup = true; - } - - /** - * Determines whether to sync the absolute encoder in the {@link ManipArm} class or not. This is - * enabled by default. - */ - public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit) { - if (absSetup) { - this.syncAbsEncoderInit = syncAbsEncoderInit; - } else { - DriverStation.reportWarning( - "Absolute encoder for ManipArm is not set, cannot run setSyncAbsEncoderInit", true); + + /** + * Ran periodically in simulation. + * Controls the arm simulation. + */ + @Override + public void simulationPeriodic() { + // Set the armSim input, we use volts for this. + armSim.setInput(motor.getAppliedOutput() * RoboRioSim.getVInVoltage()); + + // Update the arm sim, Standard loop time is 20ms. + armSim.update(0.02); + + motor.iterateRevSim( + RotationsPerSecond.of(ManipMath.Arm.convertAngleToSensorUnits( + armConstants.kArmReduction, + Radians.of(armSim.getVelocityRadPerSec())).in(Rotations)) + .in(RPM), + RoboRioSim.getVInVoltage(), // Simulated battery voltage, in Volts + 0.02); // Time interval, in Seconds + + // Not implemented, will error when implemented. + motor.iterateCTRESim(); + + // Finally, we set our simulated encoder's readings and simulated battery voltage + motor.setPosition(ManipMath.Arm.convertAngleToSensorUnits( + armConstants.kArmReduction, + Radians.of(armSim.getAngleRads())).in(Rotations)); + + motor.setVelocity(ManipMath.Arm.convertAngleToSensorUnits( + armConstants.kArmReduction, + Radians.of(armSim.getVelocityRadPerSec())).in(Rotations) * 60); + + // SimBattery estimates loaded battery voltages + RoboRioSim.setVInVoltage( + BatterySim.calculateDefaultBatteryLoadedVoltage(armSim.getCurrentDrawAmps())); + + // Update the Arm Mechanism based on simulated arm angle + armMech.setAngle(Degrees.convertFrom(armSim.getAngleRads(), Radians)); } - } - - /** Seeds inbuilt encoder with absolute encoder value. Syncs on init by default. */ - public void synchronizeAbsoluteEncoder() { - motor.setPosition( - Rotations.of(absEncoderAngle.in(Degrees)) - .minus(armConstants.kArmOffsetToHorizantalZero) - .in(Rotations)); - } - - /** - * Near the maximum Angle of the arm within X degrees. - * - * @param toleranceDegrees Degrees close to maximum of the Arm. - * @return is near the maximum of the arm. - */ - public boolean nearMax(double toleranceDegrees) { - return getAngle() - .isNear(armConstants.kMaxAngle, Radians.convertFrom(toleranceDegrees, Degrees)); - } - - /** - * Near the minimum angle of the Arm in within X degrees. - * - * @param toleranceDegrees Tolerance of the Arm. - * @return is near the minimum of the arm. - */ - public boolean nearMin(double toleranceDegrees) { - return getAngle() - .isNear(armConstants.kMaxAngle, Radians.convertFrom(toleranceDegrees, Degrees)); - } - - /** - * Runs the SysId routine to tune the Arm - * - * @return SysId Routine command - */ - public Command runSysIdRoutine() { - if (isAdvancedEnabled) { - return (sysIdRoutine.dynamic(SysIdRoutine.Direction.kForward).until(atMax)) - .andThen(sysIdRoutine.dynamic(SysIdRoutine.Direction.kReverse).until(atMin)) - .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kForward).until(atMax)) - .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kReverse).until(atMin)) - .andThen(Commands.print("DONE")); - } else { - DriverStation.reportWarning( - "Advanced ManipArm is not setup, for safety SysID is disabled", true); - return Commands.none(); + + /** + * @return The angle used to update an arm {@link MechanismLigament2d}. + */ + public double getMechAngle() { + return Degrees.convertFrom(armSim.getAngleRads(), Radians); } - } - - /** Run the control loop to reach and maintain the setpoint from the preferences. */ - public void reachSetpoint(double setpoint) { - if (isAdvancedEnabled) { - double goalPosition = - ManipMath.Arm.convertAngleToSensorUnits(armConstants.kArmReduction, Degrees.of(setpoint)) - .in(Rotations); - double pidOutput = motor.getRioController().calculate(motor.getPosition(), goalPosition); - TrapezoidProfile.State setpointState = motor.getRioController().getSetpoint(); - - motor.setVoltage( - pidOutput + feedforward.calculate(setpointState.position, setpointState.velocity)); - - } else { - motor.setReference(setpoint); + + /** + * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. + * + * @param followerMotor {@link ManipMotor} to follow the lead motor. + * @param isInverted whether to invert the follower or not. + */ + public void addFollower(ManipMotor followerMotor, boolean isInverted) { + followerMotor.setAsFollower(motor, isInverted); + } + + /** + * Adds an absolute encoder to sync to on init. This is not used for actual control + * but recommended to keep arm position on boot. Can be called in init. + * Value must be in 0-360. + */ + public void addAbsoluteEncoderValue(double absEncoderDegrees) { + absEncoderAngle.mut_replace(absEncoderDegrees, Degrees); + this.absSetup = true; } - } - - /** Basic method to run the arm at commanded speed. This does not stop!! */ - public void runArmSpeed(double speed) { - motor.set(speed); - } - - /** Basic method to run the arm at commanded voltage. This does not stop!! */ - public void runArmVoltage(Voltage volts) { - motor.setVoltage(volts); - } - - /** - * Get the Angle of the Arm. - * - * @return Angle of the Arm. - */ - public Angle getAngle() { - if (isAdvancedEnabled) { - angle.mut_replace( - ManipMath.Arm.convertSensorUnitsToAngle( - armConstants.kArmReduction, angle.mut_replace(motor.getPosition(), Rotations))); - } else { - DriverStation.reportWarning("Advanced ManipArm is required for getAngle()", true); + + /** + * Determines whether to sync the absolute encoder in the + * {@link ManipArm} class or not. This is enabled by default. + */ + public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit) { + if (absSetup) { + this.syncAbsEncoderInit = syncAbsEncoderInit; + } else { + DriverStation.reportWarning("Absolute encoder for ManipArm is not set, cannot run setSyncAbsEncoderInit", true); + } } - return angle; - } - - /** - * Get the velocity of Arm. - * - * @return Velocity of the Arm. - */ - public AngularVelocity getVelocity() { - if (!isAdvancedEnabled) { - DriverStation.reportWarning( - "Advanced ManipArm is required for getVelocity(), returning 0", true); + + /** + * Seeds inbuilt encoder with absolute encoder value. + * Syncs on init by default. + */ + public void synchronizeAbsoluteEncoder() { + motor.setPosition( + Rotations.of(absEncoderAngle.in(Degrees)) + .minus(armConstants.kArmOffsetToHorizantalZero) + .in(Rotations)); } - return velocity.mut_replace( - ManipMath.Arm.convertSensorUnitsToAngle( - armConstants.kArmReduction, Rotations.of(motor.getVelocity())) - .per(Minute)); - } - - /** Runs reachSetpoint as a {@link Command}. */ - public Command setGoal(double degrees) { - return run(() -> reachSetpoint(degrees)); - } - - /** Runs runArmSpeed as a {@link Command}. This stops after command is finished. */ - public Command runArmSpeedCommand(double speed) { - return runEnd(() -> runArmSpeed(speed), this::stopArm); - } - - /** Runs runArmVoltage as a {@link Command}. This stops after command is finished. */ - public Command runArmVoltageCommand(Voltage volts) { - return runEnd(() -> runArmVoltage(volts), this::stopArm); - } - - /** Sets the {@link Boolean} for when the top limit switch is hit for {@link ManipArm}. */ - public void setTopLimitSwitch(boolean topLimit) { - this.topLimitBoolean = topLimit; - } - - /** Sets the {@link Boolean} for when the bottom limit switch is hit for {@link ManipArm}. */ - public void setBottomLimitSwitch(boolean bottomLimit) { - this.bottomLimitBoolean = bottomLimit; - } - - /** - * A command to be used as a default command to stow the arm. Use toggleAutoStow() to toggle it on - * and off. It's good for if you want it to stow but want safety or to be able to control - * manually. - */ - public Command autoStowWithOverride(double stowAngle) { - return run( - () -> { - if (!defaultCommandOverride) { - reachSetpoint(stowAngle); - } else { - Commands.none(); - } + + /** + * Near the maximum Angle of the arm within X degrees. + * + * @param toleranceDegrees Degrees close to maximum of the Arm. + * @return is near the maximum of the arm. + */ + public boolean nearMax(double toleranceDegrees) { + return getAngle().isNear(armConstants.kMaxAngle, Radians.convertFrom(toleranceDegrees, Degrees)); + + } + + /** + * Near the minimum angle of the Arm in within X degrees. + * + * @param toleranceDegrees Tolerance of the Arm. + * @return is near the minimum of the arm. + */ + public boolean nearMin(double toleranceDegrees) { + return getAngle().isNear(armConstants.kMaxAngle, Radians.convertFrom(toleranceDegrees, Degrees)); + + } + + /** + * Runs the SysId routine to tune the Arm + * + * @return SysId Routine command + */ + public Command runSysIdRoutine() { + if (isAdvancedEnabled) { + return (sysIdRoutine.dynamic(SysIdRoutine.Direction.kForward).until(atMax)) + .andThen(sysIdRoutine.dynamic(SysIdRoutine.Direction.kReverse).until(atMin)) + .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kForward).until(atMax)) + .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kReverse).until(atMin)) + .andThen(Commands.print("DONE")); + } else { + DriverStation.reportWarning("Advanced ManipArm is not setup, for safety SysID is disabled", true); + return Commands.none(); + } + } + + /** + * Run the control loop to reach and maintain the setpoint from the preferences. + */ + public void reachSetpoint(double setpoint) { + if (isAdvancedEnabled) { + double goalPosition = ManipMath.Arm.convertAngleToSensorUnits(armConstants.kArmReduction, Degrees.of(setpoint)).in(Rotations); + double pidOutput = motor.getRioController().calculate(motor.getPosition(), goalPosition); + TrapezoidProfile.State setpointState = motor.getRioController().getSetpoint(); + + motor.setVoltage(pidOutput + + feedforward.calculate(setpointState.position, + setpointState.velocity)); + + } else { + motor.setReference(setpoint); + } + } + + /** + * Basic method to run the arm at commanded speed. + * This does not stop!! + */ + public void runArmSpeed(double speed) { + motor.set(speed); + } + + /** + * Basic method to run the arm at commanded voltage. + * This does not stop!! + */ + public void runArmVoltage(Voltage volts) { + motor.setVoltage(volts); + } + + /** + * Powers the motor with the kG feedforward value. + * "Voltage required to counteract gravity". + */ + public void runkG() { + motor.setVoltage(armConstants.kArmkG); + } + + /** + * Powers the motor with the kG feedforward value as a command. + * "Voltage required to counteract gravity". + */ + public Command runkGCommand() { + return run(this::runkG); + } + + /** + * Get the Angle of the Arm. + * + * @return Angle of the Arm. + */ + public Angle getAngle() { + if (isAdvancedEnabled) { + angle.mut_replace(ManipMath.Arm.convertSensorUnitsToAngle(armConstants.kArmReduction, angle.mut_replace(motor.getPosition(), Rotations))); + } else { + DriverStation.reportWarning("Advanced ManipArm is required for getAngle()", true); + } + return angle; + } + + /** + * Get the velocity of Arm. + * + * @return Velocity of the Arm. + */ + public AngularVelocity getVelocity() { + if (!isAdvancedEnabled) { + DriverStation.reportWarning("Advanced ManipArm is required for getVelocity(), returning 0", true); + } + return velocity.mut_replace(ManipMath.Arm.convertSensorUnitsToAngle(armConstants.kArmReduction, Rotations.of(motor.getVelocity())).per(Minute)); + } + + /** + * Runs reachSetpoint as a {@link Command}. + */ + public Command setGoal(double degrees) { + return run(() -> reachSetpoint(degrees)); + } + + /** + * Runs runArmSpeed as a {@link Command}. + * This stops after command is finished. + */ + public Command runArmSpeedCommand(double speed) { + return runEnd(() -> runArmSpeed(speed), this::stopArm); + } + + /** + * Runs runArmVoltage as a {@link Command}. + * This stops after command is finished. + */ + public Command runArmVoltageCommand(Voltage volts) { + return runEnd(() -> runArmVoltage(volts), this::stopArm); + } + + /** + * Sets the {@link Boolean} for when the top limit switch is hit for {@link ManipArm}. + */ + public void setTopLimitSwitch(boolean topLimit) { + this.topLimitBoolean = topLimit; + } + + /** + * Sets the {@link Boolean} for when the bottom limit switch is hit for {@link ManipArm}. + */ + public void setBottomLimitSwitch(boolean bottomLimit) { + this.bottomLimitBoolean = bottomLimit; + } + + /** + * A command to be used as a default command to stow the arm. + * Use toggleAutoStow() to toggle it on and off. + * It's good for if you want it to stow but want safety or to be able to control manually. + */ + public Command autoStowWithOverride(double stowAngle) { + return run(() -> { + if (!defaultCommandOverride) { + reachSetpoint(stowAngle); + } else { + Commands.none(); + } }); - } + } - /** Toggles auto-stow of defaultCommandOverride */ - public void toggleAutoStow() { - this.defaultCommandOverride = !defaultCommandOverride; - } + /** + * Toggles auto-stow of defaultCommandOverride + */ + public void toggleAutoStow() { + this.defaultCommandOverride = !defaultCommandOverride; + } - public void setAutoStow(boolean autoStow) { - this.defaultCommandOverride = autoStow; - } + public void setAutoStow(boolean autoStow) { + this.defaultCommandOverride = autoStow; + } - /** Stops the arm. */ - public void stopArm() { - runArmSpeed(0.0); - } + /** + * Stops the arm. + */ + public void stopArm() { + runArmSpeed(0.0); + } } diff --git a/src/main/java/maniplib/ManipElevator.java b/src/main/java/maniplib/ManipElevator.java index 612fa96..1b64221 100644 --- a/src/main/java/maniplib/ManipElevator.java +++ b/src/main/java/maniplib/ManipElevator.java @@ -1,7 +1,5 @@ package maniplib; -import static edu.wpi.first.units.Units.*; - import edu.wpi.first.math.MathUtil; import edu.wpi.first.math.controller.ElevatorFeedforward; import edu.wpi.first.units.measure.*; @@ -26,462 +24,488 @@ import maniplib.utils.ManipMath; import maniplib.utils.PIDFConfig; +import static edu.wpi.first.units.Units.*; + public class ManipElevator extends SubsystemBase { - // Mutable holders for unit-safe values, persisted to avoid reallocation. - private final MutVoltage appliedVoltage = Volts.mutable(0); - private final MutLinearVelocity velocity = MetersPerSecond.mutable(0); - private final MutDistance distance = Meters.mutable(0); - private final MutAngle absEncoderAngle = Rotations.mutable(0); - // Universal motor init - private final ManipMotor motor; - // Triggers for when reaching max movements. - private Trigger atMin; - private Trigger atMax; - private Trigger goingDown; - private Trigger goingUp; - // Booleans for limit switch functions. - private boolean topLimitBoolean = false; - private boolean bottomLimitBoolean = false; - // Triggers for limit switch functions. - private Trigger topLimit; - private Trigger bottomLimit; - // Various booleans to determine what to enable - private boolean absSetup = false; - private boolean isAdvancedEnabled = false; - private boolean syncAbsEncoderInit = true; - private boolean defaultCommandOverride = false; - private ElevatorFeedforward feedforward; - private ManipElevatorConstants elevatorConstants; - // SysId Routine - private SysIdRoutine sysIdRoutine; - // Simulation class to help simulate what is going on, including gravity. - private ElevatorSim elevatorSim; - private Mechanism2d elevator2d; - // Mechanism for simulation, needs overridden for anything more than a basic elevator. - private MechanismLigament2d elevatorMech; - - /** - * Subsystem constructor, advanced {@link ManipElevator} when config.kEnableAdvanced is set to - * true. - */ - public ManipElevator(ManipMotor motor, ManipElevatorConstants config) { - - if (absSetup && syncAbsEncoderInit) { - synchronizeAbsoluteEncoder(); - } - - if (!config.kEnableAdvanced) { - this.motor = motor; - } else { - this.motor = motor; - this.elevatorConstants = config; - this.isAdvancedEnabled = true; - - this.topLimit = new Trigger(() -> topLimitBoolean); - this.bottomLimit = new Trigger(() -> bottomLimitBoolean); - - this.atMin = new Trigger(() -> getLinearPosition().isNear(config.kMinHeight, Inches.of(1))); - this.atMax = new Trigger(() -> getLinearPosition().isNear(config.kMaxHeight, Inches.of(1))); - this.goingDown = new Trigger(() -> motor.getAppliedOutput() < 0); - this.goingUp = new Trigger(() -> motor.getAppliedOutput() > 0); - - this.atMin.and(goingDown).or(topLimit).onTrue(run(this::stopElevator)); - this.atMax.and(goingUp).or(topLimit).onTrue(run(this::stopElevator)); - - this.topLimit.onTrue( - run( - () -> - motor.setPosition( - ManipMath.Elevator.convertDistanceToRotations( - config.kElevatorDrumRadius, - config.kElevatorGearing, - config.kMaxHeight) - .in(Rotations)))); - this.bottomLimit.onTrue( - run( - () -> - motor.setPosition( - ManipMath.Elevator.convertDistanceToRotations( - config.kElevatorDrumRadius, - config.kElevatorGearing, - config.kMaxHeight) - .in(Rotations)))); - - this.motor.setGearbox(elevatorConstants.gearbox); - - this.motor.configureMotor( - elevatorConstants.kElevatorCurrentLimit, - elevatorConstants.kElevatorRampRate, - true, - elevatorConstants.kIsInverted); - - motor.setupRioPID( - new PIDFConfig(config.kElevatorKp, config.kElevatorKi, config.kElevatorKd), - config.kMaxVelocity, - config.kMaxAcceleration, - 0.01, - true); - - this.feedforward = - new ElevatorFeedforward( - config.kElevatorkS, config.kElevatorkG, config.kElevatorkV, config.kElevatorkA); - - this.sysIdRoutine = - new SysIdRoutine( - new SysIdRoutine.Config(Volts.per(Second).of(1), Volts.of(6), Seconds.of(30)), - new SysIdRoutine.Mechanism( - this::runElevatorVoltage, - log -> { - // Record a frame for the elevator motor. - log.motor("manipElevator") - .voltage( - appliedVoltage.mut_replace( - motor.getAppliedOutput() * RobotController.getBatteryVoltage(), - Volts)) - .linearPosition( - distance.mut_replace( - getHeightMeters(), Meters)) // Records Height in Meters via - // SysIdRoutineLog.linearPosition - .linearVelocity( - velocity.mut_replace( - getVelocityMetersPerSecond(), - MetersPerSecond)); // Records velocity in MetersPerSecond via - // SysIdRoutineLog.linearVelocity - }, - this)); - - this.elevatorSim = - new ElevatorSim( - config.gearbox, - config.kElevatorGearing, - config.kElevatorCarriageMass, - config.kElevatorDrumRadius, - config.kMinHeight.in(Meters), - config.kMaxHeight.in(Meters), - true, - config.kStartingHeightSim.in(Meters), - 0.01, - 0.0); - - // Mechanism 2d for simulation, needs overridden for anything more than a basic elevator. - this.elevator2d = - new Mechanism2d( - (config.kMaxHeight.in(Meters) / 5), - config.kMaxHeight.in(Meters) + (config.kMaxHeight.in(Meters) / 10)); - - // Mechanism root for simulation, needs overridden for anything more than a basic elevator. - MechanismRoot2d elevatorRoot = - elevator2d.getRoot( - "ManipElevator Root", - (config.kMaxHeight.in(Meters) / 10), - config.kMinHeight.in(Meters)); - - this.elevatorMech = - elevatorRoot.append( - new MechanismLigament2d( - "defaultManipElevator", - config.kStartingHeightSim.in(Meters), - 90, - 6, - new Color8Bit(Color.kYellow))); - } - } - - /** Subsystem constructor, basic {@link ManipElevator} with a {@link PIDFConfig}. */ - public ManipElevator(ManipMotor motor, PIDFConfig pidfConfig) { - this(motor); - motor.configurePIDF(pidfConfig); - } - - /** Subsystem constructor, basic {@link ManipElevator}. */ - public ManipElevator(ManipMotor motor) { - this.motor = motor; - } - - @Override - public void periodic() { - if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.LOW.ordinal()) { - SmartDashboard.putData("Elevator Side", elevator2d); - } - if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.HIGH.ordinal()) { - SmartDashboard.putNumber("Elevator Height", getLinearPosition().in(Inches)); - SmartDashboard.putNumber("Elevator Applied Output", motor.getAppliedOutput()); - } - } - - /** Ran periodically in simulation. Controls the elevator simulation. */ - @Override - public void simulationPeriodic() { - // Set the elevatorSim input, we use volts for this. - elevatorSim.setInput(motor.getAppliedOutput() * RoboRioSim.getVInVoltage()); - - // Update the elevator sim, Standard loop time is 20ms. - elevatorSim.update(0.02); - - motor.iterateRevSim( - ManipMath.Elevator.convertDistanceToRotations( + // Mutable holders for unit-safe values, persisted to avoid reallocation. + private final MutVoltage appliedVoltage = Volts.mutable(0); + private final MutLinearVelocity velocity = MetersPerSecond.mutable(0); + private final MutDistance distance = Meters.mutable(0); + private final MutAngle absEncoderAngle = Rotations.mutable(0); + // Universal motor init + private final ManipMotor motor; + // Triggers for when reaching max movements. + private Trigger atMin; + private Trigger atMax; + private Trigger goingDown; + private Trigger goingUp; + // Booleans for limit switch functions. + private boolean topLimitBoolean = false; + private boolean bottomLimitBoolean = false; + // Triggers for limit switch functions. + private Trigger topLimit; + private Trigger bottomLimit; + // Various booleans to determine what to enable + private boolean absSetup = false; + private boolean isAdvancedEnabled = false; + private boolean syncAbsEncoderInit = true; + private boolean defaultCommandOverride = false; + private ElevatorFeedforward feedforward; + private ManipElevatorConstants elevatorConstants; + // SysId Routine + private SysIdRoutine sysIdRoutine; + // Simulation class to help simulate what is going on, including gravity. + private ElevatorSim elevatorSim; + private Mechanism2d elevator2d; + // Mechanism for simulation, needs overridden for anything more than a basic elevator. + private MechanismLigament2d elevatorMech; + + /** + * Subsystem constructor, advanced {@link ManipElevator} when config.kEnableAdvanced is set to true. + */ + public ManipElevator(ManipMotor motor, ManipElevatorConstants config) { + + if (absSetup && syncAbsEncoderInit) { + synchronizeAbsoluteEncoder(); + } + + if (!config.kEnableAdvanced) { + this.motor = motor; + } else { + this.motor = motor; + this.elevatorConstants = config; + this.isAdvancedEnabled = true; + + this.topLimit = new Trigger(() -> topLimitBoolean); + this.bottomLimit = new Trigger(() -> bottomLimitBoolean); + + this.atMin = new Trigger(() -> getLinearPosition().isNear(config.kMinHeight, Inches.of(1))); + this.atMax = new Trigger(() -> getLinearPosition().isNear(config.kMaxHeight, Inches.of(1))); + this.goingDown = new Trigger(() -> motor.getAppliedOutput() < 0); + this.goingUp = new Trigger(() -> motor.getAppliedOutput() > 0); + + this.atMin.and(goingDown).or(topLimit).onTrue(run(this::stopElevator)); + this.atMax.and(goingUp).or(topLimit).onTrue(run(this::stopElevator)); + + this.topLimit.onTrue(run(() -> + motor.setPosition(ManipMath.Elevator.convertDistanceToRotations( + config.kElevatorDrumRadius, + config.kElevatorGearing, + config.kMaxHeight + ).in(Rotations)))); + this.bottomLimit.onTrue(run(() -> + motor.setPosition(ManipMath.Elevator.convertDistanceToRotations( + config.kElevatorDrumRadius, + config.kElevatorGearing, + config.kMaxHeight + ).in(Rotations)))); + + this.motor.setGearbox(elevatorConstants.gearbox); + + this.motor.configureMotor( + elevatorConstants.kElevatorCurrentLimit, + elevatorConstants.kElevatorRampRate, + true, + elevatorConstants.kIsInverted + ); + + motor.setupRioPID( + new PIDFConfig(config.kElevatorKp, + config.kElevatorKi, + config.kElevatorKd), + config.kMaxVelocity, + config.kMaxAcceleration, + 0.01, + true + ); + + this.feedforward = new ElevatorFeedforward( + config.kElevatorkS, + config.kElevatorkG, + config.kElevatorkV, + config.kElevatorkA + ); + + this.sysIdRoutine = new SysIdRoutine( + + new SysIdRoutine.Config(Volts.per(Second).of(1), Volts.of(6), Seconds.of(30)), + new SysIdRoutine.Mechanism( + this::runElevatorVoltage, + log -> { + // Record a frame for the elevator motor. + log.motor("manipElevator") + .voltage(appliedVoltage.mut_replace(motor.getAppliedOutput() * + RobotController.getBatteryVoltage(), Volts)) + .linearPosition(distance.mut_replace(getHeightMeters(), + Meters)) // Records Height in Meters via SysIdRoutineLog.linearPosition + .linearVelocity(velocity.mut_replace(getVelocityMetersPerSecond(), + MetersPerSecond)); // Records velocity in MetersPerSecond via SysIdRoutineLog.linearVelocity + }, + this)); + + this.elevatorSim = new ElevatorSim( + config.gearbox, + config.kElevatorGearing, + config.kElevatorCarriageMass, + config.kElevatorDrumRadius, + config.kMinHeight.in(Meters), + config.kMaxHeight.in(Meters), + true, + config.kStartingHeightSim.in(Meters), + 0.01, + 0.0 + ); + + // Mechanism 2d for simulation, needs overridden for anything more than a basic elevator. + this.elevator2d = new Mechanism2d( + (config.kMaxHeight.in(Meters) / 5), + config.kMaxHeight.in(Meters) + (config.kMaxHeight.in(Meters) / 10) + ); + + // Mechanism root for simulation, needs overridden for anything more than a basic elevator. + MechanismRoot2d elevatorRoot = elevator2d.getRoot("ManipElevator Root", + (config.kMaxHeight.in(Meters) / 10), + config.kMinHeight.in(Meters)); + + this.elevatorMech = + elevatorRoot.append( + new MechanismLigament2d( + "defaultManipElevator", + config.kStartingHeightSim.in(Meters), + 90, + 6, + new Color8Bit(Color.kYellow) + )); + } + + } + + /** + * Subsystem constructor, basic {@link ManipElevator} with a {@link PIDFConfig}. + */ + public ManipElevator(ManipMotor motor, PIDFConfig pidfConfig) { + this(motor); + motor.configurePIDF(pidfConfig); + } + + /** + * Subsystem constructor, basic {@link ManipElevator}. + */ + public ManipElevator(ManipMotor motor) { + this.motor = motor; + } + + @Override + public void periodic() { + if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.LOW.ordinal()) { + SmartDashboard.putData("Elevator Side", elevator2d); + } + if (Telemetry.manipVerbosity.ordinal() <= Telemetry.ManipTelemetry.HIGH.ordinal()) { + SmartDashboard.putNumber("Elevator Height", getLinearPosition().in(Inches)); + SmartDashboard.putNumber("Elevator Applied Output", motor.getAppliedOutput()); + } + } + + /** + * Ran periodically in simulation. + * Controls the elevator simulation. + */ + @Override + public void simulationPeriodic() { + // Set the elevatorSim input, we use volts for this. + elevatorSim.setInput(motor.getAppliedOutput() * RoboRioSim.getVInVoltage()); + + // Update the elevator sim, Standard loop time is 20ms. + elevatorSim.update(0.02); + + motor.iterateRevSim( + ManipMath.Elevator.convertDistanceToRotations( + elevatorConstants.kElevatorDrumRadius, + elevatorConstants.kElevatorGearing, + Meters.of(elevatorSim.getVelocityMetersPerSecond())).per(Second).in(RPM), + RoboRioSim.getVInVoltage(), + 0.020); + + // Not implemented will error + motor.iterateCTRESim(); + + // Finally, we set our simulated encoder's readings and simulated battery voltage + motor.setPosition(ManipMath.Elevator.convertDistanceToRotations( elevatorConstants.kElevatorDrumRadius, elevatorConstants.kElevatorGearing, - Meters.of(elevatorSim.getVelocityMetersPerSecond())) - .per(Second) - .in(RPM), - RoboRioSim.getVInVoltage(), - 0.020); - - // Not implemented will error - motor.iterateCTRESim(); - - // Finally, we set our simulated encoder's readings and simulated battery voltage - motor.setPosition( - ManipMath.Elevator.convertDistanceToRotations( + Meters.of(elevatorSim.getPositionMeters())).in(Rotations)); + + motor.setVelocity(ManipMath.Elevator.convertDistanceToRotations( elevatorConstants.kElevatorDrumRadius, elevatorConstants.kElevatorGearing, - Meters.of(elevatorSim.getPositionMeters())) - .in(Rotations)); - - motor.setVelocity( - ManipMath.Elevator.convertDistanceToRotations( - elevatorConstants.kElevatorDrumRadius, - elevatorConstants.kElevatorGearing, - Meters.of(elevatorSim.getVelocityMetersPerSecond())) - .in(Rotations) - * 60); - - // SimBattery estimates loaded battery voltages - RoboRioSim.setVInVoltage( - BatterySim.calculateDefaultBatteryLoadedVoltage(elevatorSim.getCurrentDrawAmps())); - - // Update the Elevator Mechanism based on simulated elevator height - elevatorMech.setLength(getLinearPosition().in(Meters)); - } - - /** - * @return The length used to update a elevator {@link MechanismLigament2d} - */ - public double getMechLength() { - return getLinearPosition().in(Meters); - } - - /** - * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. - * - * @param followerMotor {@link ManipMotor} to follow the lead motor. - * @param isInverted whether to invert the follower or not. - */ - public void addFollower(ManipMotor followerMotor, boolean isInverted) { - followerMotor.setAsFollower(motor, isInverted); - } - - /** - * Adds an absolute encoder to sync to on init. This is not used for actual control but - * recommended to keep elevator position on boot. Can be called in init. - */ - public void addAbsoluteEncoderValue(double absEncoderDegrees) { - absEncoderAngle.mut_replace(absEncoderDegrees - elevatorConstants.kAbsEncoderOffset, Degrees); - this.absSetup = true; - } - - /** - * Determines whether to sync the absolute encoder in the {@link ManipElevator} class or not. This - * is enabled by default. - */ - public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit) { - if (absSetup) { - this.syncAbsEncoderInit = syncAbsEncoderInit; - } else { - DriverStation.reportWarning( - "Absolute encoder for ManipElevator is not set, cannot run setSyncAbsEncoderInit", true); - } - } - - /** Seeds inbuilt encoder with absolute encoder value. Syncs on init by default. */ - public void synchronizeAbsoluteEncoder() { - motor.setPosition(Rotations.of(absEncoderAngle.in(Degrees)).in(Rotations)); - } - - /** - * Runs the SysId routine to tune the elevator - * - * @return SysId Routine command - */ - public Command runSysIdRoutine() { - if (isAdvancedEnabled) { - return (sysIdRoutine.dynamic(SysIdRoutine.Direction.kForward).until(atMax)) - .andThen(sysIdRoutine.dynamic(SysIdRoutine.Direction.kReverse).until(atMin)) - .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kForward).until(atMax)) - .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kReverse).until(atMin)) - .andThen(Commands.print("DONE")); - } else { - DriverStation.reportWarning( - "Advanced ManipElevator is not setup, for safety SysID is disabled", true); - return Commands.none(); - } - } - - /** - * Get Elevator Velocity - * - * @return Elevator Velocity - */ - public LinearVelocity getLinearVelocity() { - return ManipMath.Elevator.convertRotationsToDistance( - elevatorConstants.kElevatorDrumRadius, - elevatorConstants.kElevatorGearing, - Rotations.of(motor.getVelocity())) - .per(Minute); - } - - /** - * Get the height of the Elevator - * - * @return Height of the elevator - */ - public Distance getLinearPosition() { - return ManipMath.Elevator.convertRotationsToDistance( - elevatorConstants.kElevatorDrumRadius, - elevatorConstants.kElevatorGearing, - Rotations.of(motor.getPosition())); - } - - /** - * Get the height in meters. - * - * @return Height in meters - */ - public double getHeightMeters() { - return (motor.getPosition() / elevatorConstants.kElevatorGearing) - * (2 * Math.PI * elevatorConstants.kElevatorDrumRadius); - } - - /** - * The velocity of the elevator in meters per second. - * - * @return velocity in meters per second - */ - public double getVelocityMetersPerSecond() { - return ((motor.getVelocity() / 60) / elevatorConstants.kElevatorGearing) - * (2 * Math.PI * elevatorConstants.kElevatorDrumRadius); - } - - /** - * A trigger for when the height is at an acceptable tolerance. - * - * @param height Height in Meters - * @param tolerance Tolerance in meters. - * @return {@link Trigger} - */ - public Trigger atHeight(double height, double tolerance) { - return new Trigger(() -> MathUtil.isNear(height, getHeightMeters(), tolerance)); - } - - /** - * Near the maximum height of the elevator within X millimeters. - * - * @param toleranceMillimeters Tolerance of the Elevator. - * @return is near the maximum of the elevator. - */ - public boolean nearMax(double toleranceMillimeters) { - return getLinearPosition() - .isNear( - elevatorConstants.kMaxHeight, Meters.convertFrom(toleranceMillimeters, Millimeters)); - } - - /** - * Near the minimum height of the elevator in within X millimeters. - * - * @param toleranceMillimeters Tolerance of the Elevator. - * @return is near the minimum of the elevator. - */ - public boolean nearMin(double toleranceMillimeters) { - return getLinearPosition() - .isNear( - elevatorConstants.kMinHeight, Meters.convertFrom(toleranceMillimeters, Millimeters)); - } - - /** - * Run the control loop to reach and maintain the setpoint from the preferences. If using basic - * control setpoint is in sensor units. - */ - public void reachSetpoint(double setpointInches) { - if (isAdvancedEnabled) { - motor.setVoltage( - MathUtil.clamp( - motor - .getRioController() - .calculate(getHeightMeters(), Meters.convertFrom(setpointInches, Inches)) - + feedforward.calculateWithVelocities( - getVelocityMetersPerSecond(), - motor.getRioController().getSetpoint().velocity), - -7, - 7)); - - } else { - motor.setReference(setpointInches); - } - } - - /** Basic method to run the elevator at commanded speed. This does not stop!! */ - public void runElevatorSpeed(double speed) { - motor.set(speed); - } - - /** Basic method to run the elevator at commanded voltage. This does not stop!! */ - public void runElevatorVoltage(Voltage volts) { - motor.setVoltage(volts); - } - - /** Runs reachSetpoint as a {@link Command}. */ - public Command setGoal(double setpointInches) { - return run(() -> reachSetpoint(setpointInches)); - } - - /** Runs runElevatorSpeed as a {@link Command}. This stops after command is finished. */ - public Command runElevatorSpeedCommand(double speed) { - return runEnd(() -> runElevatorSpeed(speed), this::stopElevator); - } - - /** Runs runElevatorVoltage as a {@link Command}. This stops after command is finished. */ - public Command runElevatorVoltageCommand(Voltage volts) { - return runEnd(() -> runElevatorVoltage(volts), this::stopElevator); - } - - /** Sets the {@link Boolean} for when the top limit switch is hit for {@link ManipElevator}. */ - public void setTopLimitSwitch(boolean topLimit) { - this.topLimitBoolean = topLimit; - } - - /** Sets the {@link Boolean} for when the bottom limit switch is hit for {@link ManipElevator}. */ - public void setBottomLimitSwitch(boolean bottomLimit) { - this.bottomLimitBoolean = bottomLimit; - } - - /** - * A command to be used as a default command to stow the elevator. Use toggleAutoStow() to toggle - * it on and off. It's good for if you want it to stow but want safety or to be able to control - * manually. - */ - public Command autoStowWithOverride(double stowHeight) { - return run( - () -> { - if (!this.defaultCommandOverride) { - reachSetpoint(stowHeight); - } else { - Commands.none(); - } + Meters.of(elevatorSim.getVelocityMetersPerSecond())).in(Rotations) * 60); + + // SimBattery estimates loaded battery voltages + RoboRioSim.setVInVoltage( + BatterySim.calculateDefaultBatteryLoadedVoltage(elevatorSim.getCurrentDrawAmps())); + + // Update the Elevator Mechanism based on simulated elevator height + elevatorMech.setLength(getLinearPosition().in(Meters)); + } + + /** + * @return The length used to update a elevator {@link MechanismLigament2d} + */ + public double getMechLength() { + return getLinearPosition().in(Meters); + } + + /** + * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. + * + * @param followerMotor {@link ManipMotor} to follow the lead motor. + * @param isInverted whether to invert the follower or not. + */ + public void addFollower(ManipMotor followerMotor, boolean isInverted) { + followerMotor.setAsFollower(motor, isInverted); + } + + /** + * Adds an absolute encoder to sync to on init. This is not used for actual control + * but recommended to keep elevator position on boot. Can be called in init. + */ + public void addAbsoluteEncoderValue(double absEncoderDegrees) { + absEncoderAngle.mut_replace(absEncoderDegrees - elevatorConstants.kAbsEncoderOffset, Degrees); + this.absSetup = true; + } + + /** + * Determines whether to sync the absolute encoder in the + * {@link ManipElevator} class or not. This is enabled by default. + */ + public void setSyncAbsEncoderInit(boolean syncAbsEncoderInit) { + if (absSetup) { + this.syncAbsEncoderInit = syncAbsEncoderInit; + } else { + DriverStation.reportWarning("Absolute encoder for ManipElevator is not set, cannot run setSyncAbsEncoderInit", true); + } + } + + /** + * Seeds inbuilt encoder with absolute encoder value. + * Syncs on init by default. + */ + public void synchronizeAbsoluteEncoder() { + motor.setPosition(Rotations.of(absEncoderAngle.in(Degrees)).in(Rotations)); + } + + /** + * Runs the SysId routine to tune the elevator + * + * @return SysId Routine command + */ + public Command runSysIdRoutine() { + if (isAdvancedEnabled) { + return (sysIdRoutine.dynamic(SysIdRoutine.Direction.kForward).until(atMax)) + .andThen(sysIdRoutine.dynamic(SysIdRoutine.Direction.kReverse).until(atMin)) + .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kForward).until(atMax)) + .andThen(sysIdRoutine.quasistatic(SysIdRoutine.Direction.kReverse).until(atMin)) + .andThen(Commands.print("DONE")); + } else { + DriverStation.reportWarning("Advanced ManipElevator is not setup, for safety SysID is disabled", true); + return Commands.none(); + } + } + + /** + * Get Elevator Velocity + * + * @return Elevator Velocity + */ + public LinearVelocity getLinearVelocity() { + return ManipMath.Elevator.convertRotationsToDistance( + elevatorConstants.kElevatorDrumRadius, + elevatorConstants.kElevatorGearing, + Rotations.of(motor.getVelocity())).per(Minute); + } + + /** + * Get the height of the Elevator + * + * @return Height of the elevator + */ + public Distance getLinearPosition() { + return ManipMath.Elevator.convertRotationsToDistance( + elevatorConstants.kElevatorDrumRadius, + elevatorConstants.kElevatorGearing, + Rotations.of(motor.getPosition())); + } + + /** + * Get the height in meters. + * + * @return Height in meters + */ + public double getHeightMeters() { + return (motor.getPosition() / elevatorConstants.kElevatorGearing) * + (2 * Math.PI * elevatorConstants.kElevatorDrumRadius); + } + + /** + * The velocity of the elevator in meters per second. + * + * @return velocity in meters per second + */ + public double getVelocityMetersPerSecond() { + return ((motor.getVelocity() / 60) / elevatorConstants.kElevatorGearing) * + (2 * Math.PI * elevatorConstants.kElevatorDrumRadius); + } + + /** + * A trigger for when the height is at an acceptable tolerance. + * + * @param height Height in Meters + * @param tolerance Tolerance in meters. + * @return {@link Trigger} + */ + public Trigger atHeight(double height, double tolerance) { + return new Trigger(() -> MathUtil.isNear(height, + getHeightMeters(), + tolerance)); + } + + /** + * Near the maximum height of the elevator within X millimeters. + * + * @param toleranceMillimeters Tolerance of the Elevator. + * @return is near the maximum of the elevator. + */ + public boolean nearMax(double toleranceMillimeters) { + return getLinearPosition().isNear(elevatorConstants.kMaxHeight, Meters.convertFrom(toleranceMillimeters, Millimeters)); + + } + + /** + * Near the minimum height of the elevator in within X millimeters. + * + * @param toleranceMillimeters Tolerance of the Elevator. + * @return is near the minimum of the elevator. + */ + public boolean nearMin(double toleranceMillimeters) { + return getLinearPosition().isNear(elevatorConstants.kMinHeight, Meters.convertFrom(toleranceMillimeters, Millimeters)); + + } + + /** + * Run the control loop to reach and maintain the setpoint from the preferences. + * If using basic control setpoint is in sensor units. + */ + public void reachSetpoint(double setpointInches) { + if (isAdvancedEnabled) { + motor.setVoltage(MathUtil.clamp( + motor.getRioController().calculate(getHeightMeters(), Meters.convertFrom(setpointInches, Inches)) + + feedforward.calculateWithVelocities(getVelocityMetersPerSecond(), + motor.getRioController().getSetpoint().velocity), -7, 7)); + + } else { + motor.setReference(setpointInches); + } + } + + /** + * Basic method to run the elevator at commanded speed. + * This does not stop!! + */ + public void runElevatorSpeed(double speed) { + motor.set(speed); + } + + /** + * Basic method to run the elevator at commanded voltage. + * This does not stop!! + */ + public void runElevatorVoltage(Voltage volts) { + motor.setVoltage(volts); + } + + /** + * Runs reachSetpoint as a {@link Command}. + */ + public Command setGoal(double setpointInches) { + return run(() -> reachSetpoint(setpointInches)); + } + + /** + * Runs runElevatorSpeed as a {@link Command}. + * This stops after command is finished. + */ + public Command runElevatorSpeedCommand(double speed) { + return runEnd(() -> runElevatorSpeed(speed), this::stopElevator); + } + + /** + * Runs runElevatorVoltage as a {@link Command}. + * This stops after command is finished. + */ + public Command runElevatorVoltageCommand(Voltage volts) { + return runEnd(() -> runElevatorVoltage(volts), this::stopElevator); + } + + /** + * Powers the motor with the kG feedforward value. + * "Voltage required to counteract gravity". + */ + public void runkG() { + motor.setVoltage(elevatorConstants.kElevatorkG); + } + + /** + * Powers the motor with the kG feedforward value as a command. + * "Voltage required to counteract gravity". + */ + public Command runkGCommand() { + return run(this::runkG); + } + + /** + * Sets the {@link Boolean} for when the top limit switch is hit for {@link ManipElevator}. + */ + public void setTopLimitSwitch(boolean topLimit) { + this.topLimitBoolean = topLimit; + } + + /** + * Sets the {@link Boolean} for when the bottom limit switch is hit for {@link ManipElevator}. + */ + public void setBottomLimitSwitch(boolean bottomLimit) { + this.bottomLimitBoolean = bottomLimit; + } + + /** + * A command to be used as a default command to stow the elevator. + * Use toggleAutoStow() to toggle it on and off. + * It's good for if you want it to stow but want safety or to be able to control manually. + */ + public Command autoStowWithOverride(double stowHeight) { + return run(() -> { + if (!this.defaultCommandOverride) { + reachSetpoint(stowHeight); + } else { + Commands.none(); + } }); - } + } - /** Toggles auto-stow of defaultCommandOverride */ - public void toggleAutoStow() { - this.defaultCommandOverride = !defaultCommandOverride; - } + /** + * Toggles auto-stow of defaultCommandOverride + */ + public void toggleAutoStow() { + this.defaultCommandOverride = !defaultCommandOverride; + } - public void setAutoStow(boolean autoStow) { - this.defaultCommandOverride = autoStow; - } + public void setAutoStow(boolean autoStow) { + this.defaultCommandOverride = autoStow; + } - /** Stops the elevator. */ - public void stopElevator() { - runElevatorSpeed(0.0); - } + /** + * Stops the elevator. + */ + public void stopElevator() { + runElevatorSpeed(0.0); + } } diff --git a/src/main/java/maniplib/ManipShooterIntake.java b/src/main/java/maniplib/ManipShooterIntake.java index e6a4c92..430ff35 100644 --- a/src/main/java/maniplib/ManipShooterIntake.java +++ b/src/main/java/maniplib/ManipShooterIntake.java @@ -7,65 +7,100 @@ public class ManipShooterIntake extends SubsystemBase { - private final ManipMotor motor; + private final ManipMotor motor; - /** - * Initialize the {@link ManipShooterIntake} to be used. - * - * @param motor motor to set as the lead motor for this {@link ManipShooterIntake} - */ - public ManipShooterIntake(ManipMotor motor) { - this.motor = motor; - motor.setPIDControlType(PIDControlType.ControlType.VELOCITY); - } + /** + * Initialize the {@link ManipShooterIntake} to be used. + * + * @param motor motor to set as the lead motor for this {@link ManipShooterIntake} + */ + public ManipShooterIntake(ManipMotor motor) { + this.motor = motor; + motor.setPIDControlType(PIDControlType.ControlType.VELOCITY); + } - /** - * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. - * - * @param followerMotor {@link ManipMotor} to follow the lead motor. - * @param isInverted whether to invert the follower or not. - */ - public void addFollower(ManipMotor followerMotor, boolean isInverted) { - followerMotor.setAsFollower(motor, isInverted); - } + /** + * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. + * + * @param followerMotor {@link ManipMotor} to follow the lead motor. + * @param isInverted whether to invert the follower or not. + */ + public void addFollower(ManipMotor followerMotor, boolean isInverted) { + followerMotor.setAsFollower(motor, isInverted); + } - /** - * Set the percentage output. - * - * @param speed percent out for the motor controller. - */ - public Command setSpeed(double speed) { - return runEnd( - () -> { - motor.set(speed); - }, - motor::stopMotor); - } + /** + * Set the motor voltage. + * + * @param voltage to run the motor at. + */ + public void runVoltage(double voltage) { + motor.setVoltage(voltage); + } - /** - * Set the closed loop PID controller reference point. - * - * @param setpoint Setpoint, value type changes with ControlType. - */ - public Command setReference(double setpoint) { - return runEnd( - () -> { - motor.setReference(setpoint); - }, - motor::stopMotor); - } + /** + * Set the motor voltage as a command. + * + * @param voltage to run the motor at. + */ + public Command runVoltageCommand(double voltage) { + return runEnd( + () -> { + motor.setVoltage(voltage); + }, this::stopShooter + ); + } - /** Stop the {@link ManipShooterIntake} */ - public void stopShooter() { - motor.stopMotor(); - } + /** + * Set the percentage output as a command. + * + * @param speed percent out for the motor controller. + */ + public void runSpeed(double speed) { + motor.set(speed); + } + + /** + * Set the percentage output. + * + * @param speed percent out for the motor controller as a command. + */ + public Command runSpeedCommand(double speed) { + return runEnd( + () -> { + runSpeed(speed); + }, + motor::stopMotor); + } + + /** + * Set the closed loop PID controller reference point. + * + * @param setpoint Setpoint, value type changes with ControlType. + */ + public Command setReference(double setpoint) { + return runEnd( + () -> { + motor.setReference(setpoint); + }, + motor::stopMotor + ); + } + + /** + * Stop the {@link ManipShooterIntake} + */ + public void stopShooter() { + motor.stopMotor(); + } + + /** + * A command that stops the {@link ManipShooterIntake} + * + * @return a command that stops the {@link ManipShooterIntake} + */ + public Command stopShooterCommand() { + return motor.stopMotorCommand(); + } - /** - * A command that stops the {@link ManipShooterIntake} - * - * @return a command that stops the {@link ManipShooterIntake} - */ - public Command stopShooterCommand() { - return motor.stopMotorCommand(); - } } diff --git a/src/main/java/maniplib/Telemetry.java b/src/main/java/maniplib/Telemetry.java index 68b993d..90dc676 100644 --- a/src/main/java/maniplib/Telemetry.java +++ b/src/main/java/maniplib/Telemetry.java @@ -4,22 +4,23 @@ public class Telemetry extends SubsystemBase { - public static ManipTelemetry manipVerbosity = ManipTelemetry.HIGH; + public static ManipTelemetry manipVerbosity = ManipTelemetry.HIGH; - public enum ManipTelemetry { - /* - * No telemetry data is sent to dashboard. Including sim. - */ - NONE, + public enum ManipTelemetry { + /* + * No telemetry data is sent to dashboard. Including sim. + */ + NONE, - /* - * Only basic telemetry data is sent to dashboard. - */ - LOW, + /* + * Only basic telemetry data is sent to dashboard. + */ + LOW, + + /* + * All telemetry data is sent to dashboard. + */ + HIGH + } - /* - * All telemetry data is sent to dashboard. - */ - HIGH - } } diff --git a/src/main/java/maniplib/motors/ManipMotor.java b/src/main/java/maniplib/motors/ManipMotor.java index 04b8048..7a9a446 100644 --- a/src/main/java/maniplib/motors/ManipMotor.java +++ b/src/main/java/maniplib/motors/ManipMotor.java @@ -12,224 +12,240 @@ */ public abstract class ManipMotor { - /* - Custom methods needed for each controller : - getSimMotor, custom simMotor code for each added motor support. - */ - - /** - * The maximum amount of times the swerve motor will attempt to configure a motor if failures - * occur. - */ - public final int maximumRetries = 5; - - /** Configure the factory defaults. */ - public abstract void factoryDefaults(); - - /** Clear the sticky faults on the motor controller. */ - public abstract void clearStickyFaults(); - - /** Used to internally set motor constants. */ - public abstract void configureMotor( - int stallCurrent, double rampRate, boolean isBrake, boolean isInverted); - - /** Used to pass the mechanism gearbox to the motor for sim. */ - public abstract void setGearbox(DCMotor gearbox); - - /** Iterates Rev's sim, does nothing on CTRE devices. */ - public abstract void iterateRevSim(double velocity, double vbus, double dt); - - /** Not implemented, does nothing on Rev devices, */ - public abstract void iterateCTRESim(); - - /** - * Sets up the {@link ManipSparkMax} to use rioPID. - * - * @param pidfConfig pid settings to use. - * @param maxVelocity maximum velocity for trapezoid profiling. - * @param maxAcceleration maximum acceleration for trapezoid profiling. - * @param useRioPID boolean to enable rioPID. - */ - public abstract void setupRioPID( - PIDFConfig pidfConfig, - double maxVelocity, - double maxAcceleration, - double tolerance, - boolean useRioPID); - - /** - * Whether to use rioPID or revPID - * - * @param useRioPID boolean to enable rioPID - */ - public abstract void useRioPID(boolean useRioPID); - - public abstract ProfiledPIDController getRioController(); - - /** Sets the {@link PIDControlType} to use on the motor. */ - public abstract void setPIDControlType(PIDControlType.ControlType controlType); - - /** - * Configure the PIDF values for the closed loop controller. 0 is disabled or off. - * - * @param config Configuration class holding the PIDF values. - */ - public abstract void configurePIDF(PIDFConfig config); - - /** - * Configure the PID wrapping for the position closed loop controller. - * - * @param minInput Minimum PID input. - * @param maxInput Maximum PID input. - */ - public abstract void configurePIDWrapping(double minInput, double maxInput); - - /** - * Set the idle mode. - * - * @param isBrakeMode Set the brake mode. - */ - public abstract void setMotorBrake(boolean isBrakeMode); - - /** - * Set the motor to be inverted. - * - * @param inverted State of inversion. - */ - public abstract void setInverted(boolean inverted); - - /** Save the configurations from flash to EEPROM. */ - public abstract void burnFlash(); - - /** - * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. - * - * @param leadMotor lead {@link ManipMotor} to follow. - * @param isInverted whether to invert the follower or not. - */ - public abstract void setAsFollower(ManipMotor leadMotor, Boolean isInverted); - - /** - * Set the percentage output. - * - * @param percentOutput percent out for the motor controller. - */ - public abstract void set(double percentOutput); - - /** - * Set the closed loop PID controller reference point. - * - * @param setpoint Setpoint in meters per second or angle in degrees. - * @param feedforward Feedforward in volt-meter-per-second or kV. - */ - public abstract void setReference(double setpoint, double feedforward); - - /** - * Set the closed loop PID controller reference point. - * - * @param setpoint Setpoint in meters per second or angle in degrees. - */ - public abstract void setReference(double setpoint); - - /** Stop the motor. */ - public abstract void stopMotor(); - - /** - * A command to stop the motor. - * - * @return a command to stop the motor. - */ - public abstract Command stopMotorCommand(); - - /** - * Get the voltage output of the motor controller. - * - * @return Voltage output. - */ - public abstract double getVoltage(); - - /** - * Set the voltage of the motor. - * - * @param voltage Voltage to set. - */ - public abstract void setVoltage(double voltage); - - /** - * Set the voltage of the motor using {@link Voltage} units. - * - * @param voltage units to set the motor with. - */ - public abstract void setVoltage(Voltage voltage); - - /** - * Returns the canid of the motor. - * - * @return the canid of the motor. - */ - public abstract int getMotorID(); - - /** - * Get the applied dutycycle output. - * - * @return Applied dutycycle output to the motor. - */ - public abstract double getAppliedOutput(); - - /** - * Get the velocity of the integrated encoder. - * - * @return velocity in meters per second or degrees per second. - */ - public abstract double getVelocity(); - - /** - * Set the integrated encoder velocity. - * - * @param velocity Integrated encoder velocity. Should be meters per second or degrees per second. - */ - public abstract void setVelocity(double velocity); - - /** - * Get the position of the integrated encoder. - * - * @return Position in meters or degrees. - */ - public abstract double getPosition(); - - /** - * Set the integrated encoder position. - * - * @param position Integrated encoder position. Should be angle in degrees or meters per second. - */ - public abstract void setPosition(double position); - - /** - * Set the voltage compensation for the swerve module motor. - * - * @param nominalVoltage Nominal voltage for operation to output to. - */ - public abstract void setVoltageCompensation(double nominalVoltage); - - /** - * Set the current limit for the swerve drive motor, remember this may cause jumping if used in - * conjunction with voltage compensation. This is useful to protect the motor from current spikes. - * - * @param currentLimit Current limit in AMPS at free speed. - */ - public abstract void setCurrentLimit(int currentLimit); - - /** - * Set the maximum rate the open/closed loop output can change by. - * - * @param rampRate Time in seconds to go from 0 to full throttle. - */ - public abstract void setLoopRampRate(double rampRate); - - /** - * Get the motor object from the module. - * - * @return Motor object. - */ - public abstract Object getMotor(); + /* + Custom methods needed for each controller : + getSimMotor, custom simMotor code for each added motor support. + */ + + /** + * The maximum amount of times the swerve motor will attempt to configure a motor if failures occur. + */ + public final int maximumRetries = 5; + + /** + * Configure the factory defaults. + */ + public abstract void factoryDefaults(); + + /** + * Clear the sticky faults on the motor controller. + */ + public abstract void clearStickyFaults(); + + /** + * Used to internally set motor constants. + */ + public abstract void configureMotor( + int stallCurrent, + double rampRate, + boolean isBrake, + boolean isInverted + ); + + /** + * Used to pass the mechanism gearbox to the motor for sim. + */ + public abstract void setGearbox(DCMotor gearbox); + + /** + * Iterates Rev's sim, does nothing on CTRE devices. + */ + public abstract void iterateRevSim(double velocity, double vbus, double dt); + + /** + * Not implemented, does nothing on Rev devices, + */ + public abstract void iterateCTRESim(); + + /** + * Sets up the {@link ManipSparkMax} to use rioPID. + * + * @param pidfConfig pid settings to use. + * @param maxVelocity maximum velocity for trapezoid profiling. + * @param maxAcceleration maximum acceleration for trapezoid profiling. + * @param useRioPID boolean to enable rioPID. + */ + public abstract void setupRioPID(PIDFConfig pidfConfig, double maxVelocity, double maxAcceleration, double tolerance, boolean useRioPID); + + /** + * Whether to use rioPID or revPID + * + * @param useRioPID boolean to enable rioPID + */ + public abstract void useRioPID(boolean useRioPID); + + public abstract ProfiledPIDController getRioController(); + + /** + * Sets the {@link PIDControlType} to use on the motor. + */ + public abstract void setPIDControlType(PIDControlType.ControlType controlType); + + /** + * Configure the PIDF values for the closed loop controller. 0 is disabled or off. + * + * @param config Configuration class holding the PIDF values. + */ + public abstract void configurePIDF(PIDFConfig config); + + /** + * Configure the PID wrapping for the position closed loop controller. + * + * @param minInput Minimum PID input. + * @param maxInput Maximum PID input. + */ + public abstract void configurePIDWrapping(double minInput, double maxInput); + + /** + * Set the idle mode. + * + * @param isBrakeMode Set the brake mode. + */ + public abstract void setMotorBrake(boolean isBrakeMode); + + /** + * Set the motor to be inverted. + * + * @param inverted State of inversion. + */ + public abstract void setInverted(boolean inverted); + + /** + * Save the configurations from flash to EEPROM. + */ + public abstract void burnFlash(); + + /** + * Sets the {@link ManipMotor} to follow another {@link ManipMotor}. + * + * @param leadMotor lead {@link ManipMotor} to follow. + * @param isInverted whether to invert the follower or not. + */ + public abstract void setAsFollower(ManipMotor leadMotor, Boolean isInverted); + + /** + * Set the percentage output. + * + * @param percentOutput percent out for the motor controller. + */ + public abstract void set(double percentOutput); + + /** + * Set the closed loop PID controller reference point. + * + * @param setpoint Setpoint in meters per second or angle in degrees. + * @param feedforward Feedforward in volt-meter-per-second or kV. + */ + public abstract void setReference(double setpoint, double feedforward); + + /** + * Set the closed loop PID controller reference point. + * + * @param setpoint Setpoint in meters per second or angle in degrees. + */ + public abstract void setReference(double setpoint); + + /** + * Stop the motor. + */ + public abstract void stopMotor(); + + /** + * A command to stop the motor. + * + * @return a command to stop the motor. + */ + public abstract Command stopMotorCommand(); + + /** + * Get the voltage output of the motor controller. + * + * @return Voltage output. + */ + public abstract double getVoltage(); + + /** + * Set the voltage of the motor. + * + * @param voltage Voltage to set. + */ + public abstract void setVoltage(double voltage); + + /** + * Set the voltage of the motor using {@link Voltage} units. + * + * @param voltage units to set the motor with. + */ + public abstract void setVoltage(Voltage voltage); + + /** + * Returns the canid of the motor. + * + * @return the canid of the motor. + */ + public abstract int getMotorID(); + + /** + * Get the applied dutycycle output. + * + * @return Applied dutycycle output to the motor. + */ + public abstract double getAppliedOutput(); + + /** + * Get the velocity of the integrated encoder. + * + * @return velocity in meters per second or degrees per second. + */ + public abstract double getVelocity(); + + /** + * Set the integrated encoder velocity. + * + * @param velocity Integrated encoder velocity. Should be meters per second or degrees per second. + */ + public abstract void setVelocity(double velocity); + + /** + * Get the position of the integrated encoder. + * + * @return Position in meters or degrees. + */ + public abstract double getPosition(); + + /** + * Set the integrated encoder position. + * + * @param position Integrated encoder position. Should be angle in degrees or meters per second. + */ + public abstract void setPosition(double position); + + /** + * Set the voltage compensation for the swerve module motor. + * + * @param nominalVoltage Nominal voltage for operation to output to. + */ + public abstract void setVoltageCompensation(double nominalVoltage); + + /** + * Set the current limit for the swerve drive motor, remember this may cause jumping if used in conjunction with + * voltage compensation. This is useful to protect the motor from current spikes. + * + * @param currentLimit Current limit in AMPS at free speed. + */ + public abstract void setCurrentLimit(int currentLimit); + + /** + * Set the maximum rate the open/closed loop output can change by. + * + * @param rampRate Time in seconds to go from 0 to full throttle. + */ + public abstract void setLoopRampRate(double rampRate); + + /** + * Get the motor object from the module. + * + * @return Motor object. + */ + public abstract Object getMotor(); } diff --git a/src/main/java/maniplib/motors/ManipSparkMax.java b/src/main/java/maniplib/motors/ManipSparkMax.java index 5ab1040..989344e 100644 --- a/src/main/java/maniplib/motors/ManipSparkMax.java +++ b/src/main/java/maniplib/motors/ManipSparkMax.java @@ -1,9 +1,5 @@ package maniplib.motors; -import static edu.wpi.first.units.Units.Milliseconds; -import static edu.wpi.first.units.Units.Seconds; -import static edu.wpi.first.wpilibj2.command.Commands.run; - import com.revrobotics.REVLibError; import com.revrobotics.RelativeEncoder; import com.revrobotics.sim.SparkMaxSim; @@ -25,473 +21,512 @@ import edu.wpi.first.wpilibj.RobotBase; import edu.wpi.first.wpilibj.Timer; import edu.wpi.first.wpilibj2.command.Command; -import java.util.function.Supplier; import maniplib.utils.PIDControlType; import maniplib.utils.PIDFConfig; -/** An implementation of {@link SparkMax} as a {@link ManipMotor}. */ +import java.util.function.Supplier; + +import static edu.wpi.first.units.Units.Milliseconds; +import static edu.wpi.first.units.Units.Seconds; +import static edu.wpi.first.wpilibj2.command.Commands.run; + +/** + * An implementation of {@link SparkMax} as a {@link ManipMotor}. + */ public class ManipSparkMax extends ManipMotor { - /** Config retry delay. */ - private final double configDelay = Milliseconds.of(5).in(Seconds); - /** {@link SparkMax} Instance. */ - private final SparkMax motor; - /** Supplier for the position of the motor controller. */ - private final Supplier position; - /** Configuration object for {@link SparkMax} motor. */ - private final SparkMaxConfig cfg = new SparkMaxConfig(); - /** Integrated encoder. */ - public RelativeEncoder encoder; - /** Closed-loop PID controller. */ - public SparkClosedLoopController pid; - /** Rio Closed-Loop PID Controller */ - public ProfiledPIDController rioPID; - /** Determine whether to use revPID or rioPID control. */ - public boolean useRioPID = false; - /** Supplier for the velocity of the motor controller. */ - private Supplier velocity; - /** {@link ControlType} for the spark to use */ - private ControlType sparkControlType = ControlType.kPosition; - /** {@link SparkMaxSim} for the mechanism. */ - private SparkMaxSim sparkMaxSim = null; - - /** - * Initialize the manip motor. - * - * @param motor The ManipMotor as a SparkMax object. - */ - public ManipSparkMax(SparkMax motor) { - this.motor = motor; - factoryDefaults(); - clearStickyFaults(); - - encoder = motor.getEncoder(); - pid = motor.getClosedLoopController(); - - cfg.closedLoop.feedbackSensor( - FeedbackSensor - .kPrimaryEncoder); // Configure feedback of the PID controller as the integrated - // encoder. - velocity = encoder::getVelocity; - position = encoder::getPosition; - } - - /** - * Initialize the {@link ManipMotor} as a {@link SparkMax} connected to a Brushless Motor. - * - * @param id CAN ID of the SparkMax. - */ - public ManipSparkMax(int id) { - this(new SparkMax(id, MotorType.kBrushless)); - } - - /** - * Sets up the {@link ManipSparkMax} to use rioPID. - * - * @param pidfConfig pid settings to use. - * @param maxVelocity maximum velocity for trapezoid profiling. - * @param maxAcceleration maximum acceleration for trapezoid profiling. - * @param useRioPID boolean to enable rioPID. - */ - public void setupRioPID( - PIDFConfig pidfConfig, - double maxVelocity, - double maxAcceleration, - double tolerance, - boolean useRioPID) { - rioPID = - new ProfiledPIDController( - pidfConfig.p, - pidfConfig.i, - pidfConfig.d, - new TrapezoidProfile.Constraints(maxVelocity, maxAcceleration)); - rioPID.setTolerance(tolerance); - useRioPID(useRioPID); - } - - /** - * Whether to use rioPID or revPID - * - * @param useRioPID boolean to enable rioPID - */ - public void useRioPID(boolean useRioPID) { - this.useRioPID = useRioPID; - } - - @Override - public ProfiledPIDController getRioController() { - return rioPID; - } - - public SparkClosedLoopController getSparkController() { - return motor.getClosedLoopController(); - } - - public void setPIDControlType(PIDControlType.ControlType controlType) { - if (controlType == PIDControlType.ControlType.POSITION) { - sparkControlType = ControlType.kPosition; - } else if (controlType == PIDControlType.ControlType.VELOCITY) { - sparkControlType = ControlType.kVelocity; - } - } - - /** - * Run the configuration until it succeeds or times out. - * - * @param config Lambda supplier returning the error state. - */ - private void configureSparkMax(Supplier config) { - for (int i = 0; i < maximumRetries; i++) { - if (config.get() == REVLibError.kOk) { - return; - } - Timer.delay(configDelay); - } - DriverStation.reportWarning("Failure configuring motor " + motor.getDeviceId(), true); - } - - /** - * Get the current configuration of the {@link SparkMax} - * - * @return {@link SparkMaxConfig} - */ - public SparkMaxConfig getConfig() { - return cfg; - } - - /** - * Update the config for the {@link SparkMax} - * - * @param cfgGiven Given {@link SparkMaxConfig} which should have minimal modifications. - */ - public void updateConfig(SparkMaxConfig cfgGiven) { - if (!DriverStation.isDisabled()) { - throw new RuntimeException( - "Configuration changes cannot be applied while the robot is enabled."); - } - cfg.apply(cfgGiven); - configureSparkMax( - () -> - motor.configure(cfg, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); - } - - /** - * Set the voltage compensation for the motor. - * - * @param nominalVoltage Nominal voltage for operation to output to. - */ - @Override - public void setVoltageCompensation(double nominalVoltage) { - cfg.voltageCompensation(nominalVoltage); - } - - /** - * Set the current limit for the motor, remember this may cause jumping if used in conjunction - * with voltage compensation. This is useful to protect the motor from current spikes. - * - * @param currentLimit Current limit in AMPS at free speed. - */ - @Override - public void setCurrentLimit(int currentLimit) { - cfg.smartCurrentLimit(currentLimit); - } - - /** - * Set the maximum rate the open/closed loop output can change by. - * - * @param rampRate Time in seconds to go from 0 to full throttle. - */ - @Override - public void setLoopRampRate(double rampRate) { - cfg.closedLoopRampRate(rampRate).openLoopRampRate(rampRate); - } - - /** - * Get the motor object from the module. - * - * @return Motor object. - */ - @Override - public Object getMotor() { - return motor; - } - - /** - * Returns {@link SparkMax} used for {@link ManipSparkMax}. - * - * @return {@link SparkMax} used for {@link ManipSparkMax}. - */ - public SparkMax getSparkMax() { - return motor; - } - - /** Configure the factory defaults. */ - @Override - public void factoryDefaults() { - // Do nothing - } - - /** Clear the sticky faults on the motor controller. */ - @Override - public void clearStickyFaults() { - configureSparkMax(motor::clearFaults); - } - - @Override - public void configureMotor( - int stallCurrent, double rampRate, boolean isBrake, boolean isInverted) { - SparkMaxConfig config = getConfig(); - config - .smartCurrentLimit(stallCurrent) - .closedLoopRampRate(rampRate) - .idleMode(isBrake ? IdleMode.kBrake : IdleMode.kCoast) - .inverted(isInverted); - updateConfig(config); - } - - @Override - public void setGearbox(DCMotor gearbox) { - this.sparkMaxSim = new SparkMaxSim(motor, gearbox); - } - - @Override - public void iterateRevSim(double velocity, double vbus, double dt) { - if (sparkMaxSim != null) { - sparkMaxSim.iterate(velocity, vbus, dt); - } - } - - @Override - public void iterateCTRESim() { - // Do nothing, this is a rev device. - } - - /** - * Configure the PIDF values for the closed loop controller. - * - * @param config Configuration class holding the PIDF values. - */ - @Override - public void configurePIDF(PIDFConfig config) { - cfg.closedLoop - .pidf(config.p, config.i, config.d, config.f) - .iZone(config.iz) - .outputRange(config.output.min, config.output.max); - - rioPID.setPID(config.p, config.i, config.d); - } - - /** - * Configure the PID wrapping for the position closed loop controller. - * - * @param minInput Minimum PID input. - * @param maxInput Maximum PID input. - */ - @Override - public void configurePIDWrapping(double minInput, double maxInput) { - cfg.closedLoop.positionWrappingEnabled(true).positionWrappingInputRange(minInput, maxInput); - - rioPID.enableContinuousInput(minInput, maxInput); - } - - /** - * Set the idle mode. - * - * @param isBrakeMode Set the brake mode. - */ - @Override - public void setMotorBrake(boolean isBrakeMode) { - cfg.idleMode(isBrakeMode ? IdleMode.kBrake : IdleMode.kCoast); - } - - /** - * Set the motor to be inverted. - * - * @param inverted State of inversion. - */ - @Override - public void setInverted(boolean inverted) { - cfg.inverted(inverted); - } - - /** Save the configurations from flash to EEPROM. */ - @Override - public void burnFlash() { - if (!DriverStation.isDisabled()) { - throw new RuntimeException("Config updates cannot be applied while the robot is Enabled!"); - } - configureSparkMax( - () -> { - return motor.configure( - cfg, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); + /** + * Config retry delay. + */ + private final double configDelay = Milliseconds.of(5).in(Seconds); + /** + * {@link SparkMax} Instance. + */ + private final SparkMax motor; + /** + * Supplier for the position of the motor controller. + */ + private final Supplier position; + /** + * Configuration object for {@link SparkMax} motor. + */ + private final SparkMaxConfig cfg = new SparkMaxConfig(); + /** + * Integrated encoder. + */ + public RelativeEncoder encoder; + /** + * Closed-loop PID controller. + */ + public SparkClosedLoopController pid; + /** + * Rio Closed-Loop PID Controller + */ + public ProfiledPIDController rioPID; + /** + * Determine whether to use revPID or rioPID control. + */ + public boolean useRioPID = false; + /** + * Supplier for the velocity of the motor controller. + */ + private Supplier velocity; + /** + * {@link ControlType} for the spark to use + */ + private ControlType sparkControlType = ControlType.kPosition; + /** + * {@link SparkMaxSim} for the mechanism. + */ + private SparkMaxSim sparkMaxSim = null; + + /** + * Initialize the manip motor. + * + * @param motor The ManipMotor as a SparkMax object. + */ + public ManipSparkMax(SparkMax motor) { + this.motor = motor; + factoryDefaults(); + clearStickyFaults(); + + encoder = motor.getEncoder(); + pid = motor.getClosedLoopController(); + + cfg.closedLoop.feedbackSensor(FeedbackSensor.kPrimaryEncoder); // Configure feedback of the PID controller as the integrated encoder. + velocity = encoder::getVelocity; + position = encoder::getPosition; + } + + /** + * Initialize the {@link ManipMotor} as a {@link SparkMax} connected to a Brushless Motor. + * + * @param id CAN ID of the SparkMax. + */ + public ManipSparkMax(int id) { + this(new SparkMax(id, MotorType.kBrushless)); + } + + /** + * Sets up the {@link ManipSparkMax} to use rioPID. + * + * @param pidfConfig pid settings to use. + * @param maxVelocity maximum velocity for trapezoid profiling. + * @param maxAcceleration maximum acceleration for trapezoid profiling. + * @param useRioPID boolean to enable rioPID. + */ + public void setupRioPID(PIDFConfig pidfConfig, double maxVelocity, double maxAcceleration, double tolerance, boolean useRioPID) { + rioPID = new ProfiledPIDController( + pidfConfig.p, + pidfConfig.i, + pidfConfig.d, + new TrapezoidProfile.Constraints( + maxVelocity, + maxAcceleration)); + rioPID.setTolerance(tolerance); + useRioPID(useRioPID); + } + + /** + * Whether to use rioPID or revPID + * + * @param useRioPID boolean to enable rioPID + */ + public void useRioPID(boolean useRioPID) { + this.useRioPID = useRioPID; + } + + @Override + public ProfiledPIDController getRioController() { + return rioPID; + } + + public SparkClosedLoopController getSparkController() { + return motor.getClosedLoopController(); + } + + public void setPIDControlType(PIDControlType.ControlType controlType) { + if (controlType == PIDControlType.ControlType.POSITION) { + sparkControlType = ControlType.kPosition; + } else if (controlType == PIDControlType.ControlType.VELOCITY) { + sparkControlType = ControlType.kVelocity; + } + } + + /** + * Run the configuration until it succeeds or times out. + * + * @param config Lambda supplier returning the error state. + */ + private void configureSparkMax(Supplier config) { + for (int i = 0; i < maximumRetries; i++) { + if (config.get() == REVLibError.kOk) { + return; + } + Timer.delay(configDelay); + } + DriverStation.reportWarning("Failure configuring motor " + motor.getDeviceId(), true); + } + + /** + * Get the current configuration of the {@link SparkMax} + * + * @return {@link SparkMaxConfig} + */ + public SparkMaxConfig getConfig() { + return cfg; + } + + /** + * Update the config for the {@link SparkMax} + * + * @param cfgGiven Given {@link SparkMaxConfig} which should have minimal modifications. + */ + public void updateConfig(SparkMaxConfig cfgGiven) { + if (!DriverStation.isDisabled()) { + throw new RuntimeException("Configuration changes cannot be applied while the robot is enabled."); + } + cfg.apply(cfgGiven); + configureSparkMax(() -> motor.configure(cfg, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); + } + + /** + * Set the voltage compensation for the motor. + * + * @param nominalVoltage Nominal voltage for operation to output to. + */ + @Override + public void setVoltageCompensation(double nominalVoltage) { + cfg.voltageCompensation(nominalVoltage); + } + + /** + * Set the current limit for the motor, remember this may cause jumping if used in conjunction with + * voltage compensation. This is useful to protect the motor from current spikes. + * + * @param currentLimit Current limit in AMPS at free speed. + */ + @Override + public void setCurrentLimit(int currentLimit) { + cfg.smartCurrentLimit(currentLimit); + + } + + /** + * Set the maximum rate the open/closed loop output can change by. + * + * @param rampRate Time in seconds to go from 0 to full throttle. + */ + @Override + public void setLoopRampRate(double rampRate) { + cfg.closedLoopRampRate(rampRate) + .openLoopRampRate(rampRate); + + } + + /** + * Get the motor object from the module. + * + * @return Motor object. + */ + @Override + public Object getMotor() { + return motor; + } + + /** + * Returns {@link SparkMax} used for {@link ManipSparkMax}. + * + * @return {@link SparkMax} used for {@link ManipSparkMax}. + */ + public SparkMax getSparkMax() { + return motor; + } + + /** + * Configure the factory defaults. + */ + @Override + public void factoryDefaults() { + // Do nothing + } + + /** + * Clear the sticky faults on the motor controller. + */ + @Override + public void clearStickyFaults() { + configureSparkMax(motor::clearFaults); + } + + @Override + public void configureMotor(int stallCurrent, double rampRate, boolean isBrake, boolean isInverted) { + SparkMaxConfig config = getConfig(); + config + .smartCurrentLimit(stallCurrent) + .closedLoopRampRate(rampRate) + .idleMode(isBrake ? IdleMode.kBrake : IdleMode.kCoast) + .inverted(isInverted); + updateConfig(config); + + } + + @Override + public void setGearbox(DCMotor gearbox) { + this.sparkMaxSim = new SparkMaxSim(motor, gearbox); + } + + @Override + public void iterateRevSim(double velocity, double vbus, double dt) { + if (sparkMaxSim != null) { + sparkMaxSim.iterate(velocity, vbus, dt); + } + } + + @Override + public void iterateCTRESim() { + // Do nothing, this is a rev device. + } + + /** + * Configure the PIDF values for the closed loop controller. + * + * @param config Configuration class holding the PIDF values. + */ + @Override + public void configurePIDF(PIDFConfig config) { + cfg.closedLoop.pidf(config.p, config.i, config.d, config.f) + .iZone(config.iz) + .outputRange(config.output.min, config.output.max); + + rioPID.setPID(config.p, config.i, config.d); + } + + /** + * Configure the PID wrapping for the position closed loop controller. + * + * @param minInput Minimum PID input. + * @param maxInput Maximum PID input. + */ + @Override + public void configurePIDWrapping(double minInput, double maxInput) { + cfg.closedLoop + .positionWrappingEnabled(true) + .positionWrappingInputRange(minInput, maxInput); + + rioPID.enableContinuousInput(minInput, maxInput); + } + + /** + * Set the idle mode. + * + * @param isBrakeMode Set the brake mode. + */ + @Override + public void setMotorBrake(boolean isBrakeMode) { + cfg.idleMode(isBrakeMode ? IdleMode.kBrake : IdleMode.kCoast); + + } + + /** + * Set the motor to be inverted. + * + * @param inverted State of inversion. + */ + @Override + public void setInverted(boolean inverted) { + cfg.inverted(inverted); + } + + /** + * Save the configurations from flash to EEPROM. + */ + @Override + public void burnFlash() { + if (!DriverStation.isDisabled()) { + throw new RuntimeException("Config updates cannot be applied while the robot is Enabled!"); + } + configureSparkMax(() -> { + return motor.configure(cfg, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); }); - } - - /** - * Sets the {@link ManipSparkMax} to follow another {@link ManipMotor}. - * - * @param leadMotor lead {@link ManipMotor} to follow. - * @param isInverted whether to invert the follower or not. - */ - @Override - public void setAsFollower(ManipMotor leadMotor, Boolean isInverted) { - if (!DriverStation.isDisabled()) { - throw new RuntimeException("Config updates cannot be applied while the robot is Enabled!"); - } - configureSparkMax( - () -> - motor.configure( - cfg.follow(leadMotor.getMotorID(), isInverted), - ResetMode.kNoResetSafeParameters, - PersistMode.kPersistParameters)); - } - - /** - * Set the percentage output. - * - * @param percentOutput percent out for the motor controller. - */ - @Override - public void set(double percentOutput) { - motor.set(percentOutput); - } - - /** - * Set the closed loop PID controller reference point. - * - * @param setpoint Setpoint in MPS or Angle in degrees. - * @param feedforward Feedforward in volt-meter-per-second or kV. - */ - @Override - public void setReference(double setpoint, double feedforward) { - if (useRioPID) { - rioPID.calculate(setpoint); - } else { - configureSparkMax( - () -> pid.setReference(setpoint, sparkControlType, ClosedLoopSlot.kSlot0, feedforward)); - } - } - - /** - * Set the closed loop PID controller reference point. - * - * @param setpoint Setpoint in MPS or Angle in degrees. - */ - @Override - public void setReference(double setpoint) { - if (useRioPID) { - rioPID.calculate(setpoint); - } else { - configureSparkMax(() -> pid.setReference(setpoint, sparkControlType, ClosedLoopSlot.kSlot0)); - } - } - - /** Stops the motor. */ - @Override - public void stopMotor() { - motor.set(0.0); - } - - /** - * A command to stop the motor. - * - * @return a command to stop the motor. - */ - @Override - public Command stopMotorCommand() { - return run(this::stopMotor); - } - - /** - * Get the voltage output of the motor controller. - * - * @return Voltage output. - */ - @Override - public double getVoltage() { - return motor.getAppliedOutput() * motor.getBusVoltage(); - } - - /** - * Set the voltage of the motor. - * - * @param voltage Voltage to set. - */ - @Override - public void setVoltage(double voltage) { - motor.setVoltage(voltage); - } - - /** - * Set the voltage of the motor using {@link Voltage} units. - * - * @param voltage units to set the motor with. - */ - @Override - public void setVoltage(Voltage voltage) { - motor.setVoltage(voltage); - } - - /** - * Returns the canid of the motor. - * - * @return the canid of the motor. - */ - @Override - public int getMotorID() { - return motor.getDeviceId(); - } - - /** - * Get the applied dutycycle output. - * - * @return Applied dutycycle output to the motor. - */ - @Override - public double getAppliedOutput() { - double output = 0; - if (RobotBase.isSimulation()) { - if (sparkMaxSim != null) { - output = sparkMaxSim.getAppliedOutput(); - } - } else { - output = motor.getAppliedOutput(); - } - return output; - } - - /** - * Get the velocity of the integrated encoder. - * - * @return velocity - */ - @Override - public double getVelocity() { - return velocity.get(); - } - - @Override - public void setVelocity(double velocity) { - this.velocity = () -> velocity; - } - - /** - * Get the position of the integrated encoder. - * - * @return Position - */ - @Override - public double getPosition() { - return position.get(); - } - - /** - * Set the integrated encoder position. - * - * @param position Integrated encoder position. - */ - @Override - public void setPosition(double position) { - configureSparkMax(() -> encoder.setPosition(position)); - } + } + + /** + * Sets the {@link ManipSparkMax} to follow another {@link ManipMotor}. + * + * @param leadMotor lead {@link ManipMotor} to follow. + * @param isInverted whether to invert the follower or not. + */ + @Override + public void setAsFollower(ManipMotor leadMotor, Boolean isInverted) { + if (!DriverStation.isDisabled()) { + throw new RuntimeException("Config updates cannot be applied while the robot is Enabled!"); + } + configureSparkMax(() -> + motor.configure( + cfg.follow(leadMotor.getMotorID(), + isInverted), + ResetMode.kNoResetSafeParameters, + PersistMode.kPersistParameters + )); + } + + /** + * Set the percentage output. + * + * @param percentOutput percent out for the motor controller. + */ + @Override + public void set(double percentOutput) { + motor.set(percentOutput); + } + + /** + * Set the closed loop PID controller reference point. + * + * @param setpoint Setpoint in MPS or Angle in degrees. + * @param feedforward Feedforward in volt-meter-per-second or kV. + */ + @Override + public void setReference(double setpoint, double feedforward) { + if (useRioPID) { + rioPID.calculate(setpoint); + } else { + configureSparkMax(() -> + pid.setReference( + setpoint, + sparkControlType, + ClosedLoopSlot.kSlot0, + feedforward)); + } + } + + /** + * Set the closed loop PID controller reference point. + * + * @param setpoint Setpoint in MPS or Angle in degrees. + */ + @Override + public void setReference(double setpoint) { + if (useRioPID) { + rioPID.calculate(setpoint); + } else { + configureSparkMax(() -> + pid.setReference( + setpoint, + sparkControlType, + ClosedLoopSlot.kSlot0)); + } + } + + /** + * Stops the motor. + */ + @Override + public void stopMotor() { + motor.set(0.0); + } + + /** + * A command to stop the motor. + * + * @return a command to stop the motor. + */ + @Override + public Command stopMotorCommand() { + return run(this::stopMotor); + } + + /** + * Get the voltage output of the motor controller. + * + * @return Voltage output. + */ + @Override + public double getVoltage() { + return motor.getAppliedOutput() * motor.getBusVoltage(); + } + + /** + * Set the voltage of the motor. + * + * @param voltage Voltage to set. + */ + @Override + public void setVoltage(double voltage) { + motor.setVoltage(voltage); + } + + /** + * Set the voltage of the motor using {@link Voltage} units. + * + * @param voltage units to set the motor with. + */ + @Override + public void setVoltage(Voltage voltage) { + motor.setVoltage(voltage); + } + + /** + * Returns the canid of the motor. + * + * @return the canid of the motor. + */ + @Override + public int getMotorID() { + return motor.getDeviceId(); + } + + /** + * Get the applied dutycycle output. + * + * @return Applied dutycycle output to the motor. + */ + @Override + public double getAppliedOutput() { + double output = 0; + if (RobotBase.isSimulation()) { + if (sparkMaxSim != null) { + output = sparkMaxSim.getAppliedOutput(); + } + } else { + output = motor.getAppliedOutput(); + } + return output; + } + + /** + * Get the velocity of the integrated encoder. + * + * @return velocity + */ + @Override + public double getVelocity() { + return velocity.get(); + } + + @Override + public void setVelocity(double velocity) { + this.velocity = () -> velocity; + } + + /** + * Get the position of the integrated encoder. + * + * @return Position + */ + @Override + public double getPosition() { + return position.get(); + } + + /** + * Set the integrated encoder position. + * + * @param position Integrated encoder position. + */ + @Override + public void setPosition(double position) { + configureSparkMax(() -> encoder.setPosition(position)); + } } diff --git a/src/main/java/maniplib/utils/ManipArmConstants.java b/src/main/java/maniplib/utils/ManipArmConstants.java index 38b7e20..929142c 100644 --- a/src/main/java/maniplib/utils/ManipArmConstants.java +++ b/src/main/java/maniplib/utils/ManipArmConstants.java @@ -1,124 +1,116 @@ package maniplib.utils; -import static edu.wpi.first.units.Units.*; - import edu.wpi.first.math.system.plant.DCMotor; import edu.wpi.first.units.measure.Angle; +import static edu.wpi.first.units.Units.*; + public class ManipArmConstants { - public final DCMotor gearbox; + public final DCMotor gearbox; - // The P gain for the PID controller that drives this arm. - public final double kArmKp; - public final double kArmKi; - public final double kArmKd; + // The P gain for the PID controller that drives this arm. + public final double kArmKp; + public final double kArmKi; + public final double kArmKd; - public final double kArmkS; // volts (V) - public final double kArmkG; // volts (V) - public final double kArmKv; // volts per velocity (V/RPM) - public final double kArmKa; // volts per acceleration (V/(RPM/s)) + public final double kArmkS; // volts (V) + public final double kArmkG; // volts (V) + public final double kArmKv; // volts per velocity (V/RPM) + public final double kArmKa; // volts per acceleration (V/(RPM/s)) - public final Angle kArmAllowedClosedLoopError; - public final double kArmReduction; - public final double kArmMass; // Kilograms - public final double kArmLength; - public final Angle kArmStartingAngle; - public final Angle kMinAngle; - public final Angle kMaxAngle; - public final double kArmRampRate; - public final Angle kArmOffsetToHorizantalZero; - public final boolean kArmInverted; + public final Angle kArmAllowedClosedLoopError; + public final double kArmReduction; + public final double kArmMass; // Kilograms + public final double kArmLength; + public final Angle kArmStartingAngle; + public final Angle kMinAngle; + public final Angle kMaxAngle; + public final double kArmRampRate; + public final Angle kArmOffsetToHorizantalZero; + public final boolean kArmInverted; - public final double kArmMaxVelocityRPM; - public final double kArmMaxAccelerationRPMperSecond; - public final int kArmStallCurrentLimitAmps; + public final double kArmMaxVelocityRPM; + public final double kArmMaxAccelerationRPMperSecond; + public final int kArmStallCurrentLimitAmps; - // Toggle for enabling advanced features, false will just use basic PID control. - public boolean kEnableAdvanced = false; + // Toggle for enabling advanced features, false will just use basic PID control. + public boolean kEnableAdvanced = false; - /** - * Sets the constant values for {@link maniplib.ManipArm}. - * - * @param gearbox DCMotor used to determine how many of which motor is being used. - * @param kArmKp PID kP Tuning Value. - * @param kArmKi PID kI Tuning Value. - * @param kArmKd PID kD Tuning Value. - * @param kArmkS FeedForward kS Tuning Value. volts(V) - * @param kArmkG FeedForward kV Tuning Value. volt per velocity (V/(m/s)) - * @param kArmkV FeedForward kA Tuning Value. volt per acceleration (V/(m/s²)) - * @param kArmkA FeedForward kA Tuning Value. volts(V) - * @param kArmReduction Gear ratio of the arm, use gearbox and sprockets. - * @param kArmMassLbs How much the arm weighs in pounds. - * @param kArmLengthInches How long the arm is in inches. Used in sim. - * @param kArmStartingAngle Where the arm sim should set the arm on start. - * @param kMinAngle Arms max height in degrees. Used for soft limits as well. - * @param kMaxAngle Arms min height in degrees. Used for soft limits as well. - * @param kArmInverted Whether to invert the drive direction of the arm. runArm(.1); should go up. - * @param kArmRampRate Elevators ramp rate. 0.5 is recommended for most. - * @param kArmOffsetToHorizantalZero Absolute encoder offset. Arm should be horizontal to the - * floor at 0. - * @param kArmAllowedClosedLoopError Allowed error in the pid control in degrees. - * @param kArmStallCurrentLimitAmps The arms stall limit. 30 is recommended for most. - * @param kArmMaxVelocityRPM Arms max velocity in rotations per second. - * @param kArmMaxAccelerationRPMperSecond Arms max Acceleration in rotations per second. Depends - * on specific arm config for accurate sim speed. - * @param kEnableAdvanced Determines whether to use advanced control and sim. - */ - public ManipArmConstants( - DCMotor gearbox, - double kArmKp, - double kArmKi, - double kArmKd, - double kArmkS, - double kArmkG, - double kArmkV, - double kArmkA, - double kArmReduction, - double kArmMassLbs, - double kArmLengthInches, - double kArmStartingAngle, - double kMinAngle, - double kMaxAngle, - boolean kArmInverted, - double kArmRampRate, - double kArmOffsetToHorizantalZero, - double kArmAllowedClosedLoopError, - int kArmStallCurrentLimitAmps, - double kArmMaxVelocityRPM, - double kArmMaxAccelerationRPMperSecond, - boolean kEnableAdvanced) { - this.gearbox = gearbox; - this.kArmKp = kArmKp; - this.kArmKi = kArmKi; - this.kArmKd = kArmKd; - this.kArmkS = kArmkS; - this.kArmkG = kArmkG; - this.kArmKv = kArmkV; - this.kArmKa = kArmkA; - this.kArmReduction = kArmReduction; - this.kArmMass = Kilograms.convertFrom(kArmMassLbs, Pounds); - this.kArmLength = Inches.of(kArmLengthInches).in(Meters); - this.kArmStartingAngle = Degrees.of(kArmStartingAngle); - this.kMinAngle = Degrees.of(kMinAngle); - this.kMaxAngle = Degrees.of(kMaxAngle); - this.kArmInverted = kArmInverted; - this.kArmRampRate = kArmRampRate; - this.kArmOffsetToHorizantalZero = Degrees.of(kArmOffsetToHorizantalZero); - this.kArmAllowedClosedLoopError = - ManipMath.Arm.convertAngleToSensorUnits( - kArmReduction, Degrees.of(kArmAllowedClosedLoopError)); - this.kArmStallCurrentLimitAmps = kArmStallCurrentLimitAmps; - this.kArmMaxVelocityRPM = - ManipMath.Arm.convertAngleToSensorUnits(kArmReduction, Degrees.of(kArmMaxVelocityRPM)) - .per(Second) - .in(RPM); - this.kArmMaxAccelerationRPMperSecond = - ManipMath.Arm.convertAngleToSensorUnits( - kArmReduction, Degrees.of(kArmMaxAccelerationRPMperSecond)) - .per(Second) - .per(Second) - .in(RPM.per(Second)); - this.kEnableAdvanced = kEnableAdvanced; - } + /** + * Sets the constant values for {@link maniplib.ManipArm}. + * + * @param gearbox DCMotor used to determine how many of which motor is being used. + * @param kArmKp PID kP Tuning Value. + * @param kArmKi PID kI Tuning Value. + * @param kArmKd PID kD Tuning Value. + * @param kArmkS FeedForward kS Tuning Value. volts(V) + * @param kArmkG FeedForward kV Tuning Value. volt per velocity (V/(m/s)) + * @param kArmkV FeedForward kA Tuning Value. volt per acceleration (V/(m/s²)) + * @param kArmkA FeedForward kA Tuning Value. volts(V) + * @param kArmReduction Gear ratio of the arm, use gearbox and sprockets. + * @param kArmMassLbs How much the arm weighs in pounds. + * @param kArmLengthInches How long the arm is in inches. Used in sim. + * @param kArmStartingAngle Where the arm sim should set the arm on start. + * @param kMinAngle Arms max height in degrees. Used for soft limits as well. + * @param kMaxAngle Arms min height in degrees. Used for soft limits as well. + * @param kArmInverted Whether to invert the drive direction of the arm. runArm(.1); should go up. + * @param kArmRampRate Elevators ramp rate. 0.5 is recommended for most. + * @param kArmOffsetToHorizantalZero Absolute encoder offset. Arm should be horizontal to the floor at 0. + * @param kArmAllowedClosedLoopError Allowed error in the pid control in degrees. + * @param kArmStallCurrentLimitAmps The arms stall limit. 30 is recommended for most. + * @param kArmMaxVelocityRPM Arms max velocity in rotations per second. + * @param kArmMaxAccelerationRPMperSecond Arms max Acceleration in rotations per second. Depends on specific arm config for accurate sim speed. + * @param kEnableAdvanced Determines whether to use advanced control and sim. + */ + public ManipArmConstants( + DCMotor gearbox, + double kArmKp, + double kArmKi, + double kArmKd, + double kArmkS, + double kArmkG, + double kArmkV, + double kArmkA, + double kArmReduction, + double kArmMassLbs, + double kArmLengthInches, + double kArmStartingAngle, + double kMinAngle, + double kMaxAngle, + boolean kArmInverted, + double kArmRampRate, + double kArmOffsetToHorizantalZero, + double kArmAllowedClosedLoopError, + int kArmStallCurrentLimitAmps, + double kArmMaxVelocityRPM, + double kArmMaxAccelerationRPMperSecond, + boolean kEnableAdvanced + ) { + this.gearbox = gearbox; + this.kArmKp = kArmKp; + this.kArmKi = kArmKi; + this.kArmKd = kArmKd; + this.kArmkS = kArmkS; + this.kArmkG = kArmkG; + this.kArmKv = kArmkV; + this.kArmKa = kArmkA; + this.kArmReduction = kArmReduction; + this.kArmMass = Kilograms.convertFrom(kArmMassLbs, Pounds); + this.kArmLength = Inches.of(kArmLengthInches).in(Meters); + this.kArmStartingAngle = Degrees.of(kArmStartingAngle); + this.kMinAngle = Degrees.of(kMinAngle); + this.kMaxAngle = Degrees.of(kMaxAngle); + this.kArmInverted = kArmInverted; + this.kArmRampRate = kArmRampRate; + this.kArmOffsetToHorizantalZero = Degrees.of(kArmOffsetToHorizantalZero); + this.kArmAllowedClosedLoopError = ManipMath.Arm.convertAngleToSensorUnits(kArmReduction, Degrees.of(kArmAllowedClosedLoopError)); + this.kArmStallCurrentLimitAmps = kArmStallCurrentLimitAmps; + this.kArmMaxVelocityRPM = ManipMath.Arm.convertAngleToSensorUnits(kArmReduction, Degrees.of(kArmMaxVelocityRPM)).per( + Second).in(RPM); + this.kArmMaxAccelerationRPMperSecond = ManipMath.Arm.convertAngleToSensorUnits(kArmReduction, Degrees.of(kArmMaxAccelerationRPMperSecond)).per( + Second).per(Second) + .in(RPM.per(Second)); + this.kEnableAdvanced = kEnableAdvanced; + } } diff --git a/src/main/java/maniplib/utils/ManipElevatorConstants.java b/src/main/java/maniplib/utils/ManipElevatorConstants.java index 75429a7..1772a31 100644 --- a/src/main/java/maniplib/utils/ManipElevatorConstants.java +++ b/src/main/java/maniplib/utils/ManipElevatorConstants.java @@ -1,116 +1,109 @@ package maniplib.utils; -import static edu.wpi.first.units.Units.*; - import edu.wpi.first.math.system.plant.DCMotor; import edu.wpi.first.units.measure.Distance; +import static edu.wpi.first.units.Units.*; + public class ManipElevatorConstants { - public final DCMotor gearbox; - // PID Tuning values - public final double kElevatorKp; - public final double kElevatorKi; - public final double kElevatorKd; - // FeedForward Values - public final double kElevatorkS; // volts(V) - public final double kElevatorkV; // volt per velocity (V/(m/s)) - public final double kElevatorkA; // volt per acceleration (V/(m/s²)) - public final double kElevatorkG; // volts (V) - // Sim values for calculations - public final double kElevatorGearing; - public final double kElevatorDrumRadius; - public final double kElevatorCarriageMass; - // Elevator movement constraints - public final Distance kStartingHeightSim; - public final Distance kMaxHeight; - public final Distance kMinHeight; - // Elevator speed constraints - public final double kElevatorRampRate; - public final int kElevatorCurrentLimit; - public final double kMaxVelocity; - public final double kMaxAcceleration; - // Offset for an optional but heavily recommended abs encoder - public final double kAbsEncoderOffset; - // Whether to use basic or advanced controls and sim. - public final boolean kEnableAdvanced; - public final boolean kIsInverted; + public final DCMotor gearbox; + // PID Tuning values + public final double kElevatorKp; + public final double kElevatorKi; + public final double kElevatorKd; + // FeedForward Values + public final double kElevatorkS; // volts(V) + public final double kElevatorkV; // volt per velocity (V/(m/s)) + public final double kElevatorkA; // volt per acceleration (V/(m/s²)) + public final double kElevatorkG; // volts (V) + // Sim values for calculations + public final double kElevatorGearing; + public final double kElevatorDrumRadius; + public final double kElevatorCarriageMass; + // Elevator movement constraints + public final Distance kStartingHeightSim; + public final Distance kMaxHeight; + public final Distance kMinHeight; + // Elevator speed constraints + public final double kElevatorRampRate; + public final int kElevatorCurrentLimit; + public final double kMaxVelocity; + public final double kMaxAcceleration; + // Offset for an optional but heavily recommended abs encoder + public final double kAbsEncoderOffset; + // Whether to use basic or advanced controls and sim. + public final boolean kEnableAdvanced; + public final boolean kIsInverted; - /** - * Sets the constant values for {@link maniplib.ManipElevator}. - * - * @param gearbox DCMotor used to determine how many of which motor is being used. - * @param kElevatorKp PID kP Tuning Value. - * @param kElevatorKi PID kI Tuning Value. - * @param kElevatorKd PID kD Tuning Value. - * @param kElevatorkS FeedForward kS Tuning Value. volts(V) - * @param kElevatorkV FeedForward kV Tuning Value. volt per velocity (V/(m/s)) - * @param kElevatorkA FeedForward kA Tuning Value. volt per acceleration (V/(m/s²)) - * @param kElevatorkG FeedForward kG Tuning Value. volts (V) - * @param kElevatorGearing Gear ratio of the elevator, use gearbox w/o sprockets. - * @param kElevatorDrumRadiusInches Radius of the drum, sprocket radius if using chain. - * @param kElevatorCarriageMassLbs How much the carriage weighs in pounds. - * @param kStartingSimHeightInches Where the elevator sim should set the elevator on start, in - * inches. - * @param kMaxHeightInches Elevators max height in inches. Used for soft limits as well. - * @param kMinHeightInches Elevators min height in inches. Used for soft limits as well. - * @param kIsInverted Whether to invert the lead motor. Positive speed should go up. - * @param kElevatorRampRate Elevators ramp rate. 0.1 is recommended for most. - * @param kElevatorCurrentLimit Elevators current limit. 40 is recommended for most. - * @param kMaxVelocityMps Elevators max velocity in meters per second. - * @param kMaxAccelerationMps Elevators max acceleration in meters per second. - * @param kAbsEncoderOffset Offset for an optional but heavily recommended abs encoder. Set - * elevator to kMinHeight then input the raw abs output. - * @param kEnableAdvanced Determines whether to use advanced control and sim. - */ - public ManipElevatorConstants( - DCMotor gearbox, - double kElevatorKp, - double kElevatorKi, - double kElevatorKd, - double kElevatorkS, - double kElevatorkV, - double kElevatorkA, - double kElevatorkG, - double kElevatorGearing, - double kElevatorDrumRadiusInches, - double kElevatorCarriageMassLbs, - double kStartingSimHeightInches, - double kMaxHeightInches, - double kMinHeightInches, - boolean kIsInverted, - double kElevatorRampRate, - int kElevatorCurrentLimit, - double kMaxVelocityMps, - double kMaxAccelerationMps, - double kAbsEncoderOffset, - boolean kEnableAdvanced) { - this.gearbox = gearbox; - this.kElevatorKp = kElevatorKp; - this.kElevatorKi = kElevatorKi; - this.kElevatorKd = kElevatorKd; - this.kElevatorkS = kElevatorkS; - this.kElevatorkV = kElevatorkV; - this.kElevatorkA = kElevatorkA; - this.kElevatorkG = kElevatorkG; - this.kElevatorGearing = kElevatorGearing; - this.kElevatorDrumRadius = - Meters.convertFrom(kElevatorDrumRadiusInches, Inches); // // Convert inches to meter double. - this.kElevatorCarriageMass = Kilograms.convertFrom(kElevatorCarriageMassLbs, Pounds); - this.kStartingHeightSim = - Meters.of( - Meters.convertFrom(kStartingSimHeightInches, Inches)); // Convert inches to meter units. - this.kMaxHeight = - Meters.of(Meters.convertFrom(kMaxHeightInches, Inches)); // Convert inches to meter units. - this.kMinHeight = - Meters.of(Meters.convertFrom(kMinHeightInches, Inches)); // Convert inches to meter units. - this.kIsInverted = kIsInverted; - this.kElevatorRampRate = kElevatorRampRate; - this.kElevatorCurrentLimit = kElevatorCurrentLimit; - this.kMaxVelocity = Meters.of(kMaxVelocityMps).per(Second).in(MetersPerSecond); - this.kMaxAcceleration = - Meters.of(kMaxAccelerationMps).per(Second).per(Second).in(MetersPerSecondPerSecond); - this.kAbsEncoderOffset = kAbsEncoderOffset; - this.kEnableAdvanced = kEnableAdvanced; - } + /** + * Sets the constant values for {@link maniplib.ManipElevator}. + * + * @param gearbox DCMotor used to determine how many of which motor is being used. + * @param kElevatorKp PID kP Tuning Value. + * @param kElevatorKi PID kI Tuning Value. + * @param kElevatorKd PID kD Tuning Value. + * @param kElevatorkS FeedForward kS Tuning Value. volts(V) + * @param kElevatorkV FeedForward kV Tuning Value. volt per velocity (V/(m/s)) + * @param kElevatorkA FeedForward kA Tuning Value. volt per acceleration (V/(m/s²)) + * @param kElevatorkG FeedForward kG Tuning Value. volts (V) + * @param kElevatorGearing Gear ratio of the elevator, use gearbox w/o sprockets. + * @param kElevatorDrumRadiusInches Radius of the drum, sprocket radius if using chain. + * @param kElevatorCarriageMassLbs How much the carriage weighs in pounds. + * @param kStartingSimHeightInches Where the elevator sim should set the elevator on start, in inches. + * @param kMaxHeightInches Elevators max height in inches. Used for soft limits as well. + * @param kMinHeightInches Elevators min height in inches. Used for soft limits as well. + * @param kIsInverted Whether to invert the lead motor. Positive speed should go up. + * @param kElevatorRampRate Elevators ramp rate. 0.1 is recommended for most. + * @param kElevatorCurrentLimit Elevators current limit. 40 is recommended for most. + * @param kMaxVelocityMps Elevators max velocity in meters per second. + * @param kMaxAccelerationMps Elevators max acceleration in meters per second. + * @param kAbsEncoderOffset Offset for an optional but heavily recommended abs encoder. Set elevator to kMinHeight then input the raw abs output. + * @param kEnableAdvanced Determines whether to use advanced control and sim. + */ + public ManipElevatorConstants( + DCMotor gearbox, + double kElevatorKp, + double kElevatorKi, + double kElevatorKd, + double kElevatorkS, + double kElevatorkV, + double kElevatorkA, + double kElevatorkG, + double kElevatorGearing, + double kElevatorDrumRadiusInches, + double kElevatorCarriageMassLbs, + double kStartingSimHeightInches, + double kMaxHeightInches, + double kMinHeightInches, + boolean kIsInverted, + double kElevatorRampRate, + int kElevatorCurrentLimit, + double kMaxVelocityMps, + double kMaxAccelerationMps, + double kAbsEncoderOffset, + boolean kEnableAdvanced + ) { + this.gearbox = gearbox; + this.kElevatorKp = kElevatorKp; + this.kElevatorKi = kElevatorKi; + this.kElevatorKd = kElevatorKd; + this.kElevatorkS = kElevatorkS; + this.kElevatorkV = kElevatorkV; + this.kElevatorkA = kElevatorkA; + this.kElevatorkG = kElevatorkG; + this.kElevatorGearing = kElevatorGearing; + this.kElevatorDrumRadius = Meters.convertFrom(kElevatorDrumRadiusInches, Inches); // // Convert inches to meter double. + this.kElevatorCarriageMass = Kilograms.convertFrom(kElevatorCarriageMassLbs, Pounds); + this.kStartingHeightSim = Meters.of(Meters.convertFrom(kStartingSimHeightInches, Inches)); // Convert inches to meter units. + this.kMaxHeight = Meters.of(Meters.convertFrom(kMaxHeightInches, Inches)); // Convert inches to meter units. + this.kMinHeight = Meters.of(Meters.convertFrom(kMinHeightInches, Inches)); // Convert inches to meter units. + this.kIsInverted = kIsInverted; + this.kElevatorRampRate = kElevatorRampRate; + this.kElevatorCurrentLimit = kElevatorCurrentLimit; + this.kMaxVelocity = Meters.of(kMaxVelocityMps).per(Second).in(MetersPerSecond); + this.kMaxAcceleration = Meters.of(kMaxAccelerationMps).per(Second).per(Second).in(MetersPerSecondPerSecond); + this.kAbsEncoderOffset = kAbsEncoderOffset; + this.kEnableAdvanced = kEnableAdvanced; + } } diff --git a/src/main/java/maniplib/utils/ManipMath.java b/src/main/java/maniplib/utils/ManipMath.java index 6dec99f..3dd30ed 100644 --- a/src/main/java/maniplib/utils/ManipMath.java +++ b/src/main/java/maniplib/utils/ManipMath.java @@ -1,57 +1,60 @@ package maniplib.utils; -import static edu.wpi.first.units.Units.Meters; -import static edu.wpi.first.units.Units.Rotations; - import edu.wpi.first.units.measure.Angle; import edu.wpi.first.units.measure.Distance; -public class ManipMath { +import static edu.wpi.first.units.Units.Meters; +import static edu.wpi.first.units.Units.Rotations; - public static class Arm { +public class ManipMath { - /** - * Convert {@link Angle} into motor {@link Angle} - * - * @param measurement Angle, to convert. - * @return {@link Angle} equivalent to rotations of the motor. - */ - public static Angle convertAngleToSensorUnits(double reduction, Angle measurement) { - return Rotations.of(measurement.in(Rotations) * reduction); - } + public static class Arm { + + /** + * Convert {@link Angle} into motor {@link Angle} + * + * @param measurement Angle, to convert. + * @return {@link Angle} equivalent to rotations of the motor. + */ + public static Angle convertAngleToSensorUnits(double reduction, Angle measurement) { + return Rotations.of(measurement.in(Rotations) * reduction); + } + + /** + * Convert motor rotations {@link Angle} into usable {@link Angle} + * + * @param measurement Motor rotations + * @return Usable angle. + */ + public static Angle convertSensorUnitsToAngle(double reduction, Angle measurement) { + return Rotations.of(measurement.in(Rotations) / reduction); + + } - /** - * Convert motor rotations {@link Angle} into usable {@link Angle} - * - * @param measurement Motor rotations - * @return Usable angle. - */ - public static Angle convertSensorUnitsToAngle(double reduction, Angle measurement) { - return Rotations.of(measurement.in(Rotations) / reduction); - } - } - - public static class Elevator { - /** - * Convert {@link Distance} into {@link Angle} - * - * @param distance Distance, usually Meters. - * @return {@link Angle} equivalent to rotations of the motor. - */ - public static Angle convertDistanceToRotations( - double drumRadius, double gearing, Distance distance) { - return Rotations.of(distance.in(Meters) / (drumRadius * 2 * Math.PI) * gearing); } - /** - * Convert {@link Angle} into {@link Distance} - * - * @param rotations Rotations of the motor - * @return {@link Distance} of the elevator. - */ - public static Distance convertRotationsToDistance( - double drumRadius, double gearing, Angle rotations) { - return Meters.of((rotations.in(Rotations) / gearing) * (drumRadius * 2 * Math.PI)); + public static class Elevator { + /** + * Convert {@link Distance} into {@link Angle} + * + * @param distance Distance, usually Meters. + * @return {@link Angle} equivalent to rotations of the motor. + */ + public static Angle convertDistanceToRotations(double drumRadius, double gearing, Distance distance) { + return Rotations.of(distance.in(Meters) / + (drumRadius * 2 * Math.PI) * + gearing); + } + + /** + * Convert {@link Angle} into {@link Distance} + * + * @param rotations Rotations of the motor + * @return {@link Distance} of the elevator. + */ + public static Distance convertRotationsToDistance(double drumRadius, double gearing, Angle rotations) { + return Meters.of((rotations.in(Rotations) / gearing) * + (drumRadius * 2 * Math.PI)); + } } - } } diff --git a/src/main/java/maniplib/utils/PIDControlType.java b/src/main/java/maniplib/utils/PIDControlType.java index d5183f8..61f3ea7 100644 --- a/src/main/java/maniplib/utils/PIDControlType.java +++ b/src/main/java/maniplib/utils/PIDControlType.java @@ -2,13 +2,20 @@ public class PIDControlType { - public static ControlType controlType; - - /** ControlType to run PIDControllers at. */ - public enum ControlType { - /** Position Control. */ - POSITION, - /** Velocity Control. */ - VELOCITY - } + public static ControlType controlType; + + /** + * ControlType to run PIDControllers at. + */ + public enum ControlType { + /** + * Position Control. + */ + POSITION, + /** + * Velocity Control. + */ + VELOCITY + } + } diff --git a/src/main/java/maniplib/utils/PIDFConfig.java b/src/main/java/maniplib/utils/PIDFConfig.java index 14f92f4..b2facf3 100644 --- a/src/main/java/maniplib/utils/PIDFConfig.java +++ b/src/main/java/maniplib/utils/PIDFConfig.java @@ -3,82 +3,99 @@ import edu.wpi.first.math.controller.PIDController; import maniplib.utils.deserializer.PIDFRange; -/** Hold the PIDF and Integral Zone values for a PID. */ +/** + * Hold the PIDF and Integral Zone values for a PID. + */ public class PIDFConfig { - /** Proportional Gain for PID. */ - public double p; - /** Integral Gain for PID. */ - public double i; - /** Derivative Gain for PID. */ - public double d; - /** Feedforward value for PID. */ - public double f; - /** Integral zone of the PID. */ - public double iz; + /** + * Proportional Gain for PID. + */ + public double p; + /** + * Integral Gain for PID. + */ + public double i; + /** + * Derivative Gain for PID. + */ + public double d; + /** + * Feedforward value for PID. + */ + public double f; + /** + * Integral zone of the PID. + */ + public double iz; - /** The PIDF output range. */ - public PIDFRange output = new PIDFRange(); + /** + * The PIDF output range. + */ + public PIDFRange output = new PIDFRange(); - /** Used when parsing PIDF values from JSON. */ - public PIDFConfig() {} + /** + * Used when parsing PIDF values from JSON. + */ + public PIDFConfig() { + } - /** - * PIDF Config constructor to contain the values. - * - * @param p P gain. - * @param i I gain. - * @param d D gain. - * @param f F gain. - * @param iz Intergral zone. - */ - public PIDFConfig(double p, double i, double d, double f, double iz) { - this.p = p; - this.i = i; - this.d = d; - this.f = f; - this.iz = iz; - } + /** + * PIDF Config constructor to contain the values. + * + * @param p P gain. + * @param i I gain. + * @param d D gain. + * @param f F gain. + * @param iz Intergral zone. + */ + public PIDFConfig(double p, double i, double d, double f, double iz) { + this.p = p; + this.i = i; + this.d = d; + this.f = f; + this.iz = iz; + } - /** - * PIDF Config constructor to contain the values. - * - * @param p P gain. - * @param i I gain. - * @param d D gain. - * @param f F gain. - */ - public PIDFConfig(double p, double i, double d, double f) { - this(p, i, d, f, 0); - } + /** + * PIDF Config constructor to contain the values. + * + * @param p P gain. + * @param i I gain. + * @param d D gain. + * @param f F gain. + */ + public PIDFConfig(double p, double i, double d, double f) { + this(p, i, d, f, 0); + } - /** - * PIDF Config constructor to contain the values. - * - * @param p P gain. - * @param i I gain. - * @param d D gain. - */ - public PIDFConfig(double p, double i, double d) { - this(p, i, d, 0, 0); - } + /** + * PIDF Config constructor to contain the values. + * + * @param p P gain. + * @param i I gain. + * @param d D gain. + */ + public PIDFConfig(double p, double i, double d) { + this(p, i, d, 0, 0); + } - /** - * PIDF Config constructor to contain the values. - * - * @param p P gain. - * @param d D gain. - */ - public PIDFConfig(double p, double d) { - this(p, 0, d, 0, 0); - } + /** + * PIDF Config constructor to contain the values. + * + * @param p P gain. + * @param d D gain. + */ + public PIDFConfig(double p, double d) { + this(p, 0, d, 0, 0); + } - /** - * Create a PIDController from the PID values. - * - * @return PIDController. - */ - public PIDController createPIDController() { - return new PIDController(p, i, d); - } + /** + * Create a PIDController from the PID values. + * + * @return PIDController. + */ + public PIDController createPIDController() { + return new PIDController(p, i, d); + } } diff --git a/src/main/java/maniplib/utils/deserializer/PIDFRange.java b/src/main/java/maniplib/utils/deserializer/PIDFRange.java index 339ad79..2b67aa7 100644 --- a/src/main/java/maniplib/utils/deserializer/PIDFRange.java +++ b/src/main/java/maniplib/utils/deserializer/PIDFRange.java @@ -1,10 +1,16 @@ package maniplib.utils.deserializer; -/** Class to hold the minimum and maximum input or output of the PIDF. */ +/** + * Class to hold the minimum and maximum input or output of the PIDF. + */ public class PIDFRange { - /** Minimum value. */ - public double min = -1; - /** Maximum value. */ - public double max = 1; + /** + * Minimum value. + */ + public double min = -1; + /** + * Maximum value. + */ + public double max = 1; }