Uno degli obiettivi, del prossimo futuro, sarà effettuare un ulteriore attività di test per confermare i risultati ottenuti finora, anche in modalità dinamica.
Successivamente sarà opportuno sperimentare l’intero sistema, avvalendosi di un RPAS dedicato, per effettuare test in volo e verificare che il sistema stesso sia in grado di funzionare anche quando soggetto a vibrazioni, a variazioni di assetto e a improvvisi cambiamenti di luminosità.
Al fine di avvicinarsi quanto più possibile alle condizioni real time, sarebbe opportuno programmare l’fpga in modo tale da ridurre ulteriormente, per quanto consentito, i tempi di elaborazione.
Inoltre, si ritiene importante individuare e ridurre quei “tempi fissi” che, al momento, non consentono di abbreviare il tempo complessivo di elaborazione, anche a fronte di un ridimensionamento delle dimensioni delle immagini, in termini di pixel.
Potrebbe risultare utile riuscire ad effettuare il “clustering” degli oggetti per individuarli come tali ed ottenere un’unica distanza da tutte quelle rilevate. Dove, per “clustering”, si intende il raggruppamento, in un’unica area, di più elementi di un oggetto vicini spazialmente. Così, sarà possibile costruire una mappa di profondità che rappresenti opportunamente gli ostacoli che compongono lo scenario in cui il velivolo si muove. Infine, si ritiene necessario progettare ed elaborare gli algoritmi della funzione “Avoid” i quali, dopo aver ottenuto le informazioni estrapolate dalla fase Sense, in termini di posizione dell’ostacolo, dovranno individuarne traiettoria e velocità relative, al fine di valutare un eventuale conflitto di traffico ed effettuare gli opportuni cambiamenti di traiettoria dell’RPAS.
Appendice 1 AEROMOBILI A PILOTAGGIO REMOTO
Un aeromobile a pilotaggio remoto (APR), comunemente noto come drone, è un velivolo caratterizzato dall’assenza del pilota a bordo. Tutte le fasi di volo sono gestite da una postazione dalla quale opera un pilota. Il collegamento tra la postazione e l’APR può essere assicurato attraverso diversi sistemi di comunicazione.
I velivoli a pilotaggio remoto sono noti anche attraverso altri acronimi, molti dei quali di derivazione anglosassone: oltre al più noto UAV (Unmanned aerial vehicle), si hanno RPA (Remotely piloted aircraft), RPV (Remotely piloted vehicle), ROA (Remotely operated aircraft) o UVS (Unmanned vehicle system).
Tali velivoli, in base a caratteristiche e tecnologie differenti, possono essere impiegati in vari scenari operativi e si possono dividere in diverse tipologie.
Nella tabella A1.1 si riporta la classificazione degli UAV, basata su alcuni parametri quali il raggio operativo, la quota e la durata del volo e il peso massimo al decollo (MTOW).
Categoria Acronimo Raggio operativo [km] Quota di volo [m] Durata del volo [h] MTOW [kg] Operativo Tactical UAV Nano η < 1 100 < 1 < 0.0250 Si Micro μ < 10 250 1 < 5 Si Mini Mini < 10 150 ÷ 300 < 2 < 30 Si Close Range CR 10 ÷ 30 3000 2 ÷ 4 150 Si Short Range SR 30 ÷ 70 3000 3 ÷ 6 200 Si Medium Range MR 70 ÷ 200 5000 6 ÷ 10 1250 Si Medium Range Endurance MRE > 500 8000 10 ÷ 18 1250 Si Low Altitude Deep Penetration LADP > 250 50÷9000 0.5 ÷ 1 350 Si Low Altitude Long Endurance LALE > 500 3000 > 24 < 30 Si Medium Altitude Long Endurance MALE > 500 14000 24 ÷ 48 1500 Sì
Segue Appendice 1 Categoria Acronimo Raggio operativo [km] Quota di volo [m] Durata del volo [h] MTOW [kg] Operativo Strategic UAV High Altitude Long Endurance HALE > 2000 20000 24 ÷ 48 12000 Si Special purpose UAV Unmanned combat aerial vehicle UCAV 1500 10000 2 10000 Si Lethal LETH 300 4000 3 ÷ 4 250 Si Decoy DEC 0 ÷500 5000 < 4 250 Si Stratospheric STRATO > 2000 20000 ÷ 30000 > 48 Da definire Si Exo–
stratospheric EXO Da definire > 30000 Da definire
Da
definire No
Space SPACE Da definire Da
definire Da definire
Da
definire No Segue Tabella A1.1 Classificazione UAV
Appendice 2 LabVIEW
LabVIEW, abbreviazione di Laboratory Virtual Instrumentation Engineering Workbench, è l’ambiente di sviluppo integrato per il linguaggio di programmazione visuale di National Instruments.
Tale linguaggio grafico viene chiamato “Linguaggio G”.
Realizzato originariamente per Apple Macintosh nel 1986, LabVIEW viene utilizzato per programmi di acquisizione e analisi dati, controllo di processi, generazione di rapporti, o più generalmente per tutto ciò che concerne l’automazione industriale, su diverse piattaforme come Windows, Linux, Mac OS e controllori National Instruments.
- Storia
Il progetto LabVIEW nasce nel 1983 dalla necessità della National Instruments di disporre di un software di programmazione grafica, con il quale testare rapidamente gli apparati hardware prodotti da tale industria statunitense.
Già nel 1986 è resa pubblica la prima versione del software compatibile con i sistemi Macintosh.
Nel gennaio del 1990 viene pubblicata la seconda versione, le cui migliorie sul software rendono la velocità di esecuzione del Virtual Instrument (VI) paragonabile ai programmi compilati in Ansi C. Il mese successivo, in virtù dell’innovatività dell’approccio grafico alla programmazione, viene pubblicato il brevetto dal US Patent Office.
Infine, nel settembre 1992, ne viene sviluppata una versione multipiattaforma, cioè impiegabile in ambienti Microsoft Windows, Mac OS e SunOS e, successivamente, anche Linux.
La versione 8.0, pubblicata nel 2005, introduce per la prima volta anche il supporto per la programmazione a oggetti.
Il 4 agosto 2009 è stata pubblicata la versione LabVIEW 2009, a 32 o 64-bit, che succede alla versione 8.6.
Segue Appendice 2 - Programmazione G
Il linguaggio di programmazione usato in LabVIEW si distingue dai linguaggi tradizionali perché la sua sintassi non è scritta ma grafica e, per questa ragione, viene chiamato Graphic Language (G-Language).
Un programma o sottoprogramma G, denominato VI, non esiste sotto forma di testo, ma può essere salvato solo come un file binario che può essere aperto e compilato solo da LabVIEW.
La definizione di strutture dati ed algoritmi avviene con icone e altri oggetti grafici, ognuno dei quali incapsula funzioni diverse, uniti da linee di collegamento (wire), in modo da formare una sorta di diagramma di flusso.
Questo tipo di linguaggio viene definito flusso di dati (dataflow) in quanto la sequenza di esecuzione è definita e rappresentata dal flusso dei dati stessi attraverso i fili monodirezionali che collegano i blocchi funzionali. Poiché i dati possono anche scorrere in parallelo attraverso blocchi e fili non consecutivi, il linguaggio può realizzare spontaneamente il multithreading senza bisogno di esplicita gestione da parte del programmatore.
- Collegamento con l’hardware
Interessante è la modalità di realizzazione del software, che si limita spesso al semplice collegamento di blocchi già pronti, grazie alla vasta libreria di funzioni predefinite e driver per la gestione dell’hardware. In alcuni casi, tali blocchi sono personalizzabili. I programmi LabVIEW sono compatibili con molti modelli di strumenti programmabili e schede di acquisizione.
Segue Appendice 2 - Dettagli dei VI
Figura A2.1 VI - Teorema di Pitagora
Il VI di figura A2.1 calcola la lunghezza dell’ipotenusa di un triangolo rettangolo. Sono visibili il pannello frontale (in alto) e il diagramma a blocchi (in basso). Nell’ambiente di sviluppo, i VI sono composti da tre parti principali:
- Pannello frontale
Il pannello frontale è l’interfaccia utente del VI. Si realizza con controlli e indicatori che costituiscono rispettivamente i terminali interattivi d’ingresso e d’uscita.
Essi sono ben più numerosi e complessi dei widget normalmente forniti dal sistema operativo. I controlli sono matrici, manopole, potenziometri, pulsanti, quadranti e molti altri; simulano i dispositivi d’ingresso degli strumenti e forniscono dati allo schema a blocchi del VI. Gli indicatori sono grafici, tabelle, LED, termometri e molti altri; simulano i dispositivi d’uscita degli strumenti e visualizzano i dati che lo schema a blocchi acquisisce o genera.
- Schema a blocchi
Lo schema a blocchi è il diagramma di flusso che rappresenta il codice sorgente, in formato grafico. Gli oggetti del pannello frontale appaiono come terminali di ingresso o uscita nello schema a blocchi. Gli oggetti dello schema a blocchi comprendono:
terminali; funzioni; costanti; strutture;
Segue Appendice 2 chiamate ad altri VI (subVI);
fili di collegamento; commenti testuali.
Le funzioni sono esse stesse dei VI, anche se non hanno un loro pannello frontale e un loro schema a blocchi. Possono avere un numero indefinito di ingressi e di uscite come ogni VI.
Le strutture eseguono il controllo di flusso di base. Ad esempio, il “ciclo FOR” è rappresentato da un rettangolo che ripete N volte la porzione di schema a blocchi che viene inserita al suo interno.
I fili di collegamento possono trasportare teoricamente qualunque mole e tipologia di dati, anche aggregati (bundle) definiti dal programmatore.
I fili possono essere di diverso spessore e colore per permettere una facile identificazione dei dati che vi scorrono: ad esempio i numeri interi scorrono su fili blu, i numeri decimali su fili arancioni e le stringhe su fili rosa.
Lo schema a blocchi può essere reso visibile anche durante l’esecuzione, cosa molto utile in fase di debug, in quanto esiste la possibilità di visualizzare con un’animazione rallentata il movimento dei dati lungo i fili e il loro valore momentaneo.
- Riquadro connettori
Ogni VI può essere a sua volta utilizzato come subVI e comparire all’interno dello schema a blocchi di altri VI come una qualsiasi funzione, e come tale può avere ingressi e uscite a cui collegare le linee di flusso.
Il riquadro connettori serve appunto a definire l’aspetto del VI quando appare come subVI in uno schema a blocchi di un VI più ampio: che facciata ha l’icona, ma, soprattutto, come e dove vanno collegate le linee per permettere il passaggio dei dati. In genere, ogni controllo può essere associato ad un ingresso e ogni indicatore può essere associato ad un’uscita.
Appendice 3 IMAGING 3D CON “NATIONAL INSTRUMENTS LabVIEW”
Descrizione
La tecnologia di imaging 3D rende accessibile a tecnici e ingegneri la visione 3D in un unico ambiente di sviluppo grafico.
Le tecnologie di imaging 3D si sono evolute in modo significativo, rispetto alle prime sperimentazioni nei laboratori di ricerca universitari e, grazie alle numerose innovazioni, nell’ambito dei sensori, dell’illuminazione e dell’elaborazione embedded, la visione 3D è ora disponibile in una vasta gamma di applicazioni di automazione delle macchine.
Un sistema embedded, sistema integrato, è un sistema elettronico di elaborazione digitale a microprocessore, progettato appositamente per una determinata applicazione, quindi non riprogrammabile, dall’utente, per altri scopi.
Tale sistema è generalmente dotato di una piattaforma hardware ad hoc, integrata, che controlla e gestisce tutte o parte delle funzionalità richieste.
La visione 3D consente di guidare sistemi robotizzati e, attraverso i processori di ultima generazione, è possibile gestire grandi set di dati e gli algoritmi, richiesti per estrarre le informazioni sulla dimensione della profondità. Ciò consentirà di prendere rapidamente le opportune decisioni/azioni.
Introduzione all’imaging 3D
Esistono diversi metodi per calcolare le informazioni relative alla profondità utilizzando sensori ottici e telecamere di tipo 2D.
Segue Appendice 3 Tecnologia Imaging 3D Descrizione Visione stereoscopica
Vengono utilizzate due telecamere per ottenere due prospettive del medesimo oggetto. Con tecniche di calibrazione si ottengono i parametri intrinseci ed estrinseci che consentono di ricavare l’informazione sulla profondità. Modalità più simile al funzionamento del nostro cervello per misurare le distanze.
Triangolazione Laser
Una linea laser viene proiettata su un oggetto e viene generato il profilo dell’altezza. Viene successivamente acquisita, con una singola telecamera, l’immagine dalla quale viene estratto lo spostamento della linea laser per ciascuna singola “fetta” dell’oggetto. Il laser e la telecamera scansionano la struttura dell’oggetto attraverso una serie di “fette” fino a ricostruirne il modello 3D. Proiezione
luminosa
Una figura luminosa nota viene proiettata sull’oggetto e l’informazione sulla profondità viene calcolata analizzando la distorsione della figura sulla superficie dell’oggetto illuminato.
Sensori di
tempo di
viaggio
Una sorgente luminosa è sincronizzata con un sensore d’immagine. Per calcolare la distanza, si calcola il tempo che intercorre tra l’emissione dell’impulso e la sua riflessione sul sensore.
Laser Imaging
Detection and Ranging
(LIDAR)
I laser sono utilizzati per ispezionare un’area attraverso la misurazione delle riflessioni della luce. Quindi si genera un profilo 3D che mappa le caratteristiche della superficie e individua gli oggetti. Optical
Coherence
Tomography (OCT)
Tecnica di imaging ad alta risoluzione che usa luce infrarossa per calcolare l’informazione di profondità sfruttando la misurazione della riflessione della luce attraverso la sezione di un oggetto. Questa soluzione è utilizzata principalmente in ambito medicale in
Segue Appendice 3 Funzionalità di visione stereoscopica in LabVIEW - “Vision Development Module”
A partire da LabVIEW 2012, il Vision Development Module include gli algoritmi di visione stereoscopica per calcolare le informazioni di profondità con l’impiego di più telecamere.
Dopo aver effettuato la calibrazione delle due telecamere, i nuovi algoritmi possono generare immagini di profondità, e offrire informazioni più dettagliate per identificare oggetti, rilevare difetti e guidare bracci robotici.
Le due telecamere sono posizionate in modo da avere gli assi ottici paralleli. La distanza tra le telecamere sarà funzione del campo di osservazione desiderato. Nell’esempio riportato in figura A3.1, si dimostra la capacità dell’Imaging 3D per il controllo automatizzato.
Nel caso specifico, si considera di applicare tale metodologia per individuare difettosità circa la perfetta sfericità di cioccolatini contenuti nella confezione.
Figura A3.1 Imaging 3D - Controllo automatizzato
Dopo aver calibrato le due telecamere e definita la relazione spaziale tridimensionale (distanza tra le telecamere e l’inclinazione), vengono acquisite due immagini per individuare i potenziali difetti di sfericità dei cioccolatini nella confezione.
Attraverso gli algoritmi di 3D Stereo Vision nel Vision Development Module, le due immagini possono essere combinate per calcolare le informazioni di profondità e visualizzare un’immagine della profondità.
Se alcune difettosità vengono riscontrate con maggior difficoltà attraverso le immagini bidimensionali, ciò non accade con l’analisi tridimensionale.
Infatti, nella figura A3.2, si nota la mancanza di sfericità dei cioccolatini, da cui deriverà il non superamento dei test di qualità.
Segue Appendice 3 Sempre in figura A3.2, il rettangolo bianco evidenzia i cioccolatini difettosi individuati.
Figura A3.2 Imaging 3D - Rappresentazione delle difettosità
L’analisi delle differenze tra le due foto si basa sull’individuazione di un elemento da una riga dell’immagine sinistra e dalla stessa riga dell’immagine destra.
Per essere in grado di individuare e distinguere le caratteristiche, le immagini devono avere sufficiente texture.
Quindi, per ottenere risultati migliori, potrebbe essere necessario aggiungere texture illuminando la scena con luce strutturata.
La tecnica di “texture mapping” consente di proiettare una o più immagini sulla superficie di un modello 3D, utilizzando le coordinate UV.
Una texture è un’immagine bidimensionale, in formato raster, che viene riprodotta su una o più facce di un modello poligonale tridimensionale.
La grafica bitmap, o raster, traducibile come grafica a griglia, è una tecnica utilizzata per descrivere un’immagine in formato digitale.
Essa si contrappone alla grafica vettoriale.
Attraverso questa grafica, l’immagine viene vista come una scacchiera e ad ogni elemento della scacchiera, chiamato pixel, viene associato uno specifico colore. Il colore può essere definito con due tecniche:
- se l’immagine contiene pochi colori, massimo 256, si crea un elenco dei colori da utilizzare e, nella scacchiera, viene inserito l’indice che punta allo specifico colore del pixel;
- se l’immagine contiene molti colori, il singolo pixel non definisce l’indice con il quale si punta a una tavolozza di colori, ma direttamente il colore.
Il colore viene definito come una combinazione di tre componenti: blu, rosso, verde. Questo non è l’unico modo per definire un colore. Ne esistono altri che vengono chiamati spazi di colore ma, nel caso delle immagini generate al computer, il sistema RGB, RED Rosso, GREEN Verde, BLUE Blu, è il più diffuso dato che le
Segue Appendice 3 Questi punti sono spesso indicati come nuvola dei punti, point clouds o cloud of points.
Le nuvole di punti sono molto utili per visualizzare la forma tridimensionale degli oggetti e possono anche essere utilizzate da altri software di analisi 3D.
Considerazioni
Le funzioni di visione stereoscopica del LabVIEW Vision Development Module consentono lo sviluppo di una vasta gamma di applicazioni.
Grazie alla flessibilità di NI LabVIEW, gli ingegneri possono anche utilizzare hardware di terze parti e strumenti per la visione 3D per sfruttare ulteriori funzionalità avanzate.
LabVIEW Vision Development Module rende accessibile agli ingegneri la visione 3D in un unico ambiente di sviluppo grafico.
Appendice 4 LabVIEW - FILTRI
I filtri si dividono in due tipologie: lineari, chiamati anche convoluzioni, e non lineari. Una convoluzione è un algoritmo che consiste nel ricalcolo del valore del pixel, basato sul suo valore e su quello dei suoi vicini, attraverso una media pesata con i coefficienti componenti la matrice di convoluzione, (kernel).
In questo modo si ottiene il nuovo valore del pixel.
La dimensione della matrice di convoluzione non ha un limite teorico e può esser sia quadrata che rettangolare. Dimensioni tipiche sono la 3×3 e la 5×5 ma esistono anche altre dimensioni, 5×7, 9×3, 127×127, ecc..
Le convoluzioni si dividono i 4 gruppi: Gradient, Laplacian, Smoothing, and Gaussian. Questi gruppi si definiscono in base al kernel e quindi ai suoi coefficienti.
Nel settore “Vision features” si hanno diverse tipologie di kernel, per ogni tipologia di gruppo, di dimensione standard ma anche personalizzabili in dimensioni e valore degli elementi della matrice.
In questo modo si può generare un filtro adatto alle proprie esigenze. Quando si usano
Questi filtri consentono diversi impieghi, individuare ed esaltare i contorni degli oggetti, ridurre rumori e creare degli effetti di smoothing (sfocatura).
In questo modo si possono estrarre le informazioni necessarie.
I filtri non lineari consentono l’”edge detection” attraverso l’estrazione dei contorni o la rimozione di pixel isolati.
LabView Vision ha 6 differenti tipologie di metodi per ottenere l’estrazione e il rilevamento dei contorni (Differentiation, Gradient, Prewitt, Roberts, Sigma, Sobel)
Il “Canny Edge Detection filter” è specializzato nel metodo di individuazione di contorni anche in presenza di immagini di bassa qualità per un rapporto sfavorevole segnale/rumore. Per armonizzare i valori dei pixel, si hanno 2 filtri che usano metodi diversi, NthOrder e LowPass. Anche questi richiedono una dimensione e dei valori numerici del kernel da inserire.
I filtri alterano il valore dei pixel, rispettando le variazioni di intensità di luce dei pixel adiacenti.
L’area considerata è definita dalla dimensione della matrice che viene centrata sul pixel di riferimento.
Segue Appendice 4 I filtri possono appartenere a due diverse categorie:
“Highpass filters”: enfatizzano significanti variazioni di luce in genere al contorno degli oggetti. Isolano variazioni brusche di pattern che corrispondono a contorni netti, dettagli e rumore.
“Lowpass filters”: attenuano le variazioni di luce. Enfatizzano gradualmente lo sfondo delle immagini e hanno la tendenza ad ammorbidire le immagini eliminando i dettagli e sfocando i contorni.
Tipologie di filtri
Questa tabella descrive le differenti tipologie di filtri.
Tipologia di filtro Filtro
Linear Highpass Gradient, Laplacian Linear Lowpass Smoothing, Gaussian
Nonlinear Highpass Gradient, Roberts, Sobel, Prewitt, Differentiation, Sigma Nonlinear Lowpass Median, Nth Order, Lowpass
Filtri Lineari
Un filtro lineare sostituisce il valore di ogni pixel con la media pesata dei suoi vicini. La matrice agisce su un’area più o meno estesa, in base alla sua dimensione e, in maniera più o meno decisa, in base ai valori dei suoi elementi. Questa matrice è quella di convoluzione (Kernel).
Se il kernel ha coefficienti negativi e positivi la funzione di trasferimento è equivalente ad una differenza pesata e produce un maggiore contrasto o un filtro passa-alto.
Tipici filtri passa-alto sono Gradient and Laplacian.
Se tutti i coefficienti del kernel sono positivi, la funzione di trasferimento sarà pari a quella di una somma pesata e produce un filtro smoothing (sfocatura) o un filtro passa-basso. Tipici filtri passa-basso sono Smoothing e Gaussian.
Gradient Filter
Un “gradient filter” esalta le variazioni di intensità luminosa lungo una direzione specifica e ha l’effetto di mettere in evidenzai contorni e rilevare la struttura (texture) degli oggetti.
Segue Appendice 4 Immagine sorgente Estrazione dei contorni
orizzontali Messa in risalto dei bordi diagonali
- Definizione del kernel
Il kernel relativo ad un “gradient filter” ha la seguente struttura:
𝑎 −𝑏 𝑐
𝑏 𝒙 −𝑑
𝑐 𝑑 −𝑎
dove a, b, c, d sono numeri interi e 𝒙 = 0 ∨ 1. - Estrazione dei contorni ed esaltazione dei contorni
Il gradient filter ha due effetti, dipendenti dal valore di x.
Se x = 0, si esaltano le variazioni di luce lungo una direzione specifica in base ai valori dei coefficienti a, b, c, e d. L’immagine trasformata avrà contorni in bianco e nero e le ombre saranno scurite.
Source Image Prewitt #14 Filtered Image −1 −1 0
−1 𝟎 1
0 1 1
Se x = 1, si enfatizzano le variazioni di luce come nel caso precedente, ma queste si sommano all’immagine originale. In questo modo si ottiene un’immagine con i bordi sovrailluminati. Questa configurazione si usa per estrarre ed esaltare gli oggetti oltre che percepire la struttura.
Segue Appendice 4 Source Image Prewitt #15 Filtered Image