diff --git a/photon-client/src/views/PipelineViews/AprilTagTab.vue b/photon-client/src/views/PipelineViews/AprilTagTab.vue index aa842868ba..2fd47b7363 100644 --- a/photon-client/src/views/PipelineViews/AprilTagTab.vue +++ b/photon-client/src/views/PipelineViews/AprilTagTab.vue @@ -1,196 +1,166 @@ diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java index 165bd304f8..0ed76354db 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java @@ -69,28 +69,7 @@ protected void setPipeParamsImpl() { // target model for the draw 3d targets pipeline to work... // for now, hard code tag width based on enum value - double tagWidth; - - // This needs - switch (settings.targetModel) { - case k200mmAprilTag: - { - tagWidth = Units.inchesToMeters(3.25 * 2); - break; - } - case k6in_16h5: - { - tagWidth = Units.inchesToMeters(3 * 2); - break; - } - default: - { - // guess at 200mm?? If it's zero everything breaks, but it should _never_ be zero. Unless - // users select the wrong model... - tagWidth = 0.16; - break; - } - } + double tagWidth = Units.inchesToMeters(3 * 2); // for 6in 16h5 tag. // AprilTagDetectorParams aprilTagDetectionParams = // new AprilTagDetectorParams( diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java index 072faf074c..f476b640f9 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java @@ -24,17 +24,15 @@ @JsonTypeName("AprilTagPipelineSettings") public class AprilTagPipelineSettings extends AdvancedPipelineSettings { - public AprilTagFamily tagFamily = AprilTagFamily.kTag36h11; + public AprilTagFamily tagFamily = AprilTagFamily.kTag16h5; public int decimate = 1; public double blur = 0; - public int threads = 1; + public int threads = 4; // Multiple threads seems to be better performance on most platforms public boolean debug = false; public boolean refineEdges = true; public int numIterations = 200; - - // TODO is this a legit, reasonable default? - public int hammingDist = 1; - public int decisionMargin = 30; + public int hammingDist = 0; + public int decisionMargin = 35; // 3d settings @@ -42,7 +40,9 @@ public AprilTagPipelineSettings() { super(); pipelineType = PipelineType.AprilTag; outputShowMultipleTargets = true; - targetModel = TargetModel.k200mmAprilTag; + targetModel = TargetModel.k6in_16h5; + cameraExposure = 20; + cameraAutoExposure = false; ledMode = false; } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/CVPipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/CVPipelineSettings.java index ac6838d5fa..f8653a03ac 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/CVPipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/CVPipelineSettings.java @@ -40,14 +40,14 @@ public class CVPipelineSettings implements Cloneable { public String pipelineNickname = "New Pipeline"; public boolean cameraAutoExposure = false; // manual exposure only used if cameraAutoExposure if false - public double cameraExposure = 100; + public double cameraExposure = 20; public int cameraBrightness = 50; // Currently only used by a few cameras (notably the zero-copy Pi Camera driver) with the Gain // quirk - public int cameraGain = 50; + public int cameraGain = 75; // Currently only used by the zero-copy Pi Camera driver - public int cameraRedGain = 18; - public int cameraBlueGain = 24; + public int cameraRedGain = 11; + public int cameraBlueGain = 20; public int cameraVideoModeIndex = 0; public FrameDivisor streamingFrameDivisor = FrameDivisor.NONE; public boolean ledMode = false; diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/Calibration3dPipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/Calibration3dPipelineSettings.java index 529aa0c6d7..196c9e7d65 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/Calibration3dPipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/Calibration3dPipelineSettings.java @@ -30,7 +30,7 @@ public class Calibration3dPipelineSettings extends AdvancedPipelineSettings { public Calibration3dPipelineSettings() { super(); - + this.cameraAutoExposure = true; this.inputShouldShow = true; this.outputShouldShow = true; } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipelineSettings.java index e615b39801..7f00089ed5 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipelineSettings.java @@ -45,6 +45,7 @@ public class ColoredShapePipelineSettings extends AdvancedPipelineSettings { public ColoredShapePipelineSettings() { super(); pipelineType = PipelineType.ColoredShape; + cameraExposure = 20; } @Override diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipelineSettings.java index 25911458e8..70beebf7a5 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipelineSettings.java @@ -31,5 +31,6 @@ public DriverModePipelineSettings() { pipelineIndex = PipelineManager.DRIVERMODE_INDEX; pipelineType = PipelineType.DriverMode; inputShouldShow = true; + cameraAutoExposure = true; } } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/ReflectivePipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/ReflectivePipelineSettings.java index 7376f3962a..b06dcaddef 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/ReflectivePipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/ReflectivePipelineSettings.java @@ -27,5 +27,7 @@ public class ReflectivePipelineSettings extends AdvancedPipelineSettings { public ReflectivePipelineSettings() { super(); pipelineType = PipelineType.Reflective; + cameraExposure = 6; + cameraGain = 20; } } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index 98fa1cba98..3a9f2df47c 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -104,14 +104,14 @@ public VisionModule(PipelineManager pipelineManager, VisionSource visionSource, if (cameraQuirks.hasQuirk(CameraQuirk.Gain)) { pipelineManager.userPipelineSettings.forEach( it -> { - if (it.cameraGain == -1) it.cameraGain = 20; // Sane default + if (it.cameraGain == -1) it.cameraGain = 75; // Sane default }); } if (cameraQuirks.hasQuirk(CameraQuirk.AWBGain)) { pipelineManager.userPipelineSettings.forEach( it -> { - if (it.cameraRedGain == -1) it.cameraRedGain = 16; // Sane defaults - if (it.cameraBlueGain == -1) it.cameraBlueGain = 16; + if (it.cameraRedGain == -1) it.cameraRedGain = 11; // Sane defaults + if (it.cameraBlueGain == -1) it.cameraBlueGain = 20; }); } @@ -401,7 +401,7 @@ void setPipeline(int index) { } if (cameraQuirks.hasQuirk(CameraQuirk.Gain)) { // If the gain is disabled for some reason, re-enable it - if (pipelineSettings.cameraGain == -1) pipelineSettings.cameraGain = 20; + if (pipelineSettings.cameraGain == -1) pipelineSettings.cameraGain = 75; visionSource.getSettables().setGain(Math.max(0, pipelineSettings.cameraGain)); } else { pipelineSettings.cameraGain = -1; @@ -409,8 +409,8 @@ void setPipeline(int index) { if (cameraQuirks.hasQuirk(CameraQuirk.AWBGain)) { // If the AWB gains are disabled for some reason, re-enable it - if (pipelineSettings.cameraRedGain == -1) pipelineSettings.cameraRedGain = 16; - if (pipelineSettings.cameraBlueGain == -1) pipelineSettings.cameraBlueGain = 16; + if (pipelineSettings.cameraRedGain == -1) pipelineSettings.cameraRedGain = 11; + if (pipelineSettings.cameraBlueGain == -1) pipelineSettings.cameraBlueGain = 20; visionSource.getSettables().setRedGain(Math.max(0, pipelineSettings.cameraRedGain)); visionSource.getSettables().setBlueGain(Math.max(0, pipelineSettings.cameraBlueGain)); } else { diff --git a/photon-core/src/test/java/org/photonvision/vision/pipeline/AprilTagTest.java b/photon-core/src/test/java/org/photonvision/vision/pipeline/AprilTagTest.java index 9fede51cda..792ca95fbf 100644 --- a/photon-core/src/test/java/org/photonvision/vision/pipeline/AprilTagTest.java +++ b/photon-core/src/test/java/org/photonvision/vision/pipeline/AprilTagTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.photonvision.common.util.TestUtils; +import org.photonvision.vision.apriltag.AprilTagFamily; import org.photonvision.vision.camera.QuirkyCamera; import org.photonvision.vision.frame.provider.FileFrameProvider; import org.photonvision.vision.pipeline.result.CVPipelineResult; @@ -46,6 +47,7 @@ public void testApriltagFacingCamera() { pipeline.getSettings().cornerDetectionAccuracyPercentage = 4; pipeline.getSettings().cornerDetectionUseConvexHulls = true; pipeline.getSettings().targetModel = TargetModel.k200mmAprilTag; + pipeline.getSettings().tagFamily = AprilTagFamily.kTag36h11; var frameProvider = new FileFrameProvider(