IMU Norden kann kalibriert werden

This commit is contained in:
2026-05-28 19:52:01 +02:00
parent 948ced194b
commit 9609bb282f
3 changed files with 218 additions and 5 deletions
+12 -2
View File
@@ -323,6 +323,7 @@ var imuOverlayState = {
rollDeg: 0,
pitchDeg: 0,
yawDeg: 0,
yawOffsetDeg: 0,
lastUpdateAt: 0
};
@@ -364,6 +365,10 @@ function normalizeHeadingDeg(value) {
return heading;
}
function applyImuHeadingOffset(yawDeg) {
return normalizeHeadingDeg(Number(yawDeg || 0) + Number(imuOverlayState.yawOffsetDeg || 0));
}
function updateImuOverlaySvg() {
var group = document.getElementById("imu-horizon-group");
var frame = document.getElementById("imu-horizon-frame");
@@ -381,7 +386,7 @@ function updateImuOverlaySvg() {
var rollDeg = Number(imuOverlayState.rollDeg || 0);
var pitchDeg = Number(imuOverlayState.pitchDeg || 0);
var headingDeg = normalizeHeadingDeg(imuOverlayState.yawDeg);
var headingDeg = applyImuHeadingOffset(imuOverlayState.yawDeg);
var pitchOffset = Math.max(-55, Math.min(55, pitchDeg * 2.2));
group.setAttribute("opacity", "1");
@@ -986,8 +991,13 @@ function updateUndervoltageDisplay(text, state) {
function updateServiceState(payload) {
var system = payload.system || {};
var services = payload.services || {};
var imuHeading = payload.imu_heading || {};
var cameraServiceState = String(services.camera || "");
var cameraSettingsVersion = Number(services.camera_settings_version || 0);
if (typeof imuHeading.offset_deg === "number" && !isNaN(imuHeading.offset_deg)) {
imuOverlayState.yawOffsetDeg = Number(imuHeading.offset_deg);
updateImuOverlaySvg();
}
updateUndervoltageDisplay(system.undervoltage || "unbekannt", system.undervoltage_state || "unknown");
if (cameraServiceState === "active" && lastCameraServiceState && lastCameraServiceState !== "active") {
setText("cam-state", "Verbinde...");
@@ -1114,7 +1124,7 @@ function drawImuHorizonOverlay(context, canvasWidth, canvasHeight, size) {
var unit = size / 220;
var rollRad = Number(imuOverlayState.rollDeg || 0) * Math.PI / 180;
var pitchOffsetPx = Math.max(-55, Math.min(55, Number(imuOverlayState.pitchDeg || 0) * 2.2)) * unit;
var headingDeg = normalizeHeadingDeg(imuOverlayState.yawDeg);
var headingDeg = applyImuHeadingOffset(imuOverlayState.yawDeg);
var rollDeg = Number(imuOverlayState.rollDeg || 0);
var pitchDeg = Number(imuOverlayState.pitchDeg || 0);