# appRobotBodyTrack 3D-Body-Tracking für Roboter aus Mehrkamera-ArUco-Bildern. **Input** - Bilder: `render_*.png` - Intrinsics: `render_*.npz` - Konfiguration: `robot.json` **Output** - Gelenke **R⁷** → `{x, y, z, a, b, c, e}` (mm / Grad) --- ## Interfaces Eine Logik, drei Zugänge: - **Python** - **CLI** - **REST (FastAPI)** --- ## Quickstart ### Python ```python from scripts import estimate_from_dir result = estimate_from_dir("data/Scene8", robot_json="robot.json") print(result.joints) print(result.confidence) ``` --- ### CLI ```bash pip install -e . python -m scripts data/Scene8 --robot robot.json python -m scripts data/Scene8 --robot robot.json --cameras a,b,d ``` --- ### REST API ```bash docker compose up ``` **Request:** ```python import requests resp = requests.post( "http://localhost:8446/v1/estimate", files=[ ("images", ("render_a.png", open("render_a.png", "rb"))), ("intrinsics", ("render_a.npz", open("render_a.npz", "rb"))), ], ) print(resp.json()["joints"]) ``` --- ## API | Endpoint | Methode | Zweck | |----------|--------|------| | `/v1/estimate` | POST | Bilder → Gelenke | | `/v1/health` | GET | Status | | `/v1/config` | GET | aktive Konfiguration | **Response:** ```json { "joints": {"x": 50.2, "y": -2.1, "z": 94.8, "a": 20.1}, "confidence": {"x": "high", "b": "low"}, "residual_rms": 1.45, "n_markers": 56, "processing_ms": 1240 } ``` --- ## Struktur ``` . ├── scripts/ ├── config/robot.json ├── tests/ └── docker-compose.yaml ``` --- ## Deployment (Docker / Portainer) **Volume:** ```yaml - /opt/approbot/config/robot.json:/config/robot.json:ro ``` **Healthcheck:** ```bash curl http://:8446/v1/health ``` --- ## Konfiguration Zentrale Datei: **`robot.json`** Verwendete Bereiche: - `links` - `pose_estimation` - `vision_config` - `movements` - `units` --- ## Stack (minimal) - numpy - scipy - opencv (aruco) - fastapi + uvicorn --- ## Naming - **BodyTrack** → Tracking (dynamisch) ✅ - **BodyMap** → Modell / Repräsentation - **BodySense** → Wahrnehmung (low-level)