Sviluppare rapidamente applicazioni per il tempo di volo 3D

Di Stephen Evanczuk

Contributo di Editori nordamericani di DigiKey

L'imaging del tempo di volo (ToF) 3D offre un'alternativa efficiente all'imaging video per un'ampia gamma di applicazioni, tra cui la sicurezza industriale, la navigazione robotizzata, le interfacce a controllo gestuale e molte altre. Questo approccio, tuttavia, richiede un'attenta combinazione di progettazione ottica, circuiti di temporizzazione di precisione e capacità di elaborazione dei segnali che spesso possono mettere in difficoltà gli sviluppatori che desiderano realizzare una piattaforma ToF 3D efficiente.

Questo articolo descriverà le particolarità della tecnologia ToF e mostrerà come due kit ToF 3D di serie - la piattaforma di sviluppo AD-96TOF1-EBZ di Analog Devices e il kit di valutazione EPC660 di ESPROS Photonics - possono aiutare gli sviluppatori a prototipare rapidamente le applicazioni ToF 3D e ad acquisire l'esperienza necessaria per implementare progetti ToF 3D capaci di soddisfare i loro particolari requisiti.

In cosa consiste la tecnologia ToF?

La tecnologia ToF si basa sul noto principio per cui, per trovare la distanza tra un oggetto e un punto sorgente, si misura la differenza tra il tempo di trasmissione dell'energia dalla sorgente e quello in cui la sorgente riceve l'energia riflessa (Figura 1).

Schema dei sistemi ToF che calcolano la distanza tra il sistema e oggetti esterniFigura 1: I sistemi ToF calcolano la distanza tra il sistema e gli oggetti esterni misurando il ritardo tra la trasmissione dell'energia e la ricezione, da parte del sistema, dell'energia riflessa da un oggetto. (Immagine per gentile concessione di Analog Devices)

Sebbene il principio di base rimanga invariato, le soluzioni ToF sono molto diverse tra loro e presentano le capacità e i limiti intrinseci delle tecnologie di base, tra cui ultrasuoni, LiDAR (rilevamento e telemetria mediante luce), telecamere e segnali RF a onde millimetriche (mmWave):

  • Le soluzioni ToF a ultrasuoni offrono una soluzione a basso costo ma con una portata e una risoluzione spaziale degli oggetti limitata
  • Le soluzioni ToF ottiche possono raggiungere una maggiore portata e risoluzione spaziale rispetto ai sistemi a ultrasuoni, ma possono essere compromesse da nebbia o fumo denso
  • Le soluzioni basate sulla tecnologia mmWave sono in genere più complesse e costose, ma possono funzionare con portate notevoli, fornendo informazioni sulla velocità e la direzione dell'oggetto bersaglio nonostante fumo, nebbia o pioggia.

I produttori sfruttano le capacità di ciascuna tecnologia in base alle specifiche esigenze. Ad esempio, i sensori a ultrasuoni sono particolarmente idonei per rilevare gli ostacoli lungo il percorso di movimento dei robot o quando un conducente parcheggia un veicolo. La tecnologia mmWave, invece, fornisce ai veicoli la capacità di rilevamento sulla lunga distanza necessaria per individuare i pericoli in avvicinamento lungo la strada anche quando altri sensori non sono in grado di far fronte a condizioni atmosferiche avverse.

I progetti ToF possono essere costruiti attorno a una singola coppia trasmettitore/ricevitore. Ad esempio, un semplice progetto ToF ottico richiede concettualmente solo un LED per illuminare un'area interessata e un fotodiodo per rilevare i riflessi degli oggetti all'interno di quell'area. Questo progetto apparentemente semplice richiede tuttavia circuiti di temporizzazione e sincronizzazione precisi per misurare il ritardo. Inoltre, potrebbero essere necessari circuiti di modulazione e demodulazione per differenziare i segnali luminosi dalle sorgenti di fondo o per supportare metodi a onda continua più complessi.

La complessità del progetto aumenta rapidamente man mano che gli sviluppatori lavorano per migliorare il rapporto segnale/rumore (SNR) ed eliminare gli artefatti nei sistemi ToF. Ad aggravare la complessità vi è il fatto che le soluzioni di rilevamento più avanzate impiegano più trasmettitori e ricevitori per tracciare più oggetti o supportare algoritmi di tracciamento del movimento più sofisticati. Ad esempio, i sistemi mmWave impiegano spesso più ricevitori per tracciare la direzione e la velocità di più oggetti indipendenti. (Vedere "Uso dei kit radar a onde millimetriche per sviluppare rapidamente progetti di rilevamento preciso di oggetti".)

Sistemi ToF ottici 3D

I sistemi ToF ottici 3D estendono l'idea di impiegare più ricevitori utilizzando sensori di imaging tipicamente basati su una matrice di dispositivi ad accoppiamento di carica (CCD). Quando una serie di lenti punta su una certa area di interesse sulla matrice CCD, ogni dispositivo di immagazzinaggio di carica nella matrice CCD viene caricato dall'illuminazione di ritorno riflessa da un punto corrispondente in quell'area. Sincronizzata con l'illuminazione a onda pulsata o continua, la luce riflessa che raggiunge la matrice CCD viene essenzialmente catturata rispettivamente in una sequenza di finestre o fasi. Questi dati vengono ulteriormente elaborati per creare una mappa di profondità 3D composta da voxel (VOlume piXEL) il cui valore rappresenta la distanza dal punto corrispondente nell'area di interesse.

Come i fotogrammi di un video, le singole mappe di profondità possono essere acquisite in sequenza per fornire misurazioni con una risoluzione temporale limitata solo dalla frequenza dei fotogrammi del sistema di acquisizione delle immagini e con una risoluzione spaziale limitata solo dalla matrice CCD e dal sistema ottico. Con la disponibilità di imager CCD 320x240 più grandi, i sistemi ToF ottici 3D a risoluzione superiore trovano applicazione in segmenti molto diversi, tra cui l'automazione industriale, gli aeromobili a pilotaggio remoto (APR) e persino le interfacce gestuali (Figura 2).

Immagine del ToF ottico 3D, in grado di fornire sistemi di interfaccia gestuale con dati dettagliatiFigura 2: Grazie all'elevata frequenza dei fotogrammi e alla risoluzione spaziale, i ToF ottici 3D possono fornire ai sistemi di interfaccia gestuale dati dettagliati, ad esempio la mano di una persona alzata verso la telecamera ToF, come mostrato qui. (Immagine per gentile concessione di ESPROS Photonics)

A differenza della maggior parte dei metodi basati su telecamere, i sistemi ToF 3D possono fornire risultati accurati nonostante condizioni di ombra o di luce variabili. Forniscono infatti una propria illuminazione, servendosi in genere di laser o LED agli infrarossi ad alta potenza come i LED IR Luxeon di Lumileds che possono operare alle frequenze di commutazione nell'ordine dei megahertz usate in questi sistemi. Al contrario di metodi come le telecamere stereoscopiche, i sistemi ToF 3D offrono una soluzione compatta in grado di fornire informazioni dettagliate sulla distanza.

Soluzioni già pronte

Per implementare i sistemi ToF 3D, tuttavia, gli sviluppatori devono superare diverse sfide di progettazione. Oltre ai circuiti di temporizzazione ricordati in precedenza, questi sistemi dipendono da una pipeline di elaborazione del segnale accuratamente progettata e ottimizzata per leggere rapidamente i risultati della matrice CCD per ogni finestra o misurazione di fase, e quindi completare l'elaborazione necessaria per trasformare i dati grezzi in mappe di profondità. Imager ToF 3D avanzati come EPC660-CSP68-007 di ESPROS Photonics combinano una matrice CCD da 320x240 con tutte le capacità di temporizzazione ed elaborazione del segnale necessarie per eseguire misurazioni ToF 3D e fornire dati sulla distanza a 12 bit per pixel (Figura 3).

Schema di epc660 di ESPROS Photonics (Fare clic per ingrandire)Figura 3: Il kit di valutazione epc660 di ESPROS Photonics integra un imager da 320x240 pixel con un corredo completo di circuiti di temporizzazione e di controller richiesti per convertire i dati grezzi dell'imager in mappe di profondità. (Immagine per gentile concessione di ESPROS Photonics)

Il contenitore del circuito integrato con connettore bordo scheda EPC660-007 di ESPROS Photonics permette di montare l'imager epc650 su una scheda di 37,25x36,00 mm, completa di condensatore di disaccoppiamento e connettore bordo scheda. Sebbene questo contenitore risolva il problema dell'interfaccia hardware di base in un progetto di sistema ToF 3D, agli sviluppatori viene lasciato il compito di completare il progetto ottico appropriato sul front-end e di fornire le risorse di elaborazione sul backend. Il kit di valutazione epc660 di ESPROS Photonics elimina questi compiti fornendo un ambiente di sviluppo di applicazioni ToF 3D completo che include un sistema di imaging ToF 3D già pronto e il relativo software (Figura 4).

Schema del kit di valutazione epc660 di ESPROS Photonics (Fare clic per ingrandire)Figura 4: Il kit di valutazione epc660 di ESPROS Photonics fornisce un sistema di telecamere ToF 3D già pronto e il relativo software per utilizzare le informazioni di profondità nelle applicazioni. (Immagine per gentile concessione di ESPROS Photonics)

Progettato per accelerare i tempi di valutazione e prototipazione, il kit ESPROS fornisce un sistema di telecamere preassemblato che combina un contenitore CC epc660, un gruppo di lenti ottiche e un set di otto LED. Oltre al sistema di telecamere, una scheda processore BeagleBone Black con 512 MB di RAM e 4 GB di flash serve da controller host e risorsa di elaborazione delle applicazioni.

ESPROS fornisce anche il software di supporto del kit di valutazione epc660 scaricabile dal suo sito Web e aperto con una password che può essere richiesta all'ufficio vendite locale dell'azienda. Dopo aver ottenuto l'accesso al software, gli sviluppatori eseguono semplicemente un'applicazione di interfaccia grafica utente (GUI) con uno dei diversi file di configurazione forniti per iniziare a far funzionare il sistema di telecamere. L'applicazione GUI fornisce anche finestre di controllo e visualizzazione per l'impostazione di parametri aggiuntivi, tra cui le configurazioni dei filtri spaziali e temporali e infine per la visualizzazione dei risultati. Con pochissimo sforzo gli sviluppatori possono utilizzare il kit per iniziare ad acquisire le mappe della profondità in tempo reale e servirsene come input per il proprio software applicativo.

Sistemi ToF 3D a risoluzione potenziata

Un imager 320x240 come epc660 di ESPROS può prestarsi per molte applicazioni, ma potrebbe non avere la risoluzione necessaria per rilevare piccoli movimenti nelle interfacce gestuali o per distinguere piccoli oggetti senza restringere fortemente il campo di interesse. Per queste applicazioni, la disponibilità di kit di sviluppo pronti per l'uso basati su sensori ToF di 640x480 consente agli sviluppatori di prototipare rapidamente applicazioni ad alta risoluzione.

La telecamera di profondità DepthEye Turbo di Seeed Technology integra un sensore ToF da 640x480, quattro diodi VCSEL (laser a cavità verticale a emissione superficiale) a 850 nm, circuito operativo di rilevamento e illuminazione, alimentazione e supporto di interfaccia USB in un contenitore autonomo di 57x57x51 mm. Il supporto software viene fornito tramite un repository github libPointCloud SDK open-source con supporto per piattaforme Linux, Windows, Mac OS e Android.

Oltre ai driver C++, alle librerie e al codice di esempio, la distribuzione libPointCloud SDK include un'API Python per la prototipazione rapida e uno strumento di visualizzazione. Dopo aver installato il pacchetto di distribuzione sulla piattaforma di sviluppo host, è possibile collegare la telecamera tramite USB al computer e iniziare subito a utilizzare lo strumento di visualizzazione per vedere le mappe di fase, ampiezza o le nuvole di punti, che sono essenzialmente mappe di profondità migliorate rese con superfici a texture per fornire un'immagine 3D più fluida (Figura 5).

Immagine del software della telecamera di profondità DepthEye Turbo di Seeed TechnologyFigura 5: Il pacchetto software che accompagna la telecamera di profondità DepthEye Turbo di Seeed Technology permette agli sviluppatori di visualizzare facilmente i dati ToF 3D con diversi rendering, fra cui le nuvole di punti come mostrato qui nel riquadro principale della finestra. (Immagine per gentile concessione di Seeed Technology/PointCloud.AI)

Il kit di valutazione ToF 3D AD-96TOF1-EBZ di Analog Devices offre un progetto hardware più aperto, realizzato con una coppia di schede e studiato per usare Raspberry Pi 3 Model B+ o Raspberry Pi 4 di Raspberry Pi come controller host e risorsa di elaborazione locale (Figura 6).

Immagine del kit di valutazione ToF 3D AD-96TOF1-EBZ di Analog DevicesFigura 6: Il kit di valutazione ToF 3D AD-96TOF1-EBZ di Analog Devices combina una coppia di schede per l'illuminazione e l'acquisizione dei dati con una scheda Raspberry Pi per l'elaborazione locale. (Immagine per gentile concessione di Analog Devices)

La scheda front-end analogico (AFE) del kit contiene il gruppo ottico, la matrice CCD e i buffer, lo storage del firmware e un processore che gestisce il funzionamento generale della telecamera, inclusa la temporizzazione dell'illuminazione, la sincronizzazione dei sensori e la generazione di mappe di profondità. La seconda scheda contiene quattro diodi laser VCSEL a 850 nm e i relativi driver ed è progettata per essere collegata alla scheda AFE così che i diodi circondino il gruppo ottico come mostrato nella figura sopra.

Analog Devices supporta il kit AD-96TOF1-EBZ con la sua suite software ToF 3D open-source che comprende l'SDK ToF 3D, il codice di esempio e wrapper per C/C++, Python e Matlab. Per supportare sia le applicazioni host che le interazioni hardware di basso livello in un ambiente di rete, Analog Devices divide l'SDK in una partizione host ottimizzata per la connettività USB e di rete e in una partizione di basso livello in esecuzione su Linux Embedded, basata su un driver Video4Linux2 (V4L2) (Figura 7).

Schema dell'API SDK ToF 3D di Analog DevicesFigura 7: L'API SDK ToF 3D di Analog Devices supporta applicazioni in esecuzione nell'host Linux Embedded locale e applicazioni in esecuzione negli host di rete. (Immagine per gentile concessione di Analog Devices)

Questo SDK abilitato per la rete consente alle applicazioni in esecuzione su host collegati in rete di lavorare in remoto con un sistema hardware ToF per accedere alla telecamera e acquisire dati di profondità. I programmi utente possono essere eseguiti anche nella partizione Linux Embedded e sfruttare appieno le opzioni avanzate disponibili a quel livello.

Come parte della distribuzione software, Analog Devices fornisce un codice di esempio che dimostra le principali capacità operative di basso livello come l'inizializzazione della telecamera, l'acquisizione di fotogrammi di base, l'accesso remoto e l'acquisizione trans-piattaforma su un computer host e localmente con Linux Embedded. Ulteriori applicazioni di esempio si basano su queste operazioni di base per illustrare l'uso dei dati acquisiti in applicazioni di livello superiore come la generazione di nuvole di punti. Un'applicazione di esempio infatti dimostra come utilizzare un modello di inferenza di rete neurale profonda (DNN) per classificare i dati generati dal sistema di telecamere. Scritta in Python, questa applicazione di esempio DNN (dnn.py) mostra ogni fase del processo necessaria per acquisire i dati e prepararne la classificazione secondo il modello di inferenza (Listato 1).

Copy
import aditofpython as tof
import numpy as np
import cv2 as cv
. . .
    try:
        net = cv.dnn.readNetFromCaffe(args.prototxt, args.weights)
    except:
        print("Error: Please give the correct location of the prototxt and caffemodel")
        sys.exit(1)
    swapRB = False
    classNames = {0: 'background',
                  1: 'aeroplane', 2: 'bicycle', 3: 'bird', 4: 'boat',
                  5: 'bottle', 6: 'bus', 7: 'car', 8: 'cat', 9: 'chair',
                  10: 'cow', 11: 'diningtable', 12: 'dog', 13: 'horse',
                  14: 'motorbike', 15: 'person', 16: 'pottedplant',
                  17: 'sheep', 18: 'sofa', 19: 'train', 20: 'tvmonitor'}
 
    system = tof.System()
    status = system.initialize()
    if not status:
        print("system.initialize() failed with status: ", status)
 
    cameras = []
    status = system.getCameraList(cameras)
. . .
    while True:
        # Capture frame-by-frame
        status = cameras[0].requestFrame(frame)
        if not status:
            print("cameras[0].requestFrame() failed with status: ", status)
 
        depth_map = np.array(frame.getData(tof.FrameDataType.Depth), dtype="uint16", copy=False)
        ir_map = np.array(frame.getData(tof.FrameDataType.IR), dtype="uint16", copy=False)
 
        # Creation of the IR image
        ir_map = ir_map[0: int(ir_map.shape[0] / 2), :]
        ir_map = np.float32(ir_map)
        distance_scale_ir = 255.0 / camera_range
        ir_map = distance_scale_ir * ir_map
        ir_map = np.uint8(ir_map)
        ir_map = cv.cvtColor(ir_map, cv.COLOR_GRAY2RGB)
 
        # Creation of the Depth image
        new_shape = (int(depth_map.shape[0] / 2), depth_map.shape[1])
        depth_map = np.resize(depth_map, new_shape)
        distance_map = depth_map
        depth_map = np.float32(depth_map)
        distance_scale = 255.0 / camera_range
        depth_map = distance_scale * depth_map
        depth_map = np.uint8(depth_map)
        depth_map = cv.applyColorMap(depth_map, cv.COLORMAP_RAINBOW)
 
        # Combine depth and IR for more accurate results
        result = cv.addWeighted(ir_map, 0.4, depth_map, 0.6, 0)
 
        # Start the computations for object detection using DNN
        blob = cv.dnn.blobFromImage(result, inScaleFactor, (inWidth, inHeight), (meanVal, meanVal, meanVal), swapRB)
        net.setInput(blob)
        detections = net.forward()
. . .
        for i in range(detections.shape[2]):
            confidence = detections[0, 0, i, 2]
            if confidence > thr:
                class_id = int(detections[0, 0, i, 1])
. . .
                if class_id in classNames:
                    value_x = int(center[0])
                    value_y = int(center[1])
                    label = classNames[class_id] + ": " + \
                            "{0:.3f}".format(distance_map[value_x, value_y] / 1000.0 * 0.3) + " " + "meters"
. . .
        # Show image with object detection
        cv.namedWindow(WINDOW_NAME, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME, result)
 
        # Show Depth map
        cv.namedWindow(WINDOW_NAME_DEPTH, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME_DEPTH, depth_map)

Listato 1: Questo frammento di un'applicazione di esempio nella distribuzione dell'SDK ToF 3D di Analog Devices mostra i pochi passi necessari per acquisire immagini di profondità e IR e classificarle con un modello di inferenza. (Codice per gentile concessione di Analog Devices)

Qui, il processo inizia usando i metodi DNN di OpenCV (cv.dnn.readNetFromCaffe) per leggere la rete e i relativi pesi per un modello di inferenza esistente. In questo caso, il modello è un'implementazione Caffe della rete di rilevamento SSD (Single Shot Detector) di Google MobileNet nota per la sua elevata precisione con dimensioni relativamente piccole del modello. Dopo aver caricato i nomi delle classi con gli identificatori di classe e le etichette delle classi supportate, l'applicazione di esempio identifica le telecamere disponibili ed esegue una serie di routine di inizializzazione (non mostrate nel Listato 1).

La maggior parte del codice di esempio riguarda la preparazione della mappa di profondità (depth_map) e della mappa IR (ir_map) prima di combinarle (cv.addWeighted) in un'unica matrice per migliorare la precisione. Infine, il codice richiama un altro metodo DNN OpenCV (cv.dnn.blobFromImage) che converte l'immagine combinata in un tipo di dati blob quadridimensionale richiesto per l'inferenza. La riga successiva del codice inserisce il blob risultante come input nel modello di inferenza (net.setInput(blob)). La chiamata a net.forward() richiama il modello di inferenza che restituisce i risultati della classificazione. Il resto dell'applicazione di esempio identifica i risultati della classificazione che superano una soglia preimpostata e genera per essi un'etichetta e un riquadro di delimitazione che mostra i dati dell'immagine acquisita, l'etichetta identificata dal modello di inferenza e la sua distanza dalla telecamera (Figura 8).

Immagine dell'applicazione di esempio DNN nella distribuzione dell'SDK ToF 3D di Analog DevicesFigura 8: Utilizzando poche righe di codice Python e la libreria OpenCV, l'applicazione di esempio DNN nella distribuzione SDK ToF 3D di Analog Devices acquisisce immagini di profondità, le classifica e visualizza l'etichetta e la distanza dell'oggetto identificato. (Immagine per gentile concessione di Analog Devices)

Come dimostra l'applicazione di esempio DNN di Analog Devices, gli sviluppatori possono usare le mappe di profondità ToF 3D assieme ai metodi di apprendimento automatico per creare caratteristiche applicative più sofisticate. Anche se le applicazioni che richiedono risposte a bassa latenza molto probabilmente si avvarranno di C/C++ per realizzare queste caratteristiche, i passaggi di base rimangono gli stessi.

Utilizzando dati ToF 3D e modelli di inferenza ad alte prestazioni, i sistemi robotici industriali possono sincronizzare in modo più sicuro i loro movimenti con altre apparecchiature o anche con gli operatori in ambienti "cobot" dove operatori e robot lavorano in modo cooperativo in spazi molto ristretti. Con modelli di inferenza diversi, un'altra applicazione può utilizzare una telecamera ToF 3D ad alta risoluzione per classificare i movimenti precisi per un'interfaccia gestuale. Nelle applicazioni automotive, questo stesso approccio può contribuire a migliorare la precisione dei sistemi avanzati di assistenza alla guida (ADAS), sfruttando appieno l'elevata risoluzione temporale e spaziale disponibile con i sistemi ToF 3D.

Conclusione

Le tecnologie ToF rivestono un ruolo chiave in quasi tutti i sistemi che dipendono in modo critico dalla misurazione accurata della distanza tra il sistema e gli altri oggetti. Tra le tecnologie ToF, il ToF 3D ottico può fornire un'alta risoluzione sia spaziale che temporale, consentendo di distinguere in modo più preciso tra oggetti più piccoli e assicurando un monitoraggio più preciso della loro distanza relativa.

Tuttavia, per riuscire a sfruttare questa tecnologia gli sviluppatori hanno dovuto affrontare numerose sfide relative alla progettazione ottica, alla temporizzazione di precisione e all'acquisizione sincronizzata dei segnali di questi sistemi. Come si è dimostrato, la disponibilità di sistemi ToF 3D già pronti, come la piattaforma di sviluppo AD-96TOF1-EBZ di Analog Devices e il kit di valutazione EPC660 di ESPROS Photonics, abbatte le barriere all'applicazione di questa tecnologia nei sistemi industriali, nelle interfacce gestuali, nei sistemi di sicurezza automotive e in altri ambienti.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk ha più di 20 anni di esperienza come autore sull'industria elettronica e ha scritto su una vasta gamma di argomenti tra cui hardware, software, sistemi e applicazioni, incluso l'IoT. Ha ricevuto un Ph.D. in neuroscienze sulle reti neuronali e ha lavorato nel settore aerospaziale su sistemi di sicurezza ampiamente distribuiti e sui metodi di accelerazione algoritmica. Attualmente, quando non scrive articoli su tecnologia e ingegneria, lavora su applicazioni di deep learning per i sistemi di riconoscimento e di raccomandazione.

Informazioni su questo editore

Editori nordamericani di DigiKey