From 79d6297a46e9202d8436672aa0a914e1ebe61753 Mon Sep 17 00:00:00 2001 From: Ryan Brott Date: Mon, 20 Nov 2023 22:59:36 -0800 Subject: [PATCH] Add more debug messages --- .../ftc/teamcode/DownsampledWriter.java | 20 ++++++++++++ .../ftc/teamcode/MecanumDrive.java | 27 +++++++++++++--- .../firstinspires/ftc/teamcode/TankDrive.java | 32 ++++++++++++++++--- .../messages/DriveCommandMessage.java | 24 ++++++++++++++ .../messages/MecanumEncodersMessage.java | 27 ++++++++++++++++ .../ftc/teamcode/messages/PoseMessage.java | 2 +- .../messages/TankEncodersMessage.java | 29 +++++++++++++++++ .../ThreeDeadWheelEncodersMessage.java | 23 +++++++++++++ .../messages/TwoDeadWheelEncodersMessage.java | 19 +++++++++++ 9 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/DownsampledWriter.java create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/DriveCommandMessage.java create 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/TankEncodersMessage.java create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/ThreeDeadWheelEncodersMessage.java create mode 100644 TeamCode/src/main/java/org/firstinspires/ftc/teamcode/messages/TwoDeadWheelEncodersMessage.java diff --git a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/DownsampledWriter.java b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/DownsampledWriter.java new file mode 100644 index 0000000..608e237 --- /dev/null +++ b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/DownsampledWriter.java @@ -0,0 +1,20 @@ +package org.firstinspires.ftc.teamcode; + +import com.acmerobotics.roadrunner.ftc.FlightRecorder; + +public class DownsampledWriter { + public final String channel; + public final long maxPeriod; + private long nextWriteTimestamp = System.nanoTime(); + public DownsampledWriter(String channel, long maxPeriod) { + this.channel = channel; + this.maxPeriod = maxPeriod; + } + public void write(Object msg) { + long now = System.nanoTime(); + if (now >= nextWriteTimestamp) { + nextWriteTimestamp = now + maxPeriod; + FlightRecorder.write(channel, msg); + } + } +} 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 d9b93a0..a05c4f9 100644 --- a/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java +++ b/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/MecanumDrive.java @@ -38,6 +38,9 @@ import com.qualcomm.robotcore.hardware.IMU; import com.qualcomm.robotcore.hardware.VoltageSensor; import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit; +import org.firstinspires.ftc.teamcode.messages.DriveCommandMessage; +import org.firstinspires.ftc.teamcode.messages.MecanumEncodersMessage; +import org.firstinspires.ftc.teamcode.messages.PoseMessage; import java.lang.Math; import java.util.Arrays; @@ -47,6 +50,12 @@ import java.util.List; @Config public final class MecanumDrive { public static class Params { + // IMU orientation + public RevHubOrientationOnRobot.LogoFacingDirection logoFacingDirection = + RevHubOrientationOnRobot.LogoFacingDirection.UP; + public RevHubOrientationOnRobot.UsbFacingDirection usbFacingDirection = + RevHubOrientationOnRobot.UsbFacingDirection.FORWARD; + // drive model parameters public double inPerTick = 0; public double lateralInPerTick = 1; @@ -102,6 +111,10 @@ public final class MecanumDrive { 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); + public class DriveLocalizer implements Localizer { public final Encoder leftFront, leftBack, rightBack, rightFront; @@ -129,6 +142,9 @@ public final class MecanumDrive { PositionVelocityPair rightBackPosVel = rightBack.getPositionAndVelocity(); PositionVelocityPair rightFrontPosVel = rightFront.getPositionAndVelocity(); + FlightRecorder.write("MECANUM_ENCODERS", new MecanumEncodersMessage( + leftFrontPosVel, leftBackPosVel, rightBackPosVel, rightFrontPosVel)); + Rotation2d heading = Rotation2d.exp(imu.getRobotYawPitchRollAngles().getYaw(AngleUnit.RADIANS)); double headingDelta = heading.minus(lastHeading); @@ -186,8 +202,7 @@ public final class MecanumDrive { imu = hardwareMap.get(IMU.class, "imu"); IMU.Parameters parameters = new IMU.Parameters(new RevHubOrientationOnRobot( - RevHubOrientationOnRobot.LogoFacingDirection.UP, - RevHubOrientationOnRobot.UsbFacingDirection.FORWARD)); + PARAMS.logoFacingDirection, PARAMS.usbFacingDirection)); imu.initialize(parameters); voltageSensor = hardwareMap.voltageSensor.iterator().next(); @@ -261,6 +276,7 @@ public final class MecanumDrive { PARAMS.axialVelGain, PARAMS.lateralVelGain, PARAMS.headingVelGain ) .compute(txWorldTarget, pose, robotVelRobot); + driveCommandWriter.write(new DriveCommandMessage(command)); MecanumKinematics.WheelVelocities