diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml index 5d990481a..7106dd857 100644 --- a/Main/chameleon-vision.iml +++ b/Main/chameleon-vision.iml @@ -33,7 +33,7 @@ - + diff --git a/Main/pom.xml b/Main/pom.xml index 456b1a8bf..87c75c8f6 100644 --- a/Main/pom.xml +++ b/Main/pom.xml @@ -75,7 +75,7 @@ org.slf4j - slf4j-simple + slf4j-nop 1.7.26 diff --git a/Main/src/main/java/com/chameleonvision/vision/CalibrationMode.java b/Main/src/main/java/com/chameleonvision/vision/CalibrationMode.java new file mode 100644 index 000000000..64de036ed --- /dev/null +++ b/Main/src/main/java/com/chameleonvision/vision/CalibrationMode.java @@ -0,0 +1,5 @@ +package com.chameleonvision.vision; + +public enum CalibrationMode { + None,Single,Dual +} diff --git a/Main/src/main/java/com/chameleonvision/vision/Pipeline.java b/Main/src/main/java/com/chameleonvision/vision/Pipeline.java index 2490a45af..4d0bf96db 100644 --- a/Main/src/main/java/com/chameleonvision/vision/Pipeline.java +++ b/Main/src/main/java/com/chameleonvision/vision/Pipeline.java @@ -22,6 +22,7 @@ public class Pipeline { public TargetIntersection targetIntersection = TargetIntersection.Up; public double m = 1; public double b = 0; - public boolean isCalibrated = false; + public List point = Arrays.asList(0,0); + public CalibrationMode calibrationMode = CalibrationMode.None; public String nickname; } diff --git a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java index f1293a591..eac1772b9 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -1,6 +1,7 @@ package com.chameleonvision.vision.process; import com.chameleonvision.settings.SettingsManager; +import com.chameleonvision.vision.CalibrationMode; import com.chameleonvision.vision.Orientation; import com.chameleonvision.vision.Pipeline; import com.chameleonvision.vision.camera.Camera; @@ -162,15 +163,24 @@ public class VisionProcess implements Runnable { groupedContours = cvProcess.groupTargets(deSpeckledContours, currentPipeline.targetIntersection, currentPipeline.targetGroup); if (groupedContours.size() > 0) { var finalRect = cvProcess.sortTargetsToOne(groupedContours, currentPipeline.sortMode); - // System.out.printf("Largest Contour Area: %.2f\n", finalRect.size.area()); pipelineResult.RawPoint = finalRect; pipelineResult.IsValid = true; - if (!currentPipeline.isCalibrated) { - pipelineResult.CalibratedX = camera.getCamVals().CenterX; - pipelineResult.CalibratedY = camera.getCamVals().CenterY; - } else { - pipelineResult.CalibratedX = (finalRect.center.y - currentPipeline.b) / currentPipeline.m; - pipelineResult.CalibratedY = (finalRect.center.x * currentPipeline.m) + currentPipeline.b; + switch (currentPipeline.calibrationMode){ + case None: + ///use the center of the camera to find the pitch and yaw difference + pipelineResult.CalibratedX = camera.getCamVals().CenterX; + pipelineResult.CalibratedY = camera.getCamVals().CenterY; + break; + case Single: + // use the static point as a calibration method instead of the center + pipelineResult.CalibratedX = currentPipeline.point.get(0).doubleValue(); + pipelineResult.CalibratedY = currentPipeline.point.get(1).doubleValue(); + break; + case Dual: + // use the calculated line to find the difference in length between the point and the line + pipelineResult.CalibratedX = (finalRect.center.y - currentPipeline.b) / currentPipeline.m; + pipelineResult.CalibratedY = (finalRect.center.x * currentPipeline.m) + currentPipeline.b; + break; } pipelineResult.Pitch = camera.getCamVals().CalculatePitch(finalRect.center.y, pipelineResult.CalibratedY); pipelineResult.Yaw = camera.getCamVals().CalculateYaw(finalRect.center.x, pipelineResult.CalibratedX); diff --git a/Main/src/main/java/com/chameleonvision/web/Server.java b/Main/src/main/java/com/chameleonvision/web/Server.java index aab69bf47..56ee93ef2 100644 --- a/Main/src/main/java/com/chameleonvision/web/Server.java +++ b/Main/src/main/java/com/chameleonvision/web/Server.java @@ -11,6 +11,7 @@ public class Server { handler = new ServerHandler(); Javalin app = Javalin.create(); + app.config.addStaticFiles("web"); app.ws("/websocket", ws -> { ws.onConnect(ctx -> { diff --git a/chameleon-client/package-lock.json b/chameleon-client/package-lock.json index 2beadcea2..963d66adc 100644 --- a/chameleon-client/package-lock.json +++ b/chameleon-client/package-lock.json @@ -13493,7 +13493,8 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -13502,7 +13503,8 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -13605,7 +13607,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -13615,6 +13618,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -13640,6 +13644,7 @@ "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -13656,6 +13661,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -13728,7 +13734,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -13738,6 +13745,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -13843,6 +13851,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/chameleon-client/src/views/CameraViewes/OutputTab.vue b/chameleon-client/src/views/CameraViewes/OutputTab.vue index 9a983acfd..e3a113486 100644 --- a/chameleon-client/src/views/CameraViewes/OutputTab.vue +++ b/chameleon-client/src/views/CameraViewes/OutputTab.vue @@ -5,7 +5,7 @@ @input="handleInput('sortMode',value.sortMode)"/> Calibrate: - @@ -41,8 +41,10 @@ import SingleCalibration from "./OutputViewes/SingleCalibration"; get(){ switch (this.value.calibrationMode) { case 0: - return "SingleCalibration"; + return ""; case 1: + return "SingleCalibration"; + case 2: return "DualCalibration" } return "" diff --git a/chameleon-client/src/views/CameraViewes/OutputViewes/DualCalibration.vue b/chameleon-client/src/views/CameraViewes/OutputViewes/DualCalibration.vue index 44e70bcac..6fcbd8dcd 100644 --- a/chameleon-client/src/views/CameraViewes/OutputViewes/DualCalibration.vue +++ b/chameleon-client/src/views/CameraViewes/OutputViewes/DualCalibration.vue @@ -49,7 +49,6 @@ sendSlope(m, b, valid) { this.handleInput('m', m); this.handleInput('b', b); - this.handleInput('isCalibrated', valid); }, clearSlope() { this.sendSlope(1, 0, false); diff --git a/chameleon-client/src/views/CameraViewes/OutputViewes/SingleCalibration.vue b/chameleon-client/src/views/CameraViewes/OutputViewes/SingleCalibration.vue index 06adde264..77ab8eafe 100644 --- a/chameleon-client/src/views/CameraViewes/OutputViewes/SingleCalibration.vue +++ b/chameleon-client/src/views/CameraViewes/OutputViewes/SingleCalibration.vue @@ -14,12 +14,13 @@