kleinigkeiten
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
# ExoMy CUNO — Software
|
# 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.
|
ExoMy Mars-Rover auf Basis eines Raspberry Pi mit ROS1 Melodic, betrieben vollständig in einem Docker-Container.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+33
-1
@@ -33,7 +33,7 @@
|
|||||||
<path d="M12 12C13.5 9.2 17.8 8.2 21 10" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
<path d="M12 12C13.5 9.2 17.8 8.2 21 10" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
<path d="M29 7.5C31.8 6.2 35.6 7.1 37.6 9.7" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
<path d="M29 7.5C31.8 6.2 35.6 7.1 37.6 9.7" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span class="hdr-title">CUNO <em>ADMIN</em></span>
|
<span class="hdr-title" title="CUNO = Celestian Unified Navigation and Observation">CUNO <em>ADMIN</em></span>
|
||||||
<div class="hdr-div"></div>
|
<div class="hdr-div"></div>
|
||||||
<div class="hdr-badge">System Control</div>
|
<div class="hdr-badge">System Control</div>
|
||||||
<div class="hdr-gap"></div>
|
<div class="hdr-gap"></div>
|
||||||
@@ -806,7 +806,9 @@
|
|||||||
roverMapState.lastFixAt = null;
|
roverMapState.lastFixAt = null;
|
||||||
roverMapState.gpsStatusText = 'Offline';
|
roverMapState.gpsStatusText = 'Offline';
|
||||||
roverMapState.satellites = '--';
|
roverMapState.satellites = '--';
|
||||||
|
roverMapState.trackPoints = [];
|
||||||
updateMapTelemetryPanel();
|
updateMapTelemetryPanel();
|
||||||
|
updateRoverMapVisibility();
|
||||||
|
|
||||||
setDriveEstimatorState('offline', 'state_inactive');
|
setDriveEstimatorState('offline', 'state_inactive');
|
||||||
setText('drive_estimator_speed', '--');
|
setText('drive_estimator_speed', '--');
|
||||||
@@ -1389,6 +1391,32 @@
|
|||||||
renderWaypointList();
|
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) {
|
function getWaypointInsertIndexFromRouteClick(latlng) {
|
||||||
if (!roverMapState.waypoints.length) return 0;
|
if (!roverMapState.waypoints.length) return 0;
|
||||||
|
|
||||||
@@ -1685,6 +1713,7 @@
|
|||||||
applyWaypointPlanningState();
|
applyWaypointPlanningState();
|
||||||
renderWaypointMarkers();
|
renderWaypointMarkers();
|
||||||
updateMapTelemetryPanel();
|
updateMapTelemetryPanel();
|
||||||
|
updateRoverMapVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRoverPositionOnMap() {
|
function updateRoverPositionOnMap() {
|
||||||
@@ -1704,6 +1733,7 @@
|
|||||||
roverMapState.trackPoints.push(latlng);
|
roverMapState.trackPoints.push(latlng);
|
||||||
if (roverMapState.trackPoints.length > 60) roverMapState.trackPoints.shift();
|
if (roverMapState.trackPoints.length > 60) roverMapState.trackPoints.shift();
|
||||||
roverMapState.roverTrackLine.setLatLngs(roverMapState.trackPoints);
|
roverMapState.roverTrackLine.setLatLngs(roverMapState.trackPoints);
|
||||||
|
updateRoverMapVisibility();
|
||||||
|
|
||||||
if (!roverMapState.hasCenteredOnFix) {
|
if (!roverMapState.hasCenteredOnFix) {
|
||||||
roverMapState.map.setView(latlng, 17);
|
roverMapState.map.setView(latlng, 17);
|
||||||
@@ -1731,7 +1761,9 @@
|
|||||||
roverMapState.roverLon = null;
|
roverMapState.roverLon = null;
|
||||||
roverMapState.roverAlt = null;
|
roverMapState.roverAlt = null;
|
||||||
roverMapState.accuracyMeters = null;
|
roverMapState.accuracyMeters = null;
|
||||||
|
roverMapState.trackPoints = [];
|
||||||
updateMapTelemetryPanel();
|
updateMapTelemetryPanel();
|
||||||
|
updateRoverMapVisibility();
|
||||||
renderPlannedRoute();
|
renderPlannedRoute();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-69
@@ -31,7 +31,7 @@
|
|||||||
<path d="M29 7.5C31.8 6.2 35.6 7.1 37.6 9.7" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
<path d="M29 7.5C31.8 6.2 35.6 7.1 37.6 9.7" stroke="#1B120F" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<span class="hdr-title">EXO<em>MY</em> GROUND CTRL</span>
|
<span class="hdr-title" title="CUNO = Celestian Unified Navigation and Observation">CU<em>NO</em> GROUND CTRL</span>
|
||||||
<div class="hdr-div"></div>
|
<div class="hdr-div"></div>
|
||||||
<div class="hdr-badge">Mission Ops</div>
|
<div class="hdr-badge">Mission Ops</div>
|
||||||
<div class="hdr-gap"></div>
|
<div class="hdr-gap"></div>
|
||||||
@@ -167,53 +167,6 @@
|
|||||||
<span class="sr-key">Eingabe</span>
|
<span class="sr-key">Eingabe</span>
|
||||||
<span class="sr-val b" id="stat-input">Joystick</span>
|
<span class="sr-val b" id="stat-input">Joystick</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ss-hdr"><div class="ss-hdr-line"></div><span class="ss-hdr-txt">Telemetrie</span><div class="ss-hdr-line"></div></div>
|
|
||||||
|
|
||||||
<div class="sr sr-gauge gauge-cpu">
|
|
||||||
<span class="sr-key">CPU</span>
|
|
||||||
<div class="gauge"><div class="gauge-fill" id="bar-cpu"></div></div>
|
|
||||||
<span class="gauge-num" id="val-cpu">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr sr-gauge gauge-temp">
|
|
||||||
<span class="sr-key">Temp</span>
|
|
||||||
<div class="gauge"><div class="gauge-fill" id="bar-temp"></div></div>
|
|
||||||
<span class="gauge-num" id="val-temp">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr sr-gauge gauge-mem">
|
|
||||||
<span class="sr-key">RAM</span>
|
|
||||||
<div class="gauge"><div class="gauge-fill" id="bar-mem"></div></div>
|
|
||||||
<span class="gauge-num" id="val-mem">--</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="ss-hdr"><div class="ss-hdr-line"></div><span class="ss-hdr-txt">Netzwerk</span><div class="ss-hdr-line"></div></div>
|
|
||||||
|
|
||||||
<div class="sr">
|
|
||||||
<span class="sr-led led-ok"></span>
|
|
||||||
<span class="sr-key">WLAN</span>
|
|
||||||
<span class="sr-val b" id="stat-wifi">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr">
|
|
||||||
<span class="sr-led led-blue"></span>
|
|
||||||
<span class="sr-key">IP</span>
|
|
||||||
<span class="sr-val b" id="stat-ips">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr">
|
|
||||||
<span class="sr-led led-blue"></span>
|
|
||||||
<span class="sr-key">Uptime</span>
|
|
||||||
<span class="sr-val b" id="stat-uptime">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr">
|
|
||||||
<span class="sr-led led-blue"></span>
|
|
||||||
<span class="sr-key">Disk</span>
|
|
||||||
<span class="sr-val b" id="stat-disk">--</span>
|
|
||||||
</div>
|
|
||||||
<div class="sr">
|
|
||||||
<span class="sr-led led-off"></span>
|
|
||||||
<span class="sr-key">Spannung</span>
|
|
||||||
<span class="sr-val b" id="stat-undervoltage">--</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -736,17 +689,7 @@ function updateControlAvailability() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function clearSystemStatusDisplay() {
|
function clearSystemStatusDisplay() {
|
||||||
setText("stat-wifi", "--");
|
|
||||||
setText("stat-ips", "--");
|
|
||||||
updateUndervoltageDisplay("--");
|
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() {
|
function clearRosLiveDisplay() {
|
||||||
@@ -921,17 +864,7 @@ function updateServiceState(payload) {
|
|||||||
var services = payload.services || {};
|
var services = payload.services || {};
|
||||||
var cameraServiceState = String(services.camera || "");
|
var cameraServiceState = String(services.camera || "");
|
||||||
var cameraSettingsVersion = Number(services.camera_settings_version || 0);
|
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");
|
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") {
|
if (cameraServiceState === "active" && lastCameraServiceState && lastCameraServiceState !== "active") {
|
||||||
setText("cam-state", "Verbinde...");
|
setText("cam-state", "Verbinde...");
|
||||||
triggerCameraRecovery();
|
triggerCameraRecovery();
|
||||||
@@ -958,7 +891,6 @@ function fetchSystemStatus() {
|
|||||||
updateServiceState(payload);
|
updateServiceState(payload);
|
||||||
}).catch(function () {
|
}).catch(function () {
|
||||||
markApiConnection(false);
|
markApiConnection(false);
|
||||||
setText("stat-wifi", "nicht erreichbar");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user