From 4cd2262acc183d12bc9a377c2659507ef050cebc Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 7 Jul 2020 01:01:58 -0700 Subject: [PATCH] Bootup sprint (#18) * Did some stuff * Fix gradle, start implementing mjpeg frame consumer * Did some stuff * bade changes * rename camera config to USBCameraConfiguration, add name * unrename cameraconfiguration * Add pub/sub framework * Add setResolution to mjpeg frame consumer * add NTDataConsumer * Add some totally broken hsv hacks * Start refactoring UI data * Update index.js * Commit and push, he says * Fix up some errors * Fix input tab * Fix fps * Update index.js * Add pipeline field setting, update PipelineManager, fix nullpointers and USBCameraSettables * Change v-model to point to data() * update hsv to use mutations * Work on saving, fix hsv * Rename shouldErode/shouldDilate to erode and dilate * Hook all the tabs up to the Store * Change handleData to handlePipelineData * camera quirk redo, add ICCSub to SocketHandler * Fix some property names * Fixed tons of naming in UI, fix backend for multi-val PSCs, fix PSC enums * change pipeline type to an int in store * Fix mutation naming * Attempt threshold fix * Update SocketHandler.java * Add truthy data sending * Start adding logging support * [UI] Add delay to slider input boxes (#1) * [UI] [Backend] potentially fix camera settings, various logging tweaks * Don't release raw input mat * add setVideoModeIndex to vision settables * Implement pipeline index in socket handler, add framework for renaming/changing pipes * (ish) get pipeline change working * Create index.html * Cleanups, fix pipeline index bug, fix stream res for MJPG, add dashboard stream (unused) * Refactor UI to use mutatePipeline, send pipeline results * Update NetworkConfig.java * Change double to number * Run spotless * Fix reversal of large/small comparators * Fix left/right * Fix pitch/yaw calculation bug, fix area bug * Use Vue.set instead of assignment This fixes {{ }} * Update App.vue * run spotless * Actually add pipelines and reassign indecies * Delete old pipeline configs Fixes duplication on renaming pipeline * Start working on deleting pipes * Fix camera nickname change * run spotless * Fix some test stuff * Update VisionModuleManagerTest.java * vision source manager test is still broken * Fix VisionSourceManager test * Apply spotless 2 electric boogaloo Co-authored-by: Banks Troutman Co-authored-by: Declan Freeman-Gleason Co-authored-by: Aaryan Agrawal <54345060+13Ducks@users.noreply.github.com> --- .gitignore | 1 + photon-client/src/App.vue | 13 +- .../src/components/common/cv-icon.vue | 1 + .../src/components/common/cv-image.vue | 1 + .../src/components/common/cv-input.vue | 1 + .../src/components/common/cv-number-input.vue | 1 + .../src/components/common/cv-radio.vue | 1 + .../src/components/common/cv-range-slider.vue | 100 +++--- .../src/components/common/cv-select.vue | 1 + .../src/components/common/cv-slider.vue | 88 ++--- .../src/components/common/cv-switch.vue | 1 + .../src/components/pipeline/3D/MiniMap.vue | 2 + .../pipeline/CameraAndPipelineSelect.vue | 14 +- .../pipeline/OutputTab/DualCalibration.vue | 1 + .../pipeline/OutputTab/SingleCalibration.vue | 1 + photon-client/src/main.js | 1 + .../src/mixins/global/dataHandleMixin.js | 29 +- photon-client/src/store/index.js | 164 ++++++--- .../src/store/modules/cameraSettings.js | 14 - .../src/store/modules/generalSettings.js | 10 - .../src/store/modules/networkSettings.js | 17 + photon-client/src/views/PipelineView.vue | 15 +- photon-client/src/views/PipelineViews/3D.vue | 10 +- .../src/views/PipelineViews/ContoursTab.vue | 153 +++++--- .../src/views/PipelineViews/InputTab.vue | 95 +++-- .../src/views/PipelineViews/OutputTab.vue | 90 +++-- .../src/views/PipelineViews/ThresholdTab.vue | 215 ++++++----- photon-server/.gitignore | 4 +- photon-server/build.gradle | 6 +- .../wpi/first/wpilibj/geometry/Pose2d.java | 9 + .../src/main/java/org/photonvision/Main.java | 72 ++++ .../configuration/CameraConfiguration.java | 43 ++- .../common/configuration/ConfigManager.java | 33 +- .../common/configuration/NetworkConfig.java | 13 +- .../configuration/PhotonConfiguration.java | 37 ++ .../dataflow/DataChangeDestination.java | 35 ++ .../common/dataflow/DataChangeService.java | 109 ++++++ .../common/dataflow/DataChangeSource.java | 34 ++ .../common/dataflow/DataChangeSubscriber.java | 56 +++ .../common/dataflow/DataProvider.java | 20 ++ .../IncomingCameraCommandSubscriber.java | 42 +++ .../dataflow/events/DataChangeEvent.java | 54 +++ .../dataflow/events/HTTPRequestEvent.java | 31 ++ .../events/IncomingWebSocketEvent.java | 60 ++++ .../dataflow/events/OutgoingUIEvent.java | 37 ++ .../networktables/NTDataConsumer.java | 50 +++ .../networktables/NetworkTablesManager.java | 97 +++++ .../dataflow/structures/BytePackable.java | 141 ++++++++ .../structures/SimplePipelineResult.java | 110 ++++++ .../structures/SimpleTrackedTarget.java | 97 +++++ .../networktables/NetworkTablesManager.java | 5 +- .../photonvision/common/logging/LogGroup.java | 1 + .../photonvision/common/logging/Logger.java | 31 +- .../common/util/SerializationUtils.java | 46 +++ .../common/util/numbers/DoubleCouple.java | 4 + .../java/org/photonvision/server/Server.java | 44 ++- .../photonvision/server/SocketHandler.java | 262 +++++++++++++- .../server/SocketMessageCommandType.java | 34 ++ .../server/SocketMessageType.java | 54 +++ .../server/UIInboundSubscriber.java | 51 +++ .../server/UIOutboundSubscriber.java | 79 +++++ .../org/photonvision/server/UISettings.java | 26 ++ .../org/photonvision/server/UIUpdateType.java | 23 ++ .../vision/camera/CameraQuirk.java | 25 ++ .../vision/camera/QuirkyCamera.java | 67 +++- .../vision/camera/USBCameraSource.java | 82 +++-- .../vision/frame/FrameStaticProperties.java | 2 +- .../frame/consumer/MJPGFrameConsumer.java | 48 ++- .../frame/provider/USBFrameProvider.java | 12 +- .../vision/opencv/ContourSortMode.java | 6 +- .../pipeline/AdvancedPipelineSettings.java | 2 +- .../vision/pipeline/CVPipeline.java | 6 + .../vision/pipeline/CVPipelineSettings.java | 6 +- .../pipeline/Calibration3dPipeline.java | 3 + .../vision/pipeline/ColoredShapePipeline.java | 5 + .../ColoredShapePipelineSettings.java | 2 +- .../vision/pipeline/DriverModePipeline.java | 1 + .../pipeline/DriverModePipelineSettings.java | 3 + .../vision/pipeline/ReflectivePipeline.java | 17 +- .../vision/pipeline/result/BytePackable.java | 141 ++++++++ .../{ => result}/CVPipelineResult.java | 4 +- .../DriverModePipelineResult.java | 2 +- .../pipeline/result/SimplePipelineResult.java | 109 ++++++ .../pipeline/result/SimpleTrackedTarget.java | 116 ++++++ .../photonvision/vision/processes/Data.java | 10 +- .../vision/processes/PipelineManager.java | 174 ++++++--- .../vision/processes/VisionModule.java | 333 +++++++++++++++++- .../vision/processes/VisionModuleManager.java | 32 +- .../vision/processes/VisionRunner.java | 22 +- .../vision/processes/VisionSource.java | 1 - .../vision/processes/VisionSourceManager.java | 18 +- .../processes/VisionSourceSettables.java | 17 +- .../vision/target/TargetCalculations.java | 6 +- .../vision/target/TrackedTarget.java | 24 ++ .../src/main/resources/web/index.html | 1 + .../photonvision/common/BenchmarkTest.java | 2 +- .../common/configuration/ConfigTest.java | 1 - .../photonvision/vision/QuirkyCameraTest.java | 24 +- .../vision/pipeline/CirclePNPTest.java | 1 + .../pipeline/ColoredShapePipelineTest.java | 1 + .../pipeline/ReflectivePipelineTest.java | 1 + .../vision/pipeline/SolvePNPTest.java | 1 + .../processes/VisionModuleManagerTest.java | 29 +- .../processes/VisionSourceManagerTest.java | 3 +- .../vision/target/TargetCalculationsTest.java | 34 +- .../vision/target/TrackedTargetTest.java | 5 +- 106 files changed, 3666 insertions(+), 623 deletions(-) delete mode 100644 photon-client/src/store/modules/cameraSettings.js delete mode 100644 photon-client/src/store/modules/generalSettings.js create mode 100644 photon-client/src/store/modules/networkSettings.js create mode 100644 photon-server/src/main/java/org/photonvision/Main.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/DataChangeDestination.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/DataChangeService.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/DataChangeSource.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/DataChangeSubscriber.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/DataProvider.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/camera/IncomingCameraCommandSubscriber.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/events/DataChangeEvent.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/events/HTTPRequestEvent.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/events/IncomingWebSocketEvent.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/events/OutgoingUIEvent.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NTDataConsumer.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/structures/BytePackable.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/structures/SimplePipelineResult.java create mode 100644 photon-server/src/main/java/org/photonvision/common/dataflow/structures/SimpleTrackedTarget.java create mode 100644 photon-server/src/main/java/org/photonvision/common/util/SerializationUtils.java create mode 100644 photon-server/src/main/java/org/photonvision/server/SocketMessageCommandType.java create mode 100644 photon-server/src/main/java/org/photonvision/server/SocketMessageType.java create mode 100644 photon-server/src/main/java/org/photonvision/server/UIInboundSubscriber.java create mode 100644 photon-server/src/main/java/org/photonvision/server/UIOutboundSubscriber.java create mode 100644 photon-server/src/main/java/org/photonvision/server/UISettings.java create mode 100644 photon-server/src/main/java/org/photonvision/server/UIUpdateType.java create mode 100644 photon-server/src/main/java/org/photonvision/vision/camera/CameraQuirk.java create mode 100644 photon-server/src/main/java/org/photonvision/vision/pipeline/result/BytePackable.java rename photon-server/src/main/java/org/photonvision/vision/pipeline/{ => result}/CVPipelineResult.java (94%) rename photon-server/src/main/java/org/photonvision/vision/pipeline/{ => result}/DriverModePipelineResult.java (95%) create mode 100644 photon-server/src/main/java/org/photonvision/vision/pipeline/result/SimplePipelineResult.java create mode 100644 photon-server/src/main/java/org/photonvision/vision/pipeline/result/SimpleTrackedTarget.java create mode 100644 photon-server/src/main/resources/web/index.html diff --git a/.gitignore b/.gitignore index 7d75fa68e..5ad0690cc 100644 --- a/.gitignore +++ b/.gitignore @@ -123,3 +123,4 @@ New client/photon-client/* # *.iml photon-server/build photon-server/photon-vision +photon-server/src/main/resources/web diff --git a/photon-client/src/App.vue b/photon-client/src/App.vue index f28559573..4c421cd00 100644 --- a/photon-client/src/App.vue +++ b/photon-client/src/App.vue @@ -118,14 +118,19 @@ }, methods: { handleMessage(key, value) { - if (this.$store.state.hasOwnProperty(key)) { + if (key === "logMessage") { + console.log(value) + this.logMessage(value, 0) + } else if (key === "updatePipelineResult") { + this.$store.commit('mutatePipelineResults', value) + } else if (this.$store.state.hasOwnProperty(key)) { this.$store.commit(key, value); - } else if (this.$store.state.pipeline.hasOwnProperty(key)) { + } else if (this.$store.getters.currentPipelineSettings.hasOwnProperty(key)) { this.$store.commit('mutatePipeline', {'key': key, 'value': value}); } else { switch (key) { default: { - console.log(key + " : " + value); + console.log(value); } } } @@ -141,7 +146,7 @@ } this.timer = setInterval(this.saveSettings, 4000); }, - logMessage({message, level}) { + logMessage(message, level) { const colors = ["\u001b[31m", "\u001b[32m", "\u001b[33m", "\u001b[34m"] const reset = "\u001b[0m" this.log += `${colors[level]}${message}${reset}\n` diff --git a/photon-client/src/components/common/cv-icon.vue b/photon-client/src/components/common/cv-icon.vue index 8c91cacd4..bf48d65fc 100644 --- a/photon-client/src/components/common/cv-icon.vue +++ b/photon-client/src/components/common/cv-icon.vue @@ -23,6 +23,7 @@ \ No newline at end of file diff --git a/photon-client/src/components/common/cv-select.vue b/photon-client/src/components/common/cv-select.vue index da7e9d9ba..20a3a6c45 100644 --- a/photon-client/src/components/common/cv-select.vue +++ b/photon-client/src/components/common/cv-select.vue @@ -27,6 +27,7 @@ \ No newline at end of file diff --git a/photon-client/src/components/common/cv-switch.vue b/photon-client/src/components/common/cv-switch.vue index af49b328c..0128c9abd 100644 --- a/photon-client/src/components/common/cv-switch.vue +++ b/photon-client/src/components/common/cv-switch.vue @@ -23,6 +23,7 @@