diff --git a/README.md b/README.md index b40b591..91f268a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # ExoMy CUNO — Software +`CUNO` steht für `Celestian Unified Navigation and Observation`. + ExoMy Mars-Rover auf Basis eines Raspberry Pi mit ROS1 Melodic, betrieben vollständig in einem Docker-Container. --- diff --git a/gui/admin.html b/gui/admin.html index 5011fea..1e7d6a9 100644 --- a/gui/admin.html +++ b/gui/admin.html @@ -33,7 +33,7 @@ - CUNO ADMIN + CUNO ADMIN
System Control
@@ -806,7 +806,9 @@ roverMapState.lastFixAt = null; roverMapState.gpsStatusText = 'Offline'; roverMapState.satellites = '--'; + roverMapState.trackPoints = []; updateMapTelemetryPanel(); + updateRoverMapVisibility(); setDriveEstimatorState('offline', 'state_inactive'); setText('drive_estimator_speed', '--'); @@ -1389,6 +1391,32 @@ renderWaypointList(); } + function updateRoverMapVisibility() { + var fallback = document.getElementById('rover_map_fallback'); + if (fallback) { + var showFallback = !roverMapState.hasFix || typeof roverMapState.roverLat !== 'number' || typeof roverMapState.roverLon !== 'number'; + fallback.textContent = showFallback + ? 'Keine GPS-Position verfügbar. Auf der Karte wird erst etwas angezeigt, wenn ein gültiger Fix vorliegt.' + : 'Kartenbibliothek nicht geladen. GPS-Daten sind trotzdem unten sichtbar.'; + fallback.hidden = !showFallback; + fallback.classList.toggle('map-hidden', !showFallback); + } + + if (!roverMapState.mapReady) return; + + var hasVisiblePosition = roverMapState.hasFix && typeof roverMapState.roverLat === 'number' && typeof roverMapState.roverLon === 'number'; + if (roverMapState.roverMarker) { + roverMapState.roverMarker.setStyle({opacity: hasVisiblePosition ? 1 : 0, fillOpacity: hasVisiblePosition ? 1 : 0}); + } + if (roverMapState.roverAccuracyCircle) { + roverMapState.roverAccuracyCircle.setStyle({opacity: hasVisiblePosition ? 0.7 : 0, fillOpacity: hasVisiblePosition ? 0.1 : 0}); + roverMapState.roverAccuracyCircle.setRadius(hasVisiblePosition ? (roverMapState.accuracyMeters || 0) : 0); + } + if (roverMapState.roverTrackLine) { + roverMapState.roverTrackLine.setLatLngs(hasVisiblePosition ? roverMapState.trackPoints : []); + } + } + function getWaypointInsertIndexFromRouteClick(latlng) { if (!roverMapState.waypoints.length) return 0; @@ -1685,6 +1713,7 @@ applyWaypointPlanningState(); renderWaypointMarkers(); updateMapTelemetryPanel(); + updateRoverMapVisibility(); } function updateRoverPositionOnMap() { @@ -1704,6 +1733,7 @@ roverMapState.trackPoints.push(latlng); if (roverMapState.trackPoints.length > 60) roverMapState.trackPoints.shift(); roverMapState.roverTrackLine.setLatLngs(roverMapState.trackPoints); + updateRoverMapVisibility(); if (!roverMapState.hasCenteredOnFix) { roverMapState.map.setView(latlng, 17); @@ -1731,7 +1761,9 @@ roverMapState.roverLon = null; roverMapState.roverAlt = null; roverMapState.accuracyMeters = null; + roverMapState.trackPoints = []; updateMapTelemetryPanel(); + updateRoverMapVisibility(); renderPlannedRoute(); return; } diff --git a/gui/index.html b/gui/index.html index df7cae1..1d55031 100644 --- a/gui/index.html +++ b/gui/index.html @@ -31,7 +31,7 @@ - EXOMY GROUND CTRL + CUNO GROUND CTRL
Mission Ops
@@ -167,53 +167,6 @@ Eingabe Joystick - -
Telemetrie
- -
- CPU -
- -- -
-
- Temp -
- -- -
-
- RAM -
- -- -
- -
Netzwerk
- -
- - WLAN - -- -
-
- - IP - -- -
-
- - Uptime - -- -
-
- - Disk - -- -
-
- - Spannung - -- -
- @@ -736,17 +689,7 @@ function updateControlAvailability() { } function clearSystemStatusDisplay() { - setText("stat-wifi", "--"); - setText("stat-ips", "--"); updateUndervoltageDisplay("--"); - setText("stat-uptime", "--"); - setText("stat-disk", "--"); - setText("val-cpu", "--"); - setText("val-temp", "--"); - setText("val-mem", "--"); - document.getElementById("bar-cpu").style.width = "0%"; - document.getElementById("bar-mem").style.width = "0%"; - document.getElementById("bar-temp").style.width = "0%"; } function clearRosLiveDisplay() { @@ -921,17 +864,7 @@ function updateServiceState(payload) { var services = payload.services || {}; var cameraServiceState = String(services.camera || ""); var cameraSettingsVersion = Number(services.camera_settings_version || 0); - setText("stat-wifi", system.wifi || "unbekannt"); - setText("stat-ips", system.ips || "unbekannt"); updateUndervoltageDisplay(system.undervoltage || "unbekannt", system.undervoltage_state || "unknown"); - setText("stat-uptime", system.uptime || "unbekannt"); - setText("stat-disk", system.disk_free || "unbekannt"); - setText("val-cpu", system.cpu_usage || "--"); - setText("val-temp", system.cpu_temperature || "--"); - setText("val-mem", system.memory_usage || "--"); - document.getElementById("bar-cpu").style.width = percentTextToWidth(system.cpu_usage); - document.getElementById("bar-mem").style.width = percentTextToWidth(system.memory_usage); - document.getElementById("bar-temp").style.width = temperatureTextToWidth(system.cpu_temperature); if (cameraServiceState === "active" && lastCameraServiceState && lastCameraServiceState !== "active") { setText("cam-state", "Verbinde..."); triggerCameraRecovery(); @@ -958,7 +891,6 @@ function fetchSystemStatus() { updateServiceState(payload); }).catch(function () { markApiConnection(false); - setText("stat-wifi", "nicht erreichbar"); }); }