La possibilità di ricostruire ambienti 3D in tempo reale non è più prerogativa di sistemi LiDAR professionali o piattaforme robotiche costose. Un progetto recente basato su componenti a basso costo dimostra come una mappatura 3D di una stanza possa essere realizzata con hardware consumer, sfruttando un microcontrollore, un sensore di distanza basato sulla tecnologia Time-of-Flight (ToF), che misura lo spazio calcolando il tempo impiegato dalla luce a tornare al sensore, e un’unità inerziale, cioè un modulo composto da accelerometri e giroscopi che rileva movimento, velocità e orientamento.
L’idea si inserisce in un percorso tecnologico iniziato con i primi scanner strutturati e le telecamere RGB-D come Kinect, fino all’attuale diffusione di sensori compatti multi-zona. Il sensore ST VL53L5CX, ad esempio, integra una una matrice 8×8 composta da valori di profondità misurati (distanza di ciascun punto rilevato rispetto al sensore) e consente rilevazioni fino a circa 4 metri, una capacità che apre la strada a soluzioni di mapping indoor economiche e facilmente replicabili.
La disponibilità di microcontrollori con connettività WiFi come ESP32 ha ulteriormente accelerato lo sviluppo di queste applicazioni, rendendo possibile la trasmissione dei dati e la loro elaborazione su sistemi esterni in tempo reale.
Architettura hardware e componenti del sistema
Al centro del progetto sviluppato da Henrique Ferrolho, vi è il microcontrollore ESP32, scelto per la presenza di connettività wireless integrata e capacità di elaborazione sufficienti per la gestione di sensori multipli e flussi dati in tempo reale.
Il dispositivo si interfaccia con il già citato sensore VL53L5CX, un modulo capace di acquisire simultaneamente 64 misure di distanza organizzate in una griglia 8×8, con un range operativo compreso tra pochi centimetri e circa 4 metri. A differenza dei sensori ToF a singolo punto, questa configurazione consente di ricostruire una rappresentazione tridimensionale della scena, composta da punti distinti e non continui, utilizzando una sola acquisizione di dati (cioè una singola lettura o scansione).
Alla componente di distanza si affianca un sensore inerziale, tipicamente un modulo IMU (unità di misura inerziale) come il BNO085, che fornisce dati di orientamento nello spazio tramite accelerometro, giroscopio e magnetometro. L’integrazione di queste due sorgenti di dati consente di associare a ogni punto rilevato una direzione nello spazio, trasformando le distanze misurate in coordinate tridimensionali coerenti.
Acquisizione e fusione dei dati in tempo reale
Come spiegato nel video dimostrativo su YouTube, il sistema acquisisce continuamente i 64 valori di distanza forniti dal sensore ToF e li associa all’orientamento corrente rilevato dall’IMU.
Ogni cella della matrice 8×8 rappresenta un raggio di misura con un determinato angolo di emissione. Conoscendo la posizione angolare del dispositivo, è possibile trasformare queste misure in coordinate cartesiane tramite semplici trasformazioni trigonometriche.
Il microcontrollore aggrega i dati e li invia via rete in formato JSON verso un computer host, dove un software di visualizzazione ricostruisce la nuvola di punti 3D. La pipeline include filtri per la riduzione del rumore e tecniche per rilevare superfici planari quali pareti e pavimenti.

Principi di funzionamento del sensore Time-of-Flight multi-zona
Il sensore Time-of-Flight opera emettendo impulsi luminosi e misurando il tempo necessario affinché il segnale rifletta sugli oggetti e ritorni al ricevitore.
Nel caso del VL53L5CX, l’array di 64 zone produce una mappa di profondità bidimensionale, assimilabile a una versione a bassa risoluzione delle depth camera. Il dispositivo non si limita a calcolare la distanza minima, ma analizza il profilo temporale del segnale di ritorno, consentendo una maggiore robustezza in presenza di superfici multiple o riflettività variabile.
L’architettura permette di ottenere una rappresentazione della scena che, sebbene meno dettagliata rispetto a un LiDAR rotante, è sufficiente per applicazioni di navigazione indoor, rilevamento ostacoli e modellazione ambientale di base.
Costruzione della mappa tridimensionale
La costruzione della mappa avviene accumulando nel tempo le letture successive del sensore mentre il dispositivo viene orientato manualmente o montato su una piattaforma mobile. Ogni nuova misura è trasformata nello stesso sistema di riferimento globale grazie ai dati dell’IMU. Il risultato è una nuvola di punti incrementale che descrive la geometria della stanza.
Il sistema non utilizza algoritmi SLAM completi (Simultaneous Localization and Mapping, cioè localizzazione e mappatura simultanee), ma si basa sullo stesso concetto fondamentale: combinare misurazioni di profondità e dati di orientamento per ricostruire l’ambiente circostante.
Nelle applicazioni più evolute, una configurazione di questo tipo può essere ampliata introducendo tecniche utili a correggere gli errori accumulati nel tempo, filtri di Kalman estesi (metodi statistici per stimare lo stato del sistema in presenza di rumore) o approcci di ottimizzazione che contribuiscono a migliorare la precisione e la coerenza della ricostruzione.
Come replicare il progetto
La replica del sistema richiede una piattaforma hardware essenziale e una catena software relativamente semplice da configurare.
La base è una scheda di sviluppo con ESP32 collegata tramite bus I²C a due moduli: il sensore di distanza VL53L5CX e l’unità inerziale BNO085. Entrambi condividono le linee SDA e SCL (tipicamente GPIO 21 e GPIO 22), mentre il sensore ToF utilizza anche un pin di controllo LPn per la gestione dello stato di alimentazione. L’alimentazione avviene a 3,3 V per tutti i componenti, condizione indispensabile per evitare problemi di compatibilità logica.
Il firmware per il microcontrollore si compila utilizzando l’ambiente Arduino CLI, installando le librerie ufficiali SparkFun dedicate al VL53L5CX e alla IMU Cortex-based.
Una volta caricato il codice, l’ESP32 inizia a trasmettere su porta seriale un flusso JSON contenente 64 misurazioni di distanza espresse in millimetri, i relativi codici di stato e i dati di orientamento calcolati dalla IMU. La velocità di trasmissione standard è impostata a 115200 baud, con una frequenza di aggiornamento tipica di circa 15 Hz quando il sensore opera nella modalità 8×8.
Il lato di visualizzazione è implementato in Python tramite un viewer che utilizza un server locale accessibile da browser (tutto il necessario è pubblicato su GitHub). Dopo aver installato le dipendenze e avviato il modulo con il parametro della porta seriale corretta, il sistema ricostruisce in tempo reale la nuvola di punti, proiettando nello spazio i raggi di misura del sensore e ruotando la scena in base all’orientamento fornito dalla IMU.
Per ottenere una mappa tridimensionale completa è sufficiente muovere lentamente il dispositivo nello spazio, consentendo al software di accumulare le letture successive.
Prospettive di evoluzione e integrazione
L’approccio descritto può essere migliorato aumentando la frequenza di acquisizione, integrando sensori con maggiore risoluzione o combinando la profondità con dati visivi RGB.
L’aggiunta di algoritmi Sensor Fusion avanzati consentirebbe di ottenere mappe più accurate e stabili, avvicinando la soluzione alle piattaforme professionali di mapping indoor.
L’integrazione con librerie open source per la gestione delle nuvole di punti e la navigazione autonoma potrebbe trasformare questo prototipo in una base per robot mobili o sistemi di monitoraggio ambientale.