From 9d2cd48287cc73c399c4f404b73bf53b9265f7c6 Mon Sep 17 00:00:00 2001 From: Ryan Brott Date: Mon, 19 Feb 2024 14:23:43 -0800 Subject: [PATCH] Stop reading localizer inputs on construction This ensures that any motion between construction and first update will be ignored (this is usually the period between init and start of an op mode). If teams want to track pose during that period, they can call `updatePoseEstimate()` explicitly. This matches the behavior of the 0.5.x localizers (without the annoying reset on every pose estimate set). The localizers also now log much more data to help troubleshoot localization issues in the future. --- TeamCode/build.gradle | 2 +- .../ftc/teamcode/MecanumDrive.java | 37 ++++++++++----- .../firstinspires/ftc/teamcode/TankDrive.java | 29 ++++++------ .../ftc/teamcode/ThreeDeadWheelLocalizer.java | 23 ++++++++-- .../ftc/teamcode/TwoDeadWheelLocalizer.java | 46 +++++++++++++------ .../messages/MecanumEncodersMessage.java | 19 -------- .../MecanumLocalizerInputsMessage.java | 30 ++++++++++++ ...e.java => TankLocalizerInputsMessage.java} | 4 +- ....java => ThreeDeadWheelInputsMessage.java} | 4 +- .../messages/TwoDeadWheelEncodersMessage.java | 15 ------ .../messages/TwoDeadWheelInputsMessage.java | 35 ++++++++++++++ 11 files changed, 161 insertions(+), 83 deletions(-) delete mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/MecanumEncodersMessage.java create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/MecanumLocalizerInputsMessage.java rename TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/{TankEncodersMessage.java => TankLocalizerInputsMessage.java} (73%) rename TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/{ThreeDeadWheelEncodersMessage.java => ThreeDeadWheelInputsMessage.java} (68%) delete mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/TwoDeadWheelEncodersMessage.java create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/TwoDeadWheelInputsMessage.java diff --git a/TeamCode/build.gradle b/TeamCode/build.gradle index afb8482..b0c4a83 100644 --- a/TeamCode/build.gradle +++ b/TeamCode/build.gradle @@ -33,6 +33,6 @@ dependencies { implementation project(':FtcRobotController') annotationProcessor files('lib/OpModeAnnotationProcessor.jar') - implementation "com.acmerobotics.roadrunner:ftc:0.1.12" + implementation "com.acmerobotics.roadrunner:ftc:0.1.13" implementation "com.acmerobotics.dashboard:dashboard:0.4.14" } diff --git a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java index d3a8f1b..26576a9 100644 --- a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java +++ b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java @@ -39,9 +39,10 @@ import com.qualcomm.robotcore.hardware.HardwareMap; import com.qualcomm.robotcore.hardware.VoltageSensor; import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit; +import org.firstinspires.ftc.robotcore.external.navigation.YawPitchRollAngles; import org.firstinspires.ftc.teamcode.messages.DriveCommandMessage; import org.firstinspires.ftc.teamcode.messages.MecanumCommandMessage; -import org.firstinspires.ftc.teamcode.messages.MecanumEncodersMessage; +import org.firstinspires.ftc.teamcode.messages.MecanumLocalizerInputsMessage; import org.firstinspires.ftc.teamcode.messages.PoseMessage; import java.lang.Math; @@ -125,6 +126,7 @@ public final class MecanumDrive { private int lastLeftFrontPos, lastLeftBackPos, lastRightBackPos, lastRightFrontPos; private Rotation2d lastHeading; + private boolean initialized; public DriveLocalizer() { leftFront = new OverflowEncoder(new RawEncoder(MecanumDrive.this.leftFront)); @@ -134,13 +136,6 @@ public final class MecanumDrive { // TODO: reverse encoders if needed // leftFront.setDirection(DcMotorSimple.Direction.REVERSE); - - lastLeftFrontPos = leftFront.getPositionAndVelocity().position; - lastLeftBackPos = leftBack.getPositionAndVelocity().position; - lastRightBackPos = rightBack.getPositionAndVelocity().position; - lastRightFrontPos = rightFront.getPositionAndVelocity().position; - - lastHeading = Rotation2d.exp(imu.get().getRobotYawPitchRollAngles().getYaw(AngleUnit.RADIANS)); } @Override @@ -150,12 +145,30 @@ public final class MecanumDrive { PositionVelocityPair rightBackPosVel = rightBack.getPositionAndVelocity(); PositionVelocityPair rightFrontPosVel = rightFront.getPositionAndVelocity(); - FlightRecorder.write("MECANUM_ENCODERS", new MecanumEncodersMessage( - leftFrontPosVel, leftBackPosVel, rightBackPosVel, rightFrontPosVel)); + YawPitchRollAngles angles = imu.get().getRobotYawPitchRollAngles(); + + FlightRecorder.write("MECANUM_LOCALIZER_INPUTS", new MecanumLocalizerInputsMessage( + leftFrontPosVel, leftBackPosVel, rightBackPosVel, rightFrontPosVel, angles)); + + Rotation2d heading = Rotation2d.exp(angles.getYaw(AngleUnit.RADIANS)); + + if (!initialized) { + initialized = true; + + lastLeftFrontPos = leftFrontPosVel.position; + lastLeftBackPos = leftBackPosVel.position; + lastRightBackPos = rightBackPosVel.position; + lastRightFrontPos = rightFrontPosVel.position; + + lastHeading = heading; + + return new Twist2dDual<>( + Vector2dDual.constant(new Vector2d(0.0, 0.0), 2), + DualNum.constant(0.0, 2) + ); + } - Rotation2d heading = Rotation2d.exp(imu.get().getRobotYawPitchRollAngles().getYaw(AngleUnit.RADIANS)); double headingDelta = heading.minus(lastHeading); - Twist2dDual