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
-
-
-
-
-
-
-
-
-
-
-
- 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");
});
}