From 07dee473ab3bb64ac0d99b33e650d8aeba973f1d Mon Sep 17 00:00:00 2001 From: chk <79915315+ChKendel@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:51:12 +0200 Subject: [PATCH] Callibration --- doc/Callibration_ROADMAP.md | 123 ++++++++++++++++ docker-compose.yaml | 43 +++--- public/calibration.html | 273 ++++++++++++++++++++++++++++++++++++ public/index.html | 15 +- 4 files changed, 425 insertions(+), 29 deletions(-) create mode 100644 doc/Callibration_ROADMAP.md create mode 100644 public/calibration.html diff --git a/doc/Callibration_ROADMAP.md b/doc/Callibration_ROADMAP.md new file mode 100644 index 0000000..685b8f0 --- /dev/null +++ b/doc/Callibration_ROADMAP.md @@ -0,0 +1,123 @@ +# Calibration Roadmap – appRobotHoming + +> Stand: 2026-06-10 +> Ziel: Vor dem Homing muss das System einmalig (oder nach mechanischen Änderungen) kalibriert werden. + +--- + +## Übersicht der Kalibrierungsschritte + +``` +[1] Camera NPZ → [2] Board → [3] Robot X-Axis → [4] Arm1 / Arm2 +``` + +Jede Stufe baut auf der vorherigen auf. Die Ergebnisse werden als Dateien gespeichert und vom Homing-Prozess geladen. + +--- + +## [1] Camera NPZ – Kamerakalibrierung + +**Ziel:** Intrinsische Kameraparameter (Brennweite, Verzerrungskoeffizienten, Kameramatrix) für jede Kamera ermitteln und als `.npz`-Datei speichern. + +**Vorgehen (noch offen):** +- Schachbrettmuster / ChArUco-Board aus verschiedenen Winkeln fotografieren +- OpenCV `calibrateCamera()` ausführen +- Ergebnis speichern: `cam0_calib.npz`, `cam1_calib.npz`, `cam2_calib.npz` + +**Aktionen auf der Seite (geplant):** +- Fotos aufnehmen (mehrere Posen) +- Kalibrierung berechnen +- `.npz`-Datei herunterladen / auf Server speichern +- Reprojektionsfehler anzeigen + +**Offene Fragen:** +- Welches Muster wird verwendet (Schachbrett vs. ChArUco)? +- Automatische Erfassung oder manueller Upload der Bilder? + +--- + +## [2] Board – Referenz-Board-Kalibrierung + +**Ziel:** Die extrinsische Position des Marker-Boards im Kamera-Koordinatensystem bestimmen. + +**Vorgehen (noch offen):** +- Board in definierter Position aufstellen +- Foto aufnehmen, Marker erkennen (`aruco.detectMarkers`) +- `solvePnP` → Rotations- und Translationsvektor berechnen +- Transformation Board → Kamera speichern + +**Aktionen auf der Seite (geplant):** +- Kamerabild anzeigen mit erkannten Markern +- Pose berechnen und anzeigen +- Kalibrierungsdatei speichern + +**Offene Fragen:** +- Feste Board-Position oder Referenzpunkte einmessen? + +--- + +## [3] Robot X-Axis – Achsenrichtung kalibrieren + +**Ziel:** Die X-Achse des Roboters im Weltkoordinatensystem verorten (Ausrichtung und Nullpunkt). + +**Vorgehen (noch offen):** +- Roboter an bekannte X-Positionen fahren (z. B. X=0 und X=max) +- Kamera beobachtet den Endeffektor / Marker am Roboter +- Achsvektor aus zwei Messpunkten berechnen +- Ergebnis speichern + +**Aktionen auf der Seite (geplant):** +- Roboter zu Referenzposition 1 fahren → Foto → Marker-Position merken +- Roboter zu Referenzposition 2 fahren → Foto → Marker-Position merken +- Achsvektor berechnen und anzeigen +- Speichern + +**Offene Fragen:** +- Wie viele Referenzpunkte werden benötigt? +- Wird die Z-Achse separat kalibriert? + +--- + +## [4] Arm1 / Arm2 – Gelenk-Kalibrierung + +**Ziel:** Nullposition und Kinematikparameter von Arm1 und Arm2 einmessen. + +**Vorgehen (noch offen):** +- Arm in mechanische Nullposition fahren (physischer Anschlag oder Markierung) +- Kamera prüft die tatsächliche Arm-Pose +- Offset zwischen Soll und Ist berechnen und speichern + +**Aktionen auf der Seite (geplant):** +- Arm1 auf Nullposition → Foto → Winkel ablesen +- Arm2 auf Nullposition → Foto → Winkel ablesen +- Offset-Korrektur berechnen und speichern + +**Offene Fragen:** +- Separater Marker pro Armgelenk? +- Kalibrierung bei jedem Start oder nur nach Umbau? + +--- + +## Dateistruktur (geplant) + +``` +calibration/ + cam0_calib.npz + cam1_calib.npz + cam2_calib.npz + board_pose.json + robot_xaxis.json + arm_offsets.json +``` + +--- + +## Status + +| Schritt | Status | Anmerkung | +|------------------|--------------|----------------------------------| +| Camera NPZ | offen | Konzept unklar | +| Board | offen | Konzept unklar | +| Robot X-Axis | offen | Konzept unklar | +| Arm1 / Arm2 | offen | Konzept unklar | +| Calibration-UI | in Arbeit | HTML-Seite angelegt | diff --git a/docker-compose.yaml b/docker-compose.yaml index 104428c..2aab620 100755 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,23 +1,20 @@ -services: - appRobotHoming: - image: node:20-bullseye - container_name: appRobot_Homing - working_dir: /app - volumes: - - /home/chk/Documents/appRobotHoming:/app - environment: - - WSS_VIDEO_DRIVER=wss://localhost:8448 - - WSS_URL=wss://appRobot_Driver:2095 - - HTTPS_PORT=2093 - - WEBCAM_URL=http://appRobotWebcam:8444 - - BODYTRACKER_URL=http://appRobotBodyTracker:8446 - ports: - - "2093:2093" - depends_on: - - appRobotDriver - command: > - /bin/bash -lc "npm ci || npm install && node server/server.js" - networks: - - default - restart: unless-stopped - \ No newline at end of file +services: + appRobotHoming: + image: node:20-bullseye + container_name: appRobot_Homing + working_dir: /app + volumes: + - /home/chk/Documents/appRobotHoming:/app + environment: + - HTTPS_PORT=2093 + # host.docker.internal zeigt auf den Docker-Host → erreicht andere Stacks per Port + - WEBCAM_URL=http://host.docker.internal:8444 + - BODYTRACKER_URL=http://host.docker.internal:8446 + extra_hosts: + # Macht host.docker.internal auf Linux verfügbar (Standard auf macOS/Windows) + - "host.docker.internal:host-gateway" + ports: + - "2093:2093" + command: > + /bin/bash -lc "npm ci || npm install && node server/server.js" + restart: unless-stopped diff --git a/public/calibration.html b/public/calibration.html new file mode 100644 index 0000000..e8cfa2a --- /dev/null +++ b/public/calibration.html @@ -0,0 +1,273 @@ + + +
+ + +.npz-Datei speichern.solvePnP).