diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html index f5e285c..00d47cc 100644 --- a/docs/allclasses-index.html +++ b/docs/allclasses-index.html @@ -1,11 +1,11 @@ - + All Classes and Interfaces - + @@ -128,6 +128,15 @@

All Classes and Interfaces<
Drive motor composite JSON parse class.
+
IMULinearMovingAverageFilter
+
+
A linear filter that does not calculate() each time a value is added to + the DoubleCircularBuffer.
+
+
IMUVelocity
+
+
Generic IMU Velocity filter.
+
LocationJson
Location JSON parsed class.
diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html index 9075318..8814586 100644 --- a/docs/allpackages-index.html +++ b/docs/allpackages-index.html @@ -1,11 +1,11 @@ - + All Packages - + diff --git a/docs/constant-values.html b/docs/constant-values.html index 5c7aafa..7d739a3 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -1,11 +1,11 @@ - + Constant Field Values - + diff --git a/docs/help-doc.html b/docs/help-doc.html index c639680..ca3580f 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -1,11 +1,11 @@ - + API Help - + diff --git a/docs/index-files/index-1.html b/docs/index-files/index-1.html index f2979ec..277368d 100644 --- a/docs/index-files/index-1.html +++ b/docs/index-files/index-1.html @@ -1,11 +1,11 @@ - + A-Index - + @@ -117,6 +117,10 @@

A

Add slew rate limiters to all controls.
+
addValue(double) - Method in class swervelib.math.IMULinearMovingAverageFilter
+
+
Add a value to the DoubleCircularBuffer
+
addVisionMeasurement(Pose2d, double) - Method in class swervelib.SwerveDrive
Add a vision measurement to the SwerveDrivePoseEstimator and update the SwerveIMU gyro reading with @@ -283,6 +287,18 @@

A

PIDF configuration options for the angle motor closed-loop PID controller.
+
angularVelocityCoefficient - Variable in class swervelib.SwerveDrive
+
+
Angular Velocity Correction Coefficent (expected values between -0.15 and 0.15).
+
+
angularVelocityCorrection - Variable in class swervelib.SwerveDrive
+
+
Correct for skew that scales with angular velocity in SwerveDrive.drive(Translation2d, double, boolean, boolean)
+
+
angularVelocitySkewCorrection(ChassisSpeeds) - Method in class swervelib.SwerveDrive
+
+
Correct for skew that worsens as angular velocity increases
+
antiJitter(SwerveModuleState, SwerveModuleState, double) - Static method in class swervelib.math.SwerveMath
Perform anti-jitter within modules if the speed requested is too low.
@@ -303,6 +319,16 @@

A

The absolute max speed that your robot can reach while translating in meters per second.
+
autonomousAngularVelocityCorrection - Variable in class swervelib.SwerveDrive
+
+
Correct for skew that scales with angular velocity in SwerveDrive.setChassisSpeeds(ChassisSpeeds chassisSpeeds) + during auto.
+
+
autonomousChassisVelocityCorrection - Variable in class swervelib.SwerveDrive
+
+
Correct chassis velocity in SwerveDrive.setChassisSpeeds(ChassisSpeeds chassisSpeeds) (auto) using 254's + correction during auto.
+
A B C D E F G H I K L M N O P Q R S T U V W X Y Z 
All Classes and Interfaces|All Packages|Constant Field Values
diff --git a/docs/index-files/index-10.html b/docs/index-files/index-10.html index c66c986..22e5a6a 100644 --- a/docs/index-files/index-10.html +++ b/docs/index-files/index-10.html @@ -1,11 +1,11 @@ - + K-Index - + diff --git a/docs/index-files/index-11.html b/docs/index-files/index-11.html index 07ffb0a..163704c 100644 --- a/docs/index-files/index-11.html +++ b/docs/index-files/index-11.html @@ -1,11 +1,11 @@ - + L-Index - + diff --git a/docs/index-files/index-12.html b/docs/index-files/index-12.html index 08f79b2..163a6b3 100644 --- a/docs/index-files/index-12.html +++ b/docs/index-files/index-12.html @@ -1,11 +1,11 @@ - + M-Index - + @@ -73,6 +73,14 @@

M

Tracks the distance travelled of a position motor
+
m_inputGain - Variable in class swervelib.math.IMULinearMovingAverageFilter
+
+
Gain on each reading.
+
+
m_inputs - Variable in class swervelib.math.IMULinearMovingAverageFilter
+
+
Circular buffer storing the current IMU readings
+
m_velocity - Static variable in class swervelib.SwerveDriveTest
Tracks the velocity of a positional motor
@@ -239,6 +247,10 @@

M

Default constructor with values.
+
movementOptimizations(ChassisSpeeds, boolean, boolean) - Method in class swervelib.SwerveDrive
+
+
Enable desired drive corrections
+
A B C D E F G H I K L M N O P Q R S T U V W X Y Z 
All Classes and Interfaces|All Packages|Constant Field Values diff --git a/docs/index-files/index-13.html b/docs/index-files/index-13.html index bbf4bdb..99147c3 100644 --- a/docs/index-files/index-13.html +++ b/docs/index-files/index-13.html @@ -1,11 +1,11 @@ - + N-Index - + @@ -101,6 +101,10 @@

N

Normalize an angle to be within 0 to 360.
+
notifier - Variable in class swervelib.imu.IMUVelocity
+
+
WPILib Notifier to keep IMU velocity up to date.
+
A B C D E F G H I K L M N O P Q R S T U V W X Y Z 
All Classes and Interfaces|All Packages|Constant Field Values diff --git a/docs/index-files/index-14.html b/docs/index-files/index-14.html index 543da7e..bdd7988 100644 --- a/docs/index-files/index-14.html +++ b/docs/index-files/index-14.html @@ -1,11 +1,11 @@ - + O-Index - + diff --git a/docs/index-files/index-15.html b/docs/index-files/index-15.html index ef0aff1..8a4dde6 100644 --- a/docs/index-files/index-15.html +++ b/docs/index-files/index-15.html @@ -1,11 +1,11 @@ - + P-Index - + @@ -159,6 +159,10 @@

P

Logical inverse of the Pose exponential from 254.
+
position - Variable in class swervelib.imu.IMUVelocity
+
+
Tracks the previous loop's position as a Rotation2d.
+
position - Variable in class swervelib.math.Matter
Position in meters from robot center in 3d space.
diff --git a/docs/index-files/index-16.html b/docs/index-files/index-16.html index c95dac9..8cd2236 100644 --- a/docs/index-files/index-16.html +++ b/docs/index-files/index-16.html @@ -1,11 +1,11 @@ - + Q-Index - + diff --git a/docs/index-files/index-17.html b/docs/index-files/index-17.html index f1587c0..5269f9e 100644 --- a/docs/index-files/index-17.html +++ b/docs/index-files/index-17.html @@ -1,11 +1,11 @@ - + R-Index - + diff --git a/docs/index-files/index-18.html b/docs/index-files/index-18.html index 173f6ed..12cf665 100644 --- a/docs/index-files/index-18.html +++ b/docs/index-files/index-18.html @@ -1,11 +1,11 @@ - + S-Index - + @@ -169,6 +169,11 @@

S

Sets up the SysId runner and logger for the angle motors
+
setAngularVelocityCompensation(boolean, boolean, double) - Method in class swervelib.SwerveDrive
+
+
Enables angular velocity skew correction in teleop and/or autonomous + and sets the angular velocity coefficient for both modes
+
setAntiJitter(boolean) - Method in class swervelib.SwerveModule
Set the antiJitter functionality, if true the modules will NOT auto center.
@@ -177,9 +182,13 @@

S

Enable auto-centering module wheels.
+
setChassisDiscretization(boolean, boolean, double) - Method in class swervelib.SwerveDrive
+
+
Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop and/or auto
+
setChassisDiscretization(boolean, double) - Method in class swervelib.SwerveDrive
-
Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction
+
Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop
setChassisSpeeds(ChassisSpeeds) - Method in class swervelib.SwerveDrive
@@ -244,6 +253,14 @@

S

Sets up the SysId runner and logger for the drive motors
+
setEncoderAutoSynchronize(boolean) - Method in class swervelib.SwerveModule
+
+
Enable auto synchronization for encoders during a match.
+
+
setEncoderAutoSynchronize(boolean, double) - Method in class swervelib.SwerveModule
+
+
Enable auto synchronization for encoders during a match.
+
setFeedforward(SimpleMotorFeedforward) - Method in class swervelib.SwerveModule
Set the feedforward attributes to the given parameters.
@@ -351,19 +368,23 @@

S

setMaximumSpeed(double) - Method in class swervelib.SwerveDrive
Set the maximum speed of the drive motors, modified SwerveDrive.maxSpeedMPS which is used for the - SwerveDrive.setRawModuleStates(SwerveModuleState[], boolean) function and + SwerveDrive.setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean) function and SwerveController.getTargetSpeeds(double, double, double, double, double) functions.
setMaximumSpeed(double, boolean, double) - Method in class swervelib.SwerveDrive
Set the maximum speed of the drive motors, modified SwerveDrive.maxSpeedMPS which is used for the - SwerveDrive.setRawModuleStates(SwerveModuleState[], boolean) function and + SwerveDrive.setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean) function and SwerveController.getTargetSpeeds(double, double, double, double, double) functions.
setMaximumSpeeds(double, double, double) - Method in class swervelib.SwerveDrive
Set the maximum speeds for desaturation.
+
setModuleEncoderAutoSynchronize(boolean, double) - Method in class swervelib.SwerveDrive
+
+
Enable auto synchronization for encoders during a match.
+
setModuleStates(SwerveModuleState[], boolean) - Method in class swervelib.SwerveDrive
Set the module states (azimuth and velocity) directly.
@@ -460,7 +481,7 @@

S

Set the integrated encoder position.
-
setRawModuleStates(SwerveModuleState[], boolean) - Method in class swervelib.SwerveDrive
+
setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean) - Method in class swervelib.SwerveDrive
Set the module states (azimuth and velocity) directly.
@@ -884,6 +905,14 @@

S

Construct a swerve parser.
+
synchronizeEncoderDeadband - Variable in class swervelib.SwerveModule
+
+
Encoder synchronization deadband in degrees.
+
+
synchronizeEncoderEnabled - Variable in class swervelib.SwerveModule
+
+
Encoder, Absolute encoder synchronization enabled.
+
synchronizeEncoderQueued - Variable in class swervelib.SwerveModule
Encoder synchronization queued.
diff --git a/docs/index-files/index-19.html b/docs/index-files/index-19.html index bdb1ab3..bff63c5 100644 --- a/docs/index-files/index-19.html +++ b/docs/index-files/index-19.html @@ -1,11 +1,11 @@ - + T-Index - + @@ -99,6 +99,10 @@

T

Main timer to simulate the passage of time.
+
timestamp - Variable in class swervelib.imu.IMUVelocity
+
+
Tracks the previous loop's recorded time.
+
timestamp - Variable in class swervelib.parser.Cache
Timestamp in microseconds.
diff --git a/docs/index-files/index-2.html b/docs/index-files/index-2.html index de5a517..3df73ef 100644 --- a/docs/index-files/index-2.html +++ b/docs/index-files/index-2.html @@ -1,11 +1,11 @@ - + B-Index - + diff --git a/docs/index-files/index-20.html b/docs/index-files/index-20.html index e71ba50..25bf0a4 100644 --- a/docs/index-files/index-20.html +++ b/docs/index-files/index-20.html @@ -1,11 +1,11 @@ - + U-Index - + @@ -53,6 +53,10 @@

Index

A B C D E F G H I K L M N O P Q R S T U V W X Y Z 
All Classes and Interfaces|All Packages|Constant Field Values

U

+
update() - Method in class swervelib.imu.IMUVelocity
+
+
Update the robot's rotational velocity based on the current gyro position.
+
update() - Method in class swervelib.parser.Cache
Update the cache value and timestamp.
diff --git a/docs/index-files/index-21.html b/docs/index-files/index-21.html index b759b0d..3c10ebf 100644 --- a/docs/index-files/index-21.html +++ b/docs/index-files/index-21.html @@ -1,11 +1,11 @@ - + V-Index - + @@ -97,6 +97,10 @@

V

Returns an array containing the constants of this enum class, in the order they are declared.
+
velocity - Variable in class swervelib.imu.IMUVelocity
+
+
The calculated velocity of the robot based on averaged IMU measurements.
+
velocity - Variable in class swervelib.motors.SparkMaxSwerve
Supplier for the velocity of the motor controller.
@@ -109,6 +113,11 @@

V

Slot 2, used for velocity PID's.
+
velocityFilter - Variable in class swervelib.imu.IMUVelocity
+
+
Linear filter used to calculate velocity, we use a custom filter class + to prevent unwanted operations.
+
velocityPIDF - Variable in class swervelib.parser.SwerveModuleConfiguration
PIDF configuration options for the drive motor closed-loop PID controller.
diff --git a/docs/index-files/index-22.html b/docs/index-files/index-22.html index 6bcb55b..0b67995 100644 --- a/docs/index-files/index-22.html +++ b/docs/index-files/index-22.html @@ -1,11 +1,11 @@ - + W-Index - + diff --git a/docs/index-files/index-23.html b/docs/index-files/index-23.html index 0619bac..7fc6a31 100644 --- a/docs/index-files/index-23.html +++ b/docs/index-files/index-23.html @@ -1,11 +1,11 @@ - + X-Index - + diff --git a/docs/index-files/index-24.html b/docs/index-files/index-24.html index c42e8dc..fc2f8d4 100644 --- a/docs/index-files/index-24.html +++ b/docs/index-files/index-24.html @@ -1,11 +1,11 @@ - + Y-Index - + diff --git a/docs/index-files/index-25.html b/docs/index-files/index-25.html index 4e1fa29..9c17c42 100644 --- a/docs/index-files/index-25.html +++ b/docs/index-files/index-25.html @@ -1,11 +1,11 @@ - + Z-Index - + diff --git a/docs/index-files/index-3.html b/docs/index-files/index-3.html index bb30da1..32ef29b 100644 --- a/docs/index-files/index-3.html +++ b/docs/index-files/index-3.html @@ -1,11 +1,11 @@ - + C-Index - + @@ -65,6 +65,10 @@

C

Calculates the maximum acceleration allowed in a direction without tipping the robot.
+
calculate() - Method in class swervelib.math.IMULinearMovingAverageFilter
+
+
Calculate the average of the samples in the buffer
+
calculate() - Method in class swervelib.parser.json.modules.AngleConversionFactorsJson
Calculate the drive conversion factor.
@@ -141,6 +145,14 @@

C

Set the modules to center to 0.
+
cfg - Variable in class swervelib.imu.Pigeon2Swerve
+
+
Pigeon2 configurator.
+
+
cfg - Variable in class swervelib.motors.TalonFXSwerve
+
+
Current TalonFX Configurator.
+
chassisVelocityCorrection - Variable in class swervelib.SwerveDrive
Correct chassis velocity in SwerveDrive.drive(Translation2d, double, boolean, boolean) using 254's @@ -477,6 +489,10 @@

C

Create a SwerveIMU from the given configuration.
+
createIMUVelocity(SwerveIMU) - Static method in class swervelib.imu.IMUVelocity
+
+
Static factory for IMU Velocity.
+
createModuleConfiguration(PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, String) - Method in class swervelib.parser.json.ModuleJson
Create the swerve module configuration based off of parsed data.
diff --git a/docs/index-files/index-4.html b/docs/index-files/index-4.html index 7774bcf..187b3ef 100644 --- a/docs/index-files/index-4.html +++ b/docs/index-files/index-4.html @@ -1,11 +1,11 @@ - + D-Index - + diff --git a/docs/index-files/index-5.html b/docs/index-files/index-5.html index 16258a2..6441c8c 100644 --- a/docs/index-files/index-5.html +++ b/docs/index-files/index-5.html @@ -1,11 +1,11 @@ - + E-Index - + diff --git a/docs/index-files/index-6.html b/docs/index-files/index-6.html index 161da6a..3bb3f33 100644 --- a/docs/index-files/index-6.html +++ b/docs/index-files/index-6.html @@ -1,11 +1,11 @@ - + F-Index - + @@ -205,6 +205,10 @@

F

Find the minimum amount of power required to move the swerve drive motors.
+
firstCycle - Variable in class swervelib.imu.IMUVelocity
+
+
Prevents calculation when no previous measurement exists.
+
forwardDirection - Static variable in class swervelib.telemetry.SwerveDriveTelemetry
The direction the robot should be facing when the "Robot Rotation" is zero or blank.
diff --git a/docs/index-files/index-7.html b/docs/index-files/index-7.html index a6a871b..0618573 100644 --- a/docs/index-files/index-7.html +++ b/docs/index-files/index-7.html @@ -1,11 +1,11 @@ - + G-Index - + @@ -573,6 +573,10 @@

G

Get the velocity in degrees/sec.
+
getVelocity() - Method in class swervelib.imu.IMUVelocity
+
+
Get the robot's angular velocity based on averaged meaasurements from the IMU.
+
getVelocity() - Method in class swervelib.motors.SparkFlexSwerve
Get the velocity of the integrated encoder.
@@ -633,6 +637,10 @@

G

Group of the alert.
+
gyro - Variable in class swervelib.imu.IMUVelocity
+
+
Swerve IMU.
+
A B C D E F G H I K L M N O P Q R S T U V W X Y Z 
All Classes and Interfaces|All Packages|Constant Field Values diff --git a/docs/index-files/index-8.html b/docs/index-files/index-8.html index 17a20c6..b5b93c3 100644 --- a/docs/index-files/index-8.html +++ b/docs/index-files/index-8.html @@ -1,11 +1,11 @@ - + H-Index - + diff --git a/docs/index-files/index-9.html b/docs/index-files/index-9.html index db53707..9194e13 100644 --- a/docs/index-files/index-9.html +++ b/docs/index-files/index-9.html @@ -1,11 +1,11 @@ - + I-Index - + @@ -105,10 +105,31 @@

I

Swerve IMU device for sensing the heading of the robot.
+
IMULinearMovingAverageFilter - Class in swervelib.math
+
+
A linear filter that does not calculate() each time a value is added to + the DoubleCircularBuffer.
+
+
IMULinearMovingAverageFilter(int) - Constructor for class swervelib.math.IMULinearMovingAverageFilter
+
+
Construct a linear moving average fitler
+
imuReadingCache - Variable in class swervelib.SwerveDrive
IMU reading cache for robot readings.
+
imuVelocity - Variable in class swervelib.SwerveDrive
+
+
Class that calculates robot's yaw velocity using IMU measurements.
+
+
IMUVelocity - Class in swervelib.imu
+
+
Generic IMU Velocity filter.
+
+
IMUVelocity(SwerveIMU, double, int) - Constructor for class swervelib.imu.IMUVelocity
+
+
Constructor for the IMU Velocity.
+
inaccurateVelocities - Variable in class swervelib.encoders.AnalogAbsoluteEncoderSwerve
An Alert detailing how the analog absolute encoder may not report accurate velocities.
diff --git a/docs/index.html b/docs/index.html index 6a54ee7..c5a4613 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,11 +1,11 @@ - + Overview - + diff --git a/docs/member-search-index.js b/docs/member-search-index.js index ef6222a..a78a1e8 100644 --- a/docs/member-search-index.js +++ b/docs/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"absoluteEncoder"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"absoluteEncoder"},{"p":"swervelib","c":"SwerveModule","l":"absoluteEncoder"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"absoluteEncoderInverted"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"absoluteEncoderInverted"},{"p":"swervelib","c":"SwerveModule","l":"absoluteEncoderIssueName"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"absoluteEncoderOffset"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"absoluteEncoderOffsetWarning"},{"p":"swervelib","c":"SwerveModule","l":"absolutePositionCache"},{"p":"swervelib.telemetry","c":"Alert","l":"active"},{"p":"swervelib.telemetry","c":"Alert","l":"activeStartTime"},{"p":"swervelib","c":"SwerveController","l":"addSlewRateLimiters(SlewRateLimiter, SlewRateLimiter, SlewRateLimiter)","u":"addSlewRateLimiters(edu.wpi.first.math.filter.SlewRateLimiter,edu.wpi.first.math.filter.SlewRateLimiter,edu.wpi.first.math.filter.SlewRateLimiter)"},{"p":"swervelib","c":"SwerveDrive","l":"addVisionMeasurement(Pose2d, double)","u":"addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double)"},{"p":"swervelib","c":"SwerveDrive","l":"addVisionMeasurement(Pose2d, double, Matrix)","u":"addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double,edu.wpi.first.math.Matrix)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"ADIS16448Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"ADIS16470Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveModule","l":"adjAbsoluteAngleName"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"ADXRS450Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"Alert","l":"Alert(String, Alert.AlertType)","u":"%3Cinit%3E(java.lang.String,swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib.telemetry","c":"Alert","l":"Alert(String, String, Alert.AlertType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"alerts"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"AlertType()","u":"%3Cinit%3E()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"AnalogAbsoluteEncoderSwerve(AnalogInput)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.AnalogInput)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"AnalogAbsoluteEncoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"AnalogGyroSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"angle"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"angle"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"angle"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"angle"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"angle"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"angle"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"angle"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"AngleConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"angleJoystickRadiusDeadband"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"angleJoyStickRadiusDeadband"},{"p":"swervelib","c":"SwerveController","l":"angleLimiter"},{"p":"swervelib","c":"SwerveDriveTest","l":"angleModules(SwerveDrive, Rotation2d)","u":"angleModules(swervelib.SwerveDrive,edu.wpi.first.math.geometry.Rotation2d)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleMotor"},{"p":"swervelib","c":"SwerveModule","l":"angleMotor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"angleMotorCurrentLimit"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleMotorInverted"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"angleMotorRampRate"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleOffset"},{"p":"swervelib","c":"SwerveModule","l":"angleOffset"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"anglePIDF"},{"p":"swervelib.math","c":"SwerveMath","l":"antiJitter(SwerveModuleState, SwerveModuleState, double)","u":"antiJitter(edu.wpi.first.math.kinematics.SwerveModuleState,edu.wpi.first.math.kinematics.SwerveModuleState,double)"},{"p":"swervelib","c":"SwerveModule","l":"antiJitterEnabled"},{"p":"swervelib.math","c":"SwerveMath","l":"applyDeadband(double, boolean, double)","u":"applyDeadband(double,boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"attainableMaxRotationalVelocityRadiansPerSecond"},{"p":"swervelib","c":"SwerveDrive","l":"attainableMaxTranslationalSpeedMetersPerSecond"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"BoolMotorJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"burnFlash()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"burnFlash()"},{"p":"swervelib.parser","c":"Cache","l":"Cache(Supplier, long)","u":"%3Cinit%3E(java.util.function.Supplier,long)"},{"p":"swervelib.math","c":"SwerveMath","l":"calcMaxAccel(Rotation2d, List, double, SwerveDriveConfiguration)","u":"calcMaxAccel(edu.wpi.first.math.geometry.Rotation2d,java.util.List,double,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"calculate()"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"calculate()"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateDegreesPerSteeringRotation(double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateDegreesPerSteeringRotation(double, double)","u":"calculateDegreesPerSteeringRotation(double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAcceleration(double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAcceleration(double, double, double, double, double)","u":"calculateMaxAcceleration(double,double,double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAngularVelocity(double, double, double)","u":"calculateMaxAngularVelocity(double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMetersPerRotation(double, double)","u":"calculateMetersPerRotation(double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMetersPerRotation(double, double, double)","u":"calculateMetersPerRotation(double,double,double)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"CanAndMagSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"canbus"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"CANCoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"CANCoderSwerve(int, String)","u":"%3Cinit%3E(int,java.lang.String)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"canIdWarning"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"cannotSetOffset"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"cannotSetOffset"},{"p":"swervelib","c":"SwerveDriveTest","l":"centerModules(SwerveDrive)","u":"centerModules(swervelib.SwerveDrive)"},{"p":"swervelib","c":"SwerveDrive","l":"chassisVelocityCorrection"},{"p":"swervelib.parser","c":"SwerveParser","l":"checkDirectory(File)","u":"checkDirectory(java.io.File)"},{"p":"swervelib","c":"SwerveDrive","l":"checkIfTunerXCompatible()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"clearStickyFaults()"},{"p":"swervelib","c":"SwerveController","l":"config"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configChanged"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configuration"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configuration"},{"p":"swervelib","c":"SwerveModule","l":"configuration"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"configure(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureCANStatusFrames(int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureCANStatusFrames(int)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureCANStatusFrames(int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureCANStatusFrames(int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureSparkFlex(Supplier)","u":"configureSparkFlex(java.util.function.Supplier)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.parser","c":"SwerveParser","l":"controllerPropertiesJson"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"ControllerPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"conversionFactor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"conversionFactors"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"conversionFactors"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"conversionFactors"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"ConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"convertToNativeSensorUnits(double, double)","u":"convertToNativeSensorUnits(double,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"createConfigCustomTimeout(double)"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"createControllerConfiguration(SwerveDriveConfiguration, double)","u":"createControllerConfiguration(swervelib.parser.SwerveDriveConfiguration,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"createDriveFeedforward(double, double, double)","u":"createDriveFeedforward(double,double,double)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createEncoder(SwerveMotor)","u":"createEncoder(swervelib.motors.SwerveMotor)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createIMU()"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"createModuleConfiguration(PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, String)","u":"createModuleConfiguration(swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,java.lang.String)"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"createModules(SwerveModuleConfiguration[], SimpleMotorFeedforward)","u":"createModules(swervelib.parser.SwerveModuleConfiguration[],edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createMotor(boolean)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"createPhysicalProperties()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"createPIDController()"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(double, double, double)","u":"createSwerveDrive(double,double,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(SimpleMotorFeedforward, double)","u":"createSwerveDrive(edu.wpi.first.math.controller.SimpleMotorFeedforward,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(SimpleMotorFeedforward, double, double, double)","u":"createSwerveDrive(edu.wpi.first.math.controller.SimpleMotorFeedforward,double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"cubeTranslation(Translation2d)","u":"cubeTranslation(edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"currentLimit"},{"p":"swervelib.parser","c":"PIDFConfig","l":"d"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"desiredChassisSpeeds"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"desiredStates"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"DeviceJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"diameter"},{"p":"swervelib","c":"SwerveDrive","l":"discretizationdtSeconds"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"doesNotSupportIntegratedOffsets"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"drive"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"drive"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"drive"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"drive"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"drive"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"drive"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds, boolean, Translation2d)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds,boolean,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds, Translation2d)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(Translation2d, double, boolean, boolean)","u":"drive(edu.wpi.first.math.geometry.Translation2d,double,boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(Translation2d, double, boolean, boolean, Translation2d)","u":"drive(edu.wpi.first.math.geometry.Translation2d,double,boolean,boolean,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"DriveConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOriented(ChassisSpeeds)","u":"driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOriented(ChassisSpeeds, Translation2d)","u":"driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOrientedandRobotOriented(ChassisSpeeds, ChassisSpeeds)","u":"driveFieldOrientedandRobotOriented(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"driveMotor"},{"p":"swervelib","c":"SwerveModule","l":"driveMotor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"driveMotorCurrentLimit"},{"p":"swervelib","c":"SwerveModule","l":"driveMotorFeedforward"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"driveMotorInverted"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"driveMotorRampRate"},{"p":"swervelib","c":"SwerveModule","l":"drivePositionCache"},{"p":"swervelib","c":"SwerveModule","l":"driveVelocityCache"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"dt"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"encoder"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"encoder"},{"p":"swervelib","c":"SwerveModule","l":"encoderOffsetWarning"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"ERROR"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"ERROR_TRACE"},{"p":"swervelib.parser","c":"PIDFConfig","l":"f"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"factor"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"factor"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"factoryDefault()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"factoryDefaults()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"failureConfiguring"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"failureConfiguring"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"failureConfiguring"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"failureConfiguringAlert"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"fakePos"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"fakeSpeed"},{"p":"swervelib","c":"SwerveDrive","l":"field"},{"p":"swervelib","c":"SwerveDriveTest","l":"findCouplingRatio(SwerveDrive, double, boolean)","u":"findCouplingRatio(swervelib.SwerveDrive,double,boolean)"},{"p":"swervelib","c":"SwerveDriveTest","l":"findDriveMotorKV(SwerveDrive, double, double, double)","u":"findDriveMotorKV(swervelib.SwerveDrive,double,double,double)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"forwardDirection"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"front"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"gearRatio"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"gearRatio"},{"p":"swervelib","c":"SwerveDriveTest","l":"generateSysIdCommand(SysIdRoutine, double, double, double)","u":"generateSysIdCommand(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine,double,double,double)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getAbsoluteEncoder()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsoluteEncoder()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsoluteEncoderReadIssue()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getAbsolutePosition()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsolutePosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getAccel()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getAccel()"},{"p":"swervelib","c":"SwerveDrive","l":"getAccel()"},{"p":"swervelib","c":"SwerveModule","l":"getAngleMotor()"},{"p":"swervelib","c":"SwerveModule","l":"getAnglePIDF()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getAppliedOutput()"},{"p":"swervelib","c":"SwerveModule","l":"getConfiguration()"},{"p":"swervelib","c":"SwerveModule","l":"getCosineCompensatedVelocity(SwerveModuleState)","u":"getCosineCompensatedVelocity(edu.wpi.first.math.kinematics.SwerveModuleState)"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"getDriveBaseRadiusMeters()"},{"p":"swervelib","c":"SwerveModule","l":"getDriveMotor()"},{"p":"swervelib","c":"SwerveModule","l":"getDrivePIDF()"},{"p":"swervelib","c":"SwerveDrive","l":"getFieldVelocity()"},{"p":"swervelib","c":"SwerveDrive","l":"getGyro()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getGyroRotation3d()"},{"p":"swervelib","c":"SwerveDrive","l":"getGyroRotation3d()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getIMU()"},{"p":"swervelib","c":"SwerveController","l":"getJoystickAngle(double, double)","u":"getJoystickAngle(double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"getMaximumAngularVelocity()"},{"p":"swervelib","c":"SwerveDrive","l":"getMaximumVelocity()"},{"p":"swervelib.parser","c":"SwerveParser","l":"getModuleConfigurationByName(String, SwerveDriveConfiguration)","u":"getModuleConfigurationByName(java.lang.String,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib","c":"SwerveDrive","l":"getModuleMap()"},{"p":"swervelib","c":"SwerveDrive","l":"getModulePositions()"},{"p":"swervelib","c":"SwerveDrive","l":"getModules()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getMotor()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getMotor()"},{"p":"swervelib","c":"SwerveDrive","l":"getOdometryHeading()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getPitch()"},{"p":"swervelib","c":"SwerveDrive","l":"getPitch()"},{"p":"swervelib","c":"SwerveDrive","l":"getPose()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getPosition()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getPosition()"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"getPosition()"},{"p":"swervelib","c":"SwerveModule","l":"getPosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRate()"},{"p":"swervelib","c":"SwerveModule","l":"getRawAbsolutePosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRawRotation3d()"},{"p":"swervelib","c":"SwerveController","l":"getRawTargetSpeeds(double, double, double)","u":"getRawTargetSpeeds(double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getRawTargetSpeeds(double, double, double, double)","u":"getRawTargetSpeeds(double,double,double,double)"},{"p":"swervelib","c":"SwerveModule","l":"getRelativePosition()"},{"p":"swervelib","c":"SwerveDrive","l":"getRobotVelocity()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getRoll()"},{"p":"swervelib","c":"SwerveDrive","l":"getRoll()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRotation3d()"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"getState()"},{"p":"swervelib","c":"SwerveModule","l":"getState()"},{"p":"swervelib","c":"SwerveDrive","l":"getStates()"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"getStrings(Alert.AlertType)","u":"getStrings(swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib","c":"SwerveDrive","l":"getSwerveController()"},{"p":"swervelib.math","c":"SwerveMath","l":"getSwerveModule(SwerveModule[], boolean, boolean)","u":"getSwerveModule(swervelib.SwerveModule[],boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"getSwerveModulePoses(Pose2d)","u":"getSwerveModulePoses(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib","c":"SwerveController","l":"getTargetSpeeds(double, double, double, double, double)","u":"getTargetSpeeds(double,double,double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getTargetSpeeds(double, double, double, double, double, double)","u":"getTargetSpeeds(double,double,double,double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getTranslation2d(ChassisSpeeds)","u":"getTranslation2d(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib.parser","c":"Cache","l":"getValue()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getVelocity()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getVoltage()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getVoltage()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getYaw()"},{"p":"swervelib","c":"SwerveDrive","l":"getYaw()"},{"p":"swervelib.telemetry","c":"Alert","l":"groups"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"heading"},{"p":"swervelib","c":"SwerveDrive","l":"HEADING_CORRECTION_DEADBAND"},{"p":"swervelib","c":"SwerveController","l":"headingCalculate(double, double)","u":"headingCalculate(double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"headingCorrection"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"headingPIDF"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"HIGH"},{"p":"swervelib.parser","c":"PIDFConfig","l":"i"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"i2cLockupWarning"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"id"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"imu"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"imu"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"imu"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"imu"},{"p":"swervelib.imu","c":"NavXSwerve","l":"imu"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"imu"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"imu"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"imu"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"imu"},{"p":"swervelib","c":"SwerveDrive","l":"imu"},{"p":"swervelib","c":"SwerveDrive","l":"imuReadingCache"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"inaccurateVelocities"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"inaccurateVelocities"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"INFO"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"INFO"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"initSendable(SendableBuilder)","u":"initSendable(edu.wpi.first.util.sendable.SendableBuilder)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"inverted"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"inverted"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"NavXSwerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"invertedIMU"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"invertedIMU"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"isAngleEmpty()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"isDriveEmpty()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"isDriveMotor"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"isInverted"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"isSimulation"},{"p":"swervelib.parser","c":"Cache","l":"isStale()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"iz"},{"p":"swervelib","c":"SwerveDrive","l":"kinematics"},{"p":"swervelib","c":"SwerveController","l":"lastAngleScalar"},{"p":"swervelib","c":"SwerveDrive","l":"lastHeadingRadians"},{"p":"swervelib","c":"SwerveModule","l":"lastState"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"lastTime"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"lastTime"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"left"},{"p":"swervelib.math","c":"SwerveMath","l":"limitVelocity(Translation2d, ChassisSpeeds, Pose2d, double, double, List, SwerveDriveConfiguration)","u":"limitVelocity(edu.wpi.first.math.geometry.Translation2d,edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Pose2d,double,double,java.util.List,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"location"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"LocationJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"lockPose()"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorActivity(SwerveModule, SysIdRoutineLog, Supplier)","u":"logAngularMotorActivity(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog,java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorDutyCycle(SwerveModule, SysIdRoutineLog)","u":"logAngularMotorDutyCycle(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorVoltage(SwerveModule, SysIdRoutineLog)","u":"logAngularMotorVoltage(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorActivity(SwerveModule, SysIdRoutineLog, Supplier)","u":"logDriveMotorActivity(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog,java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorDutyCycle(SwerveModule, SysIdRoutineLog)","u":"logDriveMotorDutyCycle(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorVoltage(SwerveModule, SysIdRoutineLog)","u":"logDriveMotorVoltage(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"LOW"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_anglePosition"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"m_angleVoltageSetter"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_angVelocity"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_appliedVoltage"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_distance"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_velocity"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"m_velocityVoltageSetter"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"MACHINE"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"magnetFieldLessThanIdeal"},{"p":"swervelib.math","c":"Matter","l":"mass"},{"p":"swervelib.math","c":"Matter","l":"massMoment()"},{"p":"swervelib.math","c":"Matter","l":"Matter(Translation3d, double)","u":"%3Cinit%3E(edu.wpi.first.math.geometry.Translation3d,double)"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"max"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"maxAngularVelocity"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"maxAngularVelocity"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"maximumRetries"},{"p":"swervelib.motors","c":"SwerveMotor","l":"maximumRetries"},{"p":"swervelib","c":"SwerveModule","l":"maxSpeed"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"maxSpeed"},{"p":"swervelib","c":"SwerveDrive","l":"maxSpeedMPS"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"measuredChassisSpeeds"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"measuredStates"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"min"},{"p":"swervelib.parser","c":"SwerveParser","l":"moduleConfigs"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"moduleCount"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"moduleCount"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"ModuleJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"SwerveParser","l":"moduleJsons"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"moduleLocation"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"moduleLocationsMeters"},{"p":"swervelib","c":"SwerveModule","l":"moduleNumber"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"modules"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"modules"},{"p":"swervelib","c":"SwerveDrive","l":"moduleSynchronizationCounter"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"motor"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"motor"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"motor"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"motor"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"motor"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"MotorConfigDouble()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"MotorConfigDouble(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"MotorConfigInt()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"MotorConfigInt(int, int)","u":"%3Cinit%3E(int,int)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"name"},{"p":"swervelib.imu","c":"NavXSwerve","l":"navXError"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(I2C.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.I2C.Port)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(SerialPort.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.SerialPort.Port)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(SPI.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.SPI.Port)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"noEncoderAlert"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"noEncoderDefinedAlert"},{"p":"swervelib","c":"SwerveModule","l":"noEncoderWarning"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"nominalVoltage"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"NONE"},{"p":"swervelib.math","c":"SwerveMath","l":"normalizeAngle(double)"},{"p":"swervelib","c":"SwerveDrive","l":"odometryLock"},{"p":"swervelib","c":"SwerveDrive","l":"odometryThread"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"offset"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"offset"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"offset"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"offset"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"offset"},{"p":"swervelib.imu","c":"NavXSwerve","l":"offset"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"offset"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"offset"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"offsetFailure"},{"p":"swervelib.parser","c":"SwerveParser","l":"openJson(File)","u":"openJson(java.io.File)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"optimalVoltage"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"optimalVoltage"},{"p":"swervelib.parser","c":"PIDFConfig","l":"output"},{"p":"swervelib.parser","c":"PIDFConfig","l":"p"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"physicalCharacteristics"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"physicalCharacteristics"},{"p":"swervelib.parser","c":"SwerveParser","l":"physicalPropertiesJson"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"PhysicalPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"pid"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"pid"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"pid"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double)","u":"%3Cinit%3E(double,double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double)","u":"%3Cinit%3E(double,double,double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double, double)","u":"%3Cinit%3E(double,double,double,double,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"pidfPropertiesJson"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"PIDFPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"PIDFRange()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"Pigeon2Swerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"Pigeon2Swerve(int, String)","u":"%3Cinit%3E(int,java.lang.String)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"PigeonSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.math","c":"SwerveMath","l":"placeInAppropriate0To360Scope(double, double)","u":"placeInAppropriate0To360Scope(double,double)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"POSE"},{"p":"swervelib.math","c":"SwerveMath","l":"PoseLog(Pose2d)","u":"PoseLog(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib.math","c":"Matter","l":"position"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"position"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Position"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Position"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"positionConversionFactor"},{"p":"swervelib","c":"SwerveDrive","l":"postTrajectory(Trajectory)","u":"postTrajectory(edu.wpi.first.math.trajectory.Trajectory)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerAngleMotorsDutyCycle(SwerveDrive, double)","u":"powerAngleMotorsDutyCycle(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerAngleMotorsVoltage(SwerveDrive, double)","u":"powerAngleMotorsVoltage(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerDriveMotorsDutyCycle(SwerveDrive, double)","u":"powerDriveMotorsDutyCycle(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerDriveMotorsVoltage(SwerveDrive, double)","u":"powerDriveMotorsVoltage(swervelib.SwerveDrive,double)"},{"p":"swervelib.telemetry","c":"Alert","l":"printAlert(String)","u":"printAlert(java.lang.String)"},{"p":"swervelib","c":"SwerveDrive","l":"pushOffsetsToEncoders()"},{"p":"swervelib","c":"SwerveModule","l":"pushOffsetsToEncoders()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"PWMDutyCycleEncoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib","c":"SwerveModule","l":"queueSynchronizeEncoders()"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"rampRate"},{"p":"swervelib","c":"SwerveModule","l":"rawAbsoluteAngleName"},{"p":"swervelib","c":"SwerveModule","l":"rawAngleName"},{"p":"swervelib","c":"SwerveModule","l":"rawDriveName"},{"p":"swervelib","c":"SwerveModule","l":"rawDriveVelName"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"readingError"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"readingFaulty"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"readingIgnored"},{"p":"swervelib","c":"SwerveDrive","l":"replaceSwerveModuleFeedforward(SimpleMotorFeedforward)","u":"replaceSwerveModuleFeedforward(edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib","c":"SwerveDrive","l":"resetDriveEncoders()"},{"p":"swervelib","c":"SwerveDrive","l":"resetOdometry(Pose2d)","u":"resetOdometry(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib","c":"SwerveDrive","l":"restoreInternalOffset()"},{"p":"swervelib","c":"SwerveModule","l":"restoreInternalOffset()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"robotRotation"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"rotationUnit"},{"p":"swervelib.math","c":"SwerveMath","l":"scaleTranslation(Translation2d, double)","u":"scaleTranslation(edu.wpi.first.math.geometry.Translation2d,double)"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"SendableAlerts()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"serialCommsIssueWarning"},{"p":"swervelib.telemetry","c":"Alert","l":"set(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"set(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"setAngle(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngle(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setAngleMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngleMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngleMotorVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAnglePIDF(PIDFConfig)","u":"setAnglePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib","c":"SwerveDriveTest","l":"setAngleSysIdRoutine(SysIdRoutine.Config, SubsystemBase, SwerveDrive)","u":"setAngleSysIdRoutine(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.Config,edu.wpi.first.wpilibj2.command.SubsystemBase,swervelib.SwerveDrive)"},{"p":"swervelib","c":"SwerveModule","l":"setAntiJitter(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setAutoCenteringModules(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setChassisDiscretization(boolean, double)","u":"setChassisDiscretization(boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setChassisSpeeds(ChassisSpeeds)","u":"setChassisSpeeds(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"setCosineCompensator(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib","c":"SwerveModule","l":"setDesiredState(SwerveModuleState, boolean, boolean)","u":"setDesiredState(edu.wpi.first.math.kinematics.SwerveModuleState,boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setDriveMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDriveMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDriveMotorVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDrivePIDF(PIDFConfig)","u":"setDrivePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib","c":"SwerveDriveTest","l":"setDriveSysIdRoutine(SysIdRoutine.Config, SubsystemBase, SwerveDrive, double)","u":"setDriveSysIdRoutine(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.Config,edu.wpi.first.wpilibj2.command.SubsystemBase,swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveModule","l":"setFeedforward(SimpleMotorFeedforward)","u":"setFeedforward(edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib","c":"SwerveDrive","l":"setGyro(Rotation3d)","u":"setGyro(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib","c":"SwerveDrive","l":"setGyroOffset(Rotation3d)","u":"setGyroOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib","c":"SwerveDrive","l":"setHeadingCorrection(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setHeadingCorrection(boolean, double)","u":"setHeadingCorrection(boolean,double)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"SwerveIMU","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib","c":"SwerveController","l":"setMaximumAngularVelocity(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeed(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeed(double, boolean, double)","u":"setMaximumSpeed(double,boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeeds(double, double, double)","u":"setMaximumSpeeds(double,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setModuleStates(SwerveModuleState[], boolean)","u":"setModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[],boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib","c":"SwerveModule","l":"setMotorBrake(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setMotorIdleMode(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setOdometryPeriod(double)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"SwerveIMU","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setPosition(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setPosition(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setRawModuleStates(SwerveModuleState[], boolean)","u":"setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[],boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.telemetry","c":"Alert","l":"setText(String)","u":"setText(java.lang.String)"},{"p":"swervelib","c":"SwerveDrive","l":"setVisionMeasurementStdDevs(Matrix)","u":"setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveDrive","l":"simIMU"},{"p":"swervelib","c":"SwerveModule","l":"simModule"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Simulation"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Simulation"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"sizeFrontBack"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"sizeLeftRight"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"SparkFlexSwerve(CANSparkFlex, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkFlex,boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"SparkFlexSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"SparkMAX_slotIdx()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"SparkMAX_slotIdx()","u":"%3Cinit%3E()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"SparkMaxAnalogEncoderSwerve(SwerveMotor, double)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"SparkMaxBrushedMotorSwerve(CANSparkMax, boolean, SparkRelativeEncoder.Type, int, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkMax,boolean,com.revrobotics.SparkRelativeEncoder.Type,int,boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"SparkMaxBrushedMotorSwerve(int, boolean, SparkRelativeEncoder.Type, int, boolean)","u":"%3Cinit%3E(int,boolean,com.revrobotics.SparkRelativeEncoder.Type,int,boolean)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"SparkMaxEncoderSwerve(SwerveMotor, int)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"SparkMaxSwerve(CANSparkMax, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkMax,boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"SparkMaxSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"state"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib","c":"SwerveDrive","l":"stopOdometryThread()"},{"p":"swervelib.parser","c":"Cache","l":"supplier"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"SwerveAbsoluteEncoder()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"swerveController"},{"p":"swervelib","c":"SwerveController","l":"SwerveController(SwerveControllerConfiguration)","u":"%3Cinit%3E(swervelib.parser.SwerveControllerConfiguration)"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"SwerveControllerConfiguration(SwerveDriveConfiguration, PIDFConfig, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.PIDFConfig,double)"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"SwerveControllerConfiguration(SwerveDriveConfiguration, PIDFConfig, double, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.PIDFConfig,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"SwerveDrive(SwerveDriveConfiguration, SwerveControllerConfiguration, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.SwerveControllerConfiguration,double)"},{"p":"swervelib","c":"SwerveDrive","l":"swerveDriveConfiguration"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"SwerveDriveConfiguration(SwerveModuleConfiguration[], SwerveIMU, boolean, SimpleMotorFeedforward, SwerveModulePhysicalCharacteristics)","u":"%3Cinit%3E(swervelib.parser.SwerveModuleConfiguration[],swervelib.imu.SwerveIMU,boolean,edu.wpi.first.math.controller.SimpleMotorFeedforward,swervelib.parser.SwerveModulePhysicalCharacteristics)"},{"p":"swervelib.parser","c":"SwerveParser","l":"swerveDriveJson"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"SwerveDriveJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"swerveDrivePoseEstimator"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"SwerveDriveTelemetry()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDriveTest","l":"SwerveDriveTest()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"SwerveIMU()","u":"%3Cinit%3E()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"SwerveIMUSimulation()","u":"%3Cinit%3E()"},{"p":"swervelib.math","c":"SwerveMath","l":"SwerveMath()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveModule","l":"SwerveModule(int, SwerveModuleConfiguration, SimpleMotorFeedforward)","u":"%3Cinit%3E(int,swervelib.parser.SwerveModuleConfiguration,edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"SwerveModuleConfiguration(SwerveMotor, SwerveMotor, MotorConfigDouble, SwerveAbsoluteEncoder, double, double, double, PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, boolean, boolean, boolean, String, boolean)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,swervelib.motors.SwerveMotor,swervelib.parser.json.MotorConfigDouble,swervelib.encoders.SwerveAbsoluteEncoder,double,double,double,swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,boolean,boolean,boolean,java.lang.String,boolean)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"SwerveModuleConfiguration(SwerveMotor, SwerveMotor, MotorConfigDouble, SwerveAbsoluteEncoder, double, double, double, PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, String, boolean)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,swervelib.motors.SwerveMotor,swervelib.parser.json.MotorConfigDouble,swervelib.encoders.SwerveAbsoluteEncoder,double,double,double,swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,java.lang.String,boolean)"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"SwerveModulePhysicalCharacteristics(MotorConfigDouble, double, double)","u":"%3Cinit%3E(swervelib.parser.json.MotorConfigDouble,double,double)"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"SwerveModulePhysicalCharacteristics(MotorConfigDouble, double, double, int, int, double, double)","u":"%3Cinit%3E(swervelib.parser.json.MotorConfigDouble,double,double,int,int,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"swerveModules"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"SwerveModuleSimulation()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"SwerveMotor()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"SwerveParser","l":"SwerveParser(File)","u":"%3Cinit%3E(java.io.File)"},{"p":"swervelib","c":"SwerveModule","l":"synchronizeEncoderQueued"},{"p":"swervelib","c":"SwerveDrive","l":"synchronizeModuleEncoders()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(int, String, boolean)","u":"%3Cinit%3E(int,java.lang.String,boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(TalonFX, boolean)","u":"%3Cinit%3E(com.ctre.phoenix6.hardware.TalonFX,boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"TalonSRXSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"TalonSRXSwerve(WPI_TalonSRX, boolean)","u":"%3Cinit%3E(com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX,boolean)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"TelemetryVerbosity()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"Alert","l":"text"},{"p":"swervelib","c":"SwerveController","l":"thetaController"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"timer"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"timer"},{"p":"swervelib.parser","c":"Cache","l":"timestamp"},{"p":"swervelib","c":"SwerveDrive","l":"tunerXRecommendation"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"type"},{"p":"swervelib.telemetry","c":"Alert","l":"type"},{"p":"swervelib.parser","c":"Cache","l":"update()"},{"p":"swervelib","c":"SwerveDrive","l":"updateCacheValidityPeriods(long, long, long)","u":"updateCacheValidityPeriods(long,long,long)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"updateData()"},{"p":"swervelib","c":"SwerveDrive","l":"updateOdometry()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"updateOdometry(SwerveDriveKinematics, SwerveModuleState[], Pose2d[], Field2d)","u":"updateOdometry(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.kinematics.SwerveModuleState[],edu.wpi.first.math.geometry.Pose2d[],edu.wpi.first.wpilibj.smartdashboard.Field2d)"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"updateStateAndPosition(SwerveModuleState)","u":"updateStateAndPosition(edu.wpi.first.math.kinematics.SwerveModuleState)"},{"p":"swervelib.parser","c":"Cache","l":"updateSupplier(Supplier)","u":"updateSupplier(java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveModule","l":"updateTelemetry()"},{"p":"swervelib.parser","c":"Cache","l":"updateValidityPeriod(long)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"useCosineCompensator"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"useCosineCompensator"},{"p":"swervelib.parser","c":"Cache","l":"validityPeriod"},{"p":"swervelib.parser","c":"Cache","l":"value"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"values()"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"values()"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"values()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"values()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"velocity"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Velocity"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Velocity"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"velocityPIDF"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"verbosity"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"WARNING"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"WARNING_TRACE"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"wheelGripCoefficientOfFriction"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"wheelGripCoefficientOfFriction"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"wheelLocations"},{"p":"swervelib","c":"SwerveController","l":"withinHypotDeadband(double, double)","u":"withinHypotDeadband(double,double)"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"x"},{"p":"swervelib","c":"SwerveController","l":"xLimiter"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"y"},{"p":"swervelib","c":"SwerveController","l":"yLimiter"},{"p":"swervelib","c":"SwerveDrive","l":"zeroGyro()"}];updateSearchResults(); \ No newline at end of file +memberSearchIndex = [{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"absoluteEncoder"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"absoluteEncoder"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"absoluteEncoder"},{"p":"swervelib","c":"SwerveModule","l":"absoluteEncoder"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"absoluteEncoderInverted"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"absoluteEncoderInverted"},{"p":"swervelib","c":"SwerveModule","l":"absoluteEncoderIssueName"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"absoluteEncoderOffset"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"absoluteEncoderOffsetWarning"},{"p":"swervelib","c":"SwerveModule","l":"absolutePositionCache"},{"p":"swervelib.telemetry","c":"Alert","l":"active"},{"p":"swervelib.telemetry","c":"Alert","l":"activeStartTime"},{"p":"swervelib","c":"SwerveController","l":"addSlewRateLimiters(SlewRateLimiter, SlewRateLimiter, SlewRateLimiter)","u":"addSlewRateLimiters(edu.wpi.first.math.filter.SlewRateLimiter,edu.wpi.first.math.filter.SlewRateLimiter,edu.wpi.first.math.filter.SlewRateLimiter)"},{"p":"swervelib.math","c":"IMULinearMovingAverageFilter","l":"addValue(double)"},{"p":"swervelib","c":"SwerveDrive","l":"addVisionMeasurement(Pose2d, double)","u":"addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double)"},{"p":"swervelib","c":"SwerveDrive","l":"addVisionMeasurement(Pose2d, double, Matrix)","u":"addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double,edu.wpi.first.math.Matrix)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"ADIS16448Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"ADIS16470Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveModule","l":"adjAbsoluteAngleName"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"ADXRS450Swerve()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"Alert","l":"Alert(String, Alert.AlertType)","u":"%3Cinit%3E(java.lang.String,swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib.telemetry","c":"Alert","l":"Alert(String, String, Alert.AlertType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"alerts"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"AlertType()","u":"%3Cinit%3E()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"AnalogAbsoluteEncoderSwerve(AnalogInput)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.AnalogInput)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"AnalogAbsoluteEncoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"AnalogGyroSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"angle"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"angle"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"angle"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"angle"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"angle"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"angle"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"angle"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"AngleConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"angleJoystickRadiusDeadband"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"angleJoyStickRadiusDeadband"},{"p":"swervelib","c":"SwerveController","l":"angleLimiter"},{"p":"swervelib","c":"SwerveDriveTest","l":"angleModules(SwerveDrive, Rotation2d)","u":"angleModules(swervelib.SwerveDrive,edu.wpi.first.math.geometry.Rotation2d)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleMotor"},{"p":"swervelib","c":"SwerveModule","l":"angleMotor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"angleMotorCurrentLimit"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleMotorInverted"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"angleMotorRampRate"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"angleOffset"},{"p":"swervelib","c":"SwerveModule","l":"angleOffset"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"anglePIDF"},{"p":"swervelib","c":"SwerveDrive","l":"angularVelocityCoefficient"},{"p":"swervelib","c":"SwerveDrive","l":"angularVelocityCorrection"},{"p":"swervelib","c":"SwerveDrive","l":"angularVelocitySkewCorrection(ChassisSpeeds)","u":"angularVelocitySkewCorrection(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib.math","c":"SwerveMath","l":"antiJitter(SwerveModuleState, SwerveModuleState, double)","u":"antiJitter(edu.wpi.first.math.kinematics.SwerveModuleState,edu.wpi.first.math.kinematics.SwerveModuleState,double)"},{"p":"swervelib","c":"SwerveModule","l":"antiJitterEnabled"},{"p":"swervelib.math","c":"SwerveMath","l":"applyDeadband(double, boolean, double)","u":"applyDeadband(double,boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"attainableMaxRotationalVelocityRadiansPerSecond"},{"p":"swervelib","c":"SwerveDrive","l":"attainableMaxTranslationalSpeedMetersPerSecond"},{"p":"swervelib","c":"SwerveDrive","l":"autonomousAngularVelocityCorrection"},{"p":"swervelib","c":"SwerveDrive","l":"autonomousChassisVelocityCorrection"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"BoolMotorJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"burnFlash()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"burnFlash()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"burnFlash()"},{"p":"swervelib.parser","c":"Cache","l":"Cache(Supplier, long)","u":"%3Cinit%3E(java.util.function.Supplier,long)"},{"p":"swervelib.math","c":"SwerveMath","l":"calcMaxAccel(Rotation2d, List, double, SwerveDriveConfiguration)","u":"calcMaxAccel(edu.wpi.first.math.geometry.Rotation2d,java.util.List,double,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib.math","c":"IMULinearMovingAverageFilter","l":"calculate()"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"calculate()"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"calculate()"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateDegreesPerSteeringRotation(double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateDegreesPerSteeringRotation(double, double)","u":"calculateDegreesPerSteeringRotation(double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAcceleration(double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAcceleration(double, double, double, double, double)","u":"calculateMaxAcceleration(double,double,double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMaxAngularVelocity(double, double, double)","u":"calculateMaxAngularVelocity(double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMetersPerRotation(double, double)","u":"calculateMetersPerRotation(double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"calculateMetersPerRotation(double, double, double)","u":"calculateMetersPerRotation(double,double,double)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"CanAndMagSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"canbus"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"CANCoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"CANCoderSwerve(int, String)","u":"%3Cinit%3E(int,java.lang.String)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"canIdWarning"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"cannotSetOffset"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"cannotSetOffset"},{"p":"swervelib","c":"SwerveDriveTest","l":"centerModules(SwerveDrive)","u":"centerModules(swervelib.SwerveDrive)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"cfg"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"cfg"},{"p":"swervelib","c":"SwerveDrive","l":"chassisVelocityCorrection"},{"p":"swervelib.parser","c":"SwerveParser","l":"checkDirectory(File)","u":"checkDirectory(java.io.File)"},{"p":"swervelib","c":"SwerveDrive","l":"checkIfTunerXCompatible()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"clearStickyFaults()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"clearStickyFaults()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"clearStickyFaults()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"clearStickyFaults()"},{"p":"swervelib","c":"SwerveController","l":"config"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configChanged"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configuration"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configuration"},{"p":"swervelib","c":"SwerveModule","l":"configuration"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"configure(boolean)"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"configure(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureCANStatusFrames(int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureCANStatusFrames(int)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureCANStatusFrames(int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureCANStatusFrames(int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureCANStatusFrames(int, int, int, int, int, int, int, int, int, int, int)","u":"configureCANStatusFrames(int,int,int,int,int,int,int,int,int,int,int)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configureIntegratedEncoder(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configurePIDF(PIDFConfig)","u":"configurePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"configurePIDWrapping(double, double)","u":"configurePIDWrapping(double,double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"configureSparkFlex(Supplier)","u":"configureSparkFlex(java.util.function.Supplier)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"configureSparkMax(Supplier)","u":"configureSparkMax(java.util.function.Supplier)"},{"p":"swervelib.parser","c":"SwerveParser","l":"controllerPropertiesJson"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"ControllerPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"conversionFactor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"conversionFactor"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"conversionFactors"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"conversionFactors"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"conversionFactors"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"ConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"convertToNativeSensorUnits(double, double)","u":"convertToNativeSensorUnits(double,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"createConfigCustomTimeout(double)"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"createControllerConfiguration(SwerveDriveConfiguration, double)","u":"createControllerConfiguration(swervelib.parser.SwerveDriveConfiguration,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"createDriveFeedforward(double, double, double)","u":"createDriveFeedforward(double,double,double)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createEncoder(SwerveMotor)","u":"createEncoder(swervelib.motors.SwerveMotor)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createIMU()"},{"p":"swervelib.imu","c":"IMUVelocity","l":"createIMUVelocity(SwerveIMU)","u":"createIMUVelocity(swervelib.imu.SwerveIMU)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"createModuleConfiguration(PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, String)","u":"createModuleConfiguration(swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,java.lang.String)"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"createModules(SwerveModuleConfiguration[], SimpleMotorFeedforward)","u":"createModules(swervelib.parser.SwerveModuleConfiguration[],edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"createMotor(boolean)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"createPhysicalProperties()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"createPIDController()"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(double, double, double)","u":"createSwerveDrive(double,double,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(SimpleMotorFeedforward, double)","u":"createSwerveDrive(edu.wpi.first.math.controller.SimpleMotorFeedforward,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"createSwerveDrive(SimpleMotorFeedforward, double, double, double)","u":"createSwerveDrive(edu.wpi.first.math.controller.SimpleMotorFeedforward,double,double,double)"},{"p":"swervelib.math","c":"SwerveMath","l":"cubeTranslation(Translation2d)","u":"cubeTranslation(edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"currentLimit"},{"p":"swervelib.parser","c":"PIDFConfig","l":"d"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"desiredChassisSpeeds"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"desiredStates"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"DeviceJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"diameter"},{"p":"swervelib","c":"SwerveDrive","l":"discretizationdtSeconds"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"doesNotSupportIntegratedOffsets"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"drive"},{"p":"swervelib.parser.json.modules","c":"BoolMotorJson","l":"drive"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"drive"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"drive"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"drive"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"drive"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds, boolean, Translation2d)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds,boolean,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(ChassisSpeeds, Translation2d)","u":"drive(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(Translation2d, double, boolean, boolean)","u":"drive(edu.wpi.first.math.geometry.Translation2d,double,boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"drive(Translation2d, double, boolean, boolean, Translation2d)","u":"drive(edu.wpi.first.math.geometry.Translation2d,double,boolean,boolean,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"DriveConversionFactorsJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOriented(ChassisSpeeds)","u":"driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOriented(ChassisSpeeds, Translation2d)","u":"driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Translation2d)"},{"p":"swervelib","c":"SwerveDrive","l":"driveFieldOrientedandRobotOriented(ChassisSpeeds, ChassisSpeeds)","u":"driveFieldOrientedandRobotOriented(edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"driveMotor"},{"p":"swervelib","c":"SwerveModule","l":"driveMotor"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"driveMotorCurrentLimit"},{"p":"swervelib","c":"SwerveModule","l":"driveMotorFeedforward"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"driveMotorInverted"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"driveMotorRampRate"},{"p":"swervelib","c":"SwerveModule","l":"drivePositionCache"},{"p":"swervelib","c":"SwerveModule","l":"driveVelocityCache"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"dt"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"encoder"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"encoder"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"encoder"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"encoder"},{"p":"swervelib","c":"SwerveModule","l":"encoderOffsetWarning"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"ERROR"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"ERROR_TRACE"},{"p":"swervelib.parser","c":"PIDFConfig","l":"f"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"factor"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"factor"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"factoryDefault()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"factoryDefault()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"factoryDefault()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"factoryDefaultOccurred"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"factoryDefaults()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"factoryDefaults()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"failureConfiguring"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"failureConfiguring"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"failureConfiguring"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"failureConfiguringAlert"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"fakePos"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"fakeSpeed"},{"p":"swervelib","c":"SwerveDrive","l":"field"},{"p":"swervelib","c":"SwerveDriveTest","l":"findCouplingRatio(SwerveDrive, double, boolean)","u":"findCouplingRatio(swervelib.SwerveDrive,double,boolean)"},{"p":"swervelib","c":"SwerveDriveTest","l":"findDriveMotorKV(SwerveDrive, double, double, double)","u":"findDriveMotorKV(swervelib.SwerveDrive,double,double,double)"},{"p":"swervelib.imu","c":"IMUVelocity","l":"firstCycle"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"forwardDirection"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"front"},{"p":"swervelib.parser.json.modules","c":"AngleConversionFactorsJson","l":"gearRatio"},{"p":"swervelib.parser.json.modules","c":"DriveConversionFactorsJson","l":"gearRatio"},{"p":"swervelib","c":"SwerveDriveTest","l":"generateSysIdCommand(SysIdRoutine, double, double, double)","u":"generateSysIdCommand(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine,double,double,double)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getAbsoluteEncoder()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getAbsoluteEncoder()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsoluteEncoder()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsoluteEncoderReadIssue()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getAbsolutePosition()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getAbsolutePosition()"},{"p":"swervelib","c":"SwerveModule","l":"getAbsolutePosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getAccel()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getAccel()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getAccel()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getAccel()"},{"p":"swervelib","c":"SwerveDrive","l":"getAccel()"},{"p":"swervelib","c":"SwerveModule","l":"getAngleMotor()"},{"p":"swervelib","c":"SwerveModule","l":"getAnglePIDF()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getAppliedOutput()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getAppliedOutput()"},{"p":"swervelib","c":"SwerveModule","l":"getConfiguration()"},{"p":"swervelib","c":"SwerveModule","l":"getCosineCompensatedVelocity(SwerveModuleState)","u":"getCosineCompensatedVelocity(edu.wpi.first.math.kinematics.SwerveModuleState)"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"getDriveBaseRadiusMeters()"},{"p":"swervelib","c":"SwerveModule","l":"getDriveMotor()"},{"p":"swervelib","c":"SwerveModule","l":"getDrivePIDF()"},{"p":"swervelib","c":"SwerveDrive","l":"getFieldVelocity()"},{"p":"swervelib","c":"SwerveDrive","l":"getGyro()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getGyroRotation3d()"},{"p":"swervelib","c":"SwerveDrive","l":"getGyroRotation3d()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getIMU()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getIMU()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getIMU()"},{"p":"swervelib","c":"SwerveController","l":"getJoystickAngle(double, double)","u":"getJoystickAngle(double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"getMaximumAngularVelocity()"},{"p":"swervelib","c":"SwerveDrive","l":"getMaximumVelocity()"},{"p":"swervelib.parser","c":"SwerveParser","l":"getModuleConfigurationByName(String, SwerveDriveConfiguration)","u":"getModuleConfigurationByName(java.lang.String,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib","c":"SwerveDrive","l":"getModuleMap()"},{"p":"swervelib","c":"SwerveDrive","l":"getModulePositions()"},{"p":"swervelib","c":"SwerveDrive","l":"getModules()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getMotor()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getMotor()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getMotor()"},{"p":"swervelib","c":"SwerveDrive","l":"getOdometryHeading()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getPitch()"},{"p":"swervelib","c":"SwerveDrive","l":"getPitch()"},{"p":"swervelib","c":"SwerveDrive","l":"getPose()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getPosition()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getPosition()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getPosition()"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"getPosition()"},{"p":"swervelib","c":"SwerveModule","l":"getPosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRate()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRate()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRate()"},{"p":"swervelib","c":"SwerveModule","l":"getRawAbsolutePosition()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRawRotation3d()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRawRotation3d()"},{"p":"swervelib","c":"SwerveController","l":"getRawTargetSpeeds(double, double, double)","u":"getRawTargetSpeeds(double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getRawTargetSpeeds(double, double, double, double)","u":"getRawTargetSpeeds(double,double,double,double)"},{"p":"swervelib","c":"SwerveModule","l":"getRelativePosition()"},{"p":"swervelib","c":"SwerveDrive","l":"getRobotVelocity()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getRoll()"},{"p":"swervelib","c":"SwerveDrive","l":"getRoll()"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"NavXSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"getRotation3d()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"getRotation3d()"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"getState()"},{"p":"swervelib","c":"SwerveModule","l":"getState()"},{"p":"swervelib","c":"SwerveDrive","l":"getStates()"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"getStrings(Alert.AlertType)","u":"getStrings(swervelib.telemetry.Alert.AlertType)"},{"p":"swervelib","c":"SwerveDrive","l":"getSwerveController()"},{"p":"swervelib.math","c":"SwerveMath","l":"getSwerveModule(SwerveModule[], boolean, boolean)","u":"getSwerveModule(swervelib.SwerveModule[],boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"getSwerveModulePoses(Pose2d)","u":"getSwerveModulePoses(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib","c":"SwerveController","l":"getTargetSpeeds(double, double, double, double, double)","u":"getTargetSpeeds(double,double,double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getTargetSpeeds(double, double, double, double, double, double)","u":"getTargetSpeeds(double,double,double,double,double,double)"},{"p":"swervelib","c":"SwerveController","l":"getTranslation2d(ChassisSpeeds)","u":"getTranslation2d(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib.parser","c":"Cache","l":"getValue()"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"getVelocity()"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"getVelocity()"},{"p":"swervelib.imu","c":"IMUVelocity","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getVelocity()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getVelocity()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"getVoltage()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"getVoltage()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"getVoltage()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"getYaw()"},{"p":"swervelib","c":"SwerveDrive","l":"getYaw()"},{"p":"swervelib.telemetry","c":"Alert","l":"groups"},{"p":"swervelib.imu","c":"IMUVelocity","l":"gyro"},{"p":"swervelib.parser.json","c":"ControllerPropertiesJson","l":"heading"},{"p":"swervelib","c":"SwerveDrive","l":"HEADING_CORRECTION_DEADBAND"},{"p":"swervelib","c":"SwerveController","l":"headingCalculate(double, double)","u":"headingCalculate(double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"headingCorrection"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"headingPIDF"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"HIGH"},{"p":"swervelib.parser","c":"PIDFConfig","l":"i"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"i2cLockupWarning"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"id"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"imu"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"imu"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"imu"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"imu"},{"p":"swervelib.imu","c":"NavXSwerve","l":"imu"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"imu"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"imu"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"imu"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"imu"},{"p":"swervelib","c":"SwerveDrive","l":"imu"},{"p":"swervelib.math","c":"IMULinearMovingAverageFilter","l":"IMULinearMovingAverageFilter(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib","c":"SwerveDrive","l":"imuReadingCache"},{"p":"swervelib","c":"SwerveDrive","l":"imuVelocity"},{"p":"swervelib.imu","c":"IMUVelocity","l":"IMUVelocity(SwerveIMU, double, int)","u":"%3Cinit%3E(swervelib.imu.SwerveIMU,double,int)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"inaccurateVelocities"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"inaccurateVelocities"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"INFO"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"INFO"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"initSendable(SendableBuilder)","u":"initSendable(edu.wpi.first.util.sendable.SendableBuilder)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"inverted"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"inverted"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"NavXSwerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"invertedIMU"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"invertedIMU"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"invertedIMU"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"isAngleEmpty()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"isAttachedAbsoluteEncoder()"},{"p":"swervelib.parser.json.modules","c":"ConversionFactorsJson","l":"isDriveEmpty()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"isDriveMotor"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"isInverted"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"isSimulation"},{"p":"swervelib.parser","c":"Cache","l":"isStale()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"iz"},{"p":"swervelib","c":"SwerveDrive","l":"kinematics"},{"p":"swervelib","c":"SwerveController","l":"lastAngleScalar"},{"p":"swervelib","c":"SwerveDrive","l":"lastHeadingRadians"},{"p":"swervelib","c":"SwerveModule","l":"lastState"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"lastTime"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"lastTime"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"left"},{"p":"swervelib.math","c":"SwerveMath","l":"limitVelocity(Translation2d, ChassisSpeeds, Pose2d, double, double, List, SwerveDriveConfiguration)","u":"limitVelocity(edu.wpi.first.math.geometry.Translation2d,edu.wpi.first.math.kinematics.ChassisSpeeds,edu.wpi.first.math.geometry.Pose2d,double,double,java.util.List,swervelib.parser.SwerveDriveConfiguration)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"location"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"LocationJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"lockPose()"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorActivity(SwerveModule, SysIdRoutineLog, Supplier)","u":"logAngularMotorActivity(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog,java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorDutyCycle(SwerveModule, SysIdRoutineLog)","u":"logAngularMotorDutyCycle(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logAngularMotorVoltage(SwerveModule, SysIdRoutineLog)","u":"logAngularMotorVoltage(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorActivity(SwerveModule, SysIdRoutineLog, Supplier)","u":"logDriveMotorActivity(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog,java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorDutyCycle(SwerveModule, SysIdRoutineLog)","u":"logDriveMotorDutyCycle(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib","c":"SwerveDriveTest","l":"logDriveMotorVoltage(SwerveModule, SysIdRoutineLog)","u":"logDriveMotorVoltage(swervelib.SwerveModule,edu.wpi.first.wpilibj.sysid.SysIdRoutineLog)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"LOW"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_anglePosition"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"m_angleVoltageSetter"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_angVelocity"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_appliedVoltage"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_distance"},{"p":"swervelib.math","c":"IMULinearMovingAverageFilter","l":"m_inputGain"},{"p":"swervelib.math","c":"IMULinearMovingAverageFilter","l":"m_inputs"},{"p":"swervelib","c":"SwerveDriveTest","l":"m_velocity"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"m_velocityVoltageSetter"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"MACHINE"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"magnetFieldLessThanIdeal"},{"p":"swervelib.math","c":"Matter","l":"mass"},{"p":"swervelib.math","c":"Matter","l":"massMoment()"},{"p":"swervelib.math","c":"Matter","l":"Matter(Translation3d, double)","u":"%3Cinit%3E(edu.wpi.first.math.geometry.Translation3d,double)"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"max"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"maxAngularVelocity"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"maxAngularVelocity"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"maximumRetries"},{"p":"swervelib.motors","c":"SwerveMotor","l":"maximumRetries"},{"p":"swervelib","c":"SwerveModule","l":"maxSpeed"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"maxSpeed"},{"p":"swervelib","c":"SwerveDrive","l":"maxSpeedMPS"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"measuredChassisSpeeds"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"measuredStates"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"min"},{"p":"swervelib.parser","c":"SwerveParser","l":"moduleConfigs"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"moduleCount"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"moduleCount"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"ModuleJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"SwerveParser","l":"moduleJsons"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"moduleLocation"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"moduleLocationsMeters"},{"p":"swervelib","c":"SwerveModule","l":"moduleNumber"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"modules"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"modules"},{"p":"swervelib","c":"SwerveDrive","l":"moduleSynchronizationCounter"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"motor"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"motor"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"motor"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"motor"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"motor"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"MotorConfigDouble()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"MotorConfigDouble","l":"MotorConfigDouble(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"MotorConfigInt()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.json","c":"MotorConfigInt","l":"MotorConfigInt(int, int)","u":"%3Cinit%3E(int,int)"},{"p":"swervelib","c":"SwerveDrive","l":"movementOptimizations(ChassisSpeeds, boolean, boolean)","u":"movementOptimizations(edu.wpi.first.math.kinematics.ChassisSpeeds,boolean,boolean)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"name"},{"p":"swervelib.imu","c":"NavXSwerve","l":"navXError"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(I2C.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.I2C.Port)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(SerialPort.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.SerialPort.Port)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"NavXSwerve(SPI.Port)","u":"%3Cinit%3E(edu.wpi.first.wpilibj.SPI.Port)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"noEncoderAlert"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"noEncoderDefinedAlert"},{"p":"swervelib","c":"SwerveModule","l":"noEncoderWarning"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"nominalVoltage"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"NONE"},{"p":"swervelib.math","c":"SwerveMath","l":"normalizeAngle(double)"},{"p":"swervelib.imu","c":"IMUVelocity","l":"notifier"},{"p":"swervelib","c":"SwerveDrive","l":"odometryLock"},{"p":"swervelib","c":"SwerveDrive","l":"odometryThread"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"offset"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"offset"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"offset"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"offset"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"offset"},{"p":"swervelib.imu","c":"NavXSwerve","l":"offset"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"offset"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"offset"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"offsetFailure"},{"p":"swervelib.parser","c":"SwerveParser","l":"openJson(File)","u":"openJson(java.io.File)"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"optimalVoltage"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"optimalVoltage"},{"p":"swervelib.parser","c":"PIDFConfig","l":"output"},{"p":"swervelib.parser","c":"PIDFConfig","l":"p"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"physicalCharacteristics"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"physicalCharacteristics"},{"p":"swervelib.parser","c":"SwerveParser","l":"physicalPropertiesJson"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"PhysicalPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"pid"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"pid"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"pid"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double)","u":"%3Cinit%3E(double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double)","u":"%3Cinit%3E(double,double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double)","u":"%3Cinit%3E(double,double,double,double)"},{"p":"swervelib.parser","c":"PIDFConfig","l":"PIDFConfig(double, double, double, double, double)","u":"%3Cinit%3E(double,double,double,double,double)"},{"p":"swervelib.parser","c":"SwerveParser","l":"pidfPropertiesJson"},{"p":"swervelib.parser.json","c":"PIDFPropertiesJson","l":"PIDFPropertiesJson()","u":"%3Cinit%3E()"},{"p":"swervelib.parser.deserializer","c":"PIDFRange","l":"PIDFRange()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"Pigeon2Swerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"Pigeon2Swerve(int, String)","u":"%3Cinit%3E(int,java.lang.String)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"PigeonSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib.math","c":"SwerveMath","l":"placeInAppropriate0To360Scope(double, double)","u":"placeInAppropriate0To360Scope(double,double)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"POSE"},{"p":"swervelib.math","c":"SwerveMath","l":"PoseLog(Pose2d)","u":"PoseLog(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib.imu","c":"IMUVelocity","l":"position"},{"p":"swervelib.math","c":"Matter","l":"position"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"position"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Position"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Position"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"positionConversionFactor"},{"p":"swervelib","c":"SwerveDrive","l":"postTrajectory(Trajectory)","u":"postTrajectory(edu.wpi.first.math.trajectory.Trajectory)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerAngleMotorsDutyCycle(SwerveDrive, double)","u":"powerAngleMotorsDutyCycle(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerAngleMotorsVoltage(SwerveDrive, double)","u":"powerAngleMotorsVoltage(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerDriveMotorsDutyCycle(SwerveDrive, double)","u":"powerDriveMotorsDutyCycle(swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveDriveTest","l":"powerDriveMotorsVoltage(SwerveDrive, double)","u":"powerDriveMotorsVoltage(swervelib.SwerveDrive,double)"},{"p":"swervelib.telemetry","c":"Alert","l":"printAlert(String)","u":"printAlert(java.lang.String)"},{"p":"swervelib","c":"SwerveDrive","l":"pushOffsetsToEncoders()"},{"p":"swervelib","c":"SwerveModule","l":"pushOffsetsToEncoders()"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"PWMDutyCycleEncoderSwerve(int)","u":"%3Cinit%3E(int)"},{"p":"swervelib","c":"SwerveModule","l":"queueSynchronizeEncoders()"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"rampRate"},{"p":"swervelib","c":"SwerveModule","l":"rawAbsoluteAngleName"},{"p":"swervelib","c":"SwerveModule","l":"rawAngleName"},{"p":"swervelib","c":"SwerveModule","l":"rawDriveName"},{"p":"swervelib","c":"SwerveModule","l":"rawDriveVelName"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"readingError"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"readingFaulty"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"readingIgnored"},{"p":"swervelib","c":"SwerveDrive","l":"replaceSwerveModuleFeedforward(SimpleMotorFeedforward)","u":"replaceSwerveModuleFeedforward(edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib","c":"SwerveDrive","l":"resetDriveEncoders()"},{"p":"swervelib","c":"SwerveDrive","l":"resetOdometry(Pose2d)","u":"resetOdometry(edu.wpi.first.math.geometry.Pose2d)"},{"p":"swervelib","c":"SwerveDrive","l":"restoreInternalOffset()"},{"p":"swervelib","c":"SwerveModule","l":"restoreInternalOffset()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"robotRotation"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"rotationUnit"},{"p":"swervelib.math","c":"SwerveMath","l":"scaleTranslation(Translation2d, double)","u":"scaleTranslation(edu.wpi.first.math.geometry.Translation2d,double)"},{"p":"swervelib.telemetry","c":"Alert.SendableAlerts","l":"SendableAlerts()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"serialCommsIssueWarning"},{"p":"swervelib.telemetry","c":"Alert","l":"set(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"set(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"set(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setAbsoluteEncoder(SwerveAbsoluteEncoder)","u":"setAbsoluteEncoder(swervelib.encoders.SwerveAbsoluteEncoder)"},{"p":"swervelib.encoders","c":"AnalogAbsoluteEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"CanAndMagSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"PWMDutyCycleEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"setAbsoluteEncoderOffset(double)"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"setAngle(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngle(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setAngleMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngleMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAngleMotorVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveModule","l":"setAnglePIDF(PIDFConfig)","u":"setAnglePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib","c":"SwerveDriveTest","l":"setAngleSysIdRoutine(SysIdRoutine.Config, SubsystemBase, SwerveDrive)","u":"setAngleSysIdRoutine(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.Config,edu.wpi.first.wpilibj2.command.SubsystemBase,swervelib.SwerveDrive)"},{"p":"swervelib","c":"SwerveDrive","l":"setAngularVelocityCompensation(boolean, boolean, double)","u":"setAngularVelocityCompensation(boolean,boolean,double)"},{"p":"swervelib","c":"SwerveModule","l":"setAntiJitter(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setAutoCenteringModules(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setChassisDiscretization(boolean, boolean, double)","u":"setChassisDiscretization(boolean,boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setChassisDiscretization(boolean, double)","u":"setChassisDiscretization(boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setChassisSpeeds(ChassisSpeeds)","u":"setChassisSpeeds(edu.wpi.first.math.kinematics.ChassisSpeeds)"},{"p":"swervelib","c":"SwerveDrive","l":"setCosineCompensator(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setCurrentLimit(int)"},{"p":"swervelib","c":"SwerveModule","l":"setDesiredState(SwerveModuleState, boolean, boolean)","u":"setDesiredState(edu.wpi.first.math.kinematics.SwerveModuleState,boolean,boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setDriveMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDriveMotorConversionFactor(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDriveMotorVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveModule","l":"setDrivePIDF(PIDFConfig)","u":"setDrivePIDF(swervelib.parser.PIDFConfig)"},{"p":"swervelib","c":"SwerveDriveTest","l":"setDriveSysIdRoutine(SysIdRoutine.Config, SubsystemBase, SwerveDrive, double)","u":"setDriveSysIdRoutine(edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.Config,edu.wpi.first.wpilibj2.command.SubsystemBase,swervelib.SwerveDrive,double)"},{"p":"swervelib","c":"SwerveModule","l":"setEncoderAutoSynchronize(boolean)"},{"p":"swervelib","c":"SwerveModule","l":"setEncoderAutoSynchronize(boolean, double)","u":"setEncoderAutoSynchronize(boolean,double)"},{"p":"swervelib","c":"SwerveModule","l":"setFeedforward(SimpleMotorFeedforward)","u":"setFeedforward(edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib","c":"SwerveDrive","l":"setGyro(Rotation3d)","u":"setGyro(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib","c":"SwerveDrive","l":"setGyroOffset(Rotation3d)","u":"setGyroOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib","c":"SwerveDrive","l":"setHeadingCorrection(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setHeadingCorrection(boolean, double)","u":"setHeadingCorrection(boolean,double)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"setInverted(boolean)"},{"p":"swervelib.imu","c":"SwerveIMU","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setInverted(boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setLoopRampRate(double)"},{"p":"swervelib","c":"SwerveController","l":"setMaximumAngularVelocity(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeed(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeed(double, boolean, double)","u":"setMaximumSpeed(double,boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setMaximumSpeeds(double, double, double)","u":"setMaximumSpeeds(double,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setModuleEncoderAutoSynchronize(boolean, double)","u":"setModuleEncoderAutoSynchronize(boolean,double)"},{"p":"swervelib","c":"SwerveDrive","l":"setModuleStates(SwerveModuleState[], boolean)","u":"setModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[],boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setMotorBrake(boolean)"},{"p":"swervelib","c":"SwerveModule","l":"setMotorBrake(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setMotorIdleMode(boolean)"},{"p":"swervelib","c":"SwerveDrive","l":"setOdometryPeriod(double)"},{"p":"swervelib.imu","c":"ADIS16448Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"ADIS16470Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"ADXRS450Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"AnalogGyroSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"NavXSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"PigeonSwerve","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.imu","c":"SwerveIMU","l":"setOffset(Rotation3d)","u":"setOffset(edu.wpi.first.math.geometry.Rotation3d)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setPosition(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setPosition(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setPosition(double)"},{"p":"swervelib","c":"SwerveDrive","l":"setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean)","u":"setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[],edu.wpi.first.math.kinematics.ChassisSpeeds,boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setReference(double, double)","u":"setReference(double,double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setReference(double, double, double)","u":"setReference(double,double,double)"},{"p":"swervelib.telemetry","c":"Alert","l":"setText(String)","u":"setText(java.lang.String)"},{"p":"swervelib","c":"SwerveDrive","l":"setVisionMeasurementStdDevs(Matrix)","u":"setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setVoltage(double)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"SwerveMotor","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"setVoltageCompensation(double)"},{"p":"swervelib","c":"SwerveDrive","l":"simIMU"},{"p":"swervelib","c":"SwerveModule","l":"simModule"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Simulation"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Simulation"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"sizeFrontBack"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"sizeLeftRight"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"SparkFlexSwerve(CANSparkFlex, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkFlex,boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve","l":"SparkFlexSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"SparkMAX_slotIdx()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"SparkMAX_slotIdx()","u":"%3Cinit%3E()"},{"p":"swervelib.encoders","c":"SparkMaxAnalogEncoderSwerve","l":"SparkMaxAnalogEncoderSwerve(SwerveMotor, double)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,double)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"SparkMaxBrushedMotorSwerve(CANSparkMax, boolean, SparkRelativeEncoder.Type, int, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkMax,boolean,com.revrobotics.SparkRelativeEncoder.Type,int,boolean)"},{"p":"swervelib.motors","c":"SparkMaxBrushedMotorSwerve","l":"SparkMaxBrushedMotorSwerve(int, boolean, SparkRelativeEncoder.Type, int, boolean)","u":"%3Cinit%3E(int,boolean,com.revrobotics.SparkRelativeEncoder.Type,int,boolean)"},{"p":"swervelib.encoders","c":"SparkMaxEncoderSwerve","l":"SparkMaxEncoderSwerve(SwerveMotor, int)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,int)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"SparkMaxSwerve(CANSparkMax, boolean)","u":"%3Cinit%3E(com.revrobotics.CANSparkMax,boolean)"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"SparkMaxSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"state"},{"p":"swervelib.encoders","c":"CANCoderSwerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib.imu","c":"Pigeon2Swerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"STATUS_TIMEOUT_SECONDS"},{"p":"swervelib","c":"SwerveDrive","l":"stopOdometryThread()"},{"p":"swervelib.parser","c":"Cache","l":"supplier"},{"p":"swervelib.encoders","c":"SwerveAbsoluteEncoder","l":"SwerveAbsoluteEncoder()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"swerveController"},{"p":"swervelib","c":"SwerveController","l":"SwerveController(SwerveControllerConfiguration)","u":"%3Cinit%3E(swervelib.parser.SwerveControllerConfiguration)"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"SwerveControllerConfiguration(SwerveDriveConfiguration, PIDFConfig, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.PIDFConfig,double)"},{"p":"swervelib.parser","c":"SwerveControllerConfiguration","l":"SwerveControllerConfiguration(SwerveDriveConfiguration, PIDFConfig, double, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.PIDFConfig,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"SwerveDrive(SwerveDriveConfiguration, SwerveControllerConfiguration, double)","u":"%3Cinit%3E(swervelib.parser.SwerveDriveConfiguration,swervelib.parser.SwerveControllerConfiguration,double)"},{"p":"swervelib","c":"SwerveDrive","l":"swerveDriveConfiguration"},{"p":"swervelib.parser","c":"SwerveDriveConfiguration","l":"SwerveDriveConfiguration(SwerveModuleConfiguration[], SwerveIMU, boolean, SimpleMotorFeedforward, SwerveModulePhysicalCharacteristics)","u":"%3Cinit%3E(swervelib.parser.SwerveModuleConfiguration[],swervelib.imu.SwerveIMU,boolean,edu.wpi.first.math.controller.SimpleMotorFeedforward,swervelib.parser.SwerveModulePhysicalCharacteristics)"},{"p":"swervelib.parser","c":"SwerveParser","l":"swerveDriveJson"},{"p":"swervelib.parser.json","c":"SwerveDriveJson","l":"SwerveDriveJson()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDrive","l":"swerveDrivePoseEstimator"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"SwerveDriveTelemetry()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveDriveTest","l":"SwerveDriveTest()","u":"%3Cinit%3E()"},{"p":"swervelib.imu","c":"SwerveIMU","l":"SwerveIMU()","u":"%3Cinit%3E()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"SwerveIMUSimulation()","u":"%3Cinit%3E()"},{"p":"swervelib.math","c":"SwerveMath","l":"SwerveMath()","u":"%3Cinit%3E()"},{"p":"swervelib","c":"SwerveModule","l":"SwerveModule(int, SwerveModuleConfiguration, SimpleMotorFeedforward)","u":"%3Cinit%3E(int,swervelib.parser.SwerveModuleConfiguration,edu.wpi.first.math.controller.SimpleMotorFeedforward)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"SwerveModuleConfiguration(SwerveMotor, SwerveMotor, MotorConfigDouble, SwerveAbsoluteEncoder, double, double, double, PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, boolean, boolean, boolean, String, boolean)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,swervelib.motors.SwerveMotor,swervelib.parser.json.MotorConfigDouble,swervelib.encoders.SwerveAbsoluteEncoder,double,double,double,swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,boolean,boolean,boolean,java.lang.String,boolean)"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"SwerveModuleConfiguration(SwerveMotor, SwerveMotor, MotorConfigDouble, SwerveAbsoluteEncoder, double, double, double, PIDFConfig, PIDFConfig, SwerveModulePhysicalCharacteristics, String, boolean)","u":"%3Cinit%3E(swervelib.motors.SwerveMotor,swervelib.motors.SwerveMotor,swervelib.parser.json.MotorConfigDouble,swervelib.encoders.SwerveAbsoluteEncoder,double,double,double,swervelib.parser.PIDFConfig,swervelib.parser.PIDFConfig,swervelib.parser.SwerveModulePhysicalCharacteristics,java.lang.String,boolean)"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"SwerveModulePhysicalCharacteristics(MotorConfigDouble, double, double)","u":"%3Cinit%3E(swervelib.parser.json.MotorConfigDouble,double,double)"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"SwerveModulePhysicalCharacteristics(MotorConfigDouble, double, double, int, int, double, double)","u":"%3Cinit%3E(swervelib.parser.json.MotorConfigDouble,double,double,int,int,double,double)"},{"p":"swervelib","c":"SwerveDrive","l":"swerveModules"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"SwerveModuleSimulation()","u":"%3Cinit%3E()"},{"p":"swervelib.motors","c":"SwerveMotor","l":"SwerveMotor()","u":"%3Cinit%3E()"},{"p":"swervelib.parser","c":"SwerveParser","l":"SwerveParser(File)","u":"%3Cinit%3E(java.io.File)"},{"p":"swervelib","c":"SwerveModule","l":"synchronizeEncoderDeadband"},{"p":"swervelib","c":"SwerveModule","l":"synchronizeEncoderEnabled"},{"p":"swervelib","c":"SwerveModule","l":"synchronizeEncoderQueued"},{"p":"swervelib","c":"SwerveDrive","l":"synchronizeModuleEncoders()"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(int, String, boolean)","u":"%3Cinit%3E(int,java.lang.String,boolean)"},{"p":"swervelib.motors","c":"TalonFXSwerve","l":"TalonFXSwerve(TalonFX, boolean)","u":"%3Cinit%3E(com.ctre.phoenix6.hardware.TalonFX,boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"TalonSRXSwerve(int, boolean)","u":"%3Cinit%3E(int,boolean)"},{"p":"swervelib.motors","c":"TalonSRXSwerve","l":"TalonSRXSwerve(WPI_TalonSRX, boolean)","u":"%3Cinit%3E(com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX,boolean)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"TelemetryVerbosity()","u":"%3Cinit%3E()"},{"p":"swervelib.telemetry","c":"Alert","l":"text"},{"p":"swervelib","c":"SwerveController","l":"thetaController"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"timer"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"timer"},{"p":"swervelib.imu","c":"IMUVelocity","l":"timestamp"},{"p":"swervelib.parser","c":"Cache","l":"timestamp"},{"p":"swervelib","c":"SwerveDrive","l":"tunerXRecommendation"},{"p":"swervelib.parser.json","c":"DeviceJson","l":"type"},{"p":"swervelib.telemetry","c":"Alert","l":"type"},{"p":"swervelib.imu","c":"IMUVelocity","l":"update()"},{"p":"swervelib.parser","c":"Cache","l":"update()"},{"p":"swervelib","c":"SwerveDrive","l":"updateCacheValidityPeriods(long, long, long)","u":"updateCacheValidityPeriods(long,long,long)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"updateData()"},{"p":"swervelib","c":"SwerveDrive","l":"updateOdometry()"},{"p":"swervelib.simulation","c":"SwerveIMUSimulation","l":"updateOdometry(SwerveDriveKinematics, SwerveModuleState[], Pose2d[], Field2d)","u":"updateOdometry(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.kinematics.SwerveModuleState[],edu.wpi.first.math.geometry.Pose2d[],edu.wpi.first.wpilibj.smartdashboard.Field2d)"},{"p":"swervelib.simulation","c":"SwerveModuleSimulation","l":"updateStateAndPosition(SwerveModuleState)","u":"updateStateAndPosition(edu.wpi.first.math.kinematics.SwerveModuleState)"},{"p":"swervelib.parser","c":"Cache","l":"updateSupplier(Supplier)","u":"updateSupplier(java.util.function.Supplier)"},{"p":"swervelib","c":"SwerveModule","l":"updateTelemetry()"},{"p":"swervelib.parser","c":"Cache","l":"updateValidityPeriod(long)"},{"p":"swervelib.parser.json","c":"ModuleJson","l":"useCosineCompensator"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"useCosineCompensator"},{"p":"swervelib.parser","c":"Cache","l":"validityPeriod"},{"p":"swervelib.parser","c":"Cache","l":"value"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"values()"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"values()"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"values()"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry.TelemetryVerbosity","l":"values()"},{"p":"swervelib.imu","c":"IMUVelocity","l":"velocity"},{"p":"swervelib.motors","c":"SparkMaxSwerve","l":"velocity"},{"p":"swervelib.motors","c":"SparkFlexSwerve.SparkMAX_slotIdx","l":"Velocity"},{"p":"swervelib.motors","c":"SparkMaxSwerve.SparkMAX_slotIdx","l":"Velocity"},{"p":"swervelib.imu","c":"IMUVelocity","l":"velocityFilter"},{"p":"swervelib.parser","c":"SwerveModuleConfiguration","l":"velocityPIDF"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"verbosity"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"WARNING"},{"p":"swervelib.telemetry","c":"Alert.AlertType","l":"WARNING_TRACE"},{"p":"swervelib.parser.json","c":"PhysicalPropertiesJson","l":"wheelGripCoefficientOfFriction"},{"p":"swervelib.parser","c":"SwerveModulePhysicalCharacteristics","l":"wheelGripCoefficientOfFriction"},{"p":"swervelib.telemetry","c":"SwerveDriveTelemetry","l":"wheelLocations"},{"p":"swervelib","c":"SwerveController","l":"withinHypotDeadband(double, double)","u":"withinHypotDeadband(double,double)"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"x"},{"p":"swervelib","c":"SwerveController","l":"xLimiter"},{"p":"swervelib.parser.json.modules","c":"LocationJson","l":"y"},{"p":"swervelib","c":"SwerveController","l":"yLimiter"},{"p":"swervelib","c":"SwerveDrive","l":"zeroGyro()"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/overview-summary.html b/docs/overview-summary.html index edb3918..0e9da4c 100644 --- a/docs/overview-summary.html +++ b/docs/overview-summary.html @@ -1,11 +1,11 @@ - + Generated Documentation (Untitled) - + diff --git a/docs/overview-tree.html b/docs/overview-tree.html index ae45423..b944c30 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -1,11 +1,11 @@ - + Class Hierarchy - + @@ -78,6 +78,8 @@

Class Hierarchy

  • swervelib.parser.json.modules.ConversionFactorsJson
  • swervelib.parser.json.DeviceJson
  • swervelib.parser.json.modules.DriveConversionFactorsJson
  • +
  • swervelib.math.IMULinearMovingAverageFilter
  • +
  • swervelib.imu.IMUVelocity
  • swervelib.parser.json.modules.LocationJson
  • swervelib.math.Matter
  • swervelib.parser.json.ModuleJson
  • diff --git a/docs/swervelib/SwerveController.html b/docs/swervelib/SwerveController.html index 5c0aae7..fc25d97 100644 --- a/docs/swervelib/SwerveController.html +++ b/docs/swervelib/SwerveController.html @@ -1,11 +1,11 @@ - + SwerveController - + diff --git a/docs/swervelib/SwerveDrive.html b/docs/swervelib/SwerveDrive.html index 987256f..db57af1 100644 --- a/docs/swervelib/SwerveDrive.html +++ b/docs/swervelib/SwerveDrive.html @@ -1,11 +1,11 @@ - + SwerveDrive - + @@ -91,6 +91,16 @@

    Field Summary

    Modifier and Type
    Field
    Description
    +
    double
    + +
    +
    Angular Velocity Correction Coefficent (expected values between -0.15 and 0.15).
    +
    +
    boolean
    + +
    +
    Correct for skew that scales with angular velocity in drive(Translation2d, double, boolean, boolean)
    +
    private double
    @@ -102,6 +112,18 @@

    Field Summary

    The absolute max speed that your robot can reach while translating in meters per second.
    boolean
    + +
    +
    Correct for skew that scales with angular velocity in setChassisSpeeds(ChassisSpeeds chassisSpeeds) + during auto.
    +
    +
    boolean
    + +
    +
    Correct chassis velocity in setChassisSpeeds(ChassisSpeeds chassisSpeeds) (auto) using 254's + correction during auto.
    +
    +
    boolean
    Correct chassis velocity in drive(Translation2d, double, boolean, boolean) using 254's @@ -137,64 +159,69 @@

    Field Summary

    IMU reading cache for robot readings.
    -
    final edu.wpi.first.math.kinematics.SwerveDriveKinematics
    - +
    private IMUVelocity
    +
    -
    Swerve Kinematics object.
    +
    Class that calculates robot's yaw velocity using IMU measurements.
    -
    private double
    - +
    final edu.wpi.first.math.kinematics.SwerveDriveKinematics
    +
    -
    The last heading set in radians.
    +
    Swerve Kinematics object.
    private double
    - +
    -
    Maximum speed of the robot in meters per second.
    +
    The last heading set in radians.
    -
    private int
    - +
    private double
    +
    -
    Counter to synchronize the modules relative encoder with absolute encoder when not moving.
    +
    Maximum speed of the robot in meters per second.
    -
    private final Lock
    - +
    private int
    +
    -
    Odometry lock to ensure thread safety.
    +
    Counter to synchronize the modules relative encoder with absolute encoder when not moving.
    -
    private final edu.wpi.first.wpilibj.Notifier
    - +
    private final Lock
    +
    -
    WPILib Notifier to keep odometry up to date.
    +
    Odometry lock to ensure thread safety.
    - - +
    private final edu.wpi.first.wpilibj.Notifier
    +
    -
    Simulation of the swerve drive.
    +
    WPILib Notifier to keep odometry up to date.
    - - + +
    -
    Swerve controller for controlling heading of the robot.
    +
    Simulation of the swerve drive.
    - - + +
    -
    Swerve drive configuration.
    +
    Swerve controller for controlling heading of the robot.
    -
    final edu.wpi.first.math.estimator.SwerveDrivePoseEstimator
    - + +
    -
    Swerve odometry.
    +
    Swerve drive configuration.
    -
    private final SwerveModule[]
    - +
    final edu.wpi.first.math.estimator.SwerveDrivePoseEstimator
    +
    -
    Swerve modules.
    +
    Swerve odometry.
    -
    private final Alert
    - +
    private final SwerveModule[]
    +
    +
    Swerve modules.
    +
    +
    private final Alert
    + +
    Alert to recommend Tuner X if the configuration is compatible.
    @@ -243,163 +270,175 @@

    Method Summary

    Add a vision measurement to the SwerveDrivePoseEstimator and update the SwerveIMU gyro reading with the given timestamp of the vision measurement.
    -
    private void
    - +
    edu.wpi.first.math.kinematics.ChassisSpeeds
    +
    angularVelocitySkewCorrection(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    +
    Correct for skew that worsens as angular velocity increases
    +
    +
    private void
    + +
    Check all components to ensure that Tuner X Swerve Generator is recommended instead.
    -
    void
    -
    drive(edu.wpi.first.math.geometry.Translation2d translation, +
    void
    +
    drive(edu.wpi.first.math.geometry.Translation2d translation, double rotation, boolean fieldRelative, boolean isOpenLoop)
    -
    +
    The primary method for controlling the drivebase.
    -
    void
    -
    drive(edu.wpi.first.math.geometry.Translation2d translation, +
    void
    +
    drive(edu.wpi.first.math.geometry.Translation2d translation, double rotation, boolean fieldRelative, boolean isOpenLoop, edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    -
    -
    The primary method for controlling the drivebase.
    -
    -
    void
    -
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    -
    Secondary method for controlling the drivebase.
    +
    The primary method for controlling the drivebase.
    void
    -
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, - boolean isOpenLoop, - edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    +
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    -
    The primary method for controlling the drivebase.
    +
    Secondary method for controlling the drivebase.
    void
    -
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, +
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, + boolean isOpenLoop, edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    -
    Secondary method for controlling the drivebase.
    +
    The primary method for controlling the drivebase.
    void
    -
    driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    +
    drive(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, + edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    -
    Secondary method of controlling the drive base given velocity and adjusting it for field oriented use.
    +
    Secondary method for controlling the drivebase.
    void
    -
    driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, - edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    +
    driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    Secondary method of controlling the drive base given velocity and adjusting it for field oriented use.
    void
    -
    driveFieldOrientedandRobotOriented(edu.wpi.first.math.kinematics.ChassisSpeeds fieldOrientedVelocity, - edu.wpi.first.math.kinematics.ChassisSpeeds robotOrientedVelocity)
    +
    driveFieldOriented(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, + edu.wpi.first.math.geometry.Translation2d centerOfRotationMeters)
    +
    Secondary method of controlling the drive base given velocity and adjusting it for field oriented use.
    +
    +
    void
    +
    driveFieldOrientedandRobotOriented(edu.wpi.first.math.kinematics.ChassisSpeeds fieldOrientedVelocity, + edu.wpi.first.math.kinematics.ChassisSpeeds robotOrientedVelocity)
    +
    Tertiary method of controlling the drive base given velocity in both field oriented and robot oriented at the same time.
    -
    Optional<edu.wpi.first.math.geometry.Translation3d>
    - -
    +
    Optional<edu.wpi.first.math.geometry.Translation3d>
    + +
    Gets current acceleration of the robot in m/s/s.
    -
    edu.wpi.first.math.kinematics.ChassisSpeeds
    - -
    +
    edu.wpi.first.math.kinematics.ChassisSpeeds
    + +
    Gets the current field-relative velocity (x, y and omega) of the robot
    - - -
    + + +
    Getter for the SwerveIMU.
    -
    edu.wpi.first.math.geometry.Rotation3d
    - -
    +
    edu.wpi.first.math.geometry.Rotation3d
    + +
    Gets the current gyro Rotation3d of the robot, as reported by the imu.
    -
    double
    - -
    +
    double
    + + -
    double
    - -
    +
    double
    + +
    Get the maximum velocity from attainableMaxTranslationalSpeedMetersPerSecond or maxSpeedMPS whichever is higher.
    - - -
    -
    Get the SwerveModule's as a HashMap where the key is the swerve module configuration name.
    -
    -
    edu.wpi.first.math.kinematics.SwerveModulePosition[]
    - + +
    -
    Gets the current module positions (azimuth and wheel position (meters)).
    +
    Get the SwerveModule's as a HashMap where the key is the swerve module configuration name.
    - - +
    edu.wpi.first.math.kinematics.SwerveModulePosition[]
    +
    -
    Get the SwerveModules associated with the SwerveDrive.
    +
    Gets the current module positions (azimuth and wheel position (meters)).
    -
    edu.wpi.first.math.geometry.Rotation2d
    - + +
    -
    Fetch the latest odometry heading, should be trusted over getYaw().
    +
    Get the SwerveModules associated with the SwerveDrive.
    edu.wpi.first.math.geometry.Rotation2d
    - +
    -
    Gets the current pitch angle of the robot, as reported by the imu.
    +
    Fetch the latest odometry heading, should be trusted over getYaw().
    -
    edu.wpi.first.math.geometry.Pose2d
    - +
    edu.wpi.first.math.geometry.Rotation2d
    +
    -
    Gets the current pose (position and rotation) of the robot, as reported by odometry.
    +
    Gets the current pitch angle of the robot, as reported by the imu.
    -
    edu.wpi.first.math.kinematics.ChassisSpeeds
    - +
    edu.wpi.first.math.geometry.Pose2d
    +
    -
    Gets the current robot-relative velocity (x, y and omega) of the robot
    +
    Gets the current pose (position and rotation) of the robot, as reported by odometry.
    -
    edu.wpi.first.math.geometry.Rotation2d
    - +
    edu.wpi.first.math.kinematics.ChassisSpeeds
    +
    -
    Gets the current roll angle of the robot, as reported by the imu.
    +
    Gets the current robot-relative velocity (x, y and omega) of the robot
    -
    edu.wpi.first.math.kinematics.SwerveModuleState[]
    - +
    edu.wpi.first.math.geometry.Rotation2d
    +
    -
    Gets the current module states (azimuth and velocity)
    +
    Gets the current roll angle of the robot, as reported by the imu.
    - - +
    edu.wpi.first.math.kinematics.SwerveModuleState[]
    +
    +
    Gets the current module states (azimuth and velocity)
    +
    + + +
    Helper function to get the swerveController for the SwerveDrive which can be used to generate ChassisSpeeds for the robot to orient it correctly given axis or angles, and apply SlewRateLimiter to given inputs.
    -
    edu.wpi.first.math.geometry.Pose2d[]
    -
    getSwerveModulePoses(edu.wpi.first.math.geometry.Pose2d robotPose)
    -
    +
    edu.wpi.first.math.geometry.Pose2d[]
    +
    getSwerveModulePoses(edu.wpi.first.math.geometry.Pose2d robotPose)
    +
    Get the swerve module poses and on the field relative to the robot.
    -
    edu.wpi.first.math.geometry.Rotation2d
    - -
    +
    edu.wpi.first.math.geometry.Rotation2d
    + +
    Gets the current yaw angle of the robot, as reported by the imu.
    -
    void
    - -
    +
    void
    + +
    Point all modules toward the robot center, thus making the robot very difficult to move.
    +
    private edu.wpi.first.math.kinematics.ChassisSpeeds
    +
    movementOptimizations(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, + boolean uesChassisDiscretize, + boolean useAngularVelocitySkewCorrection)
    +
    +
    Enable desired drive corrections
    +
    void
    postTrajectory(edu.wpi.first.math.trajectory.Trajectory trajectory)
    @@ -437,15 +476,30 @@

    Method Summary

    Set the conversion factor for the angle/azimuth motor controller.
    void
    -
    setAutoCenteringModules(boolean enabled)
    +
    setAngularVelocityCompensation(boolean useInTeleop, + boolean useInAuto, + double angularVelocityCoeff)
    +
    Enables angular velocity skew correction in teleop and/or autonomous + and sets the angular velocity coefficient for both modes
    +
    +
    void
    +
    setAutoCenteringModules(boolean enabled)
    +
    Enable auto-centering module wheels.
    +
    void
    +
    setChassisDiscretization(boolean useInTeleop, + boolean useInAuto, + double dtSeconds)
    +
    +
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop and/or auto
    +
    void
    setChassisDiscretization(boolean enable, double dtSeconds)
    -
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction
    +
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop
    void
    setChassisSpeeds(edu.wpi.first.math.kinematics.ChassisSpeeds chassisSpeeds)
    @@ -488,7 +542,7 @@

    Method Summary

    setMaximumSpeed(double maximumSpeed)
    void
    @@ -497,7 +551,7 @@

    Method Summary

    double optimalVoltage)
    void
    @@ -508,57 +562,64 @@

    Method Summary

    Set the maximum speeds for desaturation.
    void
    -
    setModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, - boolean isOpenLoop)
    +
    setModuleEncoderAutoSynchronize(boolean enabled, + double deadband)
    -
    Set the module states (azimuth and velocity) directly.
    +
    Enable auto synchronization for encoders during a match.
    void
    -
    setMotorIdleMode(boolean brake)
    +
    setModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, + boolean isOpenLoop)
    -
    Sets the drive motors to brake/coast mode.
    +
    Set the module states (azimuth and velocity) directly.
    void
    -
    setOdometryPeriod(double period)
    +
    setMotorIdleMode(boolean brake)
    -
    Set the odometry update period in seconds.
    +
    Sets the drive motors to brake/coast mode.
    -
    private void
    -
    setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, - boolean isOpenLoop)
    +
    void
    +
    setOdometryPeriod(double period)
    -
    Set the module states (azimuth and velocity) directly.
    +
    Set the odometry update period in seconds.
    -
    void
    -
    setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix<edu.wpi.first.math.numbers.N3,edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)
    +
    private void
    +
    setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, + edu.wpi.first.math.kinematics.ChassisSpeeds desiredChassisSpeed, + boolean isOpenLoop)
    -
    Sets the pose estimator's trust of global measurements.
    +
    Set the module states (azimuth and velocity) directly.
    void
    - +
    setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix<edu.wpi.first.math.numbers.N3,edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)
    -
    Stop the odometry thread in favor of manually updating odometry.
    +
    Sets the pose estimator's trust of global measurements.
    void
    - +
    -
    Synchronize angle motor integrated encoders with data from absolute encoders.
    +
    Stop the odometry thread in favor of manually updating odometry.
    void
    -
    updateCacheValidityPeriods(long imu, - long driveMotor, - long absoluteEncoder)
    +
    -
    Update the cache validity period for the robot.
    +
    Synchronize angle motor integrated encoders with data from absolute encoders.
    void
    - +
    updateCacheValidityPeriods(long imu, + long driveMotor, + long absoluteEncoder)
    -
    Update odometry should be run every loop.
    +
    Update the cache validity period for the robot.
    void
    - +
    +
    Update odometry should be run every loop.
    +
    +
    void
    + +
    Resets the gyro angle to zero and resets odometry to the same position, but facing toward 0.
    @@ -657,6 +718,36 @@

    chassisVelocityCorrection

  • +
    +

    autonomousChassisVelocityCorrection

    +
    public boolean autonomousChassisVelocityCorrection
    +
    Correct chassis velocity in setChassisSpeeds(ChassisSpeeds chassisSpeeds) (auto) using 254's + correction during auto.
    +
    +
  • +
  • +
    +

    angularVelocityCorrection

    +
    public boolean angularVelocityCorrection
    +
    Correct for skew that scales with angular velocity in drive(Translation2d, double, boolean, boolean)
    +
    +
  • +
  • +
    +

    autonomousAngularVelocityCorrection

    +
    public boolean autonomousAngularVelocityCorrection
    +
    Correct for skew that scales with angular velocity in setChassisSpeeds(ChassisSpeeds chassisSpeeds) + during auto.
    +
    +
  • +
  • +
    +

    angularVelocityCoefficient

    +
    public double angularVelocityCoefficient
    +
    Angular Velocity Correction Coefficent (expected values between -0.15 and 0.15).
    +
    +
  • +
  • headingCorrection

    public boolean headingCorrection
    @@ -685,6 +776,14 @@

    imu

  • +
    +

    imuVelocity

    +
    private IMUVelocity imuVelocity
    +
    Class that calculates robot's yaw velocity using IMU measurements. Used for angularVelocityCorrection in + drive(Translation2d, double, boolean, boolean).
    +
    +
  • +
  • simIMU

    private SwerveIMUSimulation simIMU
    @@ -741,9 +840,9 @@

    SwerveDrive

    SwerveControllerConfiguration controllerConfig, double maxSpeedMPS)
  • Creates a new swerve drivebase subsystem. Robot is controlled via the drive(edu.wpi.first.math.kinematics.ChassisSpeeds) method, or via the - setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[], boolean) method. The drive(edu.wpi.first.math.kinematics.ChassisSpeeds) method incorporates kinematics-- it + setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[], edu.wpi.first.math.kinematics.ChassisSpeeds, boolean) method. The drive(edu.wpi.first.math.kinematics.ChassisSpeeds) method incorporates kinematics-- it takes a translation and rotation, as well as parameters for field-centric and closed-loop velocity control. - setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[], boolean) takes a list of SwerveModuleStates and directly passes them to the modules. + setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[], edu.wpi.first.math.kinematics.ChassisSpeeds, boolean) takes a list of SwerveModuleStates and directly passes them to the modules. This subsystem also handles odometry.
    Parameters:
    @@ -1036,14 +1135,16 @@

    getMaximumAngularVelocity

  • -
    +

    setRawModuleStates

    private void setRawModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, + edu.wpi.first.math.kinematics.ChassisSpeeds desiredChassisSpeed, boolean isOpenLoop)
    Set the module states (azimuth and velocity) directly.
    Parameters:
    desiredStates - A list of SwerveModuleStates to send to the modules.
    +
    desiredChassisSpeed - The desired chassis speeds to set the robot to achieve.
    isOpenLoop - Whether to use closed-loop velocity control. Set to true to disable closed-loop.
    @@ -1053,7 +1154,10 @@

    setRawModuleStates

    setModuleStates

    public void setModuleStates(edu.wpi.first.math.kinematics.SwerveModuleState[] desiredStates, boolean isOpenLoop)
    -
    Set the module states (azimuth and velocity) directly. Used primarily for auto paths.
    +
    Set the module states (azimuth and velocity) directly. Used primarily for auto paths. + Does not allow for usage of desaturateWheelSpeeds(SwerveModuleState[] moduleStates, + ChassisSpeeds desiredChassisSpeed, double attainableMaxModuleSpeedMetersPerSecond, + double attainableMaxTranslationalSpeedMetersPerSecond, double attainableMaxRotationalVelocityRadiansPerSecond)
    Parameters:
    desiredStates - A list of SwerveModuleStates to send to the modules.
    @@ -1248,13 +1352,26 @@

    setMotorIdleMode

  • +
    +

    setModuleEncoderAutoSynchronize

    +
    public void setModuleEncoderAutoSynchronize(boolean enabled, + double deadband)
    +
    Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds.
    +
    +
    Parameters:
    +
    enabled - Enable state
    +
    deadband - Deadband in degrees, default is 3 degrees.
    +
    +
    +
  • +
  • setMaximumSpeed

    public void setMaximumSpeed(double maximumSpeed, boolean updateModuleFeedforward, double optimalVoltage)
    Set the maximum speed of the drive motors, modified maxSpeedMPS which is used for the - setRawModuleStates(SwerveModuleState[], boolean) function and + setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean) function and SwerveController.getTargetSpeeds(double, double, double, double, double) functions. This function overrides what was placed in the JSON and could damage your motor/robot if set too high or unachievable rates.
    @@ -1272,7 +1389,7 @@

    setMaximumSpeed

    setMaximumSpeed

    public void setMaximumSpeed(double maximumSpeed)
    Set the maximum speed of the drive motors, modified maxSpeedMPS which is used for the - setRawModuleStates(SwerveModuleState[], boolean) function and + setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean) function and SwerveController.getTargetSpeeds(double, double, double, double, double) functions. This function overrides what was placed in the JSON and could damage your motor/robot if set too high or unachievable rates. Overwrites the SwerveModule.setFeedforward(SimpleMotorFeedforward).
    @@ -1485,7 +1602,7 @@

    setCosineCompensator

    setChassisDiscretization

    public void setChassisDiscretization(boolean enable, double dtSeconds)
    -
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction
    +
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop
    Parameters:
    enable - Enable chassis velocity correction, which will use @@ -1494,6 +1611,75 @@

    setChassisDiscretization

  • +
  • +
    +

    setChassisDiscretization

    +
    public void setChassisDiscretization(boolean useInTeleop, + boolean useInAuto, + double dtSeconds)
    +
    Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop and/or auto
    +
    +
    Parameters:
    +
    useInTeleop - Enable chassis velocity correction, which will use + ChassisSpeeds.discretize(ChassisSpeeds, double) with the following in teleop.
    +
    useInAuto - Enable chassis velocity correction, which will use + ChassisSpeeds.discretize(ChassisSpeeds, double) with the following in auto.
    +
    dtSeconds - The duration of the timestep the speeds should be applied for.
    +
    +
    +
  • +
  • +
    +

    setAngularVelocityCompensation

    +
    public void setAngularVelocityCompensation(boolean useInTeleop, + boolean useInAuto, + double angularVelocityCoeff)
    +
    Enables angular velocity skew correction in teleop and/or autonomous + and sets the angular velocity coefficient for both modes
    +
    +
    Parameters:
    +
    useInTeleop - Enables angular velocity correction in teleop.
    +
    useInAuto - Enables angular velocity correction in autonomous.
    +
    angularVelocityCoeff - The angular velocity coefficient. Expected values between -0.15 to 0.15. + Start with a value of 0.1, test in teleop. + When enabling for the first time if the skew is significantly worse try inverting the value. + Tune by moving in a straight line while rotating. Testing is best done with angular velocity controls on the right stick. + Change the value until you are visually happy with the skew. + Ensure your tune works with different translational and rotational magnitudes. + If this reduces skew in teleop, it may improve auto.
    +
    +
    +
  • +
  • +
    +

    angularVelocitySkewCorrection

    +
    public edu.wpi.first.math.kinematics.ChassisSpeeds angularVelocitySkewCorrection(edu.wpi.first.math.kinematics.ChassisSpeeds velocity)
    +
    Correct for skew that worsens as angular velocity increases
    +
    +
    Parameters:
    +
    velocity - The chassis speeds to set the robot to achieve.
    +
    Returns:
    +
    ChassisSpeeds of the robot after angular velocity skew correction.
    +
    +
    +
  • +
  • +
    +

    movementOptimizations

    +
    private edu.wpi.first.math.kinematics.ChassisSpeeds movementOptimizations(edu.wpi.first.math.kinematics.ChassisSpeeds velocity, + boolean uesChassisDiscretize, + boolean useAngularVelocitySkewCorrection)
    +
    Enable desired drive corrections
    +
    +
    Parameters:
    +
    velocity - The chassis speeds to set the robot to achieve.
    +
    uesChassisDiscretize - Correct chassis velocity using 254's correction.
    +
    useAngularVelocitySkewCorrection - Use the robot's angular velocity to correct for skew.
    +
    Returns:
    +
    The chassis speeds after optimizations.
    +
    +
    +
  • diff --git a/docs/swervelib/SwerveDriveTest.html b/docs/swervelib/SwerveDriveTest.html index fbbef67..adfbb0a 100644 --- a/docs/swervelib/SwerveDriveTest.html +++ b/docs/swervelib/SwerveDriveTest.html @@ -1,11 +1,11 @@ - + SwerveDriveTest - + diff --git a/docs/swervelib/SwerveModule.html b/docs/swervelib/SwerveModule.html index 718665e..6f3b7e1 100644 --- a/docs/swervelib/SwerveModule.html +++ b/docs/swervelib/SwerveModule.html @@ -1,11 +1,11 @@ - + SwerveModule - + @@ -201,6 +201,16 @@

    Field Summary

    Simulated swerve module.
    +
    private double
    + +
    +
    Encoder synchronization deadband in degrees.
    +
    +
    private boolean
    + +
    +
    Encoder, Absolute encoder synchronization enabled.
    +
    private boolean
    @@ -365,6 +375,17 @@

    Method Summary

    Set the drive PIDF values.
    void
    +
    setEncoderAutoSynchronize(boolean enabled)
    +
    +
    Enable auto synchronization for encoders during a match.
    +
    +
    void
    +
    setEncoderAutoSynchronize(boolean enabled, + double deadband)
    +
    +
    Enable auto synchronization for encoders during a match.
    +
    +
    void
    setFeedforward(edu.wpi.first.math.controller.SimpleMotorFeedforward drive)
    Set the feedforward attributes to the given parameters.
    @@ -557,6 +578,20 @@

    synchronizeEncoderQueued

    Encoder synchronization queued.
    +
  • +
    +

    synchronizeEncoderEnabled

    +
    private boolean synchronizeEncoderEnabled
    +
    Encoder, Absolute encoder synchronization enabled.
    +
    +
  • +
  • +
    +

    synchronizeEncoderDeadband

    +
    private double synchronizeEncoderDeadband
    +
    Encoder synchronization deadband in degrees.
    +
    +
  • @@ -619,6 +654,30 @@

    queueSynchronizeEncoders

  • +
    +

    setEncoderAutoSynchronize

    +
    public void setEncoderAutoSynchronize(boolean enabled, + double deadband)
    +
    Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds.
    +
    +
    Parameters:
    +
    enabled - Enable state
    +
    deadband - Deadband in degrees, default is 3 degrees.
    +
    +
    +
  • +
  • +
    +

    setEncoderAutoSynchronize

    +
    public void setEncoderAutoSynchronize(boolean enabled)
    +
    Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds.
    +
    +
    Parameters:
    +
    enabled - Enable state
    +
    +
    +
  • +
  • setAntiJitter

    public void setAntiJitter(boolean antiJitter)
    diff --git a/docs/swervelib/encoders/AnalogAbsoluteEncoderSwerve.html b/docs/swervelib/encoders/AnalogAbsoluteEncoderSwerve.html index 05797e7..88176a5 100644 --- a/docs/swervelib/encoders/AnalogAbsoluteEncoderSwerve.html +++ b/docs/swervelib/encoders/AnalogAbsoluteEncoderSwerve.html @@ -1,11 +1,11 @@ - + AnalogAbsoluteEncoderSwerve - + diff --git a/docs/swervelib/encoders/CANCoderSwerve.html b/docs/swervelib/encoders/CANCoderSwerve.html index 3304613..a520987 100644 --- a/docs/swervelib/encoders/CANCoderSwerve.html +++ b/docs/swervelib/encoders/CANCoderSwerve.html @@ -1,11 +1,11 @@ - + CANCoderSwerve - + diff --git a/docs/swervelib/encoders/CanAndMagSwerve.html b/docs/swervelib/encoders/CanAndMagSwerve.html index 0ca5b59..3e65912 100644 --- a/docs/swervelib/encoders/CanAndMagSwerve.html +++ b/docs/swervelib/encoders/CanAndMagSwerve.html @@ -1,11 +1,11 @@ - + CanAndMagSwerve - + diff --git a/docs/swervelib/encoders/PWMDutyCycleEncoderSwerve.html b/docs/swervelib/encoders/PWMDutyCycleEncoderSwerve.html index ee03132..34a8ab2 100644 --- a/docs/swervelib/encoders/PWMDutyCycleEncoderSwerve.html +++ b/docs/swervelib/encoders/PWMDutyCycleEncoderSwerve.html @@ -1,11 +1,11 @@ - + PWMDutyCycleEncoderSwerve - + diff --git a/docs/swervelib/encoders/SparkMaxAnalogEncoderSwerve.html b/docs/swervelib/encoders/SparkMaxAnalogEncoderSwerve.html index 739aa37..bc84303 100644 --- a/docs/swervelib/encoders/SparkMaxAnalogEncoderSwerve.html +++ b/docs/swervelib/encoders/SparkMaxAnalogEncoderSwerve.html @@ -1,11 +1,11 @@ - + SparkMaxAnalogEncoderSwerve - + diff --git a/docs/swervelib/encoders/SparkMaxEncoderSwerve.html b/docs/swervelib/encoders/SparkMaxEncoderSwerve.html index f8f4062..a1b682f 100644 --- a/docs/swervelib/encoders/SparkMaxEncoderSwerve.html +++ b/docs/swervelib/encoders/SparkMaxEncoderSwerve.html @@ -1,11 +1,11 @@ - + SparkMaxEncoderSwerve - + diff --git a/docs/swervelib/encoders/SwerveAbsoluteEncoder.html b/docs/swervelib/encoders/SwerveAbsoluteEncoder.html index c5ef17f..748fc5f 100644 --- a/docs/swervelib/encoders/SwerveAbsoluteEncoder.html +++ b/docs/swervelib/encoders/SwerveAbsoluteEncoder.html @@ -1,11 +1,11 @@ - + SwerveAbsoluteEncoder - + diff --git a/docs/swervelib/encoders/package-summary.html b/docs/swervelib/encoders/package-summary.html index f1239a1..ea7cb5d 100644 --- a/docs/swervelib/encoders/package-summary.html +++ b/docs/swervelib/encoders/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.encoders - + diff --git a/docs/swervelib/encoders/package-tree.html b/docs/swervelib/encoders/package-tree.html index b752ba3..333b2be 100644 --- a/docs/swervelib/encoders/package-tree.html +++ b/docs/swervelib/encoders/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.encoders Class Hierarchy - + diff --git a/docs/swervelib/imu/ADIS16448Swerve.html b/docs/swervelib/imu/ADIS16448Swerve.html index cd229c7..960bcf9 100644 --- a/docs/swervelib/imu/ADIS16448Swerve.html +++ b/docs/swervelib/imu/ADIS16448Swerve.html @@ -1,11 +1,11 @@ - + ADIS16448Swerve - + diff --git a/docs/swervelib/imu/ADIS16470Swerve.html b/docs/swervelib/imu/ADIS16470Swerve.html index a398119..1a7f1a5 100644 --- a/docs/swervelib/imu/ADIS16470Swerve.html +++ b/docs/swervelib/imu/ADIS16470Swerve.html @@ -1,11 +1,11 @@ - + ADIS16470Swerve - + diff --git a/docs/swervelib/imu/ADXRS450Swerve.html b/docs/swervelib/imu/ADXRS450Swerve.html index 9b6ad61..e8c6294 100644 --- a/docs/swervelib/imu/ADXRS450Swerve.html +++ b/docs/swervelib/imu/ADXRS450Swerve.html @@ -1,11 +1,11 @@ - + ADXRS450Swerve - + diff --git a/docs/swervelib/imu/AnalogGyroSwerve.html b/docs/swervelib/imu/AnalogGyroSwerve.html index f04af4b..00038fb 100644 --- a/docs/swervelib/imu/AnalogGyroSwerve.html +++ b/docs/swervelib/imu/AnalogGyroSwerve.html @@ -1,11 +1,11 @@ - + AnalogGyroSwerve - + diff --git a/docs/swervelib/imu/IMUVelocity.html b/docs/swervelib/imu/IMUVelocity.html new file mode 100644 index 0000000..0359be7 --- /dev/null +++ b/docs/swervelib/imu/IMUVelocity.html @@ -0,0 +1,321 @@ + + + + +IMUVelocity + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    Package swervelib.imu
    +

    Class IMUVelocity

    +
    +
    java.lang.Object +
    swervelib.imu.IMUVelocity
    +
    +
    +
    +
    public class IMUVelocity +extends Object
    +
    Generic IMU Velocity filter.
    +
    +
    +
      + +
    • +
      +

      Field Summary

      +
      Fields
      +
      +
      Modifier and Type
      +
      Field
      +
      Description
      +
      private boolean
      + +
      +
      Prevents calculation when no previous measurement exists.
      +
      +
      private final SwerveIMU
      + +
      +
      Swerve IMU.
      +
      +
      private final edu.wpi.first.wpilibj.Notifier
      + +
      +
      WPILib Notifier to keep IMU velocity up to date.
      +
      +
      private edu.wpi.first.math.geometry.Rotation2d
      + +
      +
      Tracks the previous loop's position as a Rotation2d.
      +
      +
      private double
      + +
      +
      Tracks the previous loop's recorded time.
      +
      +
      private double
      + +
      +
      The calculated velocity of the robot based on averaged IMU measurements.
      +
      + + +
      +
      Linear filter used to calculate velocity, we use a custom filter class + to prevent unwanted operations.
      +
      +
      +
      +
    • + +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      +
      IMUVelocity(SwerveIMU gyro, + double periodSeconds, + int averagingTaps)
      +
      +
      Constructor for the IMU Velocity.
      +
      +
      +
      +
    • + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Static factory for IMU Velocity.
      +
      +
      double
      + +
      +
      Get the robot's angular velocity based on averaged meaasurements from the IMU.
      +
      +
      private void
      + +
      +
      Update the robot's rotational velocity based on the current gyro position.
      +
      +
      +
      +
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Field Details

      +
        +
      • +
        +

        gyro

        +
        private final SwerveIMU gyro
        +
        Swerve IMU.
        +
        +
      • +
      • +
        +

        velocityFilter

        +
        private final IMULinearMovingAverageFilter velocityFilter
        +
        Linear filter used to calculate velocity, we use a custom filter class + to prevent unwanted operations.
        +
        +
      • +
      • +
        +

        notifier

        +
        private final edu.wpi.first.wpilibj.Notifier notifier
        +
        WPILib Notifier to keep IMU velocity up to date.
        +
        +
      • +
      • +
        +

        firstCycle

        +
        private boolean firstCycle
        +
        Prevents calculation when no previous measurement exists.
        +
        +
      • +
      • +
        +

        timestamp

        +
        private double timestamp
        +
        Tracks the previous loop's recorded time.
        +
        +
      • +
      • +
        +

        position

        +
        private edu.wpi.first.math.geometry.Rotation2d position
        +
        Tracks the previous loop's position as a Rotation2d.
        +
        +
      • +
      • +
        +

        velocity

        +
        private double velocity
        +
        The calculated velocity of the robot based on averaged IMU measurements.
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        IMUVelocity

        +
        public IMUVelocity(SwerveIMU gyro, + double periodSeconds, + int averagingTaps)
        +
        Constructor for the IMU Velocity.
        +
        +
        Parameters:
        +
        gyro - The SwerveIMU gyro.
        +
        periodSeconds - The rate to collect measurements from the gyro, in the form (1/number of samples per second), + make sure this does not exceed the update rate of your IMU.
        +
        averagingTaps - The number of samples to used for the moving average linear filter. Higher values will not + allow the system to update to changes in velocity, lower values may create a less smooth signal. Expected taps + will probably be ~2-8, with the goal of having the lowest smooth value.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        createIMUVelocity

        +
        public static IMUVelocity createIMUVelocity(SwerveIMU gyro)
        +
        Static factory for IMU Velocity. Supported IMU rates will be as quick as possible + but will not exceed 100hz and will use 5 taps (supported IMUs are listed in swervelib's IMU folder). + Other gyroscopes will default to 50hz and 5 taps. For custom rates please use the IMUVelocity constructor.
        +
        +
        Parameters:
        +
        gyro - The SwerveIMU gyro.
        +
        Returns:
        +
        IMUVelocity for the given gyro with adjusted period readings for velocity.
        +
        +
        +
      • +
      • +
        +

        update

        +
        private void update()
        +
        Update the robot's rotational velocity based on the current gyro position.
        +
        +
      • +
      • +
        +

        getVelocity

        +
        public double getVelocity()
        +
        Get the robot's angular velocity based on averaged meaasurements from the IMU. + Velocity is multiplied by 1e+6 (1,000,000) because the timestamps are in microseconds.
        +
        +
        Returns:
        +
        robot's angular velocity in rads/s as a double.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/swervelib/imu/NavXSwerve.html b/docs/swervelib/imu/NavXSwerve.html index 123ef27..2eefacb 100644 --- a/docs/swervelib/imu/NavXSwerve.html +++ b/docs/swervelib/imu/NavXSwerve.html @@ -1,11 +1,11 @@ - + NavXSwerve - + diff --git a/docs/swervelib/imu/Pigeon2Swerve.html b/docs/swervelib/imu/Pigeon2Swerve.html index 0bb06ee..c6fa832 100644 --- a/docs/swervelib/imu/Pigeon2Swerve.html +++ b/docs/swervelib/imu/Pigeon2Swerve.html @@ -1,11 +1,11 @@ - + Pigeon2Swerve - + @@ -93,24 +93,29 @@

    Field Summary

    Modifier and Type
    Field
    Description
    -
    (package private) com.ctre.phoenix6.hardware.Pigeon2
    - +
    private com.ctre.phoenix6.configs.Pigeon2Configurator
    +
    -
    Pigeon2 IMU device.
    +
    Pigeon2 configurator.
    -
    private boolean
    - +
    (package private) com.ctre.phoenix6.hardware.Pigeon2
    +
    -
    Inversion for the gyro
    +
    Pigeon2 IMU device.
    -
    private edu.wpi.first.math.geometry.Rotation3d
    - +
    private boolean
    +
    -
    Offset for the Pigeon 2.
    +
    Inversion for the gyro
    -
    static double
    - +
    private edu.wpi.first.math.geometry.Rotation3d
    +
    +
    Offset for the Pigeon 2.
    +
    +
    static double
    + +
    Wait time for status frames to show up.
  • @@ -237,6 +242,13 @@

    invertedIMU

    Inversion for the gyro
    +
  • +
    +

    cfg

    +
    private com.ctre.phoenix6.configs.Pigeon2Configurator cfg
    +
    Pigeon2 configurator.
    +
    +
  • diff --git a/docs/swervelib/imu/PigeonSwerve.html b/docs/swervelib/imu/PigeonSwerve.html index 43cb3eb..bcf3f05 100644 --- a/docs/swervelib/imu/PigeonSwerve.html +++ b/docs/swervelib/imu/PigeonSwerve.html @@ -1,11 +1,11 @@ - + PigeonSwerve - + diff --git a/docs/swervelib/imu/SwerveIMU.html b/docs/swervelib/imu/SwerveIMU.html index b5f0e97..ddeee9e 100644 --- a/docs/swervelib/imu/SwerveIMU.html +++ b/docs/swervelib/imu/SwerveIMU.html @@ -1,11 +1,11 @@ - + SwerveIMU - + diff --git a/docs/swervelib/imu/package-summary.html b/docs/swervelib/imu/package-summary.html index 9f931ea..8f606f0 100644 --- a/docs/swervelib/imu/package-summary.html +++ b/docs/swervelib/imu/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.imu - + @@ -100,20 +100,24 @@

    Package swervelib.imu

    Creates a IMU for AnalogGyro devices, only uses yaw.
    - +
    -
    Communicates with the NavX as the IMU.
    +
    Generic IMU Velocity filter.
    - +
    -
    SwerveIMU interface for the Pigeon2
    +
    Communicates with the NavX as the IMU.
    - +
    -
    SwerveIMU interface for the Pigeon.
    +
    SwerveIMU interface for the Pigeon2
    - +
    +
    SwerveIMU interface for the Pigeon.
    +
    + +
    Swerve IMU abstraction to define a standard interface with a swerve drive.
    diff --git a/docs/swervelib/imu/package-tree.html b/docs/swervelib/imu/package-tree.html index 60d4d97..b5ef9c3 100644 --- a/docs/swervelib/imu/package-tree.html +++ b/docs/swervelib/imu/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.imu Class Hierarchy - + @@ -59,6 +59,7 @@

    Class Hierarchy

    • java.lang.Object
        +
      • swervelib.imu.IMUVelocity
      • swervelib.imu.SwerveIMU
        • swervelib.imu.ADIS16448Swerve
        • diff --git a/docs/swervelib/math/IMULinearMovingAverageFilter.html b/docs/swervelib/math/IMULinearMovingAverageFilter.html new file mode 100644 index 0000000..519d382 --- /dev/null +++ b/docs/swervelib/math/IMULinearMovingAverageFilter.html @@ -0,0 +1,234 @@ + + + + +IMULinearMovingAverageFilter + + + + + + + + + + + + + + + +
          + +
          +
          + +
          + +

          Class IMULinearMovingAverageFilter

          +
          +
          java.lang.Object +
          swervelib.math.IMULinearMovingAverageFilter
          +
          +
          +
          +
          public class IMULinearMovingAverageFilter +extends Object
          +
          A linear filter that does not calculate() each time a value is added to + the DoubleCircularBuffer.
          +
          +
          +
            + +
          • +
            +

            Field Summary

            +
            Fields
            +
            +
            Modifier and Type
            +
            Field
            +
            Description
            +
            private final double
            + +
            +
            Gain on each reading.
            +
            +
            private final edu.wpi.first.util.DoubleCircularBuffer
            + +
            +
            Circular buffer storing the current IMU readings
            +
            +
            +
            +
          • + +
          • +
            +

            Constructor Summary

            +
            Constructors
            +
            +
            Constructor
            +
            Description
            +
            IMULinearMovingAverageFilter(int bufferLength)
            +
            +
            Construct a linear moving average fitler
            +
            +
            +
            +
          • + +
          • +
            +

            Method Summary

            +
            +
            +
            +
            +
            Modifier and Type
            +
            Method
            +
            Description
            +
            void
            +
            addValue(double input)
            +
            +
            Add a value to the DoubleCircularBuffer
            +
            +
            double
            + +
            +
            Calculate the average of the samples in the buffer
            +
            +
            +
            +
            +
            +

            Methods inherited from class java.lang.Object

            +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
            +
            +
          • +
          +
          +
          +
            + +
          • +
            +

            Field Details

            +
              +
            • +
              +

              m_inputs

              +
              private final edu.wpi.first.util.DoubleCircularBuffer m_inputs
              +
              Circular buffer storing the current IMU readings
              +
              +
            • +
            • +
              +

              m_inputGain

              +
              private final double m_inputGain
              +
              Gain on each reading.
              +
              +
            • +
            +
            +
          • + +
          • +
            +

            Constructor Details

            +
              +
            • +
              +

              IMULinearMovingAverageFilter

              +
              public IMULinearMovingAverageFilter(int bufferLength)
              +
              Construct a linear moving average fitler
              +
              +
              Parameters:
              +
              bufferLength - The number of values to average across
              +
              +
              +
            • +
            +
            +
          • + +
          • +
            +

            Method Details

            +
              +
            • +
              +

              addValue

              +
              public void addValue(double input)
              +
              Add a value to the DoubleCircularBuffer
              +
              +
              Parameters:
              +
              input - Value to add
              +
              +
              +
            • +
            • +
              +

              calculate

              +
              public double calculate()
              +
              Calculate the average of the samples in the buffer
              +
              +
              Returns:
              +
              The average of the values in the buffer
              +
              +
              +
            • +
            +
            +
          • +
          +
          + +
          +
          +
          + + diff --git a/docs/swervelib/math/Matter.html b/docs/swervelib/math/Matter.html index 81b859e..16fed99 100644 --- a/docs/swervelib/math/Matter.html +++ b/docs/swervelib/math/Matter.html @@ -1,11 +1,11 @@ - + Matter - + diff --git a/docs/swervelib/math/SwerveMath.html b/docs/swervelib/math/SwerveMath.html index b1a3ad8..a6897c1 100644 --- a/docs/swervelib/math/SwerveMath.html +++ b/docs/swervelib/math/SwerveMath.html @@ -1,11 +1,11 @@ - + SwerveMath - + diff --git a/docs/swervelib/math/package-summary.html b/docs/swervelib/math/package-summary.html index 054e2e8..54cdb0c 100644 --- a/docs/swervelib/math/package-summary.html +++ b/docs/swervelib/math/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.math - + @@ -86,12 +86,17 @@

          Package swervelib.math

          Class
          Description
          - +
          -
          Object with significant mass that needs to be taken into account.
          +
          A linear filter that does not calculate() each time a value is added to + the DoubleCircularBuffer.
          - +
          +
          Object with significant mass that needs to be taken into account.
          +
          + +
          Mathematical functions which pertain to swerve drive.
          diff --git a/docs/swervelib/math/package-tree.html b/docs/swervelib/math/package-tree.html index 3816143..5f66008 100644 --- a/docs/swervelib/math/package-tree.html +++ b/docs/swervelib/math/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.math Class Hierarchy - + @@ -59,6 +59,7 @@

          Class Hierarchy

          • java.lang.Object diff --git a/docs/swervelib/motors/SparkFlexSwerve.SparkMAX_slotIdx.html b/docs/swervelib/motors/SparkFlexSwerve.SparkMAX_slotIdx.html index b135917..c256846 100644 --- a/docs/swervelib/motors/SparkFlexSwerve.SparkMAX_slotIdx.html +++ b/docs/swervelib/motors/SparkFlexSwerve.SparkMAX_slotIdx.html @@ -1,11 +1,11 @@ - + SparkFlexSwerve.SparkMAX_slotIdx - + diff --git a/docs/swervelib/motors/SparkFlexSwerve.html b/docs/swervelib/motors/SparkFlexSwerve.html index 62ce4e8..5399f88 100644 --- a/docs/swervelib/motors/SparkFlexSwerve.html +++ b/docs/swervelib/motors/SparkFlexSwerve.html @@ -1,11 +1,11 @@ - + SparkFlexSwerve - + diff --git a/docs/swervelib/motors/SparkMaxBrushedMotorSwerve.html b/docs/swervelib/motors/SparkMaxBrushedMotorSwerve.html index 046a595..be8c0fc 100644 --- a/docs/swervelib/motors/SparkMaxBrushedMotorSwerve.html +++ b/docs/swervelib/motors/SparkMaxBrushedMotorSwerve.html @@ -1,11 +1,11 @@ - + SparkMaxBrushedMotorSwerve - + diff --git a/docs/swervelib/motors/SparkMaxSwerve.SparkMAX_slotIdx.html b/docs/swervelib/motors/SparkMaxSwerve.SparkMAX_slotIdx.html index 160a2d4..ad7dc8c 100644 --- a/docs/swervelib/motors/SparkMaxSwerve.SparkMAX_slotIdx.html +++ b/docs/swervelib/motors/SparkMaxSwerve.SparkMAX_slotIdx.html @@ -1,11 +1,11 @@ - + SparkMaxSwerve.SparkMAX_slotIdx - + diff --git a/docs/swervelib/motors/SparkMaxSwerve.html b/docs/swervelib/motors/SparkMaxSwerve.html index 8a50082..591174e 100644 --- a/docs/swervelib/motors/SparkMaxSwerve.html +++ b/docs/swervelib/motors/SparkMaxSwerve.html @@ -1,11 +1,11 @@ - + SparkMaxSwerve - + diff --git a/docs/swervelib/motors/SwerveMotor.html b/docs/swervelib/motors/SwerveMotor.html index d58ff5a..afc28ae 100644 --- a/docs/swervelib/motors/SwerveMotor.html +++ b/docs/swervelib/motors/SwerveMotor.html @@ -1,11 +1,11 @@ - + SwerveMotor - + diff --git a/docs/swervelib/motors/TalonFXSwerve.html b/docs/swervelib/motors/TalonFXSwerve.html index f62c331..e83dc47 100644 --- a/docs/swervelib/motors/TalonFXSwerve.html +++ b/docs/swervelib/motors/TalonFXSwerve.html @@ -1,11 +1,11 @@ - + TalonFXSwerve - + @@ -98,39 +98,44 @@

            Field Summary

            Whether the absolute encoder is integrated.
            -
            private com.ctre.phoenix6.configs.TalonFXConfiguration
            - +
            private com.ctre.phoenix6.configs.TalonFXConfigurator
            +
            -
            Current TalonFX configuration.
            +
            Current TalonFX Configurator.
            -
            private double
            - +
            private com.ctre.phoenix6.configs.TalonFXConfiguration
            +
            -
            Conversion factor for the motor.
            +
            Current TalonFX configuration.
            -
            private final boolean
            - +
            private double
            +
            -
            Factory default already occurred.
            +
            Conversion factor for the motor.
            -
            private final com.ctre.phoenix6.controls.MotionMagicVoltage
            - +
            private final boolean
            +
            -
            Motion magic angle voltage setter.
            +
            Factory default already occurred.
            -
            private final com.ctre.phoenix6.controls.VelocityVoltage
            - +
            private final com.ctre.phoenix6.controls.MotionMagicVoltage
            +
            -
            Velocity voltage setter for controlling drive motor.
            +
            Motion magic angle voltage setter.
            -
            (package private) com.ctre.phoenix6.hardware.TalonFX
            - +
            private final com.ctre.phoenix6.controls.VelocityVoltage
            +
            -
            TalonFX motor controller.
            +
            Velocity voltage setter for controlling drive motor.
            -
            static double
            - +
            (package private) com.ctre.phoenix6.hardware.TalonFX
            +
            +
            TalonFX motor controller.
            +
            +
            static double
            + +
            Wait time for status frames to show up.
    @@ -406,6 +411,13 @@

    configuration

    Current TalonFX configuration.
    +
  • +
    +

    cfg

    +
    private com.ctre.phoenix6.configs.TalonFXConfigurator cfg
    +
    Current TalonFX Configurator.
    +
    +
  • diff --git a/docs/swervelib/motors/TalonSRXSwerve.html b/docs/swervelib/motors/TalonSRXSwerve.html index 4616121..8f80cdb 100644 --- a/docs/swervelib/motors/TalonSRXSwerve.html +++ b/docs/swervelib/motors/TalonSRXSwerve.html @@ -1,11 +1,11 @@ - + TalonSRXSwerve - + diff --git a/docs/swervelib/motors/package-summary.html b/docs/swervelib/motors/package-summary.html index 32b6906..d53ae47 100644 --- a/docs/swervelib/motors/package-summary.html +++ b/docs/swervelib/motors/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.motors - + diff --git a/docs/swervelib/motors/package-tree.html b/docs/swervelib/motors/package-tree.html index 0a2e6a8..347091a 100644 --- a/docs/swervelib/motors/package-tree.html +++ b/docs/swervelib/motors/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.motors Class Hierarchy - + diff --git a/docs/swervelib/package-summary.html b/docs/swervelib/package-summary.html index fc47dd3..a053e1a 100644 --- a/docs/swervelib/package-summary.html +++ b/docs/swervelib/package-summary.html @@ -1,11 +1,11 @@ - + swervelib - + diff --git a/docs/swervelib/package-tree.html b/docs/swervelib/package-tree.html index 1a91c89..f14b80c 100644 --- a/docs/swervelib/package-tree.html +++ b/docs/swervelib/package-tree.html @@ -1,11 +1,11 @@ - + swervelib Class Hierarchy - + diff --git a/docs/swervelib/parser/Cache.html b/docs/swervelib/parser/Cache.html index 4f53168..9a2b34c 100644 --- a/docs/swervelib/parser/Cache.html +++ b/docs/swervelib/parser/Cache.html @@ -1,11 +1,11 @@ - + Cache - + diff --git a/docs/swervelib/parser/PIDFConfig.html b/docs/swervelib/parser/PIDFConfig.html index 9cfac15..ed95cbc 100644 --- a/docs/swervelib/parser/PIDFConfig.html +++ b/docs/swervelib/parser/PIDFConfig.html @@ -1,11 +1,11 @@ - + PIDFConfig - + diff --git a/docs/swervelib/parser/SwerveControllerConfiguration.html b/docs/swervelib/parser/SwerveControllerConfiguration.html index 837b99e..b0a1b6b 100644 --- a/docs/swervelib/parser/SwerveControllerConfiguration.html +++ b/docs/swervelib/parser/SwerveControllerConfiguration.html @@ -1,11 +1,11 @@ - + SwerveControllerConfiguration - + diff --git a/docs/swervelib/parser/SwerveDriveConfiguration.html b/docs/swervelib/parser/SwerveDriveConfiguration.html index 3cddbea..1fe89f2 100644 --- a/docs/swervelib/parser/SwerveDriveConfiguration.html +++ b/docs/swervelib/parser/SwerveDriveConfiguration.html @@ -1,11 +1,11 @@ - + SwerveDriveConfiguration - + diff --git a/docs/swervelib/parser/SwerveModuleConfiguration.html b/docs/swervelib/parser/SwerveModuleConfiguration.html index 8093286..faf6771 100644 --- a/docs/swervelib/parser/SwerveModuleConfiguration.html +++ b/docs/swervelib/parser/SwerveModuleConfiguration.html @@ -1,11 +1,11 @@ - + SwerveModuleConfiguration - + diff --git a/docs/swervelib/parser/SwerveModulePhysicalCharacteristics.html b/docs/swervelib/parser/SwerveModulePhysicalCharacteristics.html index 8bb911f..4881e30 100644 --- a/docs/swervelib/parser/SwerveModulePhysicalCharacteristics.html +++ b/docs/swervelib/parser/SwerveModulePhysicalCharacteristics.html @@ -1,11 +1,11 @@ - + SwerveModulePhysicalCharacteristics - + diff --git a/docs/swervelib/parser/SwerveParser.html b/docs/swervelib/parser/SwerveParser.html index 604278a..85e2e58 100644 --- a/docs/swervelib/parser/SwerveParser.html +++ b/docs/swervelib/parser/SwerveParser.html @@ -1,11 +1,11 @@ - + SwerveParser - + diff --git a/docs/swervelib/parser/deserializer/PIDFRange.html b/docs/swervelib/parser/deserializer/PIDFRange.html index aa0f379..8cb57f5 100644 --- a/docs/swervelib/parser/deserializer/PIDFRange.html +++ b/docs/swervelib/parser/deserializer/PIDFRange.html @@ -1,11 +1,11 @@ - + PIDFRange - + diff --git a/docs/swervelib/parser/deserializer/package-summary.html b/docs/swervelib/parser/deserializer/package-summary.html index 3880035..e0aea80 100644 --- a/docs/swervelib/parser/deserializer/package-summary.html +++ b/docs/swervelib/parser/deserializer/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.parser.deserializer - + diff --git a/docs/swervelib/parser/deserializer/package-tree.html b/docs/swervelib/parser/deserializer/package-tree.html index 713ef40..a5529ea 100644 --- a/docs/swervelib/parser/deserializer/package-tree.html +++ b/docs/swervelib/parser/deserializer/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.parser.deserializer Class Hierarchy - + diff --git a/docs/swervelib/parser/json/ControllerPropertiesJson.html b/docs/swervelib/parser/json/ControllerPropertiesJson.html index 27bcd9f..6e04c9e 100644 --- a/docs/swervelib/parser/json/ControllerPropertiesJson.html +++ b/docs/swervelib/parser/json/ControllerPropertiesJson.html @@ -1,11 +1,11 @@ - + ControllerPropertiesJson - + diff --git a/docs/swervelib/parser/json/DeviceJson.html b/docs/swervelib/parser/json/DeviceJson.html index 899c2df..dfdfa3d 100644 --- a/docs/swervelib/parser/json/DeviceJson.html +++ b/docs/swervelib/parser/json/DeviceJson.html @@ -1,11 +1,11 @@ - + DeviceJson - + diff --git a/docs/swervelib/parser/json/ModuleJson.html b/docs/swervelib/parser/json/ModuleJson.html index 2b5cfcc..16ac8ca 100644 --- a/docs/swervelib/parser/json/ModuleJson.html +++ b/docs/swervelib/parser/json/ModuleJson.html @@ -1,11 +1,11 @@ - + ModuleJson - + diff --git a/docs/swervelib/parser/json/MotorConfigDouble.html b/docs/swervelib/parser/json/MotorConfigDouble.html index bdd707f..e1ae9a5 100644 --- a/docs/swervelib/parser/json/MotorConfigDouble.html +++ b/docs/swervelib/parser/json/MotorConfigDouble.html @@ -1,11 +1,11 @@ - + MotorConfigDouble - + diff --git a/docs/swervelib/parser/json/MotorConfigInt.html b/docs/swervelib/parser/json/MotorConfigInt.html index 1802865..bf943d8 100644 --- a/docs/swervelib/parser/json/MotorConfigInt.html +++ b/docs/swervelib/parser/json/MotorConfigInt.html @@ -1,11 +1,11 @@ - + MotorConfigInt - + diff --git a/docs/swervelib/parser/json/PIDFPropertiesJson.html b/docs/swervelib/parser/json/PIDFPropertiesJson.html index 1356166..0054d60 100644 --- a/docs/swervelib/parser/json/PIDFPropertiesJson.html +++ b/docs/swervelib/parser/json/PIDFPropertiesJson.html @@ -1,11 +1,11 @@ - + PIDFPropertiesJson - + diff --git a/docs/swervelib/parser/json/PhysicalPropertiesJson.html b/docs/swervelib/parser/json/PhysicalPropertiesJson.html index d866f60..d353dfe 100644 --- a/docs/swervelib/parser/json/PhysicalPropertiesJson.html +++ b/docs/swervelib/parser/json/PhysicalPropertiesJson.html @@ -1,11 +1,11 @@ - + PhysicalPropertiesJson - + diff --git a/docs/swervelib/parser/json/SwerveDriveJson.html b/docs/swervelib/parser/json/SwerveDriveJson.html index 6fddcfc..2b2b9fd 100644 --- a/docs/swervelib/parser/json/SwerveDriveJson.html +++ b/docs/swervelib/parser/json/SwerveDriveJson.html @@ -1,11 +1,11 @@ - + SwerveDriveJson - + diff --git a/docs/swervelib/parser/json/modules/AngleConversionFactorsJson.html b/docs/swervelib/parser/json/modules/AngleConversionFactorsJson.html index e939b7e..f2ed9f9 100644 --- a/docs/swervelib/parser/json/modules/AngleConversionFactorsJson.html +++ b/docs/swervelib/parser/json/modules/AngleConversionFactorsJson.html @@ -1,11 +1,11 @@ - + AngleConversionFactorsJson - + diff --git a/docs/swervelib/parser/json/modules/BoolMotorJson.html b/docs/swervelib/parser/json/modules/BoolMotorJson.html index a58ea59..7b4fbb1 100644 --- a/docs/swervelib/parser/json/modules/BoolMotorJson.html +++ b/docs/swervelib/parser/json/modules/BoolMotorJson.html @@ -1,11 +1,11 @@ - + BoolMotorJson - + diff --git a/docs/swervelib/parser/json/modules/ConversionFactorsJson.html b/docs/swervelib/parser/json/modules/ConversionFactorsJson.html index 1229664..8456688 100644 --- a/docs/swervelib/parser/json/modules/ConversionFactorsJson.html +++ b/docs/swervelib/parser/json/modules/ConversionFactorsJson.html @@ -1,11 +1,11 @@ - + ConversionFactorsJson - + diff --git a/docs/swervelib/parser/json/modules/DriveConversionFactorsJson.html b/docs/swervelib/parser/json/modules/DriveConversionFactorsJson.html index da3a82f..69fe288 100644 --- a/docs/swervelib/parser/json/modules/DriveConversionFactorsJson.html +++ b/docs/swervelib/parser/json/modules/DriveConversionFactorsJson.html @@ -1,11 +1,11 @@ - + DriveConversionFactorsJson - + diff --git a/docs/swervelib/parser/json/modules/LocationJson.html b/docs/swervelib/parser/json/modules/LocationJson.html index d0d856d..762b4e7 100644 --- a/docs/swervelib/parser/json/modules/LocationJson.html +++ b/docs/swervelib/parser/json/modules/LocationJson.html @@ -1,11 +1,11 @@ - + LocationJson - + diff --git a/docs/swervelib/parser/json/modules/package-summary.html b/docs/swervelib/parser/json/modules/package-summary.html index 27a8257..74bfec6 100644 --- a/docs/swervelib/parser/json/modules/package-summary.html +++ b/docs/swervelib/parser/json/modules/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.parser.json.modules - + diff --git a/docs/swervelib/parser/json/modules/package-tree.html b/docs/swervelib/parser/json/modules/package-tree.html index 32a1259..c874537 100644 --- a/docs/swervelib/parser/json/modules/package-tree.html +++ b/docs/swervelib/parser/json/modules/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.parser.json.modules Class Hierarchy - + diff --git a/docs/swervelib/parser/json/package-summary.html b/docs/swervelib/parser/json/package-summary.html index e92e4c1..349f1e5 100644 --- a/docs/swervelib/parser/json/package-summary.html +++ b/docs/swervelib/parser/json/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.parser.json - + diff --git a/docs/swervelib/parser/json/package-tree.html b/docs/swervelib/parser/json/package-tree.html index b76d0ed..6e7f3fa 100644 --- a/docs/swervelib/parser/json/package-tree.html +++ b/docs/swervelib/parser/json/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.parser.json Class Hierarchy - + diff --git a/docs/swervelib/parser/package-summary.html b/docs/swervelib/parser/package-summary.html index f2a13dd..1c72328 100644 --- a/docs/swervelib/parser/package-summary.html +++ b/docs/swervelib/parser/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.parser - + diff --git a/docs/swervelib/parser/package-tree.html b/docs/swervelib/parser/package-tree.html index be23ba4..a97781e 100644 --- a/docs/swervelib/parser/package-tree.html +++ b/docs/swervelib/parser/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.parser Class Hierarchy - + diff --git a/docs/swervelib/simulation/SwerveIMUSimulation.html b/docs/swervelib/simulation/SwerveIMUSimulation.html index 49e2a58..8d90361 100644 --- a/docs/swervelib/simulation/SwerveIMUSimulation.html +++ b/docs/swervelib/simulation/SwerveIMUSimulation.html @@ -1,11 +1,11 @@ - + SwerveIMUSimulation - + diff --git a/docs/swervelib/simulation/SwerveModuleSimulation.html b/docs/swervelib/simulation/SwerveModuleSimulation.html index 3d51bd5..53959b6 100644 --- a/docs/swervelib/simulation/SwerveModuleSimulation.html +++ b/docs/swervelib/simulation/SwerveModuleSimulation.html @@ -1,11 +1,11 @@ - + SwerveModuleSimulation - + diff --git a/docs/swervelib/simulation/package-summary.html b/docs/swervelib/simulation/package-summary.html index 0c70929..7e3e5a0 100644 --- a/docs/swervelib/simulation/package-summary.html +++ b/docs/swervelib/simulation/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.simulation - + diff --git a/docs/swervelib/simulation/package-tree.html b/docs/swervelib/simulation/package-tree.html index 31d70f5..5fa3b35 100644 --- a/docs/swervelib/simulation/package-tree.html +++ b/docs/swervelib/simulation/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.simulation Class Hierarchy - + diff --git a/docs/swervelib/telemetry/Alert.AlertType.html b/docs/swervelib/telemetry/Alert.AlertType.html index fb36cc3..67d5ddf 100644 --- a/docs/swervelib/telemetry/Alert.AlertType.html +++ b/docs/swervelib/telemetry/Alert.AlertType.html @@ -1,11 +1,11 @@ - + Alert.AlertType - + diff --git a/docs/swervelib/telemetry/Alert.SendableAlerts.html b/docs/swervelib/telemetry/Alert.SendableAlerts.html index 33eb173..032185c 100644 --- a/docs/swervelib/telemetry/Alert.SendableAlerts.html +++ b/docs/swervelib/telemetry/Alert.SendableAlerts.html @@ -1,11 +1,11 @@ - + Alert.SendableAlerts - + diff --git a/docs/swervelib/telemetry/Alert.html b/docs/swervelib/telemetry/Alert.html index 6c38620..f83d281 100644 --- a/docs/swervelib/telemetry/Alert.html +++ b/docs/swervelib/telemetry/Alert.html @@ -1,11 +1,11 @@ - + Alert - + diff --git a/docs/swervelib/telemetry/SwerveDriveTelemetry.TelemetryVerbosity.html b/docs/swervelib/telemetry/SwerveDriveTelemetry.TelemetryVerbosity.html index e47ec80..8e7f788 100644 --- a/docs/swervelib/telemetry/SwerveDriveTelemetry.TelemetryVerbosity.html +++ b/docs/swervelib/telemetry/SwerveDriveTelemetry.TelemetryVerbosity.html @@ -1,11 +1,11 @@ - + SwerveDriveTelemetry.TelemetryVerbosity - + diff --git a/docs/swervelib/telemetry/SwerveDriveTelemetry.html b/docs/swervelib/telemetry/SwerveDriveTelemetry.html index 34d3511..abb474d 100644 --- a/docs/swervelib/telemetry/SwerveDriveTelemetry.html +++ b/docs/swervelib/telemetry/SwerveDriveTelemetry.html @@ -1,11 +1,11 @@ - + SwerveDriveTelemetry - + diff --git a/docs/swervelib/telemetry/package-summary.html b/docs/swervelib/telemetry/package-summary.html index adc8e18..cc8b398 100644 --- a/docs/swervelib/telemetry/package-summary.html +++ b/docs/swervelib/telemetry/package-summary.html @@ -1,11 +1,11 @@ - + swervelib.telemetry - + diff --git a/docs/swervelib/telemetry/package-tree.html b/docs/swervelib/telemetry/package-tree.html index 2e0c769..0d15c17 100644 --- a/docs/swervelib/telemetry/package-tree.html +++ b/docs/swervelib/telemetry/package-tree.html @@ -1,11 +1,11 @@ - + swervelib.telemetry Class Hierarchy - + diff --git a/docs/type-search-index.js b/docs/type-search-index.js index 2d5d5de..1a07770 100644 --- a/docs/type-search-index.js +++ b/docs/type-search-index.js @@ -1 +1 @@ -typeSearchIndex = [{"p":"swervelib.imu","l":"ADIS16448Swerve"},{"p":"swervelib.imu","l":"ADIS16470Swerve"},{"p":"swervelib.imu","l":"ADXRS450Swerve"},{"p":"swervelib.telemetry","l":"Alert"},{"p":"swervelib.telemetry","l":"Alert.AlertType"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"swervelib.encoders","l":"AnalogAbsoluteEncoderSwerve"},{"p":"swervelib.imu","l":"AnalogGyroSwerve"},{"p":"swervelib.parser.json.modules","l":"AngleConversionFactorsJson"},{"p":"swervelib.parser.json.modules","l":"BoolMotorJson"},{"p":"swervelib.parser","l":"Cache"},{"p":"swervelib.encoders","l":"CanAndMagSwerve"},{"p":"swervelib.encoders","l":"CANCoderSwerve"},{"p":"swervelib.parser.json","l":"ControllerPropertiesJson"},{"p":"swervelib.parser.json.modules","l":"ConversionFactorsJson"},{"p":"swervelib.parser.json","l":"DeviceJson"},{"p":"swervelib.parser.json.modules","l":"DriveConversionFactorsJson"},{"p":"swervelib.parser.json.modules","l":"LocationJson"},{"p":"swervelib.math","l":"Matter"},{"p":"swervelib.parser.json","l":"ModuleJson"},{"p":"swervelib.parser.json","l":"MotorConfigDouble"},{"p":"swervelib.parser.json","l":"MotorConfigInt"},{"p":"swervelib.imu","l":"NavXSwerve"},{"p":"swervelib.parser.json","l":"PhysicalPropertiesJson"},{"p":"swervelib.parser","l":"PIDFConfig"},{"p":"swervelib.parser.json","l":"PIDFPropertiesJson"},{"p":"swervelib.parser.deserializer","l":"PIDFRange"},{"p":"swervelib.imu","l":"Pigeon2Swerve"},{"p":"swervelib.imu","l":"PigeonSwerve"},{"p":"swervelib.encoders","l":"PWMDutyCycleEncoderSwerve"},{"p":"swervelib.telemetry","l":"Alert.SendableAlerts"},{"p":"swervelib.motors","l":"SparkFlexSwerve"},{"p":"swervelib.motors","l":"SparkFlexSwerve.SparkMAX_slotIdx"},{"p":"swervelib.motors","l":"SparkMaxSwerve.SparkMAX_slotIdx"},{"p":"swervelib.encoders","l":"SparkMaxAnalogEncoderSwerve"},{"p":"swervelib.motors","l":"SparkMaxBrushedMotorSwerve"},{"p":"swervelib.encoders","l":"SparkMaxEncoderSwerve"},{"p":"swervelib.motors","l":"SparkMaxSwerve"},{"p":"swervelib.encoders","l":"SwerveAbsoluteEncoder"},{"p":"swervelib","l":"SwerveController"},{"p":"swervelib.parser","l":"SwerveControllerConfiguration"},{"p":"swervelib","l":"SwerveDrive"},{"p":"swervelib.parser","l":"SwerveDriveConfiguration"},{"p":"swervelib.parser.json","l":"SwerveDriveJson"},{"p":"swervelib.telemetry","l":"SwerveDriveTelemetry"},{"p":"swervelib","l":"SwerveDriveTest"},{"p":"swervelib.imu","l":"SwerveIMU"},{"p":"swervelib.simulation","l":"SwerveIMUSimulation"},{"p":"swervelib.math","l":"SwerveMath"},{"p":"swervelib","l":"SwerveModule"},{"p":"swervelib.parser","l":"SwerveModuleConfiguration"},{"p":"swervelib.parser","l":"SwerveModulePhysicalCharacteristics"},{"p":"swervelib.simulation","l":"SwerveModuleSimulation"},{"p":"swervelib.motors","l":"SwerveMotor"},{"p":"swervelib.parser","l":"SwerveParser"},{"p":"swervelib.motors","l":"TalonFXSwerve"},{"p":"swervelib.motors","l":"TalonSRXSwerve"},{"p":"swervelib.telemetry","l":"SwerveDriveTelemetry.TelemetryVerbosity"}];updateSearchResults(); \ No newline at end of file +typeSearchIndex = [{"p":"swervelib.imu","l":"ADIS16448Swerve"},{"p":"swervelib.imu","l":"ADIS16470Swerve"},{"p":"swervelib.imu","l":"ADXRS450Swerve"},{"p":"swervelib.telemetry","l":"Alert"},{"p":"swervelib.telemetry","l":"Alert.AlertType"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"swervelib.encoders","l":"AnalogAbsoluteEncoderSwerve"},{"p":"swervelib.imu","l":"AnalogGyroSwerve"},{"p":"swervelib.parser.json.modules","l":"AngleConversionFactorsJson"},{"p":"swervelib.parser.json.modules","l":"BoolMotorJson"},{"p":"swervelib.parser","l":"Cache"},{"p":"swervelib.encoders","l":"CanAndMagSwerve"},{"p":"swervelib.encoders","l":"CANCoderSwerve"},{"p":"swervelib.parser.json","l":"ControllerPropertiesJson"},{"p":"swervelib.parser.json.modules","l":"ConversionFactorsJson"},{"p":"swervelib.parser.json","l":"DeviceJson"},{"p":"swervelib.parser.json.modules","l":"DriveConversionFactorsJson"},{"p":"swervelib.math","l":"IMULinearMovingAverageFilter"},{"p":"swervelib.imu","l":"IMUVelocity"},{"p":"swervelib.parser.json.modules","l":"LocationJson"},{"p":"swervelib.math","l":"Matter"},{"p":"swervelib.parser.json","l":"ModuleJson"},{"p":"swervelib.parser.json","l":"MotorConfigDouble"},{"p":"swervelib.parser.json","l":"MotorConfigInt"},{"p":"swervelib.imu","l":"NavXSwerve"},{"p":"swervelib.parser.json","l":"PhysicalPropertiesJson"},{"p":"swervelib.parser","l":"PIDFConfig"},{"p":"swervelib.parser.json","l":"PIDFPropertiesJson"},{"p":"swervelib.parser.deserializer","l":"PIDFRange"},{"p":"swervelib.imu","l":"Pigeon2Swerve"},{"p":"swervelib.imu","l":"PigeonSwerve"},{"p":"swervelib.encoders","l":"PWMDutyCycleEncoderSwerve"},{"p":"swervelib.telemetry","l":"Alert.SendableAlerts"},{"p":"swervelib.motors","l":"SparkFlexSwerve"},{"p":"swervelib.motors","l":"SparkFlexSwerve.SparkMAX_slotIdx"},{"p":"swervelib.motors","l":"SparkMaxSwerve.SparkMAX_slotIdx"},{"p":"swervelib.encoders","l":"SparkMaxAnalogEncoderSwerve"},{"p":"swervelib.motors","l":"SparkMaxBrushedMotorSwerve"},{"p":"swervelib.encoders","l":"SparkMaxEncoderSwerve"},{"p":"swervelib.motors","l":"SparkMaxSwerve"},{"p":"swervelib.encoders","l":"SwerveAbsoluteEncoder"},{"p":"swervelib","l":"SwerveController"},{"p":"swervelib.parser","l":"SwerveControllerConfiguration"},{"p":"swervelib","l":"SwerveDrive"},{"p":"swervelib.parser","l":"SwerveDriveConfiguration"},{"p":"swervelib.parser.json","l":"SwerveDriveJson"},{"p":"swervelib.telemetry","l":"SwerveDriveTelemetry"},{"p":"swervelib","l":"SwerveDriveTest"},{"p":"swervelib.imu","l":"SwerveIMU"},{"p":"swervelib.simulation","l":"SwerveIMUSimulation"},{"p":"swervelib.math","l":"SwerveMath"},{"p":"swervelib","l":"SwerveModule"},{"p":"swervelib.parser","l":"SwerveModuleConfiguration"},{"p":"swervelib.parser","l":"SwerveModulePhysicalCharacteristics"},{"p":"swervelib.simulation","l":"SwerveModuleSimulation"},{"p":"swervelib.motors","l":"SwerveMotor"},{"p":"swervelib.parser","l":"SwerveParser"},{"p":"swervelib.motors","l":"TalonFXSwerve"},{"p":"swervelib.motors","l":"TalonSRXSwerve"},{"p":"swervelib.telemetry","l":"SwerveDriveTelemetry.TelemetryVerbosity"}];updateSearchResults(); \ No newline at end of file diff --git a/swervelib/SwerveDrive.java b/swervelib/SwerveDrive.java index c6460e9..415f0bb 100644 --- a/swervelib/SwerveDrive.java +++ b/swervelib/SwerveDrive.java @@ -30,6 +30,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import swervelib.encoders.CANCoderSwerve; +import swervelib.imu.IMUVelocity; import swervelib.imu.Pigeon2Swerve; import swervelib.imu.SwerveIMU; import swervelib.math.SwerveMath; @@ -97,6 +98,24 @@ public class SwerveDrive * correction. */ public boolean chassisVelocityCorrection = true; + /** + * Correct chassis velocity in {@link SwerveDrive#setChassisSpeeds(ChassisSpeeds chassisSpeeds)} (auto) using 254's + * correction during auto. + */ + public boolean autonomousChassisVelocityCorrection = false; + /** + * Correct for skew that scales with angular velocity in {@link SwerveDrive#drive(Translation2d, double, boolean, boolean)} + */ + public boolean angularVelocityCorrection = false; + /** + * Correct for skew that scales with angular velocity in {@link SwerveDrive#setChassisSpeeds(ChassisSpeeds chassisSpeeds)} + * during auto. + */ + public boolean autonomousAngularVelocityCorrection = false; + /** + * Angular Velocity Correction Coefficent (expected values between -0.15 and 0.15). + */ + public double angularVelocityCoefficient = 0; /** * Whether to correct heading when driving translationally. Set to true to enable. */ @@ -113,6 +132,11 @@ public class SwerveDrive * Swerve IMU device for sensing the heading of the robot. */ private SwerveIMU imu; + /** + * Class that calculates robot's yaw velocity using IMU measurements. Used for angularVelocityCorrection in + * {@link SwerveDrive#drive(Translation2d, double, boolean, boolean)}. + */ + private IMUVelocity imuVelocity; /** * Simulation of the swerve drive. */ @@ -479,12 +503,7 @@ public void drive( public void drive(ChassisSpeeds velocity, boolean isOpenLoop, Translation2d centerOfRotationMeters) { - // Thank you to Jared Russell FRC254 for Open Loop Compensation Code - // https://www.chiefdelphi.com/t/whitepaper-swerve-drive-skew-and-second-order-kinematics/416964/5 - if (chassisVelocityCorrection) - { - velocity = ChassisSpeeds.discretize(velocity, discretizationdtSeconds); - } + velocity = movementOptimizations(velocity, chassisVelocityCorrection, angularVelocityCorrection); // Heading Angular Velocity Deadband, might make a configuration option later. // Originally made by Team 1466 Webb Robotics. @@ -518,7 +537,7 @@ public void drive(ChassisSpeeds velocity, boolean isOpenLoop, Translation2d cent // Calculate required module states via kinematics SwerveModuleState[] swerveModuleStates = kinematics.toSwerveModuleStates(velocity, centerOfRotationMeters); - setRawModuleStates(swerveModuleStates, isOpenLoop); + setRawModuleStates(swerveModuleStates, velocity, isOpenLoop); } /** @@ -568,14 +587,15 @@ public double getMaximumAngularVelocity() * Set the module states (azimuth and velocity) directly. * * @param desiredStates A list of SwerveModuleStates to send to the modules. + * @param desiredChassisSpeed The desired chassis speeds to set the robot to achieve. * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. */ - private void setRawModuleStates(SwerveModuleState[] desiredStates, boolean isOpenLoop) + private void setRawModuleStates(SwerveModuleState[] desiredStates, ChassisSpeeds desiredChassisSpeed, boolean isOpenLoop) { // Desaturates wheel speeds if (attainableMaxTranslationalSpeedMetersPerSecond != 0 || attainableMaxRotationalVelocityRadiansPerSecond != 0) { - SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, getRobotVelocity(), + SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, desiredChassisSpeed, maxSpeedMPS, attainableMaxTranslationalSpeedMetersPerSecond, attainableMaxRotationalVelocityRadiansPerSecond); @@ -593,14 +613,23 @@ private void setRawModuleStates(SwerveModuleState[] desiredStates, boolean isOpe /** * Set the module states (azimuth and velocity) directly. Used primarily for auto paths. + * Does not allow for usage of desaturateWheelSpeeds(SwerveModuleState[] moduleStates, + * ChassisSpeeds desiredChassisSpeed, double attainableMaxModuleSpeedMetersPerSecond, + * double attainableMaxTranslationalSpeedMetersPerSecond, double attainableMaxRotationalVelocityRadiansPerSecond) * * @param desiredStates A list of SwerveModuleStates to send to the modules. * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. */ public void setModuleStates(SwerveModuleState[] desiredStates, boolean isOpenLoop) { - setRawModuleStates(kinematics.toSwerveModuleStates(kinematics.toChassisSpeeds(desiredStates)), - isOpenLoop); + desiredStates = kinematics.toSwerveModuleStates(kinematics.toChassisSpeeds(desiredStates)); + SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, maxSpeedMPS); + + // Sets states + for (SwerveModule module : swerveModules) + { + module.setDesiredState(desiredStates[module.moduleNumber], isOpenLoop, false); + } } /** @@ -610,11 +639,14 @@ public void setModuleStates(SwerveModuleState[] desiredStates, boolean isOpenLoo */ public void setChassisSpeeds(ChassisSpeeds chassisSpeeds) { + + chassisSpeeds = movementOptimizations(chassisSpeeds, autonomousChassisVelocityCorrection, autonomousAngularVelocityCorrection); + SwerveDriveTelemetry.desiredChassisSpeeds[1] = chassisSpeeds.vyMetersPerSecond; SwerveDriveTelemetry.desiredChassisSpeeds[0] = chassisSpeeds.vxMetersPerSecond; SwerveDriveTelemetry.desiredChassisSpeeds[2] = Math.toDegrees(chassisSpeeds.omegaRadiansPerSecond); - setRawModuleStates(kinematics.toSwerveModuleStates(chassisSpeeds), false); + setRawModuleStates(kinematics.toSwerveModuleStates(chassisSpeeds), chassisSpeeds, false); } /** @@ -836,9 +868,23 @@ public void setMotorIdleMode(boolean brake) } } + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds. + * @param enabled Enable state + * @param deadband Deadband in degrees, default is 3 degrees. + */ + public void setModuleEncoderAutoSynchronize(boolean enabled, double deadband) + { + for(SwerveModule swerveModule : swerveModules) + { + swerveModule.setEncoderAutoSynchronize(enabled, deadband); + } + } + + /** * Set the maximum speed of the drive motors, modified {@link SwerveDrive#maxSpeedMPS} which is used for the - * {@link SwerveDrive#setRawModuleStates(SwerveModuleState[], boolean)} function and + * {@link SwerveDrive#setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean)} function and * {@link SwerveController#getTargetSpeeds(double, double, double, double, double)} functions. This function overrides * what was placed in the JSON and could damage your motor/robot if set too high or unachievable rates. * @@ -866,7 +912,7 @@ public void setMaximumSpeed(double maximumSpeed, boolean updateModuleFeedforward /** * Set the maximum speed of the drive motors, modified {@link SwerveDrive#maxSpeedMPS} which is used for the - * {@link SwerveDrive#setRawModuleStates(SwerveModuleState[], boolean)} function and + * {@link SwerveDrive#setRawModuleStates(SwerveModuleState[], ChassisSpeeds, boolean)} function and * {@link SwerveController#getTargetSpeeds(double, double, double, double, double)} functions. This function overrides * what was placed in the JSON and could damage your motor/robot if set too high or unachievable rates. Overwrites the * {@link SwerveModule#setFeedforward(SimpleMotorFeedforward)}. @@ -1205,7 +1251,7 @@ public void setCosineCompensator(boolean enabled) } /** - * Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction + * Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop * * @param enable Enable chassis velocity correction, which will use * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} with the following. @@ -1213,8 +1259,101 @@ public void setCosineCompensator(boolean enabled) */ public void setChassisDiscretization(boolean enable, double dtSeconds) { - chassisVelocityCorrection = enable; - discretizationdtSeconds = dtSeconds; + if(!SwerveDriveTelemetry.isSimulation) + { + chassisVelocityCorrection = enable; + discretizationdtSeconds = dtSeconds; + } + } + + /** + * Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop and/or auto + * + * @param useInTeleop Enable chassis velocity correction, which will use + * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} with the following in teleop. + * @param useInAuto Enable chassis velocity correction, which will use + * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} with the following in auto. + * @param dtSeconds The duration of the timestep the speeds should be applied for. + */ + public void setChassisDiscretization(boolean useInTeleop, boolean useInAuto, double dtSeconds) + { + if(!SwerveDriveTelemetry.isSimulation) + { + chassisVelocityCorrection = useInTeleop; + autonomousChassisVelocityCorrection = useInAuto; + discretizationdtSeconds = dtSeconds; + } + } + + /** + * Enables angular velocity skew correction in teleop and/or autonomous + * and sets the angular velocity coefficient for both modes + * + * @param useInTeleop Enables angular velocity correction in teleop. + * @param useInAuto Enables angular velocity correction in autonomous. + * @param angularVelocityCoeff The angular velocity coefficient. Expected values between -0.15 to 0.15. + * Start with a value of 0.1, test in teleop. + * When enabling for the first time if the skew is significantly worse try inverting the value. + * Tune by moving in a straight line while rotating. Testing is best done with angular velocity controls on the right stick. + * Change the value until you are visually happy with the skew. + * Ensure your tune works with different translational and rotational magnitudes. + * If this reduces skew in teleop, it may improve auto. + */ + public void setAngularVelocityCompensation(boolean useInTeleop, boolean useInAuto, double angularVelocityCoeff) + { + if(!SwerveDriveTelemetry.isSimulation) + { + imuVelocity = IMUVelocity.createIMUVelocity(imu); + angularVelocityCorrection = useInTeleop; + autonomousAngularVelocityCorrection = useInAuto; + angularVelocityCoefficient = angularVelocityCoeff; + } + } + + /** + * Correct for skew that worsens as angular velocity increases + * + * @param velocity The chassis speeds to set the robot to achieve. + * @return {@link ChassisSpeeds} of the robot after angular velocity skew correction. + */ + public ChassisSpeeds angularVelocitySkewCorrection(ChassisSpeeds velocity) + { + var angularVelocity = new Rotation2d(imuVelocity.getVelocity() * angularVelocityCoefficient); + if(angularVelocity.getRadians() != 0.0){ + velocity = ChassisSpeeds.fromRobotRelativeSpeeds( + velocity.vxMetersPerSecond, + velocity.vyMetersPerSecond, + velocity.omegaRadiansPerSecond, + getOdometryHeading()); + velocity = ChassisSpeeds.fromFieldRelativeSpeeds(velocity, getOdometryHeading().plus(angularVelocity)); + } + return velocity; + } + + /** + * Enable desired drive corrections + * + * @param velocity The chassis speeds to set the robot to achieve. + * @param uesChassisDiscretize Correct chassis velocity using 254's correction. + * @param useAngularVelocitySkewCorrection Use the robot's angular velocity to correct for skew. + * @return The chassis speeds after optimizations. + */ + private ChassisSpeeds movementOptimizations(ChassisSpeeds velocity, boolean uesChassisDiscretize, boolean useAngularVelocitySkewCorrection) + { + + if(useAngularVelocitySkewCorrection) + { + velocity = angularVelocitySkewCorrection(velocity); + } + + // Thank you to Jared Russell FRC254 for Open Loop Compensation Code + // https://www.chiefdelphi.com/t/whitepaper-swerve-drive-skew-and-second-order-kinematics/416964/5 + if (uesChassisDiscretize) + { + velocity = ChassisSpeeds.discretize(velocity, discretizationdtSeconds); + } + + return velocity; } } diff --git a/swervelib/SwerveDriveTest.java b/swervelib/SwerveDriveTest.java index 848852c..a3d71df 100644 --- a/swervelib/SwerveDriveTest.java +++ b/swervelib/SwerveDriveTest.java @@ -356,8 +356,8 @@ public static void logAngularMotorVoltage(SwerveModule module, SysIdRoutineLog l public static void logAngularMotorActivity(SwerveModule module, SysIdRoutineLog log, Supplier powerSupplied) { double power = powerSupplied.get(); - double angle = module.getAbsolutePosition(); - double velocity = module.getAbsoluteEncoder().getVelocity(); + double angle = module.getAngleMotor().getPosition(); + double velocity = module.getAngleMotor().getVelocity(); SmartDashboard.putNumber("swerve/modules/" + module.configuration.name + "/SysId Angle Power", power); SmartDashboard.putNumber("swerve/modules/" + module.configuration.name + "/SysId Angle Position", angle); SmartDashboard.putNumber("swerve/modules/" + module.configuration.name + "/SysId Absolute Encoder Velocity", diff --git a/swervelib/SwerveModule.java b/swervelib/SwerveModule.java index efc3aef..2cdbf44 100644 --- a/swervelib/SwerveModule.java +++ b/swervelib/SwerveModule.java @@ -112,6 +112,14 @@ public class SwerveModule * Encoder synchronization queued. */ private boolean synchronizeEncoderQueued = false; + /** + * Encoder, Absolute encoder synchronization enabled. + */ + private boolean synchronizeEncoderEnabled = false; + /** + * Encoder synchronization deadband in degrees. + */ + private double synchronizeEncoderDeadband = 3; /** @@ -242,12 +250,32 @@ public void setDriveMotorVoltageCompensation(double optimalVoltage) */ public void queueSynchronizeEncoders() { - if (absoluteEncoder != null) + if (absoluteEncoder != null && synchronizeEncoderEnabled) { synchronizeEncoderQueued = true; } } + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds. + * @param enabled Enable state + * @param deadband Deadband in degrees, default is 3 degrees. + */ + public void setEncoderAutoSynchronize(boolean enabled, double deadband) + { + synchronizeEncoderEnabled = enabled; + synchronizeEncoderDeadband = deadband; + } + + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a few seconds. + * @param enabled Enable state + */ + public void setEncoderAutoSynchronize(boolean enabled) + { + synchronizeEncoderEnabled = enabled; + } + /** * Set the antiJitter functionality, if true the modules will NOT auto center. Pushes the offsets to the angle motor * controllers as well. @@ -355,10 +383,12 @@ public void setDesiredState(SwerveModuleState desiredState, boolean isOpenLoop, // Prevent module rotation if angle is the same as the previous angle. // Synchronize encoders if queued and send in the current position as the value from the absolute encoder. - if (absoluteEncoder != null && synchronizeEncoderQueued) + if (absoluteEncoder != null && synchronizeEncoderQueued && synchronizeEncoderEnabled) { double absoluteEncoderPosition = getAbsolutePosition(); - angleMotor.setPosition(absoluteEncoderPosition); + if(Math.abs(angleMotor.getPosition() - absoluteEncoderPosition) >= synchronizeEncoderDeadband) { + angleMotor.setPosition(absoluteEncoderPosition); + } angleMotor.setReference(desiredState.angle.getDegrees(), 0, absoluteEncoderPosition); synchronizeEncoderQueued = false; } else diff --git a/swervelib/imu/IMUVelocity.java b/swervelib/imu/IMUVelocity.java new file mode 100644 index 0000000..fba47a3 --- /dev/null +++ b/swervelib/imu/IMUVelocity.java @@ -0,0 +1,141 @@ +package swervelib.imu; + +import edu.wpi.first.hal.HALUtil; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.wpilibj.Notifier; +import swervelib.math.IMULinearMovingAverageFilter; + +/** + * Generic IMU Velocity filter. + */ +public class IMUVelocity { + /** + * Swerve IMU. + */ + private final SwerveIMU gyro; + /** + * Linear filter used to calculate velocity, we use a custom filter class + * to prevent unwanted operations. + */ + private final IMULinearMovingAverageFilter velocityFilter; + /** + * WPILib {@link Notifier} to keep IMU velocity up to date. + */ + private final Notifier notifier; + + /** + * Prevents calculation when no previous measurement exists. + */ + private boolean firstCycle = true; + /** + * Tracks the previous loop's recorded time. + */ + private double timestamp = 0.0; + /** + * Tracks the previous loop's position as a Rotation2d. + */ + private Rotation2d position = new Rotation2d(); + /** + * The calculated velocity of the robot based on averaged IMU measurements. + */ + private double velocity = 0.0; + + /** + * Constructor for the IMU Velocity. + * + * @param gyro The SwerveIMU gyro. + * @param periodSeconds The rate to collect measurements from the gyro, in the form (1/number of samples per second), + * make sure this does not exceed the update rate of your IMU. + * @param averagingTaps The number of samples to used for the moving average linear filter. Higher values will not + * allow the system to update to changes in velocity, lower values may create a less smooth signal. Expected taps + * will probably be ~2-8, with the goal of having the lowest smooth value. + * + */ + public IMUVelocity(SwerveIMU gyro, double periodSeconds, int averagingTaps) + { + this.gyro = gyro; + velocityFilter = new IMULinearMovingAverageFilter(averagingTaps); + notifier = new Notifier(this::update); + notifier.startPeriodic(periodSeconds); + timestamp = HALUtil.getFPGATime(); + } + + /** + * Static factory for IMU Velocity. Supported IMU rates will be as quick as possible + * but will not exceed 100hz and will use 5 taps (supported IMUs are listed in swervelib's IMU folder). + * Other gyroscopes will default to 50hz and 5 taps. For custom rates please use the IMUVelocity constructor. + * + * @param gyro The SwerveIMU gyro. + * @return {@link IMUVelocity} for the given gyro with adjusted period readings for velocity. + */ + public static IMUVelocity createIMUVelocity(SwerveIMU gyro) + { + double desiredNotifierPeriod = 1.0/50.0; + // ADIS16448_IMU ~200HZ: + // https://github.com/wpilibsuite/allwpilib/blob/f82e1c9d4807f4c0fa832fd5bd9f9e90848eb8eb/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16448_IMU.java#L277 + if (gyro instanceof ADIS16448Swerve) + { + desiredNotifierPeriod = 1.0/100.0; + } + // ADIS16470_IMU 200HZ + // https://github.com/wpilibsuite/allwpilib/blob/f82e1c9d4807f4c0fa832fd5bd9f9e90848eb8eb/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16470_IMU.java#L345 + else if (gyro instanceof ADIS16470Swerve) + { + desiredNotifierPeriod = 1.0/100.0; + } + // ADXRS450_Gyro 2000HZ? + // https://github.com/wpilibsuite/allwpilib/blob/f82e1c9d4807f4c0fa832fd5bd9f9e90848eb8eb/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADXRS450_Gyro.java#L31 + else if (gyro instanceof ADXRS450Swerve) + { + desiredNotifierPeriod = 1.0/100.0; + } + // NAX (AHRS): 60HZ + // https://github.com/kauailabs/navxmxp/blob/5e010ba810bb7f7eaab597e0b708e34f159984db/roborio/java/navx_frc/src/com/kauailabs/navx/frc/AHRS.java#L119C25-L119C61 + else if (gyro instanceof NavXSwerve) + { + desiredNotifierPeriod = 1.0/60.0; + } + // Pigeon2 100HZ + // https://store.ctr-electronics.com/content/user-manual/Pigeon2%20User's%20Guide.pdf + else if (gyro instanceof Pigeon2Swerve) + { + desiredNotifierPeriod = 1.0/100.0; + } + // Pigeon 100HZ + // https://store.ctr-electronics.com/content/user-manual/Pigeon%20IMU%20User's%20Guide.pdf + else if (gyro instanceof PigeonSwerve) + { + desiredNotifierPeriod = 1.0/100.0; + } + return new IMUVelocity(gyro, desiredNotifierPeriod, 5); + } + + /** + * Update the robot's rotational velocity based on the current gyro position. + */ + private void update() + { + double newTimestamp = HALUtil.getFPGATime(); + Rotation2d newPosition = Rotation2d.fromRadians(gyro.getRotation3d().getZ()); + + synchronized (this) { + if (!firstCycle) { + velocityFilter.addValue((newPosition.minus(position).getRadians()) / (newTimestamp - timestamp)); + } + firstCycle = false; + timestamp = newTimestamp; + position = newPosition; + } + } + + /** + * Get the robot's angular velocity based on averaged meaasurements from the IMU. + * Velocity is multiplied by 1e+6 (1,000,000) because the timestamps are in microseconds. + * + * @return robot's angular velocity in rads/s as a double. + */ + public synchronized double getVelocity() { + velocity = velocityFilter.calculate(); + return velocity * 1e+6; + } +} diff --git a/swervelib/imu/Pigeon2Swerve.java b/swervelib/imu/Pigeon2Swerve.java index f29970e..22160d8 100644 --- a/swervelib/imu/Pigeon2Swerve.java +++ b/swervelib/imu/Pigeon2Swerve.java @@ -26,11 +26,15 @@ public class Pigeon2Swerve extends SwerveIMU /** * Offset for the Pigeon 2. */ - private Rotation3d offset = new Rotation3d(); + private Rotation3d offset = new Rotation3d(); /** * Inversion for the gyro */ - private boolean invertedIMU = false; + private boolean invertedIMU = false; + /** + * Pigeon2 configurator. + */ + private Pigeon2Configurator cfg; /** * Generate the SwerveIMU for pigeon. @@ -41,6 +45,7 @@ public class Pigeon2Swerve extends SwerveIMU public Pigeon2Swerve(int canid, String canbus) { imu = new Pigeon2(canid, canbus); + this.cfg = imu.getConfigurator(); SmartDashboard.putData(imu); } @@ -60,7 +65,6 @@ public Pigeon2Swerve(int canid) @Override public void factoryDefault() { - Pigeon2Configurator cfg = imu.getConfigurator(); Pigeon2Configuration config = new Pigeon2Configuration(); // Compass utilization causes readings to jump dramatically in some cases. diff --git a/swervelib/math/IMULinearMovingAverageFilter.java b/swervelib/math/IMULinearMovingAverageFilter.java new file mode 100644 index 0000000..f2a008a --- /dev/null +++ b/swervelib/math/IMULinearMovingAverageFilter.java @@ -0,0 +1,54 @@ +package swervelib.math; + +import edu.wpi.first.util.DoubleCircularBuffer; + +/** + * A linear filter that does not calculate() each time a value is added to + * the DoubleCircularBuffer. + */ +public class IMULinearMovingAverageFilter { + + /** + * Circular buffer storing the current IMU readings + */ + private final DoubleCircularBuffer m_inputs; + /** + * Gain on each reading. + */ + private final double m_inputGain; + + /** + * Construct a linear moving average fitler + * @param bufferLength The number of values to average across + */ + public IMULinearMovingAverageFilter(int bufferLength) + { + m_inputs = new DoubleCircularBuffer(bufferLength); + m_inputGain = 1.0 / bufferLength; + } + + /** + * Add a value to the DoubleCircularBuffer + * @param input Value to add + */ + public void addValue(double input) + { + m_inputs.addFirst(input); + } + + /** + * Calculate the average of the samples in the buffer + * @return The average of the values in the buffer + */ + public double calculate() + { + double returnVal = 0.0; + + for(int i = 0; i < m_inputs.size(); i++) + { + returnVal += m_inputs.get(i) * m_inputGain; + } + + return returnVal; + } +} diff --git a/swervelib/math/SwerveMath.java b/swervelib/math/SwerveMath.java index ca278a9..b77838c 100644 --- a/swervelib/math/SwerveMath.java +++ b/swervelib/math/SwerveMath.java @@ -136,7 +136,7 @@ public static double calculateDegreesPerSteeringRotation( public static double calculateMaxAngularVelocity( double maxSpeed, double furthestModuleX, double furthestModuleY) { - return maxSpeed / new Rotation2d(furthestModuleX, furthestModuleY).getRadians(); + return maxSpeed / Math.hypot(furthestModuleX, furthestModuleY); } /** diff --git a/swervelib/motors/SparkMaxSwerve.java b/swervelib/motors/SparkMaxSwerve.java index a2c421e..0f01417 100644 --- a/swervelib/motors/SparkMaxSwerve.java +++ b/swervelib/motors/SparkMaxSwerve.java @@ -224,12 +224,38 @@ public void configureIntegratedEncoder(double positionConversionFactor) { configureSparkMax(() -> encoder.setPositionConversionFactor(positionConversionFactor)); configureSparkMax(() -> encoder.setVelocityConversionFactor(positionConversionFactor / 60)); + // Changes the measurement period and number of samples used to calculate the velocity for the intergrated motor controller + // Notability this changes the returned velocity and the velocity used for the onboard velocity PID loop (TODO: triple check the PID portion of this statement) + // Default settings of 32ms and 8 taps introduce ~100ms of measurement lag + // https://www.chiefdelphi.com/t/shooter-encoder/400211/11 + // This value was taken from: + // https://github.com/Mechanical-Advantage/RobotCode2023/blob/9884d13b2220b76d430e82248fd837adbc4a10bc/src/main/java/org/littletonrobotics/frc2023/subsystems/drive/ModuleIOSparkMax.java#L132-L133 + // and tested on 9176 for YAGSL, notably 3005 uses 16ms instead of 10 but 10 is more common based on github searches + configureSparkMax(() -> encoder.setMeasurementPeriod(10)); + configureSparkMax(() -> encoder.setAverageDepth(2)); // Taken from // https://github.com/frc3512/SwerveBot-2022/blob/9d31afd05df6c630d5acb4ec2cf5d734c9093bf8/src/main/java/frc/lib/util/CANSparkMaxUtil.java#L67 + // Unused frames can be set to 65535 to decrease CAN ultilization. configureCANStatusFrames(10, 20, 20, 500, 500, 200, 200); } else { + // By default the SparkMax relays the info from the duty cycle encoder to the roborio every 200ms on CAN frame 5 + // This needs to be set to 20ms or under to properly update the swerve module position for odometry + // Configuration taken from 3005, the team who helped develop the Max Swerve: + // https://github.com/FRC3005/Charged-Up-2023-Public/blob/2b6a7c695e23edebafa27a76cf639a00f6e8a3a6/src/main/java/frc/robot/subsystems/drive/REVSwerveModule.java#L227-L244 + // Some of the frames can probably be adjusted to decrease CAN utilization, with 65535 being the max. + // From testing, 20ms on frame 5 sometimes returns the same value while constantly powering the azimuth but 8ms may be overkill, + // with limited testing 19ms did not return the same value while the module was constatntly rotating. + if (absoluteEncoder.getAbsoluteEncoder() instanceof AbsoluteEncoder) + { + configureCANStatusFrames(100, 20, 20, 200, 20, 8, 50); + } + // Need to test on analog encoders but the same concept should apply for them, worst thing that could happen is slightly more can use + else if(absoluteEncoder.getAbsoluteEncoder() instanceof SparkAnalogSensor) + { + configureCANStatusFrames(100, 20, 20, 19, 200, 200, 200); + } configureSparkMax(() -> { if (absoluteEncoder.getAbsoluteEncoder() instanceof AbsoluteEncoder) { diff --git a/swervelib/motors/TalonFXSwerve.java b/swervelib/motors/TalonFXSwerve.java index 213f199..d2ddb4b 100644 --- a/swervelib/motors/TalonFXSwerve.java +++ b/swervelib/motors/TalonFXSwerve.java @@ -49,6 +49,10 @@ public class TalonFXSwerve extends SwerveMotor * Current TalonFX configuration. */ private TalonFXConfiguration configuration = new TalonFXConfiguration(); + /** + * Current TalonFX Configurator. + */ + private TalonFXConfigurator cfg; /** @@ -61,6 +65,7 @@ public TalonFXSwerve(TalonFX motor, boolean isDriveMotor) { this.isDriveMotor = isDriveMotor; this.motor = motor; + this.cfg = motor.getConfigurator(); factoryDefaults(); clearStickyFaults(); @@ -102,7 +107,6 @@ public void factoryDefaults() { if (!factoryDefaultOccurred) { - TalonFXConfigurator cfg = motor.getConfigurator(); configuration.MotorOutput.NeutralMode = NeutralModeValue.Brake; configuration.ClosedLoopGeneral.ContinuousWrap = true; cfg.apply(configuration); @@ -156,7 +160,6 @@ public SwerveMotor setAbsoluteEncoder(SwerveAbsoluteEncoder encoder) @Override public void configureIntegratedEncoder(double positionConversionFactor) { - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.refresh(configuration); positionConversionFactor = 1 / positionConversionFactor; @@ -246,7 +249,6 @@ public void configureCANStatusFrames( public void configurePIDF(PIDFConfig config) { - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.refresh(configuration.Slot0); cfg.apply( configuration.Slot0.withKP(config.p).withKI(config.i).withKD(config.d).withKS(config.f)); @@ -263,7 +265,6 @@ public void configurePIDF(PIDFConfig config) @Override public void configurePIDWrapping(double minInput, double maxInput) { - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.refresh(configuration.ClosedLoopGeneral); configuration.ClosedLoopGeneral.ContinuousWrap = true; cfg.apply(configuration.ClosedLoopGeneral); @@ -414,7 +415,6 @@ public void setPosition(double position) if (!absoluteEncoder && !SwerveDriveTelemetry.isSimulation) { position = position < 0 ? (position % 360) + 360 : position; - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.setPosition(position / 360); } } @@ -439,7 +439,6 @@ public void setVoltageCompensation(double nominalVoltage) @Override public void setCurrentLimit(int currentLimit) { - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.refresh(configuration.CurrentLimits); cfg.apply( configuration.CurrentLimits.withStatorCurrentLimit(currentLimit) @@ -454,7 +453,6 @@ public void setCurrentLimit(int currentLimit) @Override public void setLoopRampRate(double rampRate) { - TalonFXConfigurator cfg = motor.getConfigurator(); cfg.refresh(configuration.ClosedLoopRamps); cfg.apply(configuration.ClosedLoopRamps.withVoltageClosedLoopRampPeriod(rampRate)); } diff --git a/swervelib/parser/json/DeviceJson.java b/swervelib/parser/json/DeviceJson.java index 48551e5..bcc269d 100644 --- a/swervelib/parser/json/DeviceJson.java +++ b/swervelib/parser/json/DeviceJson.java @@ -74,6 +74,8 @@ public SwerveAbsoluteEncoder createEncoder(SwerveMotor motor) return new SparkMaxEncoderSwerve(motor, 360); case "sparkmax_analog": return new SparkMaxAnalogEncoderSwerve(motor, 3.3); + case "sparkmax_analog5v": + return new SparkMaxAnalogEncoderSwerve(motor, 5); case "canandcoder_can": case "canandmag_can": return new CanAndMagSwerve(id); diff --git a/swervelib/parser/json/ModuleJson.java b/swervelib/parser/json/ModuleJson.java index 8e4604c..a2e5a6d 100644 --- a/swervelib/parser/json/ModuleJson.java +++ b/swervelib/parser/json/ModuleJson.java @@ -142,7 +142,7 @@ public SwerveModuleConfiguration createModuleConfiguration( // Backwards compatibility, auto-optimization. if (conversionFactor.angle == 360 && absEncoder != null && - absEncoder.getAbsoluteEncoder() instanceof AbsoluteEncoder && angleMotor.getMotor() instanceof CANSparkMax) + absEncoder.getAbsoluteEncoder() instanceof MotorFeedbackSensor && angleMotor.getMotor() instanceof CANSparkMax) { angleMotor.setAbsoluteEncoder(absEncoder); }