DESCRIZIONE DEL PROGETTO

Dato l'obiettivo del progetto, il video follower è stato pensato come composizione delle seguenti parti:

  • Dispositivo di acquisizione video: webcam, il cui ruolo è unicamente quello di filmare ciò che viene inquadrato;
  • Marcatore: fascia di colore brillante elasticizzata posta sulla persona o sull'oggetto da tracciare in modo da renderla/o più facile da individuare;
  • Dispositivo di tracciamento: Pixycam, predisposta per restituire le coordinate del marcatore all'interno del suo Field Of View (vedere paragrafo apposito);
  • Dispositivo pan-tilt: due servomotori opportunamente assemblati sulla staffa di sostegno adibiti a muovere sia il dispositivo di tracciamento che il dispositivo di acquisizione video;
  • Controllore: Arduino Uno, il cui ruolo è acquisire i dati forniti dalla Pixycam e muovere di conseguenza i servomotori.

Figura 1: versione finale del dispositivo

Dalla figura 1 è possibile osservare come si presenta il progetto nella sua fase finale. L'implementazione pratica vede la presenza di un meccanismo di pan-tilt movimentato dai due servomotori, il Futaba S3003 per gestire i movimenti orizzontali e il Tower Pro SG90 per quelli verticali, in cima al quale sono posizionate la Pixycam (tramite opportuna staffa in alluminio) e la webcam su un opportuno supporto in Plexiglas, necessario per garantire spazio sufficiente per il collocamento di entrambe. Tutta questa parte della struttura è fissata su un ulteriore strato di Plexiglas aderente alla superficie sottostante tramite gommini antiscivolo. Su tale strato è fissato anche l'Arduino Uno, che elabora i dati ricevuti dalla Pixycam ad esso connessa (tramite cavo collegato ai pin ICSP, In-circuit Serial Programmer) e gestisce di conseguenza il movimento dei servomotori con gli opportuni segnali inviati sui pin digitali di uscita (nel nostro caso sono stati scelti il 3 e il 6).
Un ulteriore elemento presente è la breadboard sulla quale sono stati effettuati i collegamenti fra le due parti del dispositivo, alimentazioni comprese.

Per quanto riguarda l'alimentazione dei motori, i servi sono collegati a 4 batterie AA stilo, in quanto l'Arduino non genera corrente sufficiente ad alimentare contemporaneamente entrambi i motori.

Fatta questa analisi generale, nei paragrafi sottostanti ci si focalizzerà sull'elemento più importante del dispositivo, ossia la Pixycam, spiegandone in dettaglio il funzionamento; verrà poi presentata la scelta fatta per il marcatore con le opportune motivazioni e sarà inoltre descritto il metodo utilizzato per il controllo del movimento dei due servomotori. Si analizzeranno infine le motivazioni che hanno causato il passaggio dal prototipo iniziale alla versione finale del progetto.


Pixycam

Figura 2: Pixycam

La Pixycam utilizzata in questo progetto è un sistema di visione, ossia un dispositivo elettronico dotato di un'apposita camera con funzionalità di sensore di immagini in grado di identificare oggetti e tracciarne il movimento.
Alcuni dei contesti in cui uno strumento del genere può risultare utile sono, ad esempio, applicazioni in cui l'obiettivo è raccogliere/inseguire un determinato oggetto (con l'aiuto di hardware addizionale e delle necessarie componenti meccaniche), oppure ci si può limitare alla localizzazione dell'oggetto nel range di acquisizione della camera, il tutto ovviamente sviluppando i necessari algoritmi.

A differenza dei comuni sensori di immagini, nei quali la quantità di dati in uscita è elevata (dell'ordine di decine di MB/s) e di conseguenza può creare un carico eccessivo per l'elaborazione da parte dei processori che ricevono tali informazioni, la Pixycam è accompagnata da un processore dedicato che elabora le immagini ricevute dal sensore e invia soltanto le informazioni utili su ciò che abbiamo deciso di tracciare, con un frame rate di 50 Hz.
Il sistema in questione usa un algoritmo di filtraggio basato sui colori per rilevare gli oggetti, dato che tali algoritmi garantiscono velocità, efficienza e moderata robustezza. Vengono calcolati colore e saturazione di ogni pixel RGB del sensore per essere utilizzati come parametri di filtraggio. Il colore di un oggetto rimane in gran parte invariato anche sotto condizioni di luminosità e esposizione: il cambiamento di questi due parametri può portare a effetti indesiderati con l'utilizzo di altri algoritmi di filtraggio, mentre con l'algoritmo usato in questo caso è garantita la robustezza.

Per quanto riguarda l'utilizzo pratico, per indicare alla Pixycam quali sono gli oggetti da rilevare/tracciare è necessaria una fase di addestramento iniziale, una sorta di processo di "insegnamento" durante il quale si posiziona l'oggetto da riconoscere di fronte alla camera la quale, tramite la pressione di un apposito pulsante, acquisisce l'informazione dando anche un feedback su quale oggetto sta guardando, attraverso il colore del led adibito a questo scopo; al rilascio del pulsante viene generato un modello statistico dei colori contenuti nell'oggetto che verrà poi utilizzato per trovare elementi simili nel range dell'inquadratura.
Un altro metodo di identificazione che può essere preso in considerazione è quello dell'utilizzo dei "codici a colori": si tratta di due o più blocchi di colore adiacenti fra di loro (realizzabili usando ad esempio del nastro adesivo colorato), anch'essi rilevabili dallo strumento qui trattato. La scelta di tale metodo porta alcuni vantaggi, fra i quali la possibilità di individuare più oggetti rispetto al metodo con firme monocromatiche (che possono arrivare solo fino a 7), la minor probabilità di avere "falsi rilevamenti" e l'ottenimento dell'angolo di inclinazione dell'oggetto come dato aggiuntivo.

La Pixycam è gestibile tramite un apposito applicativo open source, PixyMon (la figura 3 ne riporta l'interfaccia), che permette di vedere quello che il sensore vede, sia in versione elaborata che non. Esso permette di configurare il sistema di visione e di gestire tutto ciò che riguarda le firme monocromatiche e policromatiche da identificare. La comunicazione fra i due elementi avviene tramite un cavo mini USB standard.

Figura 3: schermata dell'applicativo PixyMon



Marcatore

Figura 4: marcatori realizzati

Per il progetto in questione, dato che l'obiettivo è quello di tracciare il movimento di una persona, l'oggetto scelto per il riconoscimento da parte della Pixycam è un marcatore in Lycra cucito a mano da far indossare attorno al braccio del soggetto da seguire (alcuni modelli realizzati sono riportati in figura 4).

In sede di test sono stati messi in atto due approcci, uno con un singolo marcatore monocromatico rosa acceso e uno che prevede l'utilizzo di due marcatori affiancati, in questo caso di colore rosa e azzurro acceso, data la possibilità fornita dalla Pixycam di poter tracciare i sopracitati "codici a colori"; mentre nel primo caso l'identificatore è stato posto ad altezza bicipite, nel secondo è stata ricoperta una superficie del braccio più estesa.

Sono state effettuate prove con entrambi i marcatori e la scelta è ricaduta sull'utilizzo della versione monocromatica per la seguente motivazione: dato che la procedura di rilevamento e inseguimento della Pixycam inserisce l'oggetto da seguire all'interno di un rettangolo (di dimensioni proporzionali alla dimensione dell'oggetto) per poi seguie il centro di detto rettangolo, il marcatore di dimensioni maggiori, date le sue frequenti estensioni/contrazioni (dovute alla diversa estensione o piegatura del braccio), provoca uno spostamento maggiore della posizione di tale baricentro, cosa che avviene in misura minore con il marcatore più piccolo. Tale scelta porta vantaggi anche dal punto di vista della minore ingombranza, sia fisica che "cromatica", del marcatore che deve essere indossato dalla persona da tracciare.


Metodi di controllo

La gestione del movimento dei servomotori necessario allo spostamento di Pixycam e webcam è stata implementata a livello software, con un controllo di tipo proporzionale per l'asse y, mentre per quanto riguarda l'asse x sono state effettuate prove con controllo proporzionale, proporzionale-integrale (PI), proporzionale-derivativo (PD) e proporzionale-integrale-derivativo (PID).

Definita con u(t) l'uscita di controllo e con e(t) l'errore dato dalla differenza fra valore nominale e uscita misurabile, l'algoritmo per il controllo PID è esprimibile come:

Dove i tre parametri Kp, Ki e Kd sono quelli da calcolare per implementare il tipo di controllo desiderato.

Il metodo con cui sono stati calcolati tali parametri è quello delle regole di Ziegler-Nichols e funziona come descritto di seguito: i guadagni Ki e Kd vengono impostati a zero e il guadagno Kp viene gradualmente aumentato partendo da 0 fino al raggiungimento del guadagno critico Ku, per il quale la variabile controllata presenta oscillazioni sostenute con ampiezza costante; arrivati a questo punto si misura il periodo critico Tu delle oscillazioni e i due parametri così ottenuti vengono utilizzati per il calcolo di Kp, Ki e Kd secondo la tabella di figura 5.

Figura 5: tabella per calcolo parametri secondo regola di Ziegler-Nichols

Calcolo del periodo critico

Data l'elevata velocità dei movimenti oscillatori e l'impossibilità di effettuare misure sulla larghezza del periodo in tali condizioni, dal punto di vista pratico è stato necessario filmare le oscillazioni con un cellulare e analizzarle in modalità slow motion per riuscire a calcolarne il periodo critico Tu. Più nel dettaglio si è proceduto come segue: si è partiti da un filmato girato a 120 frame al secondo, visualizzato a 30 frame al secondo. Sono stati quindi raccolti molteplici campioni di Tu, ne è stata calcolata la media aritmetica e il risultato è stato moltiplicato per un fattore 0.25. In questo modo si è raggiunta una buona precisione nel calcolo del periodo critico.


Sostegno servomotore

Per garantire la stabilità meccanica del sistema nel suo complesso è stato necessario fra le altre cose creare un supporto per il servomotore relativo ai movimenti in direzione orizzontale. Tale sostegno è stato realizzato mediante stampa 3D di un modello adeguato al servomotore in questione realizzato tramite apposito software (figura 6. In figura 7 sono presenti i supporti stampati nel corso della realizzazione del progetto).

Figura 6: modelli CAD dei supporti

Figura 7: supporti realizzati

Prototipo iniziale

Figura 8: prototipo iniziale del dispositivo

In figura 8 è rappresentata la prima versione del dispositivo realizzata. Com'è possibile osservare, il meccanismo pan-tilt risulta di dimensioni ridotte e insufficienti per sostenere sia la webcam che la Pixycam; entrambi i servomotori, inoltre, sono degli SG90. Dato che la maggior parte del movimento e del peso da spostare grava sul servomotore per gli spostamenti orizzontali, è stato necessario sostituire il relativo SG90 con un Futaba S3003, dotato di maggior coppia; si è infine sostituito il meccanismo pan-tilt iniziale con una versione più grande, in grado di sostenere entrambi gli strumenti di ripresa.