diff --git a/src/main/java/frc/robot/auto/DriveToClump.java b/src/main/java/frc/robot/auto/DriveToClump.java index 8dddd36..d4f30e9 100644 --- a/src/main/java/frc/robot/auto/DriveToClump.java +++ b/src/main/java/frc/robot/auto/DriveToClump.java @@ -56,8 +56,13 @@ public Command driveToClump() { return Commands.none(); } - Translation2d error = - fuelPosition.minus(robot.getSwerveDrive().getPosition2d().getTranslation()); + // Translation2d error = + // fuelPosition.minus(robot.getSwerveDrive().getPosition2d().getTranslation()); + + Translation2d currentPosition = + robot.getSwerveDrive().getPosition2d().getTranslation(); + Translation2d centerError = fuelPosition.minus(currentPosition); + double distanceToCenter = centerError.getNorm(); double maxVelocity = robot @@ -74,20 +79,28 @@ public Command driveToClump() { .MaxLinearAcceleration .in(MetersPerSecondPerSecond); - double distance = error.getNorm(); - double finalSpeed = Math.min(maxVelocity, Math.sqrt(2 * maxAcceleration * distance)); + double robotRadius = 0.73; // Needs to be tuned + if (distanceToCenter <= robotRadius) { + return Commands.none(); + } + Translation2d targetPosition = + fuelPosition.minus(centerError.div(distanceToCenter).times(robotRadius)); + Translation2d error = targetPosition.minus(currentPosition); + double distanceToTarget = error.getNorm(); + double finalSpeed = + Math.min(maxVelocity, Math.sqrt(2 * maxAcceleration * distanceToTarget)); ChassisSpeeds finalVelocity = new ChassisSpeeds( - error.getX() / distance * finalSpeed, - error.getY() / distance * finalSpeed, + error.getX() / distanceToTarget * finalSpeed, + error.getY() / distanceToTarget * finalSpeed, 0); return Commands.either( Commands.deadline( robot .getSwerveDrive() - .driveTo(new Pose2d(fuelPosition, error.getAngle()), finalVelocity), + .driveTo(new Pose2d(targetPosition, error.getAngle()), finalVelocity), robot.getIntakeRollers().intake()), Commands.none(), robot.getIntakeExtension()::isExtended);