From 18d9857b7ae35c070496bdac4d1c6a2094d8a4e9 Mon Sep 17 00:00:00 2001 From: KeshavAnandCode Date: Sun, 15 Feb 2026 16:31:40 -0600 Subject: [PATCH] tubne autob --- .../ftc/teamcode/libs/RR/MecanumDrive.java | 289 +++++++++--------- .../teamcode/libs/RR/PinpointLocalizer.java | 5 +- 2 files changed, 147 insertions(+), 147 deletions(-) diff --git a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/libs/RR/MecanumDrive.java b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/libs/RR/MecanumDrive.java index 3b465db..8ddb936 100644 --- a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/libs/RR/MecanumDrive.java +++ b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/libs/RR/MecanumDrive.java @@ -5,7 +5,9 @@ import androidx.annotation.NonNull; import com.acmerobotics.dashboard.canvas.Canvas; import com.acmerobotics.dashboard.config.Config; import com.acmerobotics.dashboard.telemetry.TelemetryPacket; -import com.acmerobotics.roadrunner.*; +import com.acmerobotics.roadrunner.AccelConstraint; +import com.acmerobotics.roadrunner.Action; +import com.acmerobotics.roadrunner.Actions; import com.acmerobotics.roadrunner.AngularVelConstraint; import com.acmerobotics.roadrunner.DualNum; import com.acmerobotics.roadrunner.HolonomicController; @@ -14,12 +16,20 @@ import com.acmerobotics.roadrunner.MinVelConstraint; import com.acmerobotics.roadrunner.MotorFeedforward; import com.acmerobotics.roadrunner.Pose2d; import com.acmerobotics.roadrunner.Pose2dDual; +import com.acmerobotics.roadrunner.PoseVelocity2d; +import com.acmerobotics.roadrunner.PoseVelocity2dDual; import com.acmerobotics.roadrunner.ProfileAccelConstraint; +import com.acmerobotics.roadrunner.ProfileParams; +import com.acmerobotics.roadrunner.Rotation2d; import com.acmerobotics.roadrunner.Time; import com.acmerobotics.roadrunner.TimeTrajectory; import com.acmerobotics.roadrunner.TimeTurn; import com.acmerobotics.roadrunner.TrajectoryActionBuilder; +import com.acmerobotics.roadrunner.TrajectoryBuilderParams; import com.acmerobotics.roadrunner.TurnConstraints; +import com.acmerobotics.roadrunner.Twist2d; +import com.acmerobotics.roadrunner.Twist2dDual; +import com.acmerobotics.roadrunner.Vector2d; import com.acmerobotics.roadrunner.VelConstraint; import com.acmerobotics.roadrunner.ftc.DownsampledWriter; import com.acmerobotics.roadrunner.ftc.Encoder; @@ -46,13 +56,131 @@ import org.firstinspires.ftc.teamcode.libs.RR.messages.MecanumCommandMessage; import org.firstinspires.ftc.teamcode.libs.RR.messages.MecanumLocalizerInputsMessage; import org.firstinspires.ftc.teamcode.libs.RR.messages.PoseMessage; -import java.lang.Math; import java.util.Arrays; import java.util.LinkedList; import java.util.List; @Config public final class MecanumDrive { + public static Params PARAMS = new Params(); + public final MecanumKinematics kinematics = new MecanumKinematics( + PARAMS.inPerTick * PARAMS.trackWidthTicks, PARAMS.inPerTick / PARAMS.lateralInPerTick); + public final TurnConstraints defaultTurnConstraints = new TurnConstraints( + PARAMS.maxAngVel, -PARAMS.maxAngAccel, PARAMS.maxAngAccel); + public final VelConstraint defaultVelConstraint = + new MinVelConstraint(Arrays.asList( + kinematics.new WheelVelConstraint(PARAMS.maxWheelVel), + new AngularVelConstraint(PARAMS.maxAngVel) + )); + public final AccelConstraint defaultAccelConstraint = + new ProfileAccelConstraint(PARAMS.minProfileAccel, PARAMS.maxProfileAccel); + public final DcMotorEx leftFront, leftBack, rightBack, rightFront; + public final VoltageSensor voltageSensor; + public final LazyImu lazyImu; + public final Localizer localizer; + private final LinkedList poseHistory = new LinkedList<>(); + private final DownsampledWriter estimatedPoseWriter = new DownsampledWriter("ESTIMATED_POSE", 50_000_000); + private final DownsampledWriter targetPoseWriter = new DownsampledWriter("TARGET_POSE", 50_000_000); + private final DownsampledWriter driveCommandWriter = new DownsampledWriter("DRIVE_COMMAND", 50_000_000); + private final DownsampledWriter mecanumCommandWriter = new DownsampledWriter("MECANUM_COMMAND", 50_000_000); + public MecanumDrive(HardwareMap hardwareMap, Pose2d pose) { + LynxFirmware.throwIfModulesAreOutdated(hardwareMap); + + for (LynxModule module : hardwareMap.getAll(LynxModule.class)) { + module.setBulkCachingMode(LynxModule.BulkCachingMode.AUTO); + } + + // TODO: make sure your config has motors with these names (or change them) + // see https://ftc-docs.firstinspires.org/en/latest/hardware_and_software_configuration/configuring/index.html + leftFront = hardwareMap.get(DcMotorEx.class, "fl"); + leftBack = hardwareMap.get(DcMotorEx.class, "bl"); + rightBack = hardwareMap.get(DcMotorEx.class, "br"); + rightFront = hardwareMap.get(DcMotorEx.class, "fr"); + + leftFront.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE); + leftBack.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE); + rightBack.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE); + rightFront.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE); + + // TODO: reverse motor directions if needed + // + leftFront.setDirection(DcMotorSimple.Direction.REVERSE); + + leftBack.setDirection(DcMotorSimple.Direction.REVERSE); + + // TODO: make sure your config has an IMU with this name (can be BNO or BHI) + // see https://ftc-docs.firstinspires.org/en/latest/hardware_and_software_configuration/configuring/index.html + lazyImu = new LazyHardwareMapImu(hardwareMap, "imu", new RevHubOrientationOnRobot( + PARAMS.logoFacingDirection, PARAMS.usbFacingDirection)); + + voltageSensor = hardwareMap.voltageSensor.iterator().next(); + + localizer = new PinpointLocalizer(hardwareMap, PARAMS.inPerTick, pose); + + FlightRecorder.write("MECANUM_PARAMS", PARAMS); + } + + public void setDrivePowers(PoseVelocity2d powers) { + MecanumKinematics.WheelVelocities