diff --git a/TeamCode/src/main/java/dev/cyberarm/engine/V2/CyberarmEngine.java b/TeamCode/src/main/java/dev/cyberarm/engine/V2/CyberarmEngine.java index 09cfa0f..9b64dc8 100644 --- a/TeamCode/src/main/java/dev/cyberarm/engine/V2/CyberarmEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/engine/V2/CyberarmEngine.java @@ -41,6 +41,8 @@ public abstract class CyberarmEngine extends OpMode { private GamepadChecker gamepadCheckerGamepad1, gamepadCheckerGamepad2; private boolean useThreads = true; + private long startTime; + /** * Called when INIT button on Driver Station is pushed * ENSURE to call super.init() if you override this method @@ -84,6 +86,8 @@ public abstract class CyberarmEngine extends OpMode { * ENSURE to call super.start() if you override this method */ public void start() { + startTime = System.currentTimeMillis(); + if (cyberarmStates.size() > 0) { runState(cyberarmStates.get(0)); } @@ -534,4 +538,12 @@ public abstract class CyberarmEngine extends OpMode { public void threadless() { useThreads = false; } + + /** + * Time in milliseconds since START button was pushed + * @return runTime + */ + public double runTime() { + return (System.currentTimeMillis() - startTime); + } } diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/Localizer.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/Localizer.java index 8fa532e..ac2ca8a 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/Localizer.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/Localizer.java @@ -13,12 +13,12 @@ import dev.cyberarm.engine.V2.Utilities; public class Localizer { private final RedCrabMinibot robot; private double rawX = 0, rawY = 0, rawR = 0, offsetX = 0, offsetY = 0; - private final double trackWidthMM = 365.0, forwardOffsetMM = 140.0, wheelDiameterMM = 90.0; + private final double trackWidthMM = 387.35, forwardOffsetMM = 133.35, wheelDiameterMM = 90.0; private final int encoderTicksPerRevolution = 8192; private final double encoderGearRatio = 1; private double lastEncoderXLeftMM, lastEncoderXRightMM, lastEncoderYCenterMM; // private double xDeltaMultiplier = 0.87012987, yDeltaMultiplier = 0.25; - private double xDeltaMultiplier = 1, yDeltaMultiplier = 1; + private double xPosMultiplier = 0.675956739, yPosMultiplier = 0.941867531; private HolonomicOdometry odometry; public Localizer(RedCrabMinibot robot) { this.robot = robot; @@ -100,11 +100,11 @@ public class Localizer { } public double xMM() { - return odometry.getPose().getX() + offsetX; //rawX; + return odometry.getPose().getX() * xPosMultiplier + offsetX; //rawX; } public double yMM() { - return odometry.getPose().getY() + offsetY; //rawY; + return odometry.getPose().getY() * xPosMultiplier + offsetY; //rawY; } public double xIn() { diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/RedCrabMinibot.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/RedCrabMinibot.java index 2c0470f..7bb1b33 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/RedCrabMinibot.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/RedCrabMinibot.java @@ -88,8 +88,10 @@ public class RedCrabMinibot { public final DcMotorEx deadWheelXLeft, deadWheelXRight; public final EncoderCustomKB2040 deadWheelYCenter; public final DigitalChannel greenLED, redLED; + public final boolean LED_OFF = true, LED_ON = false; final CyberarmEngine engine; + public final boolean autonomous; public TimeCraftersConfiguration config; private final PIDFController clawArmPIDFController; @@ -124,6 +126,7 @@ public class RedCrabMinibot { public RedCrabMinibot(boolean autonomous) { engine = CyberarmEngine.instance; + this.autonomous = autonomous; config = new TimeCraftersConfiguration("cyberarm_RedCrab"); loadConstants(); @@ -254,8 +257,8 @@ public class RedCrabMinibot { greenLED.setMode(DigitalChannel.Mode.OUTPUT); redLED.setMode(DigitalChannel.Mode.OUTPUT); - greenLED.setState(true); - redLED.setState(true); + greenLED.setState(LED_OFF); + redLED.setState(LED_ON); // Bulk read from hubs Utilities.hubsBulkReadMode(engine.hardwareMap, LynxModule.BulkCachingMode.MANUAL); @@ -269,6 +272,12 @@ public class RedCrabMinibot { RedCrabMinibot.localizer.reset(); } + public void shutdown() { + // Prevent LED(s) from being on while idle + greenLED.setMode(DigitalChannel.Mode.INPUT); + redLED.setMode(DigitalChannel.Mode.INPUT); + } + public void reloadConfig() { config = new TimeCraftersConfiguration("cyberarm_RedCrab"); diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/cyberarm_RedCrab.json b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/cyberarm_RedCrab.json index 2a1906e..a036019 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/cyberarm_RedCrab.json +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/cyberarm_RedCrab.json @@ -1 +1 @@ -{"config":{"created_at":"2023-12-11 09:31:55 -0600","updated_at":"2024-01-30 17:45:43 -0600","spec_version":2,"revision":1146},"data":{"groups":[{"name":"Autonomous_BLUE_Audience","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix3000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Move forward unto Dawn","enabled":true,"variables":[{"name":"distanceMM","value":"Dx1043"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx900"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 270d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx270"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move forward to backstage","enabled":true,"variables":[{"name":"distanceMM","value":"Dx2844"},{"name":"lerpMM_DOWN","value":"Dx500"},{"name":"lerpMM_UP","value":"Dx500"},{"name":"maxVelocityMM","value":"Dx1220"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx180"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"16-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]},{"name":"17-00","comment":"@ClawArmMove - Move claw arm to stow","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-01","comment":"@ServoMove - close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]}]},{"name":"Autonomous_RED_Audience","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to left","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix3000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Move forward unto Dawn","enabled":true,"variables":[{"name":"distanceMM","value":"Dx1043"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx900"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move forward to backstage","enabled":true,"variables":[{"name":"distanceMM","value":"Dx2844"},{"name":"lerpMM_DOWN","value":"Dx500"},{"name":"lerpMM_UP","value":"Dx500"},{"name":"maxVelocityMM","value":"Dx1220"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx180"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"16-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]},{"name":"17-00","comment":"@ClawArmMove - Move claw arm to stow","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-01","comment":"@ServoMove - close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]}]},{"name":"Autonomous_RED_Backstage","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to deposit position","enabled":true,"variables":[{"name":"angle","value":"Dx165.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to deposit position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.508"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to the right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Strafe to the left","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move to backboard","enabled":true,"variables":[{"name":"distanceMM","value":"Dx475"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"16-00","comment":"@Move - Move back a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-75"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"17-00","comment":"@Move - Move right the right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx600"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"17-01","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-02","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"17-03","comment":"@ServoMove - Close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix1000"}]}]},{"name":"Autonomous_SpikePath_CENTER","actions":[{"name":"01-00","comment":"@Move - Move forward to spike mark","enabled":true,"variables":[{"name":"distanceMM","value":"Dx152"},{"name":"lerpMM_DOWN","value":"Dx50"},{"name":"lerpMM_UP","value":"Dx50"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"02-01","comment":"@ServoMove - Open right claw (purple)","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx500"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix750"}]},{"name":"04-00","comment":"@Move - Move back from spike mark","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-152"},{"name":"lerpMM_DOWN","value":"Dx50"},{"name":"lerpMM_UP","value":"Dx50"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@ServoMove - Close right claw (purple)","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx500"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix750"}]},{"name":"05-01","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_SpikePath_LEFT","actions":[{"name":"00-00","comment":"@Rotate - Rotate robot to towards left spike mark","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx316"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"01-00","comment":"@Move - Move up a bit","enabled":false,"variables":[{"name":"distanceMM","value":"Dx101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@ServoMove - Drop pixel","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"03-00","comment":"@ServoMove - Close claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.72"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix100"}]},{"name":"04-00","comment":"@Move - Move back a bit","enabled":false,"variables":[{"name":"distanceMM","value":"Dx-101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_SpikePath_RIGHT","actions":[{"name":"00-00","comment":"@Rotate - Rotate robot to towards right spike mark","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx45"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"01-00","comment":"@Move - Move up a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx50"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx10"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@ServoMove - Drop pixel","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"03-00","comment":"@ServoMove - Close claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.72"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix100"}]},{"name":"04-00","comment":"@Move - Move back a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-50"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx2"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@Rotate - Rotate robot to 0d","enabled":false,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_Z_DEBUG","actions":[{"name":"00-00","comment":"@MoveToCoordinate - Trial run(s)","enabled":true,"variables":[{"name":"angleToleranceDEGREES","value":"Dx5"},{"name":"minDistanceMM","value":"Dx10.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx0"},{"name":"targetPosMM","value":"Sx500.0x0.0"},{"name":"timeoutMS","value":"Ix15000"}]}]},{"name":"Robot","actions":[{"name":"Claw_Tuning","comment":"Claws","enabled":true,"variables":[{"name":"claw_left_closed_position","value":"Dx0.2"},{"name":"claw_left_open_position","value":"Dx0.5"},{"name":"claw_right_closed_position","value":"Dx0.78"},{"name":"claw_right_open_position","value":"Dx0.5"}]},{"name":"ClawArm_Tuning","comment":"Claw Arm","enabled":true,"variables":[{"name":"collect_angle","value":"Dx242"},{"name":"collect_float_angle","value":"Dx237"},{"name":"deposit_angle","value":"Dx165.0"},{"name":"gear_ratio","value":"Dx1"},{"name":"kD","value":"Dx1"},{"name":"kF","value":"Dx0.0"},{"name":"kI","value":"Dx1.5"},{"name":"kP","value":"Dx6"},{"name":"KPosP","value":"Dx1"},{"name":"max_current_milliamps","value":"Dx1588.0"},{"name":"max_speed","value":"Dx0.5"},{"name":"max_velocityDEGREES","value":"Dx60"},{"name":"motor_ticks","value":"Ix8192"},{"name":"stow_angle","value":"Dx0"},{"name":"tolerance","value":"Ix288"},{"name":"warn_overcurrent_after_ms","value":"Lx5000"}]},{"name":"ClawWrist_Tuning","comment":"Claw Wrist","enabled":true,"variables":[{"name":"collect_float_position","value":"Dx0.52"},{"name":"collect_position","value":"Dx0.505"},{"name":"deposit_position","value":"Dx0.508"},{"name":"stow_position","value":"Dx0.74"}]},{"name":"Drivetrain_Tuning","comment":"Drivetrain","enabled":true,"variables":[{"name":"gear_ratio","value":"Dx13.0321"},{"name":"max_speed","value":"Dx0.5"},{"name":"motor_ticks","value":"Ix28"},{"name":"velocity_max_in_mm","value":"Dx610"},{"name":"velocity_slow_in_mm","value":"Dx250"},{"name":"wheel_diameter_mm","value":"Dx90"}]},{"name":"DroneLauncher_Tuning","comment":"Drone Launcher","enabled":true,"variables":[{"name":"initial_position","value":"Dx0.5"},{"name":"launch_confirmation_time_ms","value":"Ix1000"},{"name":"launch_position","value":"Dx0"}]},{"name":"HookArm_Tuning","comment":"Hook Arm","enabled":true,"variables":[{"name":"stow_position","value":"Dx0.35"},{"name":"up_position","value":"Dx0.8"}]},{"name":"Winch_Tuning","comment":"Winch","enabled":true,"variables":[{"name":"max_speed","value":"Dx1.0"}]}]},{"name":"zAutonomous_BLUE_Audience","actions":[]},{"name":"zAutonomous_BLUE_Backstage","actions":[]}],"presets":{"groups":[],"actions":[{"name":"ClawArmMove","comment":"@ClawArmMove - Move claw arm","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"Move","comment":"@Move - Move ta wheels matey!","enabled":true,"variables":[{"name":"distanceMM","value":"Dx300"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"PathEnactor","comment":"@PathEnactor - Enact path","enabled":true,"variables":[]},{"name":"PathSelector","comment":"@PathSelector - Pick path","enabled":true,"variables":[{"name":"fallbackPath","value":"Ix0"},{"name":"minConfidence","value":"Dx0.7"},{"name":"timeoutMS","value":"Ix2000"}]},{"name":"Rotate","comment":"@Rotate - Rotate robot to face degree heading","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"ServoMove","comment":"@ServoMove - Move servo to position","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix2000"}]}]}}} \ No newline at end of file +{"config":{"created_at":"2023-12-11 09:31:55 -0600","updated_at":"2024-02-01 20:00:47 -0600","spec_version":2,"revision":1220},"data":{"groups":[{"name":"Autonomous_BLUE_Audience","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix3000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Move forward unto Dawn","enabled":true,"variables":[{"name":"distanceMM","value":"Dx1043"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx900"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 270d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx270"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move forward to backstage","enabled":true,"variables":[{"name":"distanceMM","value":"Dx2844"},{"name":"lerpMM_DOWN","value":"Dx500"},{"name":"lerpMM_UP","value":"Dx500"},{"name":"maxVelocityMM","value":"Dx1220"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx180"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"16-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]},{"name":"17-00","comment":"@ClawArmMove - Move claw arm to stow","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-01","comment":"@ServoMove - close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]}]},{"name":"Autonomous_RED_Audience","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to left","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix3000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Move forward unto Dawn","enabled":true,"variables":[{"name":"distanceMM","value":"Dx1043"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx900"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move forward to backstage","enabled":true,"variables":[{"name":"distanceMM","value":"Dx2844"},{"name":"lerpMM_DOWN","value":"Dx500"},{"name":"lerpMM_UP","value":"Dx500"},{"name":"maxVelocityMM","value":"Dx1220"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix8000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx180"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"16-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]},{"name":"17-00","comment":"@ClawArmMove - Move claw arm to stow","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-01","comment":"@ServoMove - close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix250"}]}]},{"name":"Autonomous_RED_Backstage","actions":[{"name":"00-00","comment":"@ClawArmMove - Move claw arm up high","enabled":true,"variables":[{"name":"angle","value":"Dx130.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix2500"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"00-01","comment":"@ServoMove - Move wrist to position camera","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"01-00","comment":"@PathSelector - Pick path; default Center","enabled":true,"variables":[{"name":"minConfidence","value":"Dx18.0"},{"name":"path","value":"Ix1"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"02-00","comment":"@Move - Move forward","enabled":true,"variables":[{"name":"distanceMM","value":"Dx415"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-01","comment":"@ClawArmMove - Move claw arm down","enabled":true,"variables":[{"name":"angle","value":"Dx220"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix10"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"02-02","comment":"@ServoMove - Move wrist servo","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx10"},{"name":"position","value":"Dx0.51"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix10"}]},{"name":"04-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"05-00","comment":"@PathEnactor - Enact path; paths must return to \"origin\" when done","enabled":true,"variables":[{"name":"forcePath","value":"Ix-1"}]},{"name":"06-00","comment":"@ClawArmMove - Move claw arm to deposit position","enabled":true,"variables":[{"name":"angle","value":"Dx165.0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"06-01","comment":"@ServoMove - Move wrist to deposit position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.508"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1"}]},{"name":"07-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"08-00","comment":"@Move - Move back","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-207"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"09-00","comment":"@Rotate - Rotate to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"10-00","comment":"@Move - Strafe to the right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx610"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"11-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"12-00","comment":"@Move - Strafe to the left","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"13-00","comment":"@Rotate - Rotate to 90d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx90"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"14-00","comment":"@Move - Move to backboard","enabled":true,"variables":[{"name":"distanceMM","value":"Dx475"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"15-00","comment":"@ServoMove - Open left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"16-00","comment":"@Move - Move back a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-75"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"17-00","comment":"@Move - Move right the right","enabled":true,"variables":[{"name":"distanceMM","value":"Dx600"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxtrue"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"17-01","comment":"@ClawArmMove - Move claw arm to stow position","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"17-02","comment":"@ServoMove - Move wrist to stow position","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxclawWrist"},{"name":"timeoutMS","value":"Ix1000"}]},{"name":"17-03","comment":"@ServoMove - Close left claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1"},{"name":"position","value":"Dx0.2"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix1000"}]}]},{"name":"Autonomous_SpikePath_CENTER","actions":[{"name":"01-00","comment":"@Move - Move forward to spike mark","enabled":true,"variables":[{"name":"distanceMM","value":"Dx152"},{"name":"lerpMM_DOWN","value":"Dx50"},{"name":"lerpMM_UP","value":"Dx50"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"02-01","comment":"@ServoMove - Open right claw (purple)","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx500"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix750"}]},{"name":"04-00","comment":"@Move - Move back from spike mark","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-152"},{"name":"lerpMM_DOWN","value":"Dx50"},{"name":"lerpMM_UP","value":"Dx50"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@ServoMove - Close right claw (purple)","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx500"},{"name":"position","value":"Dx0.74"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix750"}]},{"name":"05-01","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_SpikePath_LEFT","actions":[{"name":"00-00","comment":"@Rotate - Rotate robot to towards left spike mark","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx316"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"01-00","comment":"@Move - Move up a bit","enabled":false,"variables":[{"name":"distanceMM","value":"Dx101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@ServoMove - Drop pixel","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"03-00","comment":"@ServoMove - Close claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.72"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix100"}]},{"name":"04-00","comment":"@Move - Move back a bit","enabled":false,"variables":[{"name":"distanceMM","value":"Dx-101"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx25"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@Rotate - Rotate robot to 0d","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_SpikePath_RIGHT","actions":[{"name":"00-00","comment":"@Rotate - Rotate robot to towards right spike mark","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx45"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"01-00","comment":"@Move - Move up a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx50"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx10"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"02-00","comment":"@ServoMove - Drop pixel","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix500"}]},{"name":"03-00","comment":"@ServoMove - Close claw","enabled":true,"variables":[{"name":"lerp","value":"Bxfalse"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.72"},{"name":"servoName","value":"SxrightClaw"},{"name":"timeoutMS","value":"Ix100"}]},{"name":"04-00","comment":"@Move - Move back a bit","enabled":true,"variables":[{"name":"distanceMM","value":"Dx-50"},{"name":"lerpMM_DOWN","value":"Dx25"},{"name":"lerpMM_UP","value":"Dx2"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"05-00","comment":"@Rotate - Rotate robot to 0d","enabled":false,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]}]},{"name":"Autonomous_Z_DEBUG","actions":[{"name":"00-00","comment":"@MoveToCoordinate - Trial run(s)","enabled":true,"variables":[{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"lerpMM_DOWN","value":"Dx305"},{"name":"lerpMM_UP","value":"Dx305"},{"name":"maxVelocityMM","value":"Dx610.0"},{"name":"minDistanceMM","value":"Dx30.0"},{"name":"minVelocityMM","value":"Dx125.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx45"},{"name":"targetAngleToleranceDEGREES","value":"Dx0"},{"name":"targetPosMM","value":"Sx0x-1220"},{"name":"timeoutMS","value":"Ix15000"}]},{"name":"01-00","comment":"@MoveToCoordinate - Trial run(s)","enabled":false,"variables":[{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"lerpMM_DOWN","value":"Dx305"},{"name":"lerpMM_UP","value":"Dx305"},{"name":"maxVelocityMM","value":"Dx610.0"},{"name":"minDistanceMM","value":"Dx30.0"},{"name":"minVelocityMM","value":"Dx125.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx45"},{"name":"targetAngleToleranceDEGREES","value":"Dx0"},{"name":"targetPosMM","value":"Sx0.0x0.0"},{"name":"timeoutMS","value":"Ix15000"}]},{"name":"02-00","comment":"@MoveToCoordinate - Trial run(s)","enabled":false,"variables":[{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"lerpMM_DOWN","value":"Dx305"},{"name":"lerpMM_UP","value":"Dx305"},{"name":"maxVelocityMM","value":"Dx610.0"},{"name":"minDistanceMM","value":"Dx30.0"},{"name":"minVelocityMM","value":"Dx125.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx45"},{"name":"targetAngleToleranceDEGREES","value":"Dx0"},{"name":"targetPosMM","value":"Sx2420x0"},{"name":"timeoutMS","value":"Ix15000"}]},{"name":"03-00","comment":"@MoveToCoordinate - Trial run(s)","enabled":false,"variables":[{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"lerpMM_DOWN","value":"Dx305"},{"name":"lerpMM_UP","value":"Dx305"},{"name":"maxVelocityMM","value":"Dx610.0"},{"name":"minDistanceMM","value":"Dx30.0"},{"name":"minVelocityMM","value":"Dx125.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx45"},{"name":"targetAngleToleranceDEGREES","value":"Dx0"},{"name":"targetPosMM","value":"Sx0.0x0.0"},{"name":"timeoutMS","value":"Ix15000"}]},{"name":"99-00","comment":"@PathSelector - Pick path","enabled":true,"variables":[{"name":"minConfidence","value":"Dx0.7"},{"name":"path","value":"Ix-1"},{"name":"timeoutMS","value":"Ix2000000"}]}]},{"name":"Robot","actions":[{"name":"Claw_Tuning","comment":"Claws","enabled":true,"variables":[{"name":"claw_left_closed_position","value":"Dx0.2"},{"name":"claw_left_open_position","value":"Dx0.5"},{"name":"claw_right_closed_position","value":"Dx0.78"},{"name":"claw_right_open_position","value":"Dx0.5"}]},{"name":"ClawArm_Tuning","comment":"Claw Arm","enabled":true,"variables":[{"name":"collect_angle","value":"Dx242"},{"name":"collect_float_angle","value":"Dx237"},{"name":"deposit_angle","value":"Dx165.0"},{"name":"gear_ratio","value":"Dx1"},{"name":"kD","value":"Dx1"},{"name":"kF","value":"Dx0.0"},{"name":"kI","value":"Dx1.5"},{"name":"kP","value":"Dx6"},{"name":"KPosP","value":"Dx1"},{"name":"max_current_milliamps","value":"Dx1588.0"},{"name":"max_speed","value":"Dx0.5"},{"name":"max_velocityDEGREES","value":"Dx60"},{"name":"motor_ticks","value":"Ix8192"},{"name":"stow_angle","value":"Dx0"},{"name":"tolerance","value":"Ix288"},{"name":"warn_overcurrent_after_ms","value":"Lx5000"}]},{"name":"ClawWrist_Tuning","comment":"Claw Wrist","enabled":true,"variables":[{"name":"collect_float_position","value":"Dx0.52"},{"name":"collect_position","value":"Dx0.505"},{"name":"deposit_position","value":"Dx0.508"},{"name":"stow_position","value":"Dx0.74"}]},{"name":"Drivetrain_Tuning","comment":"Drivetrain","enabled":true,"variables":[{"name":"gear_ratio","value":"Dx13.0321"},{"name":"max_speed","value":"Dx0.5"},{"name":"motor_ticks","value":"Ix28"},{"name":"velocity_max_in_mm","value":"Dx610"},{"name":"velocity_slow_in_mm","value":"Dx250"},{"name":"wheel_diameter_mm","value":"Dx90"}]},{"name":"DroneLauncher_Tuning","comment":"Drone Launcher","enabled":true,"variables":[{"name":"initial_position","value":"Dx0.5"},{"name":"launch_confirmation_time_ms","value":"Ix1000"},{"name":"launch_position","value":"Dx0"}]},{"name":"HookArm_Tuning","comment":"Hook Arm","enabled":true,"variables":[{"name":"stow_position","value":"Dx0.35"},{"name":"up_position","value":"Dx0.8"}]},{"name":"Winch_Tuning","comment":"Winch","enabled":true,"variables":[{"name":"max_speed","value":"Dx1.0"}]}]},{"name":"zAutonomous_BLUE_Audience","actions":[]},{"name":"zAutonomous_BLUE_Backstage","actions":[]}],"presets":{"groups":[],"actions":[{"name":"ClawArmMove","comment":"@ClawArmMove - Move claw arm","enabled":true,"variables":[{"name":"angle","value":"Dx0"},{"name":"power","value":"Dx0.5"},{"name":"timeoutMS","value":"Ix1000"},{"name":"toleranceAngle","value":"Dx1.5"}]},{"name":"Move","comment":"@Move - Move ta wheels matey!","enabled":true,"variables":[{"name":"distanceMM","value":"Dx300"},{"name":"lerpMM_DOWN","value":"Dx100"},{"name":"lerpMM_UP","value":"Dx100"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx250"},{"name":"strafe","value":"Bxfalse"},{"name":"timeoutMS","value":"Ix2000"},{"name":"toleranceMM","value":"Dx10"}]},{"name":"MoveToCoordinate","comment":"@MoveToCoordinate - Trial run(s)","enabled":true,"variables":[{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"lerpMM_DOWN","value":"Dx305"},{"name":"lerpMM_UP","value":"Dx305"},{"name":"maxVelocityMM","value":"Dx610.0"},{"name":"minDistanceMM","value":"Dx25.0"},{"name":"minVelocityMM","value":"Dx125.0"},{"name":"stopDrivetrain","value":"Bxtrue"},{"name":"targetAngleDEGREES","value":"Dx45"},{"name":"targetAngleToleranceDEGREES","value":"Dx5"},{"name":"targetPosMM","value":"Sx610.0x0.0"},{"name":"timeoutMS","value":"Ix15000"}]},{"name":"PathEnactor","comment":"@PathEnactor - Enact path","enabled":true,"variables":[]},{"name":"PathSelector","comment":"@PathSelector - Pick path","enabled":true,"variables":[{"name":"minConfidence","value":"Dx0.7"},{"name":"path","value":"Ix-1"},{"name":"timeoutMS","value":"Ix2000"}]},{"name":"Rotate","comment":"@Rotate - Rotate robot to face degree heading","enabled":true,"variables":[{"name":"headingDEGREES","value":"Dx0"},{"name":"lerpDEGREES","value":"Dx90.0"},{"name":"maxVelocityMM","value":"Dx610"},{"name":"minVelocityMM","value":"Dx50"},{"name":"timeoutMS","value":"Ix5000"},{"name":"toleranceDEGREES","value":"Dx0.5"}]},{"name":"ServoMove","comment":"@ServoMove - Move servo to position","enabled":true,"variables":[{"name":"lerp","value":"Bxtrue"},{"name":"lerpMS","value":"Dx1000"},{"name":"position","value":"Dx0.5"},{"name":"servoName","value":"SxleftClaw"},{"name":"timeoutMS","value":"Ix2000"}]}]}}} \ No newline at end of file diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueAudienceEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueAudienceEngine.java index 8e17fff..7d121a6 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueAudienceEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueAudienceEngine.java @@ -4,16 +4,17 @@ import com.qualcomm.robotcore.eventloop.opmode.Autonomous; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfiguration; -import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @Autonomous(name = "Cyberarm Red Crab BLUE AUDIENCE", group = "MINIBOT", preselectTeleOp = "Cyberarm Red Crab TeleOp") -public class RedCrabAutonomousBlueAudienceEngine extends RedCrabAutonomousEngine { +public class RedCrabAutonomousBlueAudienceEngine extends RedCrabEngine { @Override public void setup() { robot = new RedCrabMinibot(true); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); setupFromConfig( new TimeCraftersConfiguration("cyberarm_RedCrab"), diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueBackstageEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueBackstageEngine.java index 12e1140..e43523e 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueBackstageEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousBlueBackstageEngine.java @@ -4,16 +4,17 @@ import com.qualcomm.robotcore.eventloop.opmode.Autonomous; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfiguration; -import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @Autonomous(name = "Cyberarm Red Crab BLUE BACKSTAGE", group = "MINIBOT", preselectTeleOp = "Cyberarm Red Crab TeleOp") -public class RedCrabAutonomousBlueBackstageEngine extends RedCrabAutonomousEngine { +public class RedCrabAutonomousBlueBackstageEngine extends RedCrabEngine { @Override public void setup() { robot = new RedCrabMinibot(true); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); setupFromConfig( new TimeCraftersConfiguration("cyberarm_RedCrab"), diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousDebuggingOnlyEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousDebuggingOnlyEngine.java index 1dd38d7..c137332 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousDebuggingOnlyEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousDebuggingOnlyEngine.java @@ -6,13 +6,15 @@ import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfig import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @Autonomous(name = "Cyberarm Red Crab Auto DEBUGGING", group = "MINIBOT", preselectTeleOp = "Cyberarm Red Crab TeleOp") -public class RedCrabAutonomousDebuggingOnlyEngine extends RedCrabAutonomousEngine { +public class RedCrabAutonomousDebuggingOnlyEngine extends RedCrabEngine { @Override public void setup() { robot = new RedCrabMinibot(true); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); setupFromConfig( new TimeCraftersConfiguration("cyberarm_RedCrab"), diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousEngine.java deleted file mode 100644 index 22abc6f..0000000 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousEngine.java +++ /dev/null @@ -1,22 +0,0 @@ -package dev.cyberarm.minibots.red_crab.engines; - -import dev.cyberarm.engine.V2.CyberarmEngine; -import dev.cyberarm.engine.V2.Utilities; -import dev.cyberarm.minibots.red_crab.RedCrabMinibot; - -public abstract class RedCrabAutonomousEngine extends CyberarmEngine { - protected RedCrabMinibot robot; - - @Override - public void loop() { - Utilities.hubsClearBulkReadCache(hardwareMap); - if (RedCrabMinibot.localizer != null) { - RedCrabMinibot.localizer.integrate(); - } - - super.loop(); - - if (robot != null) - robot.standardTelemetry(); - } -} diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedAudienceEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedAudienceEngine.java index 43929aa..6e0b0f8 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedAudienceEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedAudienceEngine.java @@ -4,16 +4,17 @@ import com.qualcomm.robotcore.eventloop.opmode.Autonomous; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfiguration; -import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @Autonomous(name = "Cyberarm Red Crab RED AUDIENCE", group = "MINIBOT", preselectTeleOp = "Cyberarm Red Crab TeleOp") -public class RedCrabAutonomousRedAudienceEngine extends RedCrabAutonomousEngine { +public class RedCrabAutonomousRedAudienceEngine extends RedCrabEngine { @Override public void setup() { robot = new RedCrabMinibot(true); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); setupFromConfig( new TimeCraftersConfiguration("cyberarm_RedCrab"), diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedBackstageEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedBackstageEngine.java index a9bc032..ffe38b6 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedBackstageEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabAutonomousRedBackstageEngine.java @@ -4,16 +4,17 @@ import com.qualcomm.robotcore.eventloop.opmode.Autonomous; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfiguration; -import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @Autonomous(name = "Cyberarm Red Crab RED BACKSTAGE", group = "MINIBOT", preselectTeleOp = "Cyberarm Red Crab TeleOp") -public class RedCrabAutonomousRedBackstageEngine extends RedCrabAutonomousEngine { +public class RedCrabAutonomousRedBackstageEngine extends RedCrabEngine { @Override public void setup() { robot = new RedCrabMinibot(true); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); setupFromConfig( new TimeCraftersConfiguration("cyberarm_RedCrab"), diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabEngine.java new file mode 100644 index 0000000..a995574 --- /dev/null +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabEngine.java @@ -0,0 +1,49 @@ +package dev.cyberarm.minibots.red_crab.engines; + +import dev.cyberarm.engine.V2.CyberarmEngine; +import dev.cyberarm.engine.V2.Utilities; +import dev.cyberarm.minibots.red_crab.RedCrabMinibot; + +public abstract class RedCrabEngine extends CyberarmEngine { + protected RedCrabMinibot robot; + + @Override + public void loop() { + Utilities.hubsClearBulkReadCache(hardwareMap); + + super.loop(); + + robot.standardTelemetry(); + + if (robot.autonomous) { + if (runTime() < 20_000.0) { // KEEP CALM and CARRY ON + robot.redLED.setState(robot.LED_OFF); + robot.greenLED.setState(robot.LED_ON); + } else if (runTime() < 25_000.0) { // RUNNING LOW ON TIME + robot.redLED.setState(robot.LED_ON); + robot.greenLED.setState(robot.LED_ON); + } else { // 5 SECONDS LEFT! + robot.redLED.setState(robot.LED_ON); + robot.greenLED.setState(robot.LED_OFF); + } + } else { + if (runTime() >= 90_000.0) { // LAUNCH DRONE and DO CHIN UP + robot.redLED.setState(robot.LED_OFF); + robot.greenLED.setState(robot.LED_ON); + } else if (runTime() >= 80_000.0) { // GET READY + robot.redLED.setState(robot.LED_ON); + robot.greenLED.setState(robot.LED_ON); + } else { // KEEP CALM and CARRY ON + robot.redLED.setState(robot.LED_ON); + robot.greenLED.setState(robot.LED_OFF); + } + } + } + + @Override + public void stop() { + robot.shutdown(); + + super.stop(); + } +} diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpDebuggingOnlyEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpDebuggingOnlyEngine.java index b564390..116c726 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpDebuggingOnlyEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpDebuggingOnlyEngine.java @@ -8,15 +8,19 @@ import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.engine.V2.CyberarmState; import dev.cyberarm.engine.V2.Utilities; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; @TeleOp(name = "Cyberarm Red Crab TeleOp DEBUGGING", group = "MINIBOT") -public class RedCrabTeleOpDebuggingOnlyEngine extends CyberarmEngine { +public class RedCrabTeleOpDebuggingOnlyEngine extends RedCrabEngine { @Override public void setup() { threadless(); + robot = new RedCrabMinibot(false); + + addTask(new LocalizerTask(robot)); + addState(new CyberarmState() { - final RedCrabMinibot robot = new RedCrabMinibot(false); @Override public void exec() { @@ -30,18 +34,6 @@ public class RedCrabTeleOpDebuggingOnlyEngine extends CyberarmEngine { robot.clawArm.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER); robot.clawArm.setPower(-engine.gamepad1.left_stick_y * 0.5); } - - @Override - public void telemetry() { - robot.standardTelemetry(); - } }); } - - @Override - public void loop() { - Utilities.hubsClearBulkReadCache(hardwareMap); - - super.loop(); - } } diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpEngine.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpEngine.java index ef0d484..05eebda 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpEngine.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/engines/RedCrabTeleOpEngine.java @@ -6,26 +6,18 @@ import dev.cyberarm.engine.V2.CyberarmEngine; import dev.cyberarm.engine.V2.Utilities; import dev.cyberarm.minibots.red_crab.RedCrabMinibot; import dev.cyberarm.minibots.red_crab.states.ClawArmTask; +import dev.cyberarm.minibots.red_crab.states.LocalizerTask; import dev.cyberarm.minibots.red_crab.states.Pilot; @TeleOp(name = "Cyberarm Red Crab TeleOp", group = "MINIBOT") -public class RedCrabTeleOpEngine extends CyberarmEngine { +public class RedCrabTeleOpEngine extends RedCrabEngine { @Override public void setup() { - RedCrabMinibot robot = new RedCrabMinibot(false); + robot = new RedCrabMinibot(false); addTask(new ClawArmTask(robot)); + addTask(new LocalizerTask(robot)); addState(new Pilot(robot)); } - - @Override - public void loop() { - Utilities.hubsClearBulkReadCache(hardwareMap); - if (RedCrabMinibot.localizer != null) { - RedCrabMinibot.localizer.integrate(); - } - - super.loop(); - } } diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/LocalizerTask.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/LocalizerTask.java new file mode 100644 index 0000000..7d513f0 --- /dev/null +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/LocalizerTask.java @@ -0,0 +1,21 @@ +package dev.cyberarm.minibots.red_crab.states; + +import dev.cyberarm.engine.V2.CyberarmState; +import dev.cyberarm.engine.V2.Utilities; +import dev.cyberarm.minibots.red_crab.RedCrabMinibot; + +public class LocalizerTask extends CyberarmState { + private final RedCrabMinibot robot; + + public LocalizerTask(RedCrabMinibot robot) { + this.robot = robot; + } + @Override + public void exec() { + Utilities.hubsClearBulkReadCache(engine.hardwareMap); + + if (RedCrabMinibot.localizer != null) { + RedCrabMinibot.localizer.integrate(); + } + } +} diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/MoveToCoordinate.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/MoveToCoordinate.java index 4370f5f..c851f55 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/MoveToCoordinate.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/MoveToCoordinate.java @@ -1,7 +1,8 @@ package dev.cyberarm.minibots.red_crab.states; +import com.qualcomm.robotcore.util.Range; + import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit; -import org.firstinspires.ftc.robotcore.external.navigation.DistanceUnit; import dev.cyberarm.engine.V2.CyberarmState; import dev.cyberarm.engine.V2.Utilities; @@ -13,8 +14,15 @@ public class MoveToCoordinate extends CyberarmState { private final String groupName, actionName; private final boolean stopDrivetrain; private final int timeoutMS; - private final double targetAngleDegrees, angleToleranceDegrees, minDistanceMM, targetX_MM, targetY_MM; + private final double targetAngleDegrees, targetAngleToleranceDegrees, minDistanceMM; + private final double maxVelocityMM, minVelocityMM, lerpMM_UP, lerpMM_DOWN, lerpDegrees; private final Vector2D targetPosMM; + private Vector2D robotInitialPosMM = new Vector2D(), robotPosMM = new Vector2D(); + private Vector2D direction = new Vector2D(); + private double distanceFromTargetMM = 0; + private double velocity = 0; + private double angleDiffDegrees = 0; + private double rotationStrength = 0; public MoveToCoordinate(RedCrabMinibot robot, String groupName, String actionName) { this.robot = robot; @@ -23,24 +31,46 @@ public class MoveToCoordinate extends CyberarmState { this.timeoutMS = robot.config.variable(groupName, actionName, "timeoutMS").value(); this.stopDrivetrain = robot.config.variable(groupName, actionName, "stopDrivetrain").value(); - this.angleToleranceDegrees = robot.config.variable(groupName, actionName, "angleToleranceDEGREES").value(); + + this.targetAngleToleranceDegrees = robot.config.variable(groupName, actionName, "targetAngleToleranceDEGREES").value(); this.targetAngleDegrees = robot.config.variable(groupName, actionName, "targetAngleDEGREES").value(); + + this.lerpDegrees = robot.config.variable(groupName, actionName, "lerpDEGREES").value(); + this.lerpMM_UP = robot.config.variable(groupName, actionName, "lerpMM_UP").value(); + this.lerpMM_DOWN = robot.config.variable(groupName, actionName, "lerpMM_DOWN").value(); + + this.maxVelocityMM = robot.config.variable(groupName, actionName, "maxVelocityMM").value(); + this.minVelocityMM = robot.config.variable(groupName, actionName, "minVelocityMM").value(); + this.minDistanceMM = robot.config.variable(groupName, actionName, "minDistanceMM").value(); String targetPosMM = robot.config.variable(groupName, actionName, "targetPosMM").value(); String[] targetPos = targetPosMM.split("x"); - this.targetX_MM = Double.parseDouble(targetPos[0]); - this.targetY_MM = Double.parseDouble(targetPos[1]); + this.targetPosMM = new Vector2D(Double.parseDouble(targetPos[0]), Double.parseDouble(targetPos[1])); + } - this.targetPosMM = new Vector2D(this.targetX_MM, this.targetY_MM); + @Override + public void start() { + this.robotInitialPosMM = new Vector2D(RedCrabMinibot.localizer.xMM(), RedCrabMinibot.localizer.yMM()); } @Override public void exec() { - Vector2D robotPosMM = new Vector2D(RedCrabMinibot.localizer.xMM(), RedCrabMinibot.localizer.yMM()); - Vector2D direction = targetPosMM.minus(robotPosMM).normalize(); - double distanceMM = robotPosMM.distance(this.targetPosMM); + this.robotPosMM = new Vector2D(RedCrabMinibot.localizer.xMM(), RedCrabMinibot.localizer.yMM()); + this.direction = targetPosMM.minus(robotPosMM).normalize(); + this.distanceFromTargetMM = robotPosMM.distance(this.targetPosMM); + double newAngleDiffDegrees = Utilities.angleDiff(Utilities.facing(robot.imu), targetAngleDegrees); + // FIXME: Test this! + // Ignore new angle diff since it appears to be a numeric sign flip and not a useful value (prevent toggling shortest rotation decision.) + if (!(Math.abs(newAngleDiffDegrees) - Math.abs(this.angleDiffDegrees) <= 2.0 && Math.abs(newAngleDiffDegrees) >= 178.0)) + this.angleDiffDegrees = newAngleDiffDegrees; - if (distanceMM <= minDistanceMM || runTime() >= timeoutMS) { + + boolean rotationGood = Utilities.isBetween( + angleDiffDegrees, + targetAngleDegrees - targetAngleToleranceDegrees, + targetAngleDegrees + targetAngleToleranceDegrees); + + if ((distanceFromTargetMM <= minDistanceMM && rotationGood) || runTime() >= timeoutMS) { if (stopDrivetrain) { robot.frontLeft.setVelocity(0); robot.frontRight.setVelocity(0); @@ -56,12 +86,19 @@ public class MoveToCoordinate extends CyberarmState { } private void drivetrain(Vector2D direction) { + // rotationStrength = Utilities.lerp( + // minVelocityMM, + // maxVelocityMM, + // Range.clip(Math.abs(angleDiffDegrees) / lerpDegrees, 0.0, 1.0)); + rotationStrength = Range.clip(Math.abs(angleDiffDegrees) / lerpDegrees, 0.0, 1.0); + if (angleDiffDegrees < 0) + rotationStrength *= -1; + // https://gm0.org/en/latest/docs/software/tutorials/mecanum-drive.html#field-centric double y = direction.x(); // robot forward is in the X axis double x = direction.y(); // robot side to side is on the Y axis - // FIXME: Dynamically set rotation as needed to achieve target heading using shortest rotation - double rx = 0;//engine.gamepad1.right_stick_x; + double rx = 0; // -rotationStrength; //engine.gamepad1.right_stick_x; double botHeading = robot.imu.getRobotYawPitchRollAngles().getYaw(AngleUnit.RADIANS); @@ -80,20 +117,7 @@ public class MoveToCoordinate extends CyberarmState { double frontRightPower = (rotY - rotX - rx) / denominator; double backRightPower = (rotY + rotX - rx) / denominator; - double maxVelocity = Utilities.unitToTicks( - RedCrabMinibot.DRIVETRAIN_MOTOR_TICKS_PER_REVOLUTION, - RedCrabMinibot.DRIVETRAIN_GEAR_RATIO, - RedCrabMinibot.DRIVETRAIN_WHEEL_DIAMETER_MM, - DistanceUnit.MM, - RedCrabMinibot.DRIVETRAIN_VELOCITY_MAX_MM); - double slowVelocity = Utilities.unitToTicks( - RedCrabMinibot.DRIVETRAIN_MOTOR_TICKS_PER_REVOLUTION, - RedCrabMinibot.DRIVETRAIN_GEAR_RATIO, - RedCrabMinibot.DRIVETRAIN_WHEEL_DIAMETER_MM, - DistanceUnit.MM, - RedCrabMinibot.DRIVETRAIN_VELOCITY_SLOW_MM); - // FIXME: Lerp up/down when starting move and getting close to target - double velocity = slowVelocity; //robotSlowMode ? slowVelocity : maxVelocity; + velocity = lerpVelocity(); robot.frontLeft.setVelocity(frontLeftPower * velocity); robot.backLeft.setVelocity(backLeftPower * velocity); @@ -101,14 +125,40 @@ public class MoveToCoordinate extends CyberarmState { robot.backRight.setVelocity(backRightPower * velocity); } + private double lerpVelocity() { + double distanceFromInitialPosMM = robotInitialPosMM.distance(robotPosMM); + double lerpVelocity; + + // Ease power up + if (distanceFromInitialPosMM < lerpMM_UP) { + lerpVelocity = Utilities.lerp( + minVelocityMM, + maxVelocityMM, + Range.clip( + distanceFromInitialPosMM / lerpMM_UP, 0.0, 1.0)); + // Cruising power + } else if (distanceFromTargetMM > lerpMM_DOWN) { + lerpVelocity = maxVelocityMM; + // Ease power down + } else { + lerpVelocity = Utilities.lerp( + minVelocityMM, + maxVelocityMM, + Range.clip( + distanceFromTargetMM / lerpMM_DOWN, 0.0, 1.0)); + } + + return lerpVelocity; + } + @Override public void telemetry() { - Vector2D robotPosMM = new Vector2D(RedCrabMinibot.localizer.xMM(), RedCrabMinibot.localizer.yMM()); - Vector2D direction = targetPosMM.minus(robotPosMM).normalize(); - engine.telemetry.addData("Current Position MM", "X: %.2f Y: %.2f", robotPosMM.x(), robotPosMM.y()); engine.telemetry.addData("Target Position MM", "X: %.2f Y: %.2f", targetPosMM.x(), targetPosMM.y()); - engine.telemetry.addData("Move NORMAL", "X: %.2f Y: %.2f", direction.x(), direction.y()); - engine.telemetry.addData("Distance MM", "%.2fmm", robotPosMM.distance(targetPosMM)); + engine.telemetry.addData("Move NORMAL", "X: %.2f Y: %.2f R: %.2f", direction.x(), direction.y(), rotationStrength); + engine.telemetry.addData("Distance MM", "%.2fmm", distanceFromTargetMM); + engine.telemetry.addData("Angle Diff DEGREES", "%.2f degrees", angleDiffDegrees); +// engine.telemetry.addData("Velocity", "%.2f T/s", velocity); +// engine.telemetry.addData("LERP DOWN", "%.2f (%.2fmm)", distanceFromTargetMM / lerpMM_DOWN, distanceFromTargetMM); } } diff --git a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/Pilot.java b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/Pilot.java index 252af20..265f4e7 100644 --- a/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/Pilot.java +++ b/TeamCode/src/main/java/dev/cyberarm/minibots/red_crab/states/Pilot.java @@ -130,11 +130,6 @@ public class Pilot extends CyberarmState { } } - @Override - public void telemetry() { - robot.standardTelemetry(); - } - private void drivetrain() { // https://gm0.org/en/latest/docs/software/tutorials/mecanum-drive.html#field-centric