Retour
WebGLStreamingCollaborative

3D PLY Labeling Interface

Quand des millions de points deviennent des cartes navigables pour robots

Défi

Gérer des millions de points dans un navigateur. Permettre l'édition multi-utilisateur en temps réel. Livrer un outil que l'équipe veut utiliser au quotidien.

Opportunité

La V1 était une impasse. Charger tout le PLY côté client signifiait des crashs dès qu'on dépassait la taille d'un parking. Un seul éditeur signifiait des conflits et du travail perdu. Quand on a eu besoin d'annoter des villes entières, j'ai tout reconstruit from scratch.

Disciplines

Développement Full StackGraphisme 3DSystèmes Temps RéelArchitecture Backend

Responsabilités

Architecture end-to-end

Serveur de streaming

Interface 3D

Système de collaboration

Stack

Next.jsReactThree.jsReact Three FiberZustandFastAPI

Contexte

Les robots autonomes naviguent grâce à des cartes SLAM : des nuages de points 3D enrichis de métadonnées. Où le robot peut-il s'arrêter ? Quels chemins peut-il emprunter ? Où peut-il circuler librement ? Tout est annoté manuellement.

La première version fonctionnait pour les petits espaces. Mais quand les clients ont demandé des entrepôts et des quartiers entiers, tout s'est effondré. Les onglets du navigateur crashaient. Les éditeurs écrasaient le travail des autres. Il fallait une nouvelle architecture.

Vue aérienne du circuit
Vue aérienne du circuit

Interface 3D

Visualisation et édition de nuages de points avec routes, zones et POIs

Vue complète de la map

Vue complète de la map

Vue aérienne du circuit

Vue aérienne du circuit

Vue rapprochée avec zone

Vue rapprochée avec zone

Détail zone et routes

Détail zone et routes

Démonstration

Fonctionnalités clés en action

Edition de routes

Tracer des voies, définir les directions, délimiter où les robots peuvent circuler

Edition de zones

Définir des zones de circulation libre avec des limites polygonales

Architecture

1

Nuage de points côté serveur

Le PLY complet reste sur le serveur, indexé avec un KD-Tree pour des requêtes spatiales rapides. FastAPI gère à la fois le REST (auth, CRUD) et le WebSocket (streaming, sync). En navigant, seuls les points visibles sont envoyés. La mémoire reste constante quelle que soit la taille totale de la map.

2

Collaboration temps réel

Chaque map est une room WebSocket. Tu modifies quelque chose, tout le monde le voit instantanément. Des indicateurs de présence montrent qui travaille où. Une map de la taille d'une ville qui prenait 2 semaines à une personne se fait maintenant en 4 jours en équipe.

Interface

Rendu style moteur de jeu

Seuls les points visibles existent côté client. La caméra bouge, le serveur stream les nouveaux points, le client supprime les anciens. Mises à jour incrémentales de la géométrie Three.js. Navigation fluide même sur des maps de plusieurs millions de points.

Vue rapprochée avec zone

Trois structures de données

Les POI pour les points d'arrêt. Les routes pour les voies dirigées. Les zones pour la circulation libre. Chacune avec des outils d'édition dédiés.

Détail zone et routes

Panneau d'édition

Configuration détaillée des routes et paramètres de navigation

Éditeur de route

Éditeur de route

Stack technique

1Backend Python

FastAPI + WebSockets. Indexation spatiale KD-Tree. Pool de connexions MySQL asynchrone. Auth JWT avec isolation par room. Le serveur gère 10+ éditeurs simultanés sans broncher.

2Frontend React + Three.js

React Three Fiber pour la 3D. Zustand pour l'état. BufferGeometry dynamique avec mises à jour incrémentales. Navigation WASD. Reconnexion automatique en cas de coupure.

3Traçabilité complète

Chaque modification est loguée : qui, quand, valeurs avant/après. Flux d'activité en temps réel. Historique complet par entité. Quand quelque chose casse, on sait exactement ce qui s'est passé.

Résultats

Scale x10, même performance

La V1 crashait à 500k points. La V2 gère 5M+ sans broncher. Empreinte mémoire constante ~200MB. La limite est maintenant la map elle-même, plus l'outil.

Vélocité d'équipe x3

2 semaines en solo → 4 jours en équipe. Edition parallèle. Sync temps réel. Plus de conflits "qui a sauvegardé en dernier". L'outil s'efface devant le travail.

Utilisé en production au quotidien

Chaque nouveau déploiement client commence ici. Des dizaines de maps annotées. Audit intégré pour la conformité. L'outil que j'aurais aimé avoir quand j'ai commencé.

Résultats

Maps 10x plus grandes, zéro crash
3x plus rapide en édition d'équipe
Sync temps réel < 100ms
Utilisé en production au quotidien

Intéressé par ce projet ?

Contactez-moi pour en discuter ou voir une démo.

Me contacter