// CHANGE LATER
// gear ratio for converting motor rotations to linear distance
public final static double CLIMB_GEAR_RATIO = 45.0;
+ // TODO: Get actual winch bobbin radius measurement
/** Winch spool radius in meters */
public final static double WHEEL_RADIUS = Units.inchesToMeters(0.334);
/** climber stowed ? position in meters */
public final static double BOTTOM_POSITION = Units.inchesToMeters(-8);
- /** position that should put the robot off the ground? in meters. */
+ /** Calibration position: lower than BOTTOM_POSITION to reduce motor strain */
+ public final static double CALIBRATION_POSITION = Units.inchesToMeters(-8.5);
+ /** position that should put the robot off the ground? in meters. */
public final static double CLIMB_POSITION = Units.inchesToMeters(-6);
public final static double UP_POSITION = 0.0;
/**
* Climber subsystem
*/
-public class LinearClimb extends SubsystemBase implements LinearClimbIO{
+public class LinearClimb extends SubsystemBase implements LinearClimbIO {
/** climber motor */
private final TalonFX motor;
/** whether the subsysgtem is calibrating */
SmartDashboard.putData("Go Down", new InstantCommand(() -> retract()));
SmartDashboard.putData("Climb", new InstantCommand(() -> climbPosition()));
- motor.setPosition(0);
+ // starting position
+ motor.setPosition(metersToRotations(ClimbConstants.BOTTOM_POSITION));
+ setSetpoint(metersToRotations(ClimbConstants.BOTTOM_POSITION));
// calibrate on startup to find hardstop
- if(calibrateOnStartUp){
+ if (calibrateOnStartUp) {
hardstopCalibration();
}
}
// if it is not calibrating, do normal stuff
if (!calibrating) {
power = MathUtil.clamp(power, -MAX_POWER, MAX_POWER);
- } else{
+ } else {
power = ClimbConstants.CALIBRATION_POWER;
- boolean atHardStop = Math.abs(motor.getStatorCurrent().getValueAsDouble()) >= ClimbConstants.CALIBRATION_CURRENT_THRESHOLD;
- if(calibrationDebouncer.calculate(atHardStop)){
+ boolean atHardStop = Math
+ .abs(motor.getStatorCurrent().getValueAsDouble()) >= ClimbConstants.CALIBRATION_CURRENT_THRESHOLD;
+ if (calibrationDebouncer.calculate(atHardStop)) {
stopCalibrating();
}
}
motor.set(power);
-
- Logger.recordOutput("LinearClimb/setpointMeters", Units.rotationsToRadians(pid.getSetpoint()) * ClimbConstants.WHEEL_RADIUS / ClimbConstants.CLIMB_GEAR_RATIO);
+
+ SmartDashboard.putNumber("Climb/PID_Setpoint_Rotations", pid.getSetpoint());
+ SmartDashboard.putNumber("Climb/Motor_Actual_Rotations", motor.getPosition().getValueAsDouble());
+ SmartDashboard.putNumber("Climb/Motor_Actual_Meters", inputs.positionMeters);
+
+ Logger.recordOutput("LinearClimb/setpointMeters", Units.rotationsToRadians(pid.getSetpoint())
+ * ClimbConstants.WHEEL_RADIUS / ClimbConstants.CLIMB_GEAR_RATIO);
updateInputs();
Logger.processInputs("LinearClimb", inputs);
}
+
/**
* converts motor rotations to meters
+ *
* @param motorRotations
* @return
*/
- public double rotationsToMeters(double motorRotations){
+ public double rotationsToMeters(double motorRotations) {
double circ = 2 * Math.PI * ClimbConstants.WHEEL_RADIUS;
double meters = motorRotations / ClimbConstants.CLIMB_GEAR_RATIO * circ;
return meters;
/**
* converts meters to motor rotations
+ *
* @param meters
* @return
*/
- public double metersToRotations(double meters){
+ public double metersToRotations(double meters) {
double circ = 2 * Math.PI * ClimbConstants.WHEEL_RADIUS;
double motorRotations = meters / circ * ClimbConstants.CLIMB_GEAR_RATIO;
return motorRotations;
/**
* sets supply and stator current limits
+ *
* @param limit the current limit for stator and supply current
*/
public void setCurrentLimits(double limit) {
}
/**
- * stops calibration and sets current limits to normal.
+ * stops calibration and sets current limits to normal.
*/
public void stopCalibrating() {
motor.setPosition(metersToRotations(ClimbConstants.BOTTOM_POSITION));
@Override
public void updateInputs() {
- inputs.positionMeters = Units.rotationsToRadians(motor.getPosition().getValueAsDouble()) * ClimbConstants.WHEEL_RADIUS / ClimbConstants.CLIMB_GEAR_RATIO;
+ inputs.positionMeters = Units.rotationsToRadians(motor.getPosition().getValueAsDouble())
+ * ClimbConstants.WHEEL_RADIUS / ClimbConstants.CLIMB_GEAR_RATIO;
inputs.motorCurrent = motor.getStatorCurrent().getValueAsDouble();
}
}