From ceffd68e851ba64a2410f008d9ecffd5cf7f57be Mon Sep 17 00:00:00 2001 From: Banks Troutman Date: Sun, 8 Dec 2019 22:57:30 -0500 Subject: [PATCH] Add speed limit to UI Updates --- .../chameleonvision/vision/VisionProcess.java | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java index c99e5af0b..af1c163f5 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -51,6 +51,8 @@ public class VisionProcess { private NetworkTableEntry ntValidEntry; private ObjectMapper objectMapper = new ObjectMapper(); + private long lastUIUpdateMs = 0; + VisionProcess(USBCameraCapture cameraCapture, String name, List loadedPipelineSettings) { this.cameraCapture = cameraCapture; @@ -144,22 +146,34 @@ public class VisionProcess { } private void updateUI(CVPipelineResult data) { - if(cameraCapture.getProperties().name.equals(ConfigManager.settings.currentCamera)) { - HashMap WebSend = new HashMap<>(); - HashMap point = new HashMap<>(); - HashMap calculated = new HashMap<>(); - List center = new ArrayList<>(); - if (data.hasTarget) { - if(data instanceof CVPipeline2d.CVPipeline2dResult) { - CVPipeline2d.CVPipeline2dResult result = (CVPipeline2d.CVPipeline2dResult) data; - CVPipeline2d.Target2d bestTarget = result.targets.get(0); - center.add(bestTarget.rawPoint.center.x); - center.add(bestTarget.rawPoint.center.y); - calculated.put("pitch", bestTarget.pitch); - calculated.put("yaw", bestTarget.yaw); - calculated.put("area", bestTarget.area); - } else if (data instanceof CVPipeline3d.CVPipeline3dResult) { - // TODO: (2.1) 3d stuff in UI + // 30 "FPS" update rate + long currentMillis = System.currentTimeMillis(); + if (currentMillis - lastUIUpdateMs > 1000/30) { + lastUIUpdateMs = currentMillis; + + if(cameraCapture.getProperties().name.equals(ConfigManager.settings.currentCamera)) { + HashMap WebSend = new HashMap<>(); + HashMap point = new HashMap<>(); + HashMap calculated = new HashMap<>(); + List center = new ArrayList<>(); + if (data.hasTarget) { + if(data instanceof CVPipeline2d.CVPipeline2dResult) { + CVPipeline2d.CVPipeline2dResult result = (CVPipeline2d.CVPipeline2dResult) data; + CVPipeline2d.Target2d bestTarget = result.targets.get(0); + center.add(bestTarget.rawPoint.center.x); + center.add(bestTarget.rawPoint.center.y); + calculated.put("pitch", bestTarget.pitch); + calculated.put("yaw", bestTarget.yaw); + calculated.put("area", bestTarget.area); + } else if (data instanceof CVPipeline3d.CVPipeline3dResult) { + // TODO: (2.1) 3d stuff in UI + } else { + center.add(null); + center.add(null); + calculated.put("pitch", null); + calculated.put("yaw", null); + calculated.put("area", null); + } } else { center.add(null); center.add(null); @@ -167,18 +181,12 @@ public class VisionProcess { calculated.put("yaw", null); calculated.put("area", null); } - } else { - center.add(null); - center.add(null); - calculated.put("pitch", null); - calculated.put("yaw", null); - calculated.put("area", null); + point.put("fps", visionRunnable.fps); + point.put("calculated", calculated); + point.put("rawPoint", center); + WebSend.put("point", point); + SocketHandler.broadcastMessage(WebSend); } - point.put("fps", visionRunnable.fps); - point.put("calculated", calculated); - point.put("rawPoint", center); - WebSend.put("point", point); - SocketHandler.broadcastMessage(WebSend); } }