# moulin-mapper / pipeline Pipeline SLAM 2D pour cartographie de chambre de moulin via Ping360 + BlueROV. ## Prérequis ```bash pip install numpy scipy # ou dans un venv : python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt ``` ## Lancement complet ```bash cd pipeline/ # 1. Simuler un run complet python3 simulator.py # → data/sim/run_L.jsonl (flux capteurs) # → data/sim/run_L_truth.csv (vérité terrain) # 2. Traiter le flux et exporter python3 process.py # → data/out/trajectory.csv # → data/out/map_2d.csv # → data/out/cloud.ply # Affiche RMS dead-reckoning vs scan-matching # 3. Streaming pipe (simule flux réseau live) python3 stream_replay.py | python3 process.py --stdin # ou acceleré 10x avec timing réel : python3 stream_replay.py --realtime --speed 10 | python3 process.py --stdin ``` ## Fichiers | Fichier | Rôle | |-------------------|------| | `SCHEMA.md` | Contrat de format du flux JSONL | | `room.py` | Géométrie chambre + raycast 2D | | `simulator.py` | Génère données simulées réalistes | | `slam.py` | Dead-reckoning + ICP + fermeture de boucle | | `process.py` | Pipeline streaming complet, exports | | `stream_replay.py`| Rejoue JSONL sur stdout (pipe vers process.py) | ## Brancher le vrai ROV Remplacer la source dans `process.py` par le flux réseau BlueROV : ```python # Exemple : flux TCP depuis ArduSub import socket sock = socket.create_connection(("192.168.x.x", PORT)) run_pipeline(sock.makefile(), truth_path=None, out_dir="data/out") ``` Le format JSONL est défini dans `SCHEMA.md` — le pipeline est identique sur données simulées et réelles.