From 45513cf714ff8c5a5d15709a09530f6fb8b47aad Mon Sep 17 00:00:00 2001 From: chk <79915315+ChKendel@users.noreply.github.com> Date: Wed, 10 Jun 2026 16:54:36 +0200 Subject: [PATCH] CSV anzeigen --- public/boardViewer.html | 6 +- public/calibration.js | 135 ++++++++++++++++++++++++++++++ public/calibration_board.html | 7 ++ scripts/3b_corner_marker_poses.py | 6 +- 4 files changed, 149 insertions(+), 5 deletions(-) diff --git a/public/boardViewer.html b/public/boardViewer.html index 882841f..37b5d2e 100644 --- a/public/boardViewer.html +++ b/public/boardViewer.html @@ -105,7 +105,7 @@ table.dtbl tr:hover td { background: #1a1f2b; } .row-1cam td:first-child::before { content: ''; } .cell-hi { color: #fbbf24; } /* amber: trianguliert */ - .cell-lo { color: #fde68a; } /* hell: nur 2D */ + .cell-lo { color: #dde3ec; } /* hell: nur 2D */ .cell-unk { color: #3b82f6; } /* blau: fremd */ .cell-mut { color: var(--muted); } @@ -124,7 +124,7 @@
Noch kein Board-Run vorhanden.
'; + return; + } + const meas = data.measuredMarkers; + if (!meas?.markers?.length) { + wrap.innerHTML = `Run: ${data.runDir} – kein 3b-Output (≥2 Kameras erforderlich).
`; + return; + } + + // Modell-Info aus robot.json + const boardMarkers = data.robot?.links?.Board?.markers ?? []; + const modelMap = {}; + for (const m of boardMarkers) modelMap[m.id] = m; + + const f1 = v => (v == null ? '–' : Number(v).toFixed(1)); + const f2 = v => (v == null ? '–' : Number(v).toFixed(2)); + const f4 = v => (v == null ? '–' : Number(v).toFixed(4)); + + const markers = [...meas.markers].sort((a, b) => { + if (a.link !== b.link) return a.link === 'Board' ? -1 : 1; + return a.marker_id - b.marker_id; + }); + + let html = `+ Run: ${data.runDir} · ${markers.length} Marker trianguliert +
+| ID | +Set | +Link | +Kam. | +x mm | +y mm | +z mm | +nx | +ny | +nz | +dist mm | +Δz mm | +Kante mm | +
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ${m.marker_id} | +${set} | +${m.link} | +${m.num_cameras} | +${f1(px)} | +${f1(py)} | +${f1(pz)} | +${f4(mnx)} | +${f4(mny)} | +${f4(mnz)} | +${dist} | +${dz} | +${f1(m.edge_length_mm)} | +
KAMERAS
+| ID | +x mm | +y mm | +z mm | +dir_x | +dir_y | +dir_z | +
|---|---|---|---|---|---|---|
| ${c.camera_id} | +${f1(cx)} | +${f1(cy)} | +${f1(cz)} | +${f4(dx)} | +${f4(dy)} | +${f4(dz)} | +
Fehler: ${err}
`; + } +} + // ── Board ───────────────────────────────────────────────────────────────────── function initBoard() { @@ -233,6 +363,9 @@ function initBoard() { logBoard.scrollTop = logBoard.scrollHeight; } + // Tabelle beim ersten Öffnen des Tabs befüllen + loadBoardTable(); + document.getElementById('btn-board-run').addEventListener('click', async () => { logB('Board-Erkennung wird gestartet …'); const btn = document.getElementById('btn-board-run'); @@ -257,6 +390,8 @@ function initBoard() { if (frame?.contentWindow) { frame.contentWindow.postMessage({ type: 'reload' }, '*'); } + // Marker-Tabelle aktualisieren + loadBoardTable(); } } else { logB(`❌ Beendet mit Exit-Code ${evt.exitCode}`); diff --git a/public/calibration_board.html b/public/calibration_board.html index 0cfe583..9b41060 100644 --- a/public/calibration_board.html +++ b/public/calibration_board.html @@ -38,4 +38,11 @@ >(Erscheint nach einem Board-Run mit ≥2 Kameras)
+