Added lock to ensure safety of odometry update

This commit is contained in:
thenetworkgrinch
2023-08-29 21:56:52 -05:00
parent 14f66bb679
commit 10a4b528a4
115 changed files with 574 additions and 341 deletions

View File

@@ -2,7 +2,10 @@ package swervelib.encoders;
import com.revrobotics.AbsoluteEncoder;
import com.revrobotics.CANSparkMax;
import com.revrobotics.REVLibError;
import com.revrobotics.SparkMaxAbsoluteEncoder.Type;
import edu.wpi.first.wpilibj.DriverStation;
import java.util.function.Supplier;
import swervelib.motors.SwerveMotor;
/**
@@ -27,14 +30,31 @@ public class SparkMaxEncoderSwerve extends SwerveAbsoluteEncoder
if (motor.getMotor() instanceof CANSparkMax)
{
encoder = ((CANSparkMax) motor.getMotor()).getAbsoluteEncoder(Type.kDutyCycle);
encoder.setVelocityConversionFactor(conversionFactor);
encoder.setPositionConversionFactor(conversionFactor);
configureSparkMax(() -> encoder.setVelocityConversionFactor(conversionFactor));
configureSparkMax(() -> encoder.setPositionConversionFactor(conversionFactor));
} else
{
throw new RuntimeException("Motor given to instantiate SparkMaxEncoder is not a CANSparkMax");
}
}
/**
* Run the configuration until it succeeds or times out.
*
* @param config Lambda supplier returning the error state.
*/
private void configureSparkMax(Supplier<REVLibError> config)
{
for (int i = 0; i < maximumRetries; i++)
{
if (config.get() == REVLibError.kOk)
{
return;
}
}
DriverStation.reportWarning("Failure configuring encoder", true);
}
/**
* Reset the encoder to factory defaults.
*/