top of page

Prospettiva degli sviluppatori: la nuova funzione LiDAR per iOS

In Photogram siamo costantemente alla ricerca di innovazioni e novità nel campo del rilievo digitale. Il nostro obiettivo è quello di rendere queste tecnologie facili da usare e più accessibili, e da qualche tempo la nostra piattaforma trasforma qualsiasi smartphone in grado di fare video e foto di buona qualità in uno strumento di rilievo affidabile. I sensori LiDAR dei nuovi iPhone PRO aprono nuove possibilità per rendere il rilievo con lo smartphone ancora più efficiente e preciso. Qui viene descritto come utilizziamo questo nuovo hardware per creare nuvole di punti.


Attualmente, nel nostro software utilizziamo principalmente la fotogrammetria. Con questa tecnologia, è possibile creare nuvole di punti di un oggetto o di una posizione target da foto e/o video con una precisione impressionante. Sebbene questa tecnologia sia molto flessibile e fornisca buoni risultati, la conversione dei dati video e fotografici in nuvole di punti richiede molto tempo. Inoltre, è possibile valutare solo a posteriori se i dati grezzi sono sufficienti per ottenere un risultato soddisfacente.


Oltre alla fotogrammetria, gli scanner laser vengono utilizzati anche per creare nuvole di punti. I laser scanner funzionano secondo il principio del "tempo di volo" (tof). Il dispositivo emette un fascio di luce e misura il tempo impiegato dal fascio per essere riflesso dall'oggetto bersaglio. La metà di questo tempo, moltiplicata per la distanza percorsa dalla luce in questo lasso di tempo, fornisce la distanza dell'oggetto target. I laser scanner, noti anche come LiDAR (light detection and ranging o light imaging, detection and ranging), emettono migliaia di questi raggi laser al secondo e ottengono diverse migliaia di punti di misura in un tempo molto breve. Da tutti questi punti di misura si possono generare nuvole di punti.


Uno dei maggiori vantaggi di questa tecnologia è che le distanze dagli oggetti vengono scalate correttamente. Non è quindi necessaria una successiva conversione alle dimensioni corrette, con conseguente risparmio di potenza di calcolo e quindi di tempo. Anche l'orientamento della nuvola di punti è chiaro grazie all'IMU integrato nel dispositivo. Ciò significa che la nuvola di punti è sempre posizionata correttamente nella stanza. Gli scanner laser classici sono costituiti da un laser e da un'unità di ricezione che vengono indirizzati verso uno specchio rotante. L'intera unità ruota attorno all'asse Z in modo che il laser possa scansionare l'intero ambiente. Questi dispositivi forniscono risultati molto precisi, ma sono ingombranti per gli utenti occasionali. Un nuovo sviluppo nella tecnologia LiDAR riguarda i sistemi che non richiedono grandi componenti meccanici e sono quindi estremamente compatti. Questi scanner laser utilizzano la tecnologia MEMS (Micro-Electro-Mechanical Systems) per integrare specchi mobili di dimensioni microscopiche su schede di circuito. Questa tecnologia consente di dirigere il raggio laser con precisione in tutte le direzioni senza dover ricorrere a un grande specchio meccanico rotante. Questi LiDAR avanzati sono noti come LiDAR a stato solido, poiché non contengono più componenti meccanici convenzionali.


Dal 2020, Apple ha integrato un LiDAR a stato solido in tutti i modelli PRO dei suoi iPhone e iPad. Questo LiDAR viene utilizzato principalmente per migliorare le funzioni AR. Con iOS14, l'API ARKit è stata resa disponibile anche agli sviluppatori. Questo ci ha dato l'opportunità di integrare questo nuovo hardware nel nostro software e di utilizzarlo per le misurazioni. La nostra "funzione LiDAR" utilizza le informazioni di profondità dello scanner LiDAR dell'iPhone o dell'iPad per generare nuvole di punti. La posizione esatta e la rotazione nello spazio sono fornite da ARKit con l'IMU integrata, che consente di calcolare le coordinate 3D nello spazio relativo. Inoltre, ARKit fornisce un "valore di confidenza" per ogni punto, che indica l'affidabilità dei punti catturati. Indica la certezza di ARKit di aver determinato correttamente la posizione e l'orientamento dei punti rilevati. I dati grezzi del sensore LiDAR non hanno ancora valori di colore. Pertanto, quando si utilizza la nostra "funzione LiDAR", vengono scattate fino a 30 foto al secondo con la fotocamera integrata per aggiungere informazioni sul colore a ciascun punto della nuvola di punti. Sulla base di tutte queste informazioni, il nostro algoritmo cerca di calcolare i migliori punti disponibili, che vengono poi salvati come nuvola di punti. Questo processo viene ripetuto fino a 30 volte al secondo.


La nostra applicazione è basata sulla tecnologia web, che offre molti vantaggi, ad esempio la possibilità di sviluppare l'applicazione una sola volta e di utilizzarla su piattaforme diverse come web, iOS e Android. Tuttavia, ci sono anche alcuni svantaggi, come la mancanza di accesso alle API native come ARKit, che rende difficile l'accesso al LiDAR. La potenza di calcolo di un'applicazione web è limitata e funzioni come la visualizzazione 3D dal vivo con mappatura in tempo reale sono difficili da implementare con API per GPU web come WebGL.


Per risolvere questo problema, abbiamo sviluppato l'intera funzionalità LiDAR in Swift per iOS. Per evitare di dover ricreare l'intera applicazione, abbiamo sviluppato un plugin nativo per la nostra web app. Abbiamo posizionato un controller di visualizzazione nativo sopra il controller di visualizzazione web per creare una transizione senza soluzione di continuità per l'utente tra l'applicazione web e il plugin nativo. La comunicazione tra il plugin e l'applicazione web avviene tramite un ponte basato sul testo. Negli esempi di codice allegati, è evidente che il codice web è scritto in TypeScript, mentre il codice nativo è scritto in Swift. Il codice è suddiviso in tre cartelle: "PluginWebBridge", "PluginCoreNative" e "WebIntegration". "PluginWebBridge" e "PluginCoreNative" formano il plugin. Il codice in "PluginWebBridge" informa l'applicazione web su come comunicare con il plugin, mentre "PluginCoreNative" contiene il codice per il plugin nativo. La cartella "WebIntegration" contiene il codice della webapp, utilizzata per controllare il plugin LiDAR e trasferire la nuvola di punti.


Per risolvere questo problema, abbiamo sviluppato l'intera funzionalità LiDAR in Swift per iOS. Per evitare di dover ricreare l'intera applicazione, abbiamo sviluppato un plugin nativo per la nostra web app. Abbiamo posizionato un controller di visualizzazione nativo sopra il controller di visualizzazione web per creare una transizione senza soluzione di continuità per l'utente tra l'applicazione web e il plugin nativo. La comunicazione tra il plugin e l'applicazione web avviene tramite un ponte basato sul testo. Negli esempi di codice allegati, è evidente che il codice web è scritto in TypeScript, mentre il codice nativo è scritto in Swift. Il codice è suddiviso in tre cartelle: "PluginWebBridge", "PluginCoreNative" e "WebIntegration". "PluginWebBridge" e "PluginCoreNative" formano il plugin. Il codice in "PluginWebBridge" informa l'applicazione web su come comunicare con il plugin, mentre "PluginCoreNative" contiene il codice per il plugin nativo. La cartella "WebIntegration" contiene il codice della webapp, utilizzata per controllare il plugin LiDAR e trasferire la nuvola di punti. L'applicazione web ha bisogno di queste informazioni per avviare l'upload sul nostro server con la funzione useLidarUpload in useLidarUplaod.ts. Tuttavia, l'upload vero e proprio viene eseguito dal plugin nativo stesso, poiché il ponte non dispone di una larghezza di banda sufficiente per trasferire la nuvola di punti dal plugin nativo all'applicazione web. Il codice di caricamento si trova nel file NFSClient.swift.


I sensori LiDAR sono attualmente utilizzati solo da Apple. Pertanto, questa funzione è disponibile solo nella versione PRO dell'iPhone 12 (o più recente) e dell'iPad 11 (o più recente).

1 visualizzazione0 commenti

Σχόλια


bottom of page