• Non ci sono risultati.

Algoritmo di Controllo ed Interfaccia Utente

4.4 Programma di Controllo a Tracciamento Visivo

4.4.3 Algoritmo di Controllo ed Interfaccia Utente

Una struttura a geometria variabile deve poter essere controllata, al fine di raggiungere le posizioni necessarie a definire una data conformazione.

Poiché il sistema è azionato da fili a memoria di forma, che sfruttano una transizione di fase per alterare la propria lunghezza, il controllo dovrà regolare la temperatura interna del filo. Ovviamente, poiché questa è otte- nuta mediante un riscaldamento per effetto Joule, il tutto si traduce in una modulazione della corrente elettrica transitante nel filo stesso.

A disposizione, per creare una logica di controllo, si hanno:

• un sistema di misurazione della distanza senza contatto, basato sull’u- tilizzo di marker;

• una scheda di controllo Arduino UNO; • moduli MosFet per l’alimentazione dei fili.

Come accennato nel paragrafo 2.3.1, i moduli MosFet di Arduino con- sentono una variazione della tensione (e, quindi, della corrente) in uscita come percentuale del ciclo di lavoro del dispositivo. Tale alterazione di ma- gnitudine può semplicemente essere ottenuta passando al MosFet un valore analogico da 0 a 1023, per mezzo della scheda.

Quello che appare essenziale, ora, è correlare le posizioni dei Joint, lette dal programma di misurazione, con il valore analogico da inviare ai moduli di alimentazione fili. Per far questo è necessario interfacciare le periferiche tra loro, creando un codice di controllo che le renda interdipendenti.

Struttura a Geometria Variabile e Tracciamento Visivo

Figura 4.14: Algoritmo di controllo implementato nel software.

Figura 4.15: Funzionamento del sistema di controllo in posizione.

L’algoritmo che si è pensato di implementare è molto semplice:

1. definito in input un valore di riferimento che si vuole raggiungere per ogni Joint, si ricava la differenza tra questo e la posizione letta dal sistema di misura;

2. se l’errore è maggiore di una tolleranza impostata a priori, il Joint si

trova ancora ad una distanza eccessiva dal punto auspicato, per cui l’attuazione dev’essere la più rapida possibile;

3. se il sistema si trova all’interno della tolleranza, occorre rallentare la salita, con l’obiettivo di collocarsi con cura nel punto richiesto;

4. qualora il riferimento fosse sorpassato, la corrente transitante dovrebbe essere tale da non consentire un’ulteriore contrazione del filo prescelto; Il filo attivato deve poter raggiungere un punto di equilibrio termico, affinché la posizione sia mantenuta: per far questo non è possibile annullare la corrente d’alimentazione, altrimenti, a causa della convezione in aria, si verificherebbe l’effetto controproducente della transizione inversa, dalla fase austenitica (filo azionato) a quella martensitica (condizione iniziale).

Occorre poi tener presente come il materiale di cui sono composti i fili (ovvero una lega al Nichel-Titanio) presenti uno smorzamento intrinseco, dovuto alla transizione di fase. Questa caratteristica risulta di fondamentale importanza, in quanto, allo scarico, il sistema non tornerà violentemente alla posizione iniziale, ma con una certa inerzia.

Le considerazioni fin qui presentate, e le regolazioni sulla corrente stabi- lite nel ciclo di Figura 4.14, sono applicate per mezzo dell’invio al MosFet di un valore opportunamente scelto e calibrato secondo la situazione e il diametro del filo azionato: tutto questo consente un corretto funzionamento del sistema, evitando fastidiose vibrazioni. In aggiunta, poiché il dispositivo non sarà posizionato in un ambiente protetto, il controllo dovrà mantenere l’equilibrio della posizione anche con variazioni di temperatura.

Stabilita l’idea di base della logica di controllo e formalizzato l’algoritmo, quello che manca è creare un programma che permetta l’interazione e la comunicazione tra i vari dispositivi in gioco. Tale software è stato realizzato interamente in questa tesi, attraverso la programmazione in C++ (linguaggio su cui si basa anche la scheda di controllo utilizzata in tale sede).

Prima di procedere alla descrizione del software, è bene precisare il for- malismo che verrà adottato per la sua implementazione.

Com’è stato anticipato, ogni modulo è stato definito ora Joint: i marker posti sulla struttura faranno quindi riferimento al Joint di appartenenza, secondo quanto riportato in Figura 4.16.

Ogni possibile direzione e verso di moto, poi, sono stati numerati. Ovvia- mente si è pensato anche ad uno stop delle attività del sistema che assume un valore progressivo a quelli di direzionamento (Figura 4.17).

Detto questo, è possibile chiarire la composizione dell’interfaccia utente realizzata. Essa sarà composta di due schermate principali: la prima facente

Struttura a Geometria Variabile e Tracciamento Visivo

Figura 4.16: Joint di riferimento e marker sulla struttura completa.

Figura 4.17: Numerazione delle direzioni di moto e dello stop.

riferimento all’attivazione del sistema di tracciamento visivo e al settaggio di tutti i parametri relativi alla camera e ai marker; mentre la seconda alla gestione della scheda di controllo e alla scelta dei moti desiderati per ogni Joint.

Per come è stato concepito il software, è possibile attivare in manie- ra del tutto scorrelata un Joint o l’altro, e in direzioni o versi casuali. In questo modo l’esperienza dell’utente è quella di generare forme complesse a propria discrezione, senza dover essere vincolato da limitazioni strutturali o informatiche.

Il programma è stato pensato, sin dall’inizio, per essere anche modulare, con l’obiettivo di risultare ulteriormente implementabile in caso di una futura aggiunta di settori sulla struttura. Ogni Joint, infatti, ha a disposizione una finestra dedicata per l’inserimento dell’altezza di riferimento e per la scelta della tipologia di moto, del tutto indipendente da quella degli altri moduli costituenti il dispositivo a geometria variabile.

A seguire, una descrizione dettagliata dell’interfaccia utente (GUI) del software, con la spiegazione di tutti i menù e delle corrispettive funzioni.

Vision Control Form

La prima finestra di controllo riguarda l’attivazione del sistema di trac- ciamento visivo, ed è proposta in Figura 4.18.

Figura 4.18: Form di gestione tracciamento visivo e marker.

Attraverso questo pannello è possibile:

• selezionare la camera da utilizzare - Camera Selection; in questo caso si tratta di una Logitech c920 Pro;

• scegliere il formato di acquisizione immagine – Camera Format; per i test si è scelto una risoluzione di 1270 x 720 pixel;

• impostare il file di calibrazione della camera, per ottenere la matrice K corretta – Camera Calibration;

Struttura a Geometria Variabile e Tracciamento Visivo

• definire la codifica dei marker e la loro dimensione – Marker Settings; i marker sono codificati con i numeri 20 (riferimento), 21 (Joint 1) e 22 (Joint 2), mentre la loro dimensione è di 40 mm;

• visionare le coordinate dei marker; Quelle del Joint 1 sono riferite all’assoluto, mentre quelle del 2 al precedente;

• binarizzare l’immagine per il riconoscimento dei marker e l’esecuzione ottimale dell’algoritmo vision.

Il tasto di Reset permette l’inizializzazione del modulo di misura prima dello Start, ovvero l’impostazione del marker di riferimento come sistema di coordinate assoluto. Per migliorare l’accuratezza dell’algoritmo, la posizione effettiva di questo marker è scelta come media tra i valori letti in fase di setting preliminare.

System Control Form

Il cuore del software è costituito dalla finestra di attivazione della comu- nicazione con Arduino e scelta dei movimenti per la struttura.

Figura 4.19: Form di gestione comunicazione seriale e struttura.

Una volta individuata la connessione seriale con la scheda, il program- ma consente l’inizializzazione del collegamento (tasto Connect) o il suo ter- mine (tasto Disconnect). Il tasto Stop All permette all’utente di bloccare qualunque funzione attiva sui Joint.

All’atto della connessione, il software avvia automaticamente la gestione dei MosFet, rendendo possibile l’inserimento di un valore di target e la scelta del verso di moto. Il riferimento viene sempre impostato in valore assoluto: è la scelta della direzione di moto che impone in automatico un segno indicante il verso in cui si muoverà la struttura.

Figura 4.20: Finestre modulari per la scelta del riferimento e del moto.

Di fatto, quello che si cela dietro queste finestre è la ripetizione ciclica delle istruzioni di controllo (proposte in Figura 4.14), trenta volte al secondo per ogni Joint, inviando dati alla scheda Arduino che dovrà interpretarli per attivare il comando prescelto.

Il tutto si basa su un algoritmo di comunicazione seriale implementato in questa tesi, che prevede la scomposizione di una stringa di comando op- portunamente creata dal software; tale stringa risulta definita da sei cifre, suddivise in gruppi differenti, ognuna delle quali contiene un’informazione decifrabile da Arduino. a |{z} Joint b |{z} Direction c d e f | {z } MosFet Power (4.5)

Quindi, ogni lettera dell’esempio 4.5 assume un valore differente a seconda delle scelte dell’utente o della posizione rispetto al target impostato.

• a, indica il Joint di riferimento; può essre 1 o 2;

• b, rappresenta la direzione scelta; può essere un valore intero da 1 a 4, o 5 nel caso di Stop;

Struttura a Geometria Variabile e Tracciamento Visivo

• cdef, identificano il valore analogico di potenza da dare in lettura al MosFet; varia a seconda della posizione del Joint rispetto al riferimento. Per chiarire il concetto è utile fornire un esempio: qualora il programma inviasse ad Arduino una stringa del tipo:

240450 (4.6)

la scheda attiverebbe i MosFet del Joint 2, responsabili di muovere la struttura verso sinistra, con una potenza di 450 (2,3 V), dovendo tornare in posizione poiché oltre il target segnalato.

4.5 Collaudo e Risultati