SlideShare a Scribd company logo
1 of 74
Download to read offline
UNIVERSITÀ DEGLI STUDI DI TRIESTE
_____________________________________
Dipartimento di Ingegneria e Architettura
Corso di Studi in Ingegneria Elettronica e Informatica
SVILUPPO DI UN SOFTWARE IN JAVA PER IL
CONTROLLO DI UN BRACCIO ROBOTICO
TRAMITE UN DISPOSITIVO PER IL
RILEVAMENTO DELLA GESTUALITÀ
Tesi di Laurea Triennale
Candidato:
Glauco LORENZUT
Relatore:
Prof. Stefano MARSI
_____________________________________
Anno Accademico 2016/2017
1
Alla pazienza e amore dei miei genitori.
2
Ringraziamenti
Ringrazio il professor Stefano Marsi, che si è assunto l’ingrato compito di
farmi da relatore e mi ha aiutato con pazienza e disponibilità a venirne fuori.
Ringrazio la mia famiglia, che per tutti questi lunghi anni mi è stata vicino e
mi ha sostenuto con tutto l’amore possibile.
Ringrazio i miei amici Michela, Martina, Fabrizio e Federico per avermi
regalato un sorriso e anche più di uno, e per aver reso meno pesante questo mio
percorso.
Ringrazio di cuore Indiana, che con il suo amore e una pazienza
encomiabile mi ha supportato e sopportato in questi anni e soprattutto in
quest’ultimo periodo di tesi.
Ringrazio me stesso, per aver avuto la determinazione e cocciutaggine di
non mollare mai.
Ringrazio infine tutti coloro che direttamente o indirettamente hanno avuto
a che fare con questo lavoro. Al loro aiuto, spesso silenzioso e talvolta anonimo,
dedico un particolare mio sentimento di gratitudine.
3
Indice
Indice _____________________________________________3
Introduzione ________________________________________5
Capitolo 1: Nascita e sviluppo della Robotica _______________7
Le origini del nome ________________________________________ 7
Sviluppo dei robot nell’industria ______________________________ 9
Robot manipolatori _______________________________________ 18
Capitolo 2: Problematiche sul controllo __________________ 22
Posa di un corpo e matrici di rototraslazione ____________________ 23
Angoli di Eulero _________________________________________ 28
Cinematica Diretta________________________________________ 30
Convenzione di Denavit-Hartenberg __________________________ 33
Problema cinematico inverso________________________________ 37
4
Capitolo 3: Strumentazione utilizzata ____________________ 42
Braccio robotico _________________________________________ 42
Servomotori_____________________________________________ 44
Servo controller SSC-32U __________________________________ 48
Leap Motion ____________________________________________ 52
Capitolo 4: Sviluppo del Software _______________________ 59
GUI___________________________________________________ 60
Controllo del manipolatore _________________________________ 63
Conclusione________________________________________ 68
Risultati ottenuti__________________________________________ 69
Bibliografia ________________________________________ 70
5
Introduzione
In questa tesi viene affrontato il tema della progettazione e della successiva
realizzazione di uno specifico software dedicato al controllo di un braccio robotico
che deve consentire allo stesso di seguire, in tempo reale, il movimento e le gestualità
della mano dell’uomo.
Obiettivo finale è quello di riuscire a comandare un robot a distanza,
controllandone i movimenti meccanici, senza interagire direttamente con un
controller fisico, ma sfruttando un opportuno sensore ad infrarossi commerciale
(Leap Motion) [1] affinché ogni movimento della mano umana venga clonato dal
manipolatore.
Oggi esistono già progetti simili, basati sul sensore commerciale appena
citato, ma questi progetti si limitano a rilevare singoli gesti della mano e ad associarli
a precisi comandi che il braccio robotico deve eseguire (“avanti”, “indietro”, …)
oppure a ricercare un metodo risolutivo generalizzato della cinematica inversa; in
quest’ultimo caso, in particolare, è ben vero che si è raggiunto l’obiettivo di una
movimentazione generale del manipolatore, ma i suoi movimenti risultavano
bruschi, scattosi e imprecisi [2].
In questo progetto, invece, non si ricercheranno metodi generali di
movimentazione di robot; il focus sarà quello di individuare uno specifico metodo
deputato al controllo di un braccio a 5 gradi di libertà, puntando a far sì che i
movimenti del braccio stesso risultino quanto più fluidi e naturali possibile.
Per questo lavoro sono stati messi a disposizione dall’Università di Trieste un
braccio robotico AL5D, modello ad uso accademico prodotto dalla Lynxmotion
[3], e un controller Leap Motion prodotto dall’omonima ditta.
6
Le librerie del controller Leap Motion sono implementate per la maggior
parte dei linguaggi di programmazione, e quindi compatibili con gli stessi; si è qui
scelto di utilizzare il linguaggio Java per la realizzazione del software.
L’ambiente di sviluppo utilizzato è Eclipse [4], più semplice e intuitivo.
Il lavoro di tesi viene suddiviso nei seguenti capitoli i cui contenuti sono qui
di seguito sinteticamente riassunti:
• Cenni sulle origini della Robotica e breve descrizione dei suoi
sviluppi, presenti e futuri, tra interazione uomo-macchina e industria
del futuro.
• Descrizione degli strumenti matematici per la risoluzione di problemi
sul controllo dei bracci robotici, analisi dei problemi di cinematica e
dei metodi e convenzioni per risolverli.
• Analisi del braccio robotico utilizzato, del controller Leap Motion e
di tutti gli strumenti utili per la realizzazione del progetto.
• Descrizione dello sviluppo del software in Java, della realizzazione di
un’interfaccia grafica e implementazione del sistema di controllo per
bracci robotici basati sul controller Leap Motion.
Un ringraziamento particolare va all’amico e collega Federico Giacalone per
il supporto e l’aiuto nel montaggio e sviluppo del braccio robotico.
7
Capitolo 1:
Nascita e sviluppo della Robotica
Il concetto di robotica ha radici culturali profonde e antichissime, fin dagli
albori l’uomo ha desiderato infondere la vita nei suoi artefatti e la mitologia è ricca
di esempi dove, con un aiuto divino, riusciva nel suo intento (Pandora, il gigante
Talo, il golem, …).
Ci sono numerosi reperti antichi che attestano dei primi e rudimentali studi
e tentativi in tale ambito: Heron di Alessandria nel III secolo a.C. scrisse un trattato
sull’arte di fabbricare automi e già nell’Egitto del 1000 a.C. erano state fabbricate
bambole in legno che si muovevano grazie a dei meccanismi interni.
Tuttavia tutti questi sviluppi avevano unicamente una finalità “ludica” poiché
gli automi creati venivano utilizzati solamente per stupire un pubblico o intimorire i
fedeli, ed erano privi di una reale capacità produttiva.
Le origini del nome
La nascita degli attuali concetti di robot e robotica come oggi li si
considerano, cioè da un punto di vista scientifico e finalizzati al mondo del lavoro,
avviene appena nel ventesimo secolo e da una fonte non proprio canonica.
Il termine robot infatti fu introdotto dallo scrittore ceco Karel Čapek nel suo
racconto “R.U.R. (Rossumovi Univerzální Roboti)” del 1920 [5], tale parola deriva
dal termine robota che in lingua ceca significa lavoro pesante e a propria volta deriva
dall’antico slavo ecclesiastico rabota, che indicava il concetto di servitù.
8
In questo racconto di Čapek, il robot è un essere artificiale creato dal dottor
Rossum e successivamente prodotto in serie allo scopo di sostituire l’essere umano
in ogni compito, e con il fine di creare una società utopica, dove l’uomo si potesse
liberare dalla schiavitù del lavoro.
La nascita del concetto di robotica invece la si deve allo scrittore Isaac
Asimov, che nel racconto fantascientifico “Liar!” del 1941 [5], conia questo termine
per indicare la scienza che comprende lo studio e la creazione dei robot. Questi
ultimi, nelle sue opere, acquistano una tale intelligenza e comprensione di sé da
diventare soggetti attivi all’interno della società.
Per questo Asimov, che tutt’oggi è riconosciuto come il padre della robotica,
nelle sue opere pone le basi per un’analisi scientifica, etica e sociale che una tale
innovazione avrebbe comportato. Per far fronte a possibili distopie o “rivolte delle
macchine” Asimov inventa delle regole per il controllo dei robot, infatti ogni unità
robotica ha nella sua programmazione tre dogmi inviolabili che prendono il nome
di Leggi della Robotica:
1. Un robot non può recar danno a un essere umano, né permettere che, a
causa della propria negligenza, un essere umano patisca danno.
2. Un robot deve sempre obbedire agli ordini degli esseri umani, a meno che
contrastino con la Prima Legge.
3. Un robot deve proteggere la propria esistenza, purché questo non contrasti
con la Prima o la Seconda Legge.
È innegabile in effetti che la creazione di intelligenze artificiali complesse e
robot sempre più sofisticati stiano portando e porteranno nei prossimi anni ad uno
sconvolgimento della società e del mondo del lavoro, così come sono stati concepiti
e considerati fino ad oggi, ed è per questo che è riconosciuta la grandezza di Asimov
nell’aver anticipato tale futuro, come una specie di profeta della tecnologia.
9
Figura 1.1: catena di montaggio completamente automatizzata
Sviluppo dei robot nell’industria
Negli ultimi 50 anni la distanza tra fantascienza e realtà si è andata ad
accorciare sempre più e la figura del robot è divenuta un’entità fondamentale
nell’industria, dove sempre più lavori vengono totalmente o quasi automatizzati.
La robotica pertanto è divenuta ormai da tempo una vera e propria branca
dell’ingegneria che, attraverso un approccio pluridisciplinare, studia e sviluppa
metodi sempre più sofisticati per migliorare l’efficienza del robot nell’eseguire dei
compiti specifici riproducendo in modo automatico il lavoro umano.
In questo nuovo scenario si è passati da macchinari con gradi di libertà e
capacità di carico limitate, utilizzati per lo più nella saldatura e assemblaggio di
scocche nel settore automobilistico, a dei modelli evoluti e antropomorfi, con un
aumento di capacità e precisione che permette il loro massiccio utilizzo in tutti i tipi
di industria [figura 1.1].
"Un manipolatore con più gradi di libertà, governato automaticamente,
riprogrammabile, multiscopo, che può essere fisso sul posto o mobile per utilizzo
in applicazioni di automazioni industriali"
Definizione norma ISO TR/8373-2.3 di robot industriale [7]
10
I robot attualmente utilizzati sono dei sistemi ibridi complessi, composti da
vari sottoinsiemi hardware e software, dove componenti prettamente meccaniche,
come giunti e servomeccanismi, per l’esecuzione dei movimenti, vengono collegate
a componenti elettroniche quali computer e microcontrollori che devono essere
opportunamente programmate.
Sebbene esistano moltissime tipologie di robot differenti, ognuna sviluppata
per ricoprire gli impieghi più disparati, si può comunque catalogarli in due macro
categorie:
• Robot “non autonomi”: sono direttamente pilotati dall’uomo o guidati da un
software deterministico che fa eseguire loro sequenze prestabilite di
operazioni ripetitive e con un alto grado di precisione. Fanno parte di questa
categoria i robot utilizzati nelle fabbriche per adempiere a compiti specifici e
ripetitivi, poiché riescono a garantire in maniera più esatta ed efficiente
dell’uomo una produzione ad alta precisione, veloce e a costi ridotti.
Rientrano in questa categoria anche i robot utilizzati per lavorare in ambienti
sensibili o ostili (in ambito medico, nello spazio o a stretto contatto con
materiale pericoloso), essi sono molto più precisi e flessibili di quelli
impiegati nei settori ordinari e sono in grado di adattarsi alla variazione delle
condizioni operative, poiché non può esserci alcun intervento umano in caso
di errori. Si tratta tipicamente di robot mobili, pensati per operare in
ambienti non del tutto noti a priori o con possibili interferenze nel modello
d’ambiente di lavoro precedentemente programmato; tali robot hanno la
capacità di modificare il modello interno per correggerlo e perfezionarlo in
tempo reale. Per riuscire in tali compiti non definiti, i robot vengono spesso
dotati di sistemi di visione artificiale, in grado di identificare gli oggetti attorno
a loro, al fine di riuscire a manipolarli o a compiere semplici variazioni di
traiettoria e/o di logica di gestione. Sono quindi in grado di completare,
scegliendo la migliore strategia di controllo, il loro compito programmato a
fronte di fenomeni di disturbo non prevedibili a priori.
11
Figura 1.2: un cobot aiuta un operaio umano nello stabilimento Ford
• Robot “autonomi”: sono macchine in grado di operare in totale autonomia
ed indipendenza, senza dover sottostare all’ingerenza umana, e di prendere
decisioni anche a fronte di eventi totalmente inaspettati, imprevedibili
persino per i loro costruttori. Sono anche questi dei robot mobili e sono in
grado di operare in ambienti del tutto ignoti a priori, grazie ad una
programmazione che si rifà a tecniche di intelligenza artificiale (machine
learning, reti neurali, ...). Attualmente il robot autonomo non viene ancora
impiegato in mansioni industriali, poiché il loro costo è ad ora troppo elevato.
Un esempio evoluto di robot "non autonomo" sono gli ultimi esemplari
introdotti nella catena di montaggio dell’automobile Fiesta negli stabilimenti Ford di
Colonia in Germania [figura 1.2], infatti dal 2016 [8] è in fase di sperimentazione
l’uso dei cobots (co-robots): robot collaborativi in grado di lavorare assieme agli
operai della catena di montaggio, senza necessitare di protezioni.
Questo lavoro coordinato uomo-macchina è un approccio innovativo, infatti
fino al decennio 2010 i robot erano delimitati da delle transenne o protezioni per
12
evitare che potessero nuocere agli operai e quindi il lavoro automatico e quello
umano erano slegati.
In tempi recenti e con la nuova ricerca di un Industria 4.0 [9], si è scelto un
approccio diverso, integrando il lavoro robotico a quello umano.
Il cobot infatti è un robot “non autonomo” realizzato appositamente per
aiutare l’operatore umano e interagire in uno spazio di lavoro condiviso, quindi
possiede tutte le caratteristiche come visione artificiale e scocca “morbida”, per
evitare di nuocere all’operatore e modificare la propria traiettoria in tempo reale.
La sua invenzione risale al 1996 grazie a J. E. Colgate e M. Peshkin,
professori presso la Northwestern University [10], che nel brevetto lo descrivono
come “un’attrezzatura e un sistema per far interagire fisicamente una persona e un
manipolatore polifunzionale controllato da un computer”.
Il team General Motors ha utilizzato il termine Intelligent Assist Device
(IAD) [11] come alternativa al cobot, soprattutto nel contesto della gestione dei
materiali industriali e delle operazioni di assemblaggio di automobili.
Esempi di robot “autonomi” invece sono quelli utilizzati per il taglio dell’erba
nei giardini e nelle pulizie domestiche: mappano lo spazio di lavoro ex novo e in
tempo reale e decidono autonomamente quando partire, dove tagliare/pulire e
quando tornare alla base per ricaricarsi.
Ma un esempio evoluto di robot autonomo è il modello ASIMO (Advanced
Step in Innovative MObility) [12], un robot androide progettato e sviluppato
dall’azienda giapponese Honda.
Introdotto nel 2000, ASIMO è stato progettato per essere un assistente
mobile multifunzione in grado di camminare e di adattarsi ed interagire in diverse
situazioni a contatto con l’uomo, al fine di migliorare la qualità della vita.
L’ultimo modello ha l’aspetto di un piccolo astronauta, è alto 130 cm, pesa
48 kg e può correre su due piedi alla velocità di 9 km/h [figura 1.3].
13
Figura 1.3
ASIMO è il primo esempio di robot che incorpora il controllo del
movimento previsto (predicted movement control), una tecnica che permette al
robot di anticipare in tempo reale il suo prossimo movimento, spostando così il suo
baricentro in anticipo per garantire una maggiore flessibilità articolare e fluidità di
movimento, così da rendere la camminata più umana.
ASIMO quindi è in grado di camminare, correre, salire e scendere le scale,
stare in equilibrio su una gamba e interagire con suoi simili e gli esseri umani,
riuscendo a riconoscere le persone e a comunicarci.
Dalla sua prima presentazione ad oggi, questo modello risulta unico nel suo
genere, ed ha acquisito una notevole esposizione mediatica, con il fine di indirizzare
un maggior numero di studenti verso studi di carattere scientifico, attinenti alla
robotica.
Anno dopo anno la robotica si sta sempre più evolvendo ed espandendo in tutti i
settori, in un’epoca relativamente recente infatti ha trovato applicazione in modo
esponenziale in campi quali quello medico/chirurgico o di laboratorio che fino a
prima erano prerogativa della capacità e intelligenza umana.
14
Figura 1.4
Alcune case produttrici, infatti, hanno dovuto scontrarsi con problemi tecnici,
burocratici e perfino etici prima di poter ottenere le necessarie autorizzazioni per
permettere l’utilizzo dei loro robot in operazioni mediche o a stretto contatto con
l’essere umano.
Il primo robot in questa campo, il modello da Vinci [figura 1.4] [13], è stato
progettato e prodotto nella Silicon Valley, e nel 2000 ha ottenuto l’autorizzazione
per un primo intervento di laparoscopia dalla Food and Drug Administration, ente
americano per la regolamentazione dei prodotti alimentari e farmaceutici.
Negli ultimi anni la richiesta di automazione nelle industrie e in gran parte
delle aziende sta crescendo e ciò comporta una maggiore richiesta di robot
industriali.
Questo per far fronte al recente concetto di Industria 4.0 o Quarta
Rivoluzione Industriale, che prende il nome dall’iniziativa europea Industry 4.0, a
sua volta ispirata ad un progetto del governo tedesco che prevedeva investimenti su
infrastrutture, scuole, sistemi energetici, enti di ricerca e aziende per ammodernare
il sistema produttivo tedesco e riportarlo ai vertici mondiali rendendolo competitivo
a livello globale.
15
Figura 1.5: le innovazioni che hanno caratterizzato ogni Rivoluzione Industriale
La chiave di volta dell’Industria 4.0 sono i sistemi ciberfisici (CPS) ovvero sistemi
fisici che sono strettamente connessi con i sistemi informatici e che possono
interagire e collaborare con altri sistemi CPS [figura 1.5].
I punti cardine di questa nuova visione dell’industria sono [14]:
• Smart production: tecnologie produttive innovative che creano
collaborazione tra tutti gli elementi presenti nella produzione ovvero
collaborazione tra operatore, macchine e strumenti.
• Smart services: nuove infrastrutture fisiche e virtuali ed algoritmi informatici
che permettono di integrare i sistemi tra loro
• Smart energy: un nuovo modo di pensare lo spreco e il consumo energetico,
creando sistemi più performanti secondo i paradigmi tipici dell’energia
sostenibile.
16
Questi punti, grazie ad uno studio pubblicato sul Boston Consulting [15], si
ottengono adottando nuove tecnologie abilitanti, concetti già presenti ma che non
hanno mai sfondato il muro della divisione tra ricerca applicata e sistemi di
produzione veri e propri e che sono strettamente collegati alla robotica e
all’intelligenza artificiale:
• Advanced manufacturing solution: sistemi avanzati di produzione, ovvero
sistemi e macchinari interconnessi tra loro che permettano una maggiore
flessibilità e performance. In quest’ambito rientra la robotica avanzata, con
macchine dalla maggiore capacità e autonomia e allo stesso tempo macchine
interagenti con gli operatori, i cobot.
• Additive manufacturing: sistemi di produzione additiva che aumentano
l’efficienza dell’uso dei materiali, ne sono un esempio le stampanti 3D.
• Augmented reality: sistemi di visione con realtà aumentata per guidare meglio
gli operatori nello svolgimento dei loro compiti quotidiani.
• Simulation: simulazione tra macchine interconnesse per ottimizzare i
processi.
• Horizontal e vertical integration: integrazione e scambio di informazioni in
orizzontale e in verticale, tra tutti gli attori del processo produttivo.
• Industrial internet: comunicazione tra tutti gli attori del processo produttivo,
non solo all’interno dell’azienda, ma anche all’esterno grazie all’utilizzo di
reti locali o Internet.
• Cloud: implementazione di tutte le tecnologie cloud per il salvataggio online
delle informazioni.
17
Figura 1.6: stima +15% annua
Figura 1.7
• Cyber-security: sicurezza delle informazioni e dei sistemi che non devono
essere alterati dall’esterno.
• Big Data Analytics: tecniche di gestione di grandissime quantità di dati
attraverso sistemi aperti che permettono previsioni o predizioni.
Dalla richiesta degli ultimi anni [figure 1.6-1.7] [16] si può comprendere
come la robotica sia oramai passata da uno stato di pura speculazione e fantasia
umana ad essere una vera e propria scienza e insieme di tecnologie mature e
feconde.
18
Figura 1.8: rappresentazioni 3D di giunti rispettivamente prismatici e rotoidali
Robot manipolatori
Nel contesto della robotica generale, la maggior parte dei robot rientra nella
categoria dei robot manipolatori o bracci robotici.
Un manipolatore è un modello di robot industriale progettato come una serie
di bracci rigidi (link) che si estendono da una base a un terminale, uniti da
articolazioni (giunti o joint) azionate da un attuatore.
Il link iniziale è collegato alla base (terreno, carrello, …) e quello finale è
connesso all’end effector (pinza, saldatore), l’organo terminale che interagisce con
gli oggetti che il robot deve manipolare.
Spesso ha la struttura di un braccio antropomorfo (spalla, gomito, polso,
mano) e 6 articolazioni, poiché richiede almeno 6 gradi di libertà per posizionare
un oggetto manipolato o il proprio end effector in una posizione ed un orientamento
arbitrari nello suo spazio di lavoro.
Il braccio robotico viene azionato da degli attuatori, posti tipicamente in
corrispondenza delle articolazioni, che ne determinano la natura del movimento,
giunti rotoidali o giunti prismatici [figura 1.8].
La struttura tipica e più semplice di manipolatore è quella a catena cinematica
aperta o seriale; una catena cinematica è detta aperta quando i link sono disposti in
19
serie e connettono la base all’end effector senza formare circuiti chiusi tra loro, nel
qual caso si parla di catena cinematica chiusa.
In una catena cinematica aperta ogni giunto prismatico o rotoidale garantisce
un singolo grado di libertà, il primo tipo conferendo un moto traslatorio tra due link
mentre il secondo un moto rotatorio. Si prediligono i giunti rotoidali per una
maggiore compattezza e stabilità.
I manipolatori a cinematica aperta si dicono manipolatori seriali, e sono i più
usati per il minor numero di attuatori richiesti e quindi per una complessità di
controllo e un costo inferiori, mentre quelli a cinematica chiusa, detti manipolatori
paralleli, necessitano di più giunti per raggiungere gli stessi gradi di libertà e quindi
gli attuatori e la complessità di controllo aumentano, ma vengono utilizzati quando
sono richieste portate più elevate e si necessita di una maggiore rigidezza.
I gradi di libertà utili per manipolare un oggetto nello spazio in qualsiasi
posizione e orientamento sono 6, tre per posizionare un punto dell’oggeto nello
spazio di lavoro e tre per orientarlo rispetto ad una terna di riferimento.
Se si hanno più gradi di libertà, rispetto a quelli richiesti per manipolare
correttamente un oggetto, un robot si dice ridondante da un punto di vista
cinematico.
Un manipolatore ha uno spazio di lavoro limitato dalla sua costruzione e
geometria e dalla massima ampiezza di movimento a cui possono arrivare i giunti,
tale spazio rappresenta la porzione dell’ambiente circostante a cui può accedere
l’end effector.
I manipolatori più utilizzati a livello mondiale sono [17]:
• Manipolatore cartesiano [figura 1.9]
• Manipolatore SCARA [figura 1.10]
• Manipolatore antropomorfo [figura 1.11]
20
Figura 1.10
Figura 1.9
Manipolatore cartesiano
Il manipolatore cartesiano è un robot usato per operazioni di trasporto e
assemblaggio; è composto da 3 giunti prismatici che garantiscono un grado di libertà
per ogni grado di mobilità dell’end effector e non modifica l’orientamento
dell’oggetto manipolato.
Presenta ottime caratteristiche di rigidezza meccanica e di precisione di
posizionamento dell’end effector, che rimane costante nello spazio di lavoro e
monta attuatori elettrici o pneumatici, se ha a che fare con carichi più pesanti.
Manipolatore SCARA (Selective Compliance Assembly Robot Arm)
Il manipolatore SCARA è usato per la manipolazione di piccoli oggetti;
presenta 2 giunti rotoidali e uno prismatico, azionati da attuatori elettrici.
Presenta un’elevata rigidezza a carichi verticali, una cedevolezza a carichi
orizzontali e la precisione di posizionamento del polso si riduce al crescere della
distanza del polso stesso dall’asse del primo giunto.
21
Figura 1.11
Figura 1.12
Manipolatore antropomorfo
Il manipolatore antropomorfo è il robot che sarà trattato in questo elaborato,
per la sua stretta somiglianza in aspetto e movimenti al braccio umano; esso è
composto da tre link e tre giunti rotoidali, normalmente azionati da attuatori elettrici,
che determinano la posizione in tre dimensioni nello spazio di lavoro.
Il giunto della base è perpendicolare agli altri due giunti, paralleli tra loro;
grazie alla somiglianza al braccio umano, il secondo giunto viene anche chiamato
giunto spalla, e il terzo giunto gomito.
Mancando completamente i giunti prismatici, il manipolatore antropomorfo
perde del tutto la corrispondenza tra gradi di libertà e variabili dello spazio
cartesiano (si deve definire nelle variabili x, y, z un movimento generato da rotazioni
spaziali dei giunti); questo comporta anche un continuo cambiamento di precisione
nel posizionamento dell’end effector in tutto lo spazio di lavoro.
Il polso sferico [figura 1.12] è un pezzo aggiuntivo per i manipolatori, usato
più frequentemente nei manipolatori antropomorfi per arrivare a 6 gradi di libertà,
dotato di tre giunti rotoidali per determinare l’orientamento dell’end effector.
22
Figura 2.4
Capitolo 2:
Problematiche sul controllo
Come spiegato nel capitolo precedente, uno dei robot più utilizzati
nell’industria è il braccio o manipolatore robotico.
Un braccio robotico può essere schematizzato da un punto di vista meccanico
come una catena cinematica, composta da bracci connessi assieme da giunti rotoidali
o prismatici, che determinano il moto elementare di un braccio rispetto al
precedente e definiscono i gradi di libertà complessivi del manipolatore.
Ogni grado di libertà è dato dal numero di coppie giunto-braccio e
rappresenta il numero di variabili indipendenti necessarie per determinare
univocamente la sua posizione nello spazio.
Il moto complessivo della struttura è dato dalla composizione di ogni moto
elementare, ed è fondamentale descrivere la posizione e l’orientamento dell’organo
terminale (end-effector) rispetto alla base del braccio così da poter manipolare un
oggetto nello spazio.
Tipicamente i bracci robotici sono realizzati in modo tale da essere
schematizzati come catene cinematiche aperte, cioè dove ogni link è connesso con
23
Figura 2.5
al massimo altri due link, in questo modo si può mantenere la corrispondenza tra
gradi di libertà e coppie giunto-braccio, si snellisce il calcolo cinematico e si evitano
ridondanze [figura 2.1].
In questo capitolo verranno analizzati i problemi di cinematica che si sono
dovuti affrontare per controllare il braccio robotico, la teoria alla base del controllo
e le scelte intraprese per semplificare la complessità di calcolo.
Posa di un corpo e matrici di rototraslazione
Un corpo è completamente descritto nello spazio in termini della sua
posizione e del suo orientamento (in breve posa) rispetto a una terna di riferimento.
La posizione dell’oggetto è data dal punto 𝑜′ rispetto alla terna di coordinate
𝑂𝑥𝑦𝑧 [figura 2.2] è espressa in forma matriciale come:
Mentre l’orientamento è dato dai versori della terna 𝑂′ 𝑥′𝑦′𝑧′:
24
Figura 2.6
Utilizzando una notazione compatta i tre versori formano la matrice di
rotazione:
E, siccome i vettori colonna di R rappresentano dei versori di una terna
ortonormale, sono ortogonali tra loro e hanno norma unitaria; di conseguenza la
matrice R risulta essere una matrice ortonormale:
Le matrici di rotazione fondamentali sono quelle che esprimono le rotazioni
elementari, cioè una singola rotazione lungo un asse della terna di riferimento [18]:
Rotazioni lungo x, y, z:
[figura 2.3]
25
Figura 2.7
La matrice di rotazione R può assumere una triplice valenza:
• Fornisce l’orientamento di una terna di coordinate rispetto ad un’altra; i
vettori colonna della matrice R sono i coseni direttori, i coseni degli angoli
tra gli assi della terna ruotata rispetto alla terna di partenza.
• È l’operatore che consente di ruotare un vettore in una stessa terna di
coordinate [figura 2.3].
• Rappresenta una trasformazione di coordinate che mette in relazione le
coordinate di uno stesso punto in due terne differenti, ma di origine comune
[figura 2.4].
Per trasformare le coordinate di un punto p da una terna all’altra e viceversa
si usa:
Con lo stesso procedimento si possono anche combinare più rotazioni
elementari per generare qualsiasi rotazione arbitraria:
con
26
L’apice del vettore p indica rispetto a quale terna esso è descritto, mentre
nella matrice R apice e pedice indicano rispettivamente la terna rispetto alla quale
avviene la rotazione e la terna che ruota; la terna espressa nell’apice di R si chiama
terna corrente.
La rotazione complessiva è composta da una successione di rotazioni parziali,
ognuna attuata sull’esito della rotazione precedente; la matrice che indica tale
rotazione complessiva è data dalla moltiplicazione delle matrici delle rotazioni
parziali da sinistra verso destra.
Per le caratteristiche di ortonormalità delle matrici di rotazione risulta inoltre:
Oltre che dalla rotazione, la posa di un corpo rigido nello spazio è data anche
dalla sua posizione, essa è individuata in termini della posizione di un opportuno
punto solidale al corpo rispetto a una terna di riferimento e l’operazione che la
definisce è la traslazione.
La trasformazione di coordinate di un vettore da una terna all’altra è la
combinazione di rotazione e traslazione e si ottiene con semplici considerazioni
geometriche come:
Se si vuole ottenere una rappresentazione compatta del legame esistente tra
le rappresentazioni delle coordinate di uno stesso punto rispetto a due terne
differenti [figura 2.5], si può introdurre la rappresentazione omogenea di un
generico vettore, aggiungendo una quarta componente unitaria [17]:
27
Figura 2.5
Grazie a tale rappresentazione si può arrivare ad una rappresentazione della
trasformazione di coordinate tramite una matrice [ 4 x 4 ] che prende il nome di
matrice di trasformazione omogenea:
con
La trasformazione di coordinate dalla terna 0 alla terna 1 è descritta con la
formula inversa:
Si nota come la proprietà di ortogonalità non è più valida per la matrice di
trasformazione omogenea, e quindi:
In definitiva una matrice di trasformazione omogenea A esprime in una
forma compatta la trasformazione di coordinate tra due terne.
28
Se le terne hanno la stessa origine, A si riduce essenzialmente ad una matrice
di rotazione; nel caso invece di terne con origini distinte, A esprime anche la
traslazione delle due origini e consente di mantenere la notazione con apice e pedice
della matrice di rotazione, che permette di definire la terna corrente e la terna fissa.
Allo stesso modo delle matrici di rotazione, anche una successione di
trasformazioni consecutive di coordinate si compone per prodotto come segue:
Angoli di Eulero
L’utilizzo delle matrici di rotazione fornisce una descrizione ridondante
dell’orientamento di una terna, poiché ogni matrice di rotazione è caratterizzata da
nove elementi che non sono indipendenti ma legati tra di loro dai sei vincoli dovuti
alle condizioni di ortogonalità.
In realtà bastano quindi solo tre parametri effettivi per descrivere
l’orientamento, una descrizione con solo parametri indipendenti tra loro costituisce
una rappresentazione minima.
In generale una rappresentazione minima del gruppo speciale ortonormale
SO(m) richiede m(m-1)/2 parametri, quindi per parametrizzare SO(3) sono
necessari appunto 3 parametri.
Tale rappresentazione minima dell’orientamento può essere ottenuta
utilizzando un insieme di tre angoli 𝝓 = [ 𝝋 𝝑 𝝍 ]
T
.
Come si è visto, considerando le matrici di rotazione che esprimono la
rotazione elementare intorno agli assi, ogni matrice di rotazione può essere ricavata
per composizione di tre rotazioni elementari secondo opportune sequenze, in
maniera tale da garantire che due rotazioni successive non avvengano intorno ad assi
paralleli. Questo comporta che, tra le 27 combinazioni di 3 angoli possibili, solo 12
siano adatti a questo scopo, essi prendono il nome di angoli di Eulero.
29
Figura 2.6
Nella nostra trattazione abbiamo scelto una precisa terna, quella degli angoli
ZYX, o angoli RPY dalle iniziali dei termini inglesi Roll - Pitch - Yawn, usati in
ambito (aero)nautico, in italiano tradotti come rollio, beccheggio e imbardata.
In questo caso la terna 𝝓 = [ 𝝋 𝝑 𝝍 ]
T
rappresenta rotazioni definite
rispetto a una terna fissa solidale al baricentro dello scafo [figura 2.6].
La rotazione complessiva rappresentabile con gli angoli RPY si può ottenere
attraverso le seguenti rotazioni elementari:
• Si ruota la terna origine di un angolo 𝜓 intorno all’asse x (imbardata); tale
rotazione è descritta dalla matrice di rotazione 𝑅 𝑥(𝜓).
• Si ruota la terna origine di un angolo 𝜗 intorno all’asse y (beccheggio); tale
rotazione è descritta dalla matrice di rotazione 𝑅 𝑦(𝜗).
• Si ruota la terna origine di un angolo 𝜑 intorno all’asse z (rollio); tale
rotazione è descritta dalla matrice di rotazione 𝑅 𝑧(𝜑).
30
La rotazione globale della terna è caratterizzata dalla matrice ottenuta
moltiplicando da destra verso sinistra le matrici rappresentative delle rotazioni
elementari effettuate:
Cinematica Diretta
Un manipolatore è costituito da un insieme di bracci connessi in cascata
tramite coppie cinematiche o giunti, tale struttura forma una catena cinematica, dove
un estremo di essa è vincolato alla base mentre all’altro estremo è connesso un end
effector per poter manipolare gli oggetti.
In questo elaborato si tratteranno solamente manipolatori seriali, quindi
verranno analizzate solamente catene cinematiche aperte: tutti i bracci sono collegati
al massimo ad altri due bracci e non si formano sequenze ad anello.
La struttura meccanica di un manipolatore è caratterizzata da un numero di
gradi di libertà che ne determinano la postura, cioè la descrizione di tutti i corpi
rigidi che la costituiscono; ogni grado di libertà viene associato ad un giunto e
costituisce una variabile di giunto.
Obiettivo della cinematica diretta è la determinazione della posa dell’end
effector in funzione dei valori assunti dalle variabili di giunto.
La posa dell’end effector rispetto ad una terna di riferimento è caratterizzata
dal vettore posizione dell’origine e dai versori di una terna solidale all’end effector
stesso.
Tale terna solidale ad esso è detta terna utensile, e si sceglie in maniera
conveniente per ogni tipologia di end effector, mentre la terna di riferimento è la
terna base 𝑂 𝑏 − 𝑥 𝑏 𝑦 𝑏 𝑧 𝑏.
Con riferimento ad un organo terminale di tipo pinza, l’origine della terna
utensile 𝑝𝑒 si pone al centro della pinza, il versore 𝑎 𝑒 (approccio) si sceglie nella
31
Figura 2.7
direzione di avvicinamento ad uno oggetto, il versore 𝑠𝑒 (scivolamento) si sceglie
normale ad 𝑎 𝑒 nel piano di scorrimento degli elementi prensili, e il versore 𝑛 𝑒
(normale) si sceglie normale agli altri due, in modo tale da formare una terna levogira
[figura 2.7].
La funzione cinematica diretta è espressa dalla matrice di trasformazione
omogenea in cui q è il vettore [ n x 1 ] delle variabili di giunto:
Affrontando catene cinematiche semplici, con relativamente pochi elementi
e quindi poche variabili di giunto, si può calcolare la cinematica diretta grazie ad una
semplice analisi geometrica della struttura del manipolatore assegnato.
Quando però la struttura del manipolatore risulta complessa e il numero di
giunti diventa elevato, è preferibile un utilizzo di una procedura sistematica e
generale.
32
Figura 2.8
La definizione di tale procedura sistematica per il computo della cinematica
diretta scaturisce naturalmente dalla struttura a catena cinematica aperta del
manipolatore.
Un manipolatore seriale infatti è costituito da n+1 bracci connessi tra loro
tramite n giunti, dove ogni giunto fornisce un singolo grado di libertà corrispondente
alla variabile di giunto, e fissato il braccio 0 convenzionalmente a terra.
Siccome ciascun giunto connette al massimo due bracci consecutivi, si può
isolare il problema della definizione della funzione di cinematica diretta in due sotto
problemi: il problema della descrizione di ciascun legame cinematico tra bracci
consecutivi e la successiva ricombinazione delle singole descrizioni in maniera
ricorsiva per poter giungere alla descrizione complessiva della cinematica del
manipolatore.
Si procede quindi alla definizione delle terne di coordinate solidali a ciascun
braccio, dal braccio 0 al braccio n [figura 2.8], e si calcolano le matrici di
trasformazione omogenea di tra ogni coppia di terne.
33
La trasformazione di coordinate complessiva che esprime posizione e
orientamento della terna n rispetto alla terna 0 è data da:
Tale calcolo è ricorsivo e viene ottenuto in maniera sistematica attraverso i
semplici prodotti delle matrici di trasformazione omogenea, ognuna delle quali
risulta funzione di una singola variabile di giunto.
Infine la trasformazione di coordinate effettiva che descrive la posa della
terna utensile rispetto alla terna base viene ottenuta come:
Le due trasformazioni omogenee della terna base e della terna utensile sono
tipicamente costanti e descrivono posizione e orientamento rispettivamente della
terna 0 rispetto alla terna base e della terna utensile rispetto alla terna n.
Convenzione di Denavit-Hartenberg
Per calcolare l’equazione cinematica diretta per un manipolatore seriale,
attraverso l’espressione ricorsiva descritta nel capitolo precedente, bisogna delineare
un metodo generale e sistematico per definire posizione e orientamento relativi di
due bracci consecutivi.
Il problema si riconduce all’individuazione delle terne solidali a ciascun
braccio e alla determinazione della matrice di trasformazione omogenea che lega le
due terne.
Attraverso la convenzione di Denavit-Hartenberg (DH) si possono risolvere
entrambi i problemi, permettendo di esprimere la posa dell’end effector rispetto al
sistema di riferimento della base, a cui e fissato il braccio.
34
Figura 2.9
Come primo passo si definiscono gli assi dei giunti [figura 2.9], assumendo
come asse i l’asse del giunto che connette il braccio i-1 al braccio i, successivamente
si passa alla definizione della terna i-esima [17][19]:
• si sceglie l’asse 𝑧𝑖 giacente lungo l’asse del giunto i+1
• si individua 𝑂𝑖 all’intersezione dell’asse 𝑧𝑖 con la normale comune (la retta a
cui appartiene il segmento di minima distanza tra due assi sghembi) agli assi
𝑧𝑖−1 e 𝑧𝑖, e con 𝑂𝑖′ si indica l’intersezione della normale comune con 𝑧𝑖−1
• si assume l’asse 𝑥𝑖 diretto lungo la normale comune agli assi 𝑧𝑖−1 e 𝑧𝑖 con
verso positivo dal giunto i al giunto i+1
• si sceglie l’asse 𝑦𝑖 in modo da completare una terna levogira
La convenzione di Denavit-Hartenberg fornisce una definizione non univoca
di tale terna nei seguenti casi:
35
• Nella terna 0, per la quale la sola direzione dell’asse 𝑧0 risulta specificata e si
possono quindi scegliere arbitrariamente 𝑂0 e 𝑥0, ricordando che 𝑦0 deve
essere definito per completare la terna levogira.
• Nella terna n, per la quale il solo asse 𝑥 𝑛 risulta soggetto a vincolo (deve
essere normale all’asse 𝑧 𝑛−1), infatti non esiste il giunto n+1, per cui non è
definito 𝑧 𝑛 e lo si può scegliere arbitrariamente.
• Quando due assi consecutivi sono paralleli, in quanto la normale comune tra
loro non è univocamente definita.
• Quando due assi consecutivi si intersecano, in quanto il verso di 𝑥𝑖 è
arbitrario.
• Quando il giunto i è prismatico, nel qual caso la sola direzione dell’asse 𝑧𝑖−1
è determinata.
In tutti questi casi si può sfruttare tale indeterminazione per semplificare la
procedura ricercando, per esempio, condizioni di allineamento tra gli assi di terne
consecutive per snellire la complessità della formula.
Una volta definite le terne solidali ad ogni braccio si passa alla definizione dei
seguenti parametri:
• 𝑎𝑖 distanza di 𝑂𝑖 da 𝑂𝑖′
• 𝑑𝑖 coordinata su 𝑧𝑖−1 di 𝑂𝑖
• 𝛼𝑖 angolo intorno all’asse 𝑥𝑖 tra l’asse 𝑧𝑖−1 e l’asse 𝑧𝑖 valutato positivo in
senso antiorario;
• 𝜗𝑖 angolo intorno all’asse 𝑧𝑖−1 tra l’asse 𝑥𝑖−1 e l’asse 𝑥𝑖 valutato positivo in
senso antiorario.
36
Di questi quattro parametri, 𝑎𝑖 e 𝛼𝑖 sono sempre costanti e dipendono dalla
geometria del manipolatore mentre degli altri due uno soltanto è variabile in
dipendenza dal tipo di giunto utilizzato per connettere il braccio i-1 al braccio i: se
il giunto i è rotoidale la variabile è 𝜗𝑖, se è prismatico la variabile è 𝑑𝑖.
A questo punto si può definire la matrice di trasformazione omogenea che
lega la terna i alla terna i-1, essa è composta a sua volta da due matrici di
trasformazione:
• la matrice che porta dalla posa della terna i-1 a quella della terna i′, traslando
di 𝑑𝑖 e ruotando 𝜗𝑖 lungo l’asse 𝑧𝑖−1
• la matrice che porta dalla posa della terna i′ a quella della terna i, traslando
di 𝑎𝑖 e ruotando 𝛼𝑖 lungo l’asse 𝑥𝑖′
• La trasformazione di coordinate complessiva si ottiene moltiplicando le
precedenti matrici:
37
Questa procedura può essere applicata con semplicità a qualsiasi catena
cinematica aperta anche complessa; per ottenere infine la funzione cinematica,
come abbiamo visto nel precedente paragrafo, è necessario moltiplicare assieme
tutte le matrici di trasformazione omogenea e poi moltiplicare il prodotto per le
trasformazioni omogenee della terna base e della terna utensile:
Problema cinematico inverso
Come si è visto, la cinematica diretta definisce le relazioni funzionali esistenti
tra le variabili di giunto Θ e la posa dell’end effector Χ 𝐸𝐸:
Χ 𝐸𝐸 = {𝑥 𝑒, 𝑦𝑒, 𝑧 𝑒, 𝜗𝑥, 𝜗 𝑦, 𝜗𝑧}
Χ 𝐸𝐸 = 𝑓(Θ)
Il problema della cinematica inversa, invece, affronta la determinazione delle
variabili di giunto che un manipolatore deve assumere una volta assegnata la posa
dell’end effector [20]:
Θ = 𝑓−1(Χ 𝐸𝐸)
La risoluzione di tale problema è di notevole importanza per tradurre le
specifiche di moto assegnate all’end effector nello spazio operativo, nei moti
corrispondenti nello spazio dei giunti, per consentire l’effettuazione del movimento
desiderato; inoltre tale problema risulta molto più complesso da risolvere rispetto a
38
Figura 2.10
quello della cinematica diretta poiché non esiste alcun metodo di tipo generale e
sistematico per trovare una soluzione ad esso.
Questo perché nell’equazione cinematica diretta la matrice di trasformazione
finale è determinata in maniera univoca, una volta assegnate le variabili di giunto,
mentre il problema cinematico inverso risulta più complesso per i seguenti motivi
[17]:
• le equazioni da risolvere sono in generale equazioni non lineari di cui non
sempre è possibile trovare una soluzione analitica (in forma chiusa)
• si possono avere soluzioni multiple [figura 2.10]
• si possono avere infinite soluzioni, come nel caso di un manipolatore
ridondante
• possono non esistere soluzioni ammissibili, data la struttura cinematica del
manipolatore
Per quanto riguarda l’esistenza di soluzioni, questa è garantita se la posa
assegnata appartiene allo spazio di destrezza del manipolatore, cioè un sottoinsieme
dello spazio di lavoro dove l’end effector può arrivare con più di un orientamento.
39
Il problema delle soluzioni multiple dipende invece non solo dal numero dei
gradi di libertà, ma anche dal numero di parametri di Denavit-Hartemberg
( 𝑎𝑖, 𝑑𝑖, 𝛼𝑖, 𝜗𝑖), in generale: maggiore è il numero di parametri diversi da 0,
maggiore è il numero di configurazioni ammissibili.
Prendendo come esempio un manipolatore seriale a 6 gradi di libertà e senza
fine-corsa meccanici, cioè ogni giunto libero di muoversi per tutta l’ampiezza
geometrica possibile (giunti rotoidali 360°) e i bracci non generano collisione tra loro
o con il suolo, esistono in generale fino a 16 soluzioni possibili.
La presenza di fine-corsa meccanici ai giunti o criteri di scelta oculati per la
ricerca dei parametri DH potrebbe eventualmente ridurre il numero di soluzioni
multiple riscontrabili nella struttura reale.
Per risolvere il problema della cinematica inversa vengono utilizzati diversi
metodi, per giungere alla definizione di due tipologie di soluzioni:
• soluzioni analitiche (o in forma chiusa)
• soluzioni numeriche
I metodi che ricercano una soluzione analitica consistono nella ricerca delle
soluzioni dell’equazione:
𝐴 𝑒
𝑏( 𝜗1, . . . , 𝜗 𝑛) = 𝑇 = [
𝑟11 𝑟12 𝑟13 𝑝 𝑥
𝑟21 𝑟22 𝑟23 𝑝 𝑦
𝑟31 𝑟32 𝑟33 𝑝𝑧
0 𝑂 𝑂 1
]
Dove 𝐴 𝑒
𝑏
è la matrice omogenea della cinematica diretta e 𝑇 è la posa dell’end
effector espressa in forma matriciale.
L’obiettivo della risoluzione analitica è trovare i 𝜗0, . . . , 𝜗 𝑛 tali che soddisfino
l’equazione matriciale.
Data la struttura della matrice omogenea infatti, questa equazione
corrisponde a 12 equazioni trascendenti non lineari con n variabili di giunto
incognite [1].
40
Per risolvere l’equazione si può utilizzare un approccio algebrico o uno
geometrico.
Con l’approccio algebrico si identifica il sistema di equazioni contenente le
posizioni dei giunti e lo si manipola algebricamente per giungere ad una soluzione,
riducendo il numero di variabili in modo tale da trovare una qualche dipendenza
tra loro.
L’approccio geometrico invece prevede di prendere in considerazione la
struttura del manipolatore e di suddividere il problema generale in due sotto
problemi di cinematica inversa, trattando separatamente posizione ed orientamento,
che risultano più semplici da risolvere.
Affinché tali metodi di risoluzione forniscano una soluzione analitica, sono
necessarie delle condizioni sufficienti; per un manipolatore a sei gradi di libertà, ad
esempio, tali condizioni sono che gli assi di 3 giunti rotoidali consecutivi si devono
intersecare in un punto (polso sferico) oppure che gli assi di 3 giunti consecutivi
devono essere paralleli ad un altro asse.
Le soluzioni analitiche sono preferibili alle soluzioni numeriche, poiché i
calcoli possono essere eseguiti in modo molto rapido e questa velocità è
fondamentale per i robot che devono calcolare i propri movimenti in tempo reale.
Un altro vantaggio molto utile per preferire le soluzioni analitiche, è dato
dalla possibilità di trovare tutte le soluzioni per la posa dell’end effector, ottenendo
una maggior flessibilità rispetto alle tecniche che convergono ad una singola
soluzione.
Purtroppo non tutti i tipi di manipolatori garantiscono l’esistenza di una
soluzione analitica, anche se normalmente le aziende costruttrici di bracci robotici
tendono a progettarli in modo tale da soddisfare le condizioni per garantirne
l’esistenza.
Quando non è possibile giungere a tale soluzione, si procede a ricercare una
soluzione numerica; i metodi per giungere a tale soluzione non dipendono dalla
struttura del manipolatore e possono essere quindi applicati a qualunque
41
configurazione; il loro svantaggio però è che possono essere lenti ed in alcuni casi
non forniscono tutte le possibili soluzioni.
Esiste un largo numero di metodi iterativi differenti per trovare una soluzione
numerica al problema della cinematica inversa.
Molti di essi convergono ad una singola soluzione basandosi su una stima
iniziale e la qualità di tale stima ha un notevole impatto sul tempo di calcolo per
arrivare alla soluzione reale.
Quindi, nel caso in cui non si giunga ad una soluzione analitica per una
particolare configurazione di manipolatore, i metodi tradizionali richiedono una
elevata complessità di calcolo dovuta all’articolata struttura del manipolatore.
42
Figura 3.8
Capitolo 3:
Strumentazione utilizzata
Braccio robotico
Per questo progetto, è stato messo a disposizione dall’università un
manipolatore robotico AL5D della Lynxmotion [figura 3.1].
Lynxmotion è un’azienda americana fondata nel 1995 da Jim Frye ed è una
delle più vecchie nella produzione di kit robotici per uso accademico [3].
Il AL5D PLTW Robotic Arm Kit è un modello che fa parte dei kit modulari
Set Servo Erector, invenzione della Lynxmotion per permettere la facilità di
montaggio e la compatibilità tra tutti i propri prodotti, per incentivare la
sperimentazione di diverse configurazioni robotiche.
43
Figura 3.2
Figura 3.3
Il kit AL5D è un modello di piccole dimensioni in alluminio pensato per uso
didattico, monta cinque servomotori e ha come end effector una pinza per afferrare
gli oggetti, così da simulare il comportamento della mano umana.
Questo manipolatore monta 5 servomotori e ha 4 gradi di libertà; per
aumentare la sua destrezza lo si è dotato di un kit per il polso rotante a medio carico,
il Wrist Rotate Upgrade (Medium Duty) sempre facente parte del Set Servo Erector
della Lynxmotion [figura 3.2].
Questa miglioria ha portato il braccio robotico ad avere 5 gradi di libertà,
nonché a poter mimare il comportamento del polso umano [figura 3.3].
44
Figura 3.4
Servomotori
Per muovere i giunti del braccio robotico sono messi in dotazione 6
servomotori elettrici.
Il servomotore è una particolare tipologia di motore che si differenzia dai
motori tradizionali, poiché le sue condizioni operative sono soggette ad ampie e
spesso repentine variazioni, sia nel campo della velocità sia della coppia motrice.
Per quanto appena detto, il servomotore è uno strumento molto utilizzato
nella robotica per l’azionamento dei giunti.
Esso si presenta come un piccolo contenitore di materiale plastico da cui
fuoriesce un perno in grado di ruotare in un angolo compreso tra 0 e 180°
mantenendo stabilmente la posizione raggiunta.
Anche la limitazione a soli 180 gradi di escursione può sembrare penalizzante
per il movimento, esso può risultare più che sufficiente per manovrare un robot,
poiché la geometria di quest’ultimo e/o la combinazione di più servomotori
garantisce tutta la mobilità e la destrezza richieste.
45
Figura 3.5
All'interno del servomotore è presente un motore a corrente continua, un
meccanismo di demoltiplica, cioè una serie di ingranaggi che riducono la velocità
del motore e aumentano la coppia motrice, un circuito di controllo e un
potenziometro [figura 3.4] [21].
Il circuito e il motore vengono alimentati da una tensione continua
stabilizzata, normalmente la maggior parte dei servomotori funziona con un valore
compreso tra 4,8 V e 6,0 V.
Il motore liberamente ruoterebbe ad una velocità troppo elevata per essere
impiegata direttamente nei robot, quindi tutti i servomotori prevedono ingranaggi
che riducono l'uscita del motore a una velocità compresa tra 50 giri/m e 100 giri/m.
Il motore, attraverso il meccanismo di demoltiplica, muove il perno esterno
verso la posizione desiderata; una volta raggiunta, il perno si blocca grazie al circuito
di controllo interno, in grado di rilevare l'angolo di rotazione raggiunto tramite un
potenziometro resistivo e spegnere il motore nel punto desiderato.
L’insieme di motore, potenziometro e circuito di controllo definisce un
sistema di feedback ad anello chiuso [figura 3.5].
Il motore si aziona grazie all’invio di un segnale digitale al circuito di
controllo, la rotazione precisa di un angolo da parte di un servomotore in risposta a
determinati segnali digitali rappresenta una delle funzionalità più sfruttate in tutti i
campi della robotica.
46
Figura 3.6
Figura 3.7
Il servomotore è normalmente collegato ad una scheda integrata attraverso
un cavo composto da 3 fili.
Due di questi fili sono riservati all'alimentazione in corrente continua (rosso
per la positiva, nero per la negativa), il terzo filo (normalmente di colore bianco o
giallo) è riservato per il controllo del posizionamento [figura 3.6].
Tramite il filo del controllo è necessario applicare un segnale impulsivo o
PWM (Pulse Width Modulation) le cui caratteristiche sono quasi univoche per
qualsiasi servomotore disponibile in commercio.
Per riuscire a pilotare un servomotore, la scheda di controllo
(microcontrollore) trasmette alla scheda di controllo del servomotore circa 50
impulsi positivi al secondo (uno ogni 20 ms), la durata di tale impulso stabilisce la
posizione del perno (con un intervallo massimo compreso tra 0.25ms e 2.75ms).
Con un impulso di durata pari a 1.5 ms il perno del servomotore si pone
esattamente al centro del suo intervallo di rotazione, se la durata è minore il perno
ruota in senso antiorario altrimenti si avrà una rotazione in senso orario quando
l'impulso fornito ha durata superiore [figura 3.7].
47
Il potenziometro del servomotore svolge un ruolo fondamentale poiché esso
consente di stabilire l'istante in cui il motore ha portato l'albero di uscita nella
posizione desiderata, essendo collegato solidamente ad esso.
Fungendo da partitore di tensione, il potenziometro fornisce al circuito di
controllo una tensione che varia in funzione della variazione dell'uscita del
servomotore.
Il circuito di controllo del servomotore mette in relazione questa tensione
con la temporizzazione degli impulsi digitali di ingresso e genera un segnale di errore
nel caso in cui debba correggere la tensione da inviare al motore.
Questo segnale di errore è proporzionale alla differenza rilevata tra la
posizione del potenziometro e la temporizzazione definita dal segnale in ingresso.
Per compensare questa differenza, il circuito di controllo invia al motore un
segnale che tiene conto di questo errore, fino a quando non lo annulla e spegne il
motore.
I servomotori del manipolatore utilizzato in questa trattazione sono di
categoria entry level: poco precisi, facilmente soggetti ad usura ma con un costo
molto basso.
Caratteristiche fondamentali per la descrizione di un servomotore sono [21]:
• Coppia motrice: è il momento meccanico del sistema di forze esercitate dal
motore sul perno. Viene espresso in chilogrammo forza per centimetro, cioè
il lavoro necessario per sollevare di un centimetro un corpo con massa di un
chilogrammo. I servomotori possiedono una coppia motrice considerevole,
soprattutto grazie agli ingranaggi di riduzione della velocità del motore.
• transitorio (o slew rate): esprime una misura approssimativa del tempo
richiesto dal servomotore per ruotare il motore di 60°, più è piccolo il
transitorio e più veloce risulta il suo funzionamento; i servomotori di piccole
dimensioni tendono ad avere un transitorio più piccolo rispetto a quelli di
dimensioni più grandi.
48
Figura 3.8
*I DUE VALORI RIPORTATI IN OGNI CASELLA DELLACOLONNA INDICANO IL VALORE RISCONTRATO A SECONDA CHE I SERVOMOTORI
LAVORINO A 4.8 V OPPURE 6 V
Servo controller SSC-32U
MODELLO
[22][23]
POSIZIONE
TRANSITO *
s/60°
COPPIA MOTRICE *
Kg ∙ cm
HS-485HB BASE 0.2 – 0.17 5.2 – 6.4
HS-805BB SPALLA 0.19 - 0.14 19.8 – 24-7
HS-755HB GOMITO 0.28 – 0.23 11 – 13.2
HS-645MG
POLSO
(BECCHEGGIO)
0.24 – 0.20 7.7 – 9.6
HS-225MG
POLSO
(ROLLIO)
0.14 – 0.11 3.9 – 4.8
HS-422 PINZA 0.21 – 0.16 3.3 – 4.1
49
Compresa all’interno del kit del braccio AL5D, vi è una scheda elettronica
SSC-32U per il controllo dei servomotori [figura 3.8].
Lynxmotion SSC-32U è un servo controller dedicato con un core Atmel
ATmega328p, ha un range da 0.50 𝑚𝑠 a 2.50 𝑚𝑠 che fa fronte ad un intervallo di
circa 180°, è caratterizzato inoltre da un’alta precisione (1 𝜇𝑠) che gli consente un
posizionamento preciso; per questi motivi risulta utilizzabile per la maggior parte dei
servomotori [3].
Da notare che, siccome SSC-32U è un servo controller dedicato, come tale
non è programmabile ma semplicemente riceve ed esegue comandi inviati ad esso
da un dispositivo esterno come un computer o un microcontrollore.
Questo può risultare molto utile con un microcontrollore, poiché si risparmia
la memoria di quest’ultimo, non dovendo implementargli un codice per la gestione
dei servomotori.
Mentre, per essere collegato ad un computer, SSC-32U è munito di un
ingresso USB seriale attraverso il quale può essere sia alimentato che ricevere i
comandi di posizionamento dei servomotori.
Il microprocessore del servo controller può ricevere solo comandi inviati in
formato seriale, quindi un chip FTDI converte il datastream USB in seriale e
consente alla scheda di essere rilevata come porta COM del computer una volta
collegata.
SSC-32U può controllare fino a 32 servomotori, ognuno di essi può essere
collegato ai suoi 3 pin per la massa, la tensione di alimentazione e l’invio del segnale
per il comando di posizione.
Il controllo del movimento viene gestito attraverso l’invio di una stringa di
caratteri ASCII che invia un comando che garantisce: una risposta immediata, una
velocità controllata, un movimento temporizzato o una combinazione di essi.
Il movimento temporizzato è un comando molto utile per i manipolatori,
poiché garantisce l’inizio e la fine di un movimento di tutti i servomotori richiesti in
un tempo prestabilito; questo è interessante poiché il servo controller riesce a dare
una velocità precisa ad ogni servomotore in modo tale che si rispetti questo vincolo
50
di tempo, quindi un servomotore che si deve muovere di 180° andrà tipicamente
più veloce di uno che debba muoversi di 30°.
Il protocollo di SSC-32U per posizionare uno o più servi è semplice e
intuitivo, esso si compone di un segnale seriale composto da una stringa in caratteri
ASCII nel seguente formato [24]:
# < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 > 𝐓 < 𝐭𝐦𝐩 > < 𝐜𝐫 >
• #< 𝐜𝐚𝐧𝐚𝐥𝐞 > : il canale ovvero il numero che caratterizza il servomotore al
quale è diretto il segnale di posizione, questo è un numero intero compreso
tra 0 e 31.
• 𝐏 < 𝐩𝐨𝐬 > : la larghezza di impulso desiderata, cioè la posizione che il
servomotore deve assumere; è un numero intero con valori utili per i
servomotori che vanno da 500 𝜇𝑠 (servo a 0°) a 2500 𝜇𝑠 (servo a 180°).
• 𝐕 < 𝐯𝐞𝐥 > : velocità di movimento del servo in 𝜇𝑠/𝑠, per capire come il
servo controller elabora la velocità per i servomotori si deve considerare che
per 90° di spostamento la larghezza dell’impulso sarà di 1000 𝜇𝑠, quindi
impostare un valore di velocità pari a 100 𝜇𝑠/𝑠 fa muovere un servomotore
di 90° in 10 secondi, mentre se impostato a 2000 𝜇𝑠/𝑠 consentià al servo di
ruotare di 90° in mezzo secondo. Da notare che ogni servomotore ha una
velocità massima in gradi al secondo, quindi se gli si forniscono comandi a
velocità troppo elevate esso sarà comunque fisicamente limitato.
• 𝐓 < 𝐭𝐦𝐩 > : tempo espresso in 𝑚𝑠 per spostare tutti i servomotori dalla
posizione corrente alla posizione indicata; la temporizzazione di un comando
implica che tutti i movimenti debbano completarsi entro il tempo indicato,
se nello stesso comando sono indicate anche le velocità, esse vengono
51
considerate solo se uguali o inferiori a quelle calcolate da SSC-32U per
completare il movimento in tempo, altrimenti vengono modificate in modo
tale da rispettare la temporizzazione. Il tempo massimo impostabile è 65535.
• < 𝐜𝐫 > : il tredicesimo carattere ASCII di ritorno a capo usato per far
comprendere al servo controller la fine del comando, nel linguaggio di
programmazione Java si può usare il carattere “r” oppure inviarlo
automaticamente con il metodo .println(String comando).
I comandi inviati non sono case sensitive, quindi non vengono riconosciute
differenze tra le lettere maiuscole e le minuscole; spazi, caratteri di tab o di semplice
ritorno testuale “n” non vengono considerati.
Mentre canale e posizione sono parametri obbligatori da indicare per la
riuscita di un comando, velocità e tempo sono facoltativi, nel qual caso i servomotori
si muoveranno al massimo della loro velocità fisica.
Il primo comando inviato all’accensione non tiene conto dei parametri di
velocità o tempo, quindi è preferibile inviare un “comando sicuro” ai servomotori,
cioè un posizionamento molto vicino alla posa di riposo del manipolatore, per
evitare di danneggiare i servomotori con movimenti troppo “bruschi”.
Oltre ad un comando per un singolo servomotore, si possono combinare più
comandi assieme usando il formato:
# < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 >
…
# < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 >
𝐓 < 𝐭𝐦𝐩 > < 𝐜𝐫 >
In questo modo si possono muovere fino a 32 servomotori con una sola riga
di comando, con differenti velocità o con un singolo comando temporizzato.
52
Figura 3.9
Leap Motion
Per rilevare la posizione e l’orientamento della mano si è deciso di utilizzare
il controller Leap Motion dell’omonima azienda americana.
Il controller Leap Motion è un dispositivo a corto raggio, pensato per poter
essere posto su una scrivania e rilevare i movimenti delle mani a breve distanza e
con una buona precisione.
Questo dispositivo è piuttosto recente, infatti nasce nel 2012 da un progetto
di D. Holz e M. Buckwald in Florida, che hanno voluto innovare in modo radicale
gli strumenti per interfacciarsi ai computer, mouse o tastiera [2].
Questa invenzione ha ultimamente trovato terreno fertile soprattutto nei
nuovi dispositivi di realtà aumentata e nei visori 3D, dove è indispensabile poter
utilizzare lo spazio tridimensionale con gesti più complessi.
Dal punto di vista prettamente tecnologico il controller Leap Motion
presenta dei notevoli progressi rispetto a un sensore di prossimità, infatti è una
periferica USB, collegabile al computer attraverso l’API fornita dalle librerie
dinamiche di Leap Motion, che riconosce e traccia non solo la posizione ma anche
l’orientamento e l’accelerazione delle mani e delle dita, con precisione e frequenza
di monitoraggio elevate [figura 3.9].
53
Figura 3.10
Figura 3.11
Questo tracciamento discreto avviene grazie a 2 telecamere monocromatiche
ad infrarossi e 3 LED infrarossi con un campo visivo di circa 150 gradi, l’intervallo
efficace del Leap Motion si estende da circa 25 a 600 millimetri sopra il dispositivo
e con una precisione di 0,01 mm [figura 3.10].
Il software Leap Motion riceve i dati del sensore e ne effettua un’analisi
specifica per rilevare mani, dita e braccia; inoltre, per far fronte a condizioni di
monitoraggio difficili, mantiene un modello interno della mano umana e confronta
tale modello ai dati del sensore per determinarne meglio la forma anche a fronte di
condizioni di monitoraggio difficili [figura 3.11].
54
I dati del sensore vengono analizzati fotogramma per fotogramma con una
frequenza variabile tra 30 e 60 al secondo (normalmente 50 fps) e il controller, dopo
averli analizzati, li invia alle applicazioni abilitate a Leap Motion; ogni fotogramma
ricevuto contiene infatti tutte le posizioni note, le velocità e le identità degli oggetti
tracciati.
Possedendo nella memoria un modello di mano umana, il Leap Motion
riesce a fornire un monitoraggio predittivo anche quando parti della mano
dell’utente non sono visibili.
Questo garantisce che la posizione delle cinque dita possa venir stimata, sia
durante un tracciamento ottimale che in occasione di una temporanea ed imprevista
mancanza di dati essenziali (per esempio a causa di occlusioni nel campo visivo,
cattiva illuminazione o vetro protettivo delle videocamere sporco).
Il funzionamento di questo sistema di predizione intelligente utilizza le parti
visibili della mano, il suo modello interno e le osservazioni passate per calcolare le
posizioni più probabili delle parti che eventualmente non fossero ben visibili.
Per incentivare l’utilizzo del dispositivo Leap Motion e lo sviluppo di software
che ne facciano uso, l’azienda madre fornisce un SDK (Software Development Kit),
cioè un insieme di strumenti per lo sviluppo e la documentazione di software,
scaricabili gratuitamente dal portale Leap Motion per sviluppatori [25].
Leap Motion SDK contiene due librerie di base che definiscono l'API per i
dati di tracciamento del dispositivo Leap Motion, una scritta in C e l’altra in C++.
Si può comunque sviluppare anche in altri linguaggi di programmazione:
• C# e Objective-C: grazie alle classi Wrapper, cioè le classi che
incapsulano i dati primitivi, che creano i collegamenti linguistici con i
linguaggi nativi.
• Java e Python: attraverso lo strumento open source SWIG che collega
le chiamate generate da questi linguaggi di programmazione alla
libreria nativa in C++.
55
• JavaScript e lo sviluppo di applicazioni Web: l’azienda fornisce un
server WebSocket e una libreria JavaScript lato client.
Tutti i file di libreria, di codice e di intestazione richiesti per sviluppare
applicazioni e plug-in compatibili con Leap Motion sono inclusi nel pacchetto SDK,
fatta eccezione della libreria JavaScript del client leap.js.
Sul sito Leap Motion vi è un pacchetto disponibile per ogni sistema operativo
supportato (Microsoft Windows, macOS e distribuzioni GNU/Linux) mentre la
libreria client JavaScript può essere scaricata dal servizio di hosting GitHub [26].
Visto che il software oggetto di questa trattazione è interamente scritto in Java
per un computer a 64 bit su cui è installato Windows 10, i metodi creati e le librerie
utilizzate sono espressamente realizzati in questo linguaggio di programmazione e
per questo sistema operativo.
Nella programmazione in Java alla base del modello di dati del controller vi
è il frame, questo oggetto rappresenta il fotogramma e tutti i dati utili calcolati; esso
è il macroinsieme di tutte le mani o gli oggetti tracciati, specificandone le proprie
proprietà in un solo momento [25].
Da ogni frame si possono estrapolare gli oggetti Hand, essi rappresentano
ogni mano e ogni dato ad essa collegato.
In questo modo si può ottenere informazioni sul numero totale di mani,
assegnare ad ognuna un ID, prendere la loro posizione e altre caratteristiche
associate ad esse.
Infatti, oltre a poter indicare le loro caratteristiche (destra o sinistra,
grandezze fisiche di ogni loro parte), il controller elabora direttamente i punti e
vettori utili per definire la posizione e l’orientamento di ogni componente della
mano.
Nello specifico, per definire la posizione nello spazio, il controller Leap
Motion utilizza un sistema di coordinate cartesiano destrorso, l'origine è centrata
nella parte centrale del vetro protettivo delle videocamere; l’asse y è verticale e a
valori positivi crescenti verso l’alto mentre gli assi x e z si trovano nel piano
56
Figura 3.13
Figura 3.12
orizzontale, con l’asse z rivolta verso l’utente e l’asse x lungo il bordo lungo del
dispositivo con il verso a completare la terna [figura 3.12].
I vettori definiti dai metodi in linguaggio Java .palmNormal( ) e .direction( )
semplificano molto l’analisi dell’orientamento della mano, poiché, definendo
rispettivamente il vettore perpendicolare al palmo e quello con direzione concorde
al verso delle dita [figura 3.13], si possono usare per il calcolo degli angoli di Eulero.
Questi angoli possono far ricreare al braccio robotico i gesti complessi come
la pronosupinazione, cioè la rotazione del polso, la dorsiflessione, ovvero
l’inclinazione della mano verso il basso o verso l’alto, o le deviazioni radiali o ulnari,
che definiscono lo spostamento a sinistra e a destra [27].
Questi movimenti sono appunto associati agli angoli rispettivamente di rollio,
beccheggio e imbardata.
57
Figura 3.14
Figura 3.15
Le dita invece vengono rappresentate attraverso gli oggetti Finger, dove il
controller fornisce informazioni su ciascun dito visualizzato, o al limite a stime dello
stesso nel caso sia poco visibile, gli assegna un ID e le sue caratteristiche vengono
stimate in base alle recenti osservazioni e al modello anatomico della mano
[figura 3.14].
Il controller è in grado di identificare il tipo di dito e per il progetto ci si è
serviti appunto di questa potenzialità per rilevare e quindi utilizzare solo la posa del
pollice, per comandare l’apertura e chiusura della pinza.
Per definire uno spazio di lavoro per la mano, e quindi di conseguenza per il
manipolatore, si usa l’oggetto InteractionBox, esso definisce un’area rettilinea
all'interno del campo di vista Leap Motion; finché la mano dell'utente rimane
all'interno di quest’area, è garantito che rimanga anche nel campo di vista Leap
Motion [figura 3.15].
58
Figura 3.16
Questo oggetto è utile per migliorare la mappatura dell’area d’interazione
dell’utente, poiché garantisce che tutta la parte mappata sia all’interno dell’area di
visualizzazione e, attraverso il metodo .normalizePoint( ) è possibile normalizzare lo
spazio di lavoro, suddividendo l’area in un intervallo reale [0,1] così da poter
modificare facilmente i valori di posizione dello spazio dell’utilizzatore per le misure
dello spazio di lavoro del robot [figura 3.16].
59
Capitolo 4:
Sviluppo del Software
In questo capitolo verrà descritto il progetto finale del software in Java per il
controllo del braccio robotico.
In particolare questo software ha richiesto la comunicazione dei seguenti
dispositivi:
• Servo controller SSC-32U (a cui è collegato il braccio AL5D)
• Computer
• Leap Motion
Il programma è stato sviluppato con il linguaggio Java sull’ambiente di
sviluppo Eclipse, un software libero e gratuito di Eclipse Foundation [4].
Per poter far comunicare i dispositivi tra di loro si sono utilizzate le seguenti
librerie:
• leapmotion
• jSerialComm
Queste librerie sono entrambe scaricabili dal loro rispettivo sito omonimo e
sono facili da utilizzare grazie alla documentazione pubblicata sullo stesso [25][28].
L’obiettivo finale era creare un software che non solo connettesse
manipolatore e Leap Motion per poter ricreare il movimento del braccio umano
ma potesse risultare anche user frendly.
60
Ecco perché si è scelto di implementare una semplice GUI (Graphical User
Interface), un’interfaccia grafica in grado di far gestire all’utilizzatore finale il lancio,
la connessione e la terminazione di tutti i processi.
GUI
Per l’implementazione di un’interfaccia grafica si è scelto l’utilizzo di Swing e
AWT (Abstract Window Toolkit), due librerie standard del pacchetto Java che
creano e implementano i widget, cioè gli oggetti grafici come pannelli, pulsanti e
caselle di testo [29].
La libreria Swing viene utilizzata come libreria ufficiale per la realizzazione di
interfacce grafiche in Java ed è un'estensione della AWT.
Oltre ai widget, queste librerie danno la disponibilità di gestire e
implementare [30]:
• eventi: cioè oggetti che rappresentano il verificarsi di un’azione
dell’utente o del sistema (click di un tasto o del mouse, eventi
temporizzati, interazione con un widget, …).
• listener: cioè oggetti che contengono i metodi relativi al tipo di evento
che si vuole intercettare; essi ricevono una notifica quando si verifica
tale evento e possono lanciare metodi o, a loro volta, altri eventi. Una
volta implementato un listener bisogna collegarlo al controllo grafico
da cui vogliamo intercettare gli eventi e sarà quest'ultimo infine a
notificarci le azioni invocate su di esso, ad esempio la pressione di un
pulsante.
61
Figura 4.9
Eventi e listener sono elementi fondamentali per le GUI poiché consentono
di intercettare l’interazione con l’utente e di modificarle in tempo reale.
Nella GUI sono stati implementati i seguenti widget, con relativi eventi e
listener [figura 4.1]:
• JComboBox Lista Porte: è una combo box, cioè un widget che
permette all'utente di effettuare una scelta selezionandola da un
elenco; in questo caso una volta premuto il tasto Cerca offre una lista
di tutte le connessioni seriali collegate in quel momento al computer.
• JButton Cerca: è il pulsante che al primo click avvia una ricerca di
possibili porte seriali connesse al computer, se non le trova rimane
nello stesso stato, altrimenti modifica la lista di porte seriali della
combo box Lista Porte e cambia stato in Connetti [figura 4.2].
Clickando nuovamente su Connetti genera la connessione seriale con
la porta selezionata nella combo box ed invia un segnale di accensione
al braccio robotico, che cambia la sua posizione da riposo ad attivo,
infine il bottone cambia stato in Disconnetti. In quest’ultimo stato, al
suo click spegne il braccio robotico, riportandolo alla posizione di
riposo, e interrompe la connessione seriale tornando allo stato
Connetti. Se nel mentre le porte cambiano e non è più presente la
porta segnalata dalla combo box, allora lo stato ritorna a Cerca.
62
Figura
4.10
Figura
4.11
• JButton Avvia: è un pulsante che si attiva solo una volta avviata una
connessione seriale con il braccio robotico [figura 4.3], una volta
clickato cambia stato in Interrompi e inizializza la connessione con il
sensore Leap Motion. In questo preciso stato del programma inizia la
trasmissione tra il Leap Motion e il braccio robotico. Clickando
nuovamente interrompe questo collegamento e il braccio si ferma.
• JLabel Avvisi: è un’etichetta che segnala qualsiasi avviso da parte dei
collegamenti.
• JLabel Errori: è un’etichetta che segnala qualsiasi errore riscontrato
nel programma.
63
Figura 4.4
Controllo del manipolatore
Come si è visto nel capitolo 2, più un manipolatore è provvisto di gradi di
libertà più il calcolo della cinematica inversa diventa complesso.
Siccome il braccio robotico AL5D ha cinque servomotori (numerati da 0 a
4) per il movimento dei bracci e un servo (numerato come 5) per la chiusura dell’end
effector a pinza [figura 4.4], risulta avere cinque gradi di libertà quindi la risoluzione
del problema della cinematica inversa richiederebbe un sistema di 12 equazioni
trascendenti.
Volendo però ricreare il movimento della mano in tempo reale, l’end
effector del manipolatore non richiede una posa così precisa e ben definita, poiché
i dati presi dalla Leap Motion sono soggetti ad errori e i frame hanno una frequenza
così elevata rispetto alla velocità dell’utilizzatore da risultare inutili se considerati
singolarmente.
Per questo motivo si è scomposto il calcolo della cinematica in più
sottoproblemi.
64
Si è posto la terna di base del manipolatore ad altezza del piano a cui il
braccio è fissato e direttamente sotto al polso del braccio robotico, così da centrare
l’InteractionBox (lo spazio di lavoro del Leap Motion) in uno spazio di lavoro più
congeniale alla geometria del manipolatore.
L’orientamento della terna di base segue quello del Leap Motion, tranne per
l’asse Z che risulta invertita, non puntando verso l’utilizzatore ma verso l’end
effector.
La posizione di partenza della mano dell’utilizzatore è aperta con il palmo
rivolto verso il basso e le dita unite tra loro.
La posa del braccio robotico è data dalla combinazione dei seguenti problemi
di cinematica, che considerano ognuno un preciso gruppo di servomotori e vengono
risolti con metodi diversi:
• Cinematica diretta con angoli di Eulero [servomotori 0 - 3 - 4]:
sfruttando i dati ottenuti dall’orientamento della mano si muovono il
servomotore 0 della base del manipolatore con l’imbardata e i
servomotori 3 e 4 del polso rotante rispettivamente con il beccheggio
e il rollio. In questo modo, deviando il palmo della mano si ruota il
manipolatore attorno all’asse Y del Leap Motion, permettendogli
così di raggiungere anche posizioni poste sull’asse X, ed inoltre i
movimenti di pronosupinazione e dorsiflessione azionano i due
servomotori del polso, andando così a modificare l’orientamento
dell’end effector [figura 4.5].
• Cinematica inversa [servomotori 1 - 2]: attraverso i dati ottenuti dalla
posizione della mano lungo il piano YZ del Leap Motion si può
muovere il polso del manipolatore in altezza (alto/basso) e profondità
(avanti/indietro). Questo movimento si ottiene grazie alla risoluzione
di un problema di cinematica inversa in due dimensioni, a due gradi
di libertà (i servomotori 1 e 2), quindi con solo due equazioni. La
65
Figura 4.5
Figura 4.6
ricerca di una soluzione analitica per questo problema ha generato
due possibili soluzioni e di conseguenza due configurazioni
ammissibili del manipolatore. Per risolvere questa indeterminazione
si è scelta la configurazione con il gomito del manipolatore rivolto
verso l’alto [figura 4.6].
66
• End effector Pinza [servomotore 5]: per determinare come aprire e
chiudere la pinza si è scelto di collegare il suo servomotore 5
all’angolo che si forma tra il vettore solidale al palmo della mano e
quello di direzione del pollice. L’utilizzatore, aprendo o chiudendo il
pollice, può a sua volta aprire o chiudere la pinza.
Con la combinazione di questi sottoproblemi si ottiene il completo controllo
di tutti i giunti del braccio robotico attraverso la posa della mano dell’utilizzatore.
Inoltre, per migliorare il controllo del manipolatore nei pressi dei limiti
inferiore e superiore del suo spazio di lavoro, si è scelto di imporre che
l’orientamento dell’end effector sia sempre parallelo al suolo per qualsiasi posizione
lungo il piano YZ e che venga modificato solo dal beccheggio del servomotore 3.
Il software realizzato ottiene i dati dal Leap Motion, li elabora con i metodi
sopra elencati e li invia al servo controller SSC-32U sotto forma di comandi
temporizzati; la scelta di temporizzare i comandi alleggerisce il numero di dati da
elaborare, poiché le velocità vengono calcolate automaticamente da SSC-32U.
Per migliorare il controllo e rendere i movimenti più fluidi, ovvero per
eliminare possibili disturbi, si è deciso inoltre di utilizzare un semplice filtro passa
basso IIR digitale:
𝑦[𝑛] = 𝛼 ⋅ 𝑥[𝑛] + (1 − 𝛼) ⋅ 𝑦[𝑛 − 1]
Dove 𝑥[𝑛] e 𝑦[𝑛] sono rispettivamente l’entrata presente e l’uscita presente
del segnale digitale (in questo caso i dati del frame), 𝑦[𝑛 − 1] è il dato elaborato del
frame precedente e 𝛼 è un numero reale positivo molto piccolo.
Siccome 𝛼 è molto piccola, l’uscita viene influenzata poco dal dato attuale e
maggiormente dall’andamento delle uscite precedenti, infatti (1 − 𝛼) ≃ 1.
Il risultato è un leggero delay nei movimenti del braccio robotico e la garanzia
che un singolo frame con dati errati (cattiva elaborazione dei dati, movimenti scattosi
67
dell’utilizzatore, rumore) abbia poca influenza sul movimento del braccio robotico
e quindi i movimenti di quest’ultimo risultino più fluidi e stabili.
68
Conclusione
Lo sviluppo del software in grado di comandare il braccio robotico AL5D
della LynxMotion è stato reso possibile grazie all’analisi della posa e gestualità della
mano, attraverso il controller infrarossi Leap Motion.
Durante il montaggio del braccio robotico si è scoperta la presenza di un
servo controller SSC-32U compreso nel kit, al quale si è potuto delegare sia l’invio
dei segnali ai servi che il controllo automatico delle loro velocità di movimento.
Per il controllo della posizione e dell’orientamento dell’end effector si sono
analizzati i numerosi problemi di cinematica e si è optato per una suddivisione del
problema generale di movimentazione in più sottoproblemi, affrontati sia con la
ricerca di una soluzione analitica per la cinematica inversa sia con gli angoli di
Eulero.
Si è studiato il funzionamento del controller Leap Motion e si sono analizzati
i dati utili da estrapolare dalla posa della mano dell’utente per poter essere elaborati
per il controllo del braccio robotico.
Infine si è implementata un’interfaccia grafica per permettere all’utente di
lanciare e terminare il collegamento tra il braccio robotico e il Leap Motion,
migliorando l’analisi dei dati grazie alla realizzazione di un filtro digitale e
aggiustando la posizione dell’end effector del manipolatore per migliorare
l’esperienza di utilizzo e la fluidità dei movimenti.
69
Risultati ottenuti
Allo stato attuale, i movimenti del manipolatore sono sufficientemente fluidi
e articolati mentre il controllo, in particolari circostanze, risente di problemi di
precisione, soprattutto nell’acquisizione dei dati del rollio del polso e dell’apertura
della pinza.
Quando il polso dell’utente ruota di 90° ponendosi verticalmente, il
controller Leap Motion non riesce a tracciare bene la posizione del pollice, utile per
l’apertura della pinza.
In questa posizione inoltre, siccome il Leap Motion possiede un modello
interno della mano, si possono verificare predizioni errate sia della posizione del
pollice che addirittura dell’orientamento del polso (da 90° a −90°).
Questo comporta che il polso del braccio robotico può ruotare
repentinamente in posizioni che non corrispondono al reale orientamento del polso
dell’utente e la pinza ha problemi a chiudersi.
Visto la precisione complessiva però la scelta della Leap Motion risulta
comunque consigliabile in ambito accademico o in ambiti che non richiedano
movimenti accurati e manipolazioni delicate (ambiti ludici o di intrattenimento).
Un possibile sviluppo, che andrebbe a migliorare il controllo e a diminuire
gli errori, potrebbe riguardare un’acquisizione di più parametri dal controller per
definire metodi che predicano più accuratamente l’orientamento del polso
dell’utente durante il rollio a ±90°.
70
Bibliografia
Siti web accessibili all’ultima consultazione in data 01/12/2017.
[1] Leap Motion, “Leap Motion Website”, https://www.leapmotion.com
[2] B. M. Matessi, “Controllo di un braccio robotico mediante i movimenti
della mano”, tesi Ingegneria Informatica 2013/14 Università degli studi di
Trieste
[3] Lynxmotion, “Lynxmotion Website”, http://www.lynxmotion.com/
[4] Eclipse, “Eclipse Website”, http://www.eclipse.org/
[5] K. Čapek, “R.U.R. Rossum's Universal Robots”, a cura di Alessandro
Catalano, Marsilio editore 2015.
[6] I. Asimov, “Io, Robot”, Oscar Mondadori 2011
[7] Robotek Group, “Robotica Industriale”, http://www.robot-
industriali.it/automazione-industriale-robotica-industriale.html
[8] A. Zaleski, “Man and machine: The new collaborative workplace of the
future”, https://www.cnbc.com/2016/10/31/ford-uses-co-bots-and-factory-
workers-at-its-cologne-fiesta-plant.html
71
[9] H. Kagermann, W. Wahlster, W. D. Lukas, “Industrie 4.0: Mit dem
Internet der Dinge auf dem Weg zur 4. industriellen Revolution”,
http://www.vdi-nachrichten.com/Technik-Gesellschaft/Industrie-40-Mit-
Internet-Dinge-Weg-4-industriellen-Revolution
[10] J. Van, “Mechanical Advantage”, http://articles.chicagotribune.com/1996-
12-11/business/9612110101_1_hoist-assembly-worker-robotics
[11] P. Akella, M. Peshkin, E. Colgate, W. Wannasuphoprasit, N. Nagesh, J.
Wells, S. Holland, T. Pearson, B. Peacock, “1999 IEEE International
Conference on Robotics and Automation”,
http://ieeexplore.ieee.org/document/770061/
[12] Honda, “Asimo Website”, http://asimo.honda.com/
[13] Humanitas Research Hospital, “Robot Da Vinci”,
http://www.humanitas.it/cure/robot-da-vinci
[14] Ministero dello sviluppo economico, “Piano nazionale Industria 4.0”,
http://www.sviluppoeconomico.gov.it/images/stories/documenti/Piano_Indu
stria_40.pdf
[15] M. Rüßmann, M. Lorenz, P. Gerbert, M. Waldner, J. Justus, P. Engel, M.
Harnisch, “Industry 4.0: The Future of Productivity and Growth in
Manufacturing Industries”,
http://www.inovasyon.org/pdf/bcg.perspectives_Industry.4.0_2015.pdf
72
[16] IFR - International Federation of Robotics, “IFR forecast: 1.7 million new
robots to transform the world´s factories”, https://ifr.org/ifr-press-
releases/news/ifr-forecast-1.7-million-new-robots-to-transform-the-worlds-
factories-by-20
[17] B. Siciliano Bruno, L. Sciavicco, L. Villani, G. Oriolo, “Robotica”, The
Mcgraw-Hill Companies 2008
[18] B.Siciliano, “Elementi di Robotica Industriale”,
http://www.prisma.unina.it/courses/Cinematica_EdRI.pdf
[19] M.Gabiccini, “Cinematica diretta ed inversa di manipolatori seriali”,
http://www.dimnp.unipi.it/gabiccini-m/RAR/04%20-
%20Cinematica%20diretta%20ed%20inversa%20manipolatori%20seriali.pdf
[20] C. Santoro, “Programmazione Sistemi Robotici”,
http://www.dmi.unict.it/~santoro/teaching/psr/slides/Manipulator.pdf
[21] Adrirobot, “Il servomotore”,
http://www.adrirobot.it/servotester/il_servomotore.htm
[22] Hitec Multiplex, Specifiche servomotori, http://hitecrcd.com/
[23] Robotshop, Specifiche servomotori, http://www.robotshop.com/
[24] Lynxmotion, “Lynxmotion SSC-32U USB Servo Controller Board”,
http://www.lynxmotion.com/images/data/lynxmotion_ssc-
32u_usb_user_guide.pdf
73
[25] Leap Motion, “Leap Motion SDK documentation”,
https://developer.leapmotion.com/documentation/java/index.html
[26] Leap Motion Javascript, Download client library,
https://github.com/leapmotion/leapjs
[27] D. Molteni, “Progetto, implementazione tecnologica e valutazione di un
ambiente di test per la riabilitazione neuromotoria”, Tesi di diploma
triennale in musica elettronica e nuove tecnologie, Conservatorio G. Verdi,
Como 2014/15
[28] jSerialComm, “jSerialComm Website”,
http://fazecast.github.io/jSerialComm/
[29] Oracle Help Center , “Java API”, https://docs.oracle.com/javase/7/docs/api/
[30] R. Brighi, “Corso di Algoritmi e programmazione”,
http://www3.cirsfid.unibo.it/didattica/upload/134_eventi-listener.pdf

More Related Content

Similar to Sviluppo di un software in Java per il controllo di un braccio robotico tramite un dispositivo per il rilevamento della gestualità

PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
guestfe85ba
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_step
hawk2012
 
Learning by making, laboratorio di robotica pratica 2010-11-05
Learning by making, laboratorio di robotica pratica    2010-11-05Learning by making, laboratorio di robotica pratica    2010-11-05
Learning by making, laboratorio di robotica pratica 2010-11-05
Ionela
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Xhoi Kerbizi
 

Similar to Sviluppo di un software in Java per il controllo di un braccio robotico tramite un dispositivo per il rilevamento della gestualità (20)

REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - TesiREALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
 
Cobot & Artificial Intelligence
Cobot & Artificial IntelligenceCobot & Artificial Intelligence
Cobot & Artificial Intelligence
 
Robot@mico IIS Maserati 2009
Robot@mico IIS Maserati 2009Robot@mico IIS Maserati 2009
Robot@mico IIS Maserati 2009
 
PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
PROGETTO E REALIZZAZIONE DI UN SISTEMA PER L’ANNOTAZIONE AUTOMATICA DI IMMAGI...
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei Microservizi
 
Predisposizione di un dataset per applicazioni di natural language generation...
Predisposizione di un dataset per applicazioni di natural language generation...Predisposizione di un dataset per applicazioni di natural language generation...
Predisposizione di un dataset per applicazioni di natural language generation...
 
Robotica: storia, applicazioni, potenzialità (short version)
Robotica: storia, applicazioni, potenzialità (short version)Robotica: storia, applicazioni, potenzialità (short version)
Robotica: storia, applicazioni, potenzialità (short version)
 
Robotica autonoma
Robotica autonomaRobotica autonoma
Robotica autonoma
 
Progetto Euridice
Progetto EuridiceProgetto Euridice
Progetto Euridice
 
Applicazioni ICT
Applicazioni ICTApplicazioni ICT
Applicazioni ICT
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_step
 
16. Creazione collettiva
16. Creazione collettiva16. Creazione collettiva
16. Creazione collettiva
 
1.Introduzione al corso
1.Introduzione al corso1.Introduzione al corso
1.Introduzione al corso
 
Learning by making, laboratorio di robotica pratica 2010-11-05
Learning by making, laboratorio di robotica pratica    2010-11-05Learning by making, laboratorio di robotica pratica    2010-11-05
Learning by making, laboratorio di robotica pratica 2010-11-05
 
Corso java
Corso javaCorso java
Corso java
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
 
Presentazione senza titolo
Presentazione senza titoloPresentazione senza titolo
Presentazione senza titolo
 
Scienza 2.0 - Un'introduzione
Scienza 2.0 - Un'introduzioneScienza 2.0 - Un'introduzione
Scienza 2.0 - Un'introduzione
 
Carli giovanni 5378593 lab tecn_istr_appr_formiconi's exp_
Carli giovanni 5378593 lab tecn_istr_appr_formiconi's exp_Carli giovanni 5378593 lab tecn_istr_appr_formiconi's exp_
Carli giovanni 5378593 lab tecn_istr_appr_formiconi's exp_
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 

Sviluppo di un software in Java per il controllo di un braccio robotico tramite un dispositivo per il rilevamento della gestualità

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE _____________________________________ Dipartimento di Ingegneria e Architettura Corso di Studi in Ingegneria Elettronica e Informatica SVILUPPO DI UN SOFTWARE IN JAVA PER IL CONTROLLO DI UN BRACCIO ROBOTICO TRAMITE UN DISPOSITIVO PER IL RILEVAMENTO DELLA GESTUALITÀ Tesi di Laurea Triennale Candidato: Glauco LORENZUT Relatore: Prof. Stefano MARSI _____________________________________ Anno Accademico 2016/2017
  • 2. 1 Alla pazienza e amore dei miei genitori.
  • 3. 2 Ringraziamenti Ringrazio il professor Stefano Marsi, che si è assunto l’ingrato compito di farmi da relatore e mi ha aiutato con pazienza e disponibilità a venirne fuori. Ringrazio la mia famiglia, che per tutti questi lunghi anni mi è stata vicino e mi ha sostenuto con tutto l’amore possibile. Ringrazio i miei amici Michela, Martina, Fabrizio e Federico per avermi regalato un sorriso e anche più di uno, e per aver reso meno pesante questo mio percorso. Ringrazio di cuore Indiana, che con il suo amore e una pazienza encomiabile mi ha supportato e sopportato in questi anni e soprattutto in quest’ultimo periodo di tesi. Ringrazio me stesso, per aver avuto la determinazione e cocciutaggine di non mollare mai. Ringrazio infine tutti coloro che direttamente o indirettamente hanno avuto a che fare con questo lavoro. Al loro aiuto, spesso silenzioso e talvolta anonimo, dedico un particolare mio sentimento di gratitudine.
  • 4. 3 Indice Indice _____________________________________________3 Introduzione ________________________________________5 Capitolo 1: Nascita e sviluppo della Robotica _______________7 Le origini del nome ________________________________________ 7 Sviluppo dei robot nell’industria ______________________________ 9 Robot manipolatori _______________________________________ 18 Capitolo 2: Problematiche sul controllo __________________ 22 Posa di un corpo e matrici di rototraslazione ____________________ 23 Angoli di Eulero _________________________________________ 28 Cinematica Diretta________________________________________ 30 Convenzione di Denavit-Hartenberg __________________________ 33 Problema cinematico inverso________________________________ 37
  • 5. 4 Capitolo 3: Strumentazione utilizzata ____________________ 42 Braccio robotico _________________________________________ 42 Servomotori_____________________________________________ 44 Servo controller SSC-32U __________________________________ 48 Leap Motion ____________________________________________ 52 Capitolo 4: Sviluppo del Software _______________________ 59 GUI___________________________________________________ 60 Controllo del manipolatore _________________________________ 63 Conclusione________________________________________ 68 Risultati ottenuti__________________________________________ 69 Bibliografia ________________________________________ 70
  • 6. 5 Introduzione In questa tesi viene affrontato il tema della progettazione e della successiva realizzazione di uno specifico software dedicato al controllo di un braccio robotico che deve consentire allo stesso di seguire, in tempo reale, il movimento e le gestualità della mano dell’uomo. Obiettivo finale è quello di riuscire a comandare un robot a distanza, controllandone i movimenti meccanici, senza interagire direttamente con un controller fisico, ma sfruttando un opportuno sensore ad infrarossi commerciale (Leap Motion) [1] affinché ogni movimento della mano umana venga clonato dal manipolatore. Oggi esistono già progetti simili, basati sul sensore commerciale appena citato, ma questi progetti si limitano a rilevare singoli gesti della mano e ad associarli a precisi comandi che il braccio robotico deve eseguire (“avanti”, “indietro”, …) oppure a ricercare un metodo risolutivo generalizzato della cinematica inversa; in quest’ultimo caso, in particolare, è ben vero che si è raggiunto l’obiettivo di una movimentazione generale del manipolatore, ma i suoi movimenti risultavano bruschi, scattosi e imprecisi [2]. In questo progetto, invece, non si ricercheranno metodi generali di movimentazione di robot; il focus sarà quello di individuare uno specifico metodo deputato al controllo di un braccio a 5 gradi di libertà, puntando a far sì che i movimenti del braccio stesso risultino quanto più fluidi e naturali possibile. Per questo lavoro sono stati messi a disposizione dall’Università di Trieste un braccio robotico AL5D, modello ad uso accademico prodotto dalla Lynxmotion [3], e un controller Leap Motion prodotto dall’omonima ditta.
  • 7. 6 Le librerie del controller Leap Motion sono implementate per la maggior parte dei linguaggi di programmazione, e quindi compatibili con gli stessi; si è qui scelto di utilizzare il linguaggio Java per la realizzazione del software. L’ambiente di sviluppo utilizzato è Eclipse [4], più semplice e intuitivo. Il lavoro di tesi viene suddiviso nei seguenti capitoli i cui contenuti sono qui di seguito sinteticamente riassunti: • Cenni sulle origini della Robotica e breve descrizione dei suoi sviluppi, presenti e futuri, tra interazione uomo-macchina e industria del futuro. • Descrizione degli strumenti matematici per la risoluzione di problemi sul controllo dei bracci robotici, analisi dei problemi di cinematica e dei metodi e convenzioni per risolverli. • Analisi del braccio robotico utilizzato, del controller Leap Motion e di tutti gli strumenti utili per la realizzazione del progetto. • Descrizione dello sviluppo del software in Java, della realizzazione di un’interfaccia grafica e implementazione del sistema di controllo per bracci robotici basati sul controller Leap Motion. Un ringraziamento particolare va all’amico e collega Federico Giacalone per il supporto e l’aiuto nel montaggio e sviluppo del braccio robotico.
  • 8. 7 Capitolo 1: Nascita e sviluppo della Robotica Il concetto di robotica ha radici culturali profonde e antichissime, fin dagli albori l’uomo ha desiderato infondere la vita nei suoi artefatti e la mitologia è ricca di esempi dove, con un aiuto divino, riusciva nel suo intento (Pandora, il gigante Talo, il golem, …). Ci sono numerosi reperti antichi che attestano dei primi e rudimentali studi e tentativi in tale ambito: Heron di Alessandria nel III secolo a.C. scrisse un trattato sull’arte di fabbricare automi e già nell’Egitto del 1000 a.C. erano state fabbricate bambole in legno che si muovevano grazie a dei meccanismi interni. Tuttavia tutti questi sviluppi avevano unicamente una finalità “ludica” poiché gli automi creati venivano utilizzati solamente per stupire un pubblico o intimorire i fedeli, ed erano privi di una reale capacità produttiva. Le origini del nome La nascita degli attuali concetti di robot e robotica come oggi li si considerano, cioè da un punto di vista scientifico e finalizzati al mondo del lavoro, avviene appena nel ventesimo secolo e da una fonte non proprio canonica. Il termine robot infatti fu introdotto dallo scrittore ceco Karel Čapek nel suo racconto “R.U.R. (Rossumovi Univerzální Roboti)” del 1920 [5], tale parola deriva dal termine robota che in lingua ceca significa lavoro pesante e a propria volta deriva dall’antico slavo ecclesiastico rabota, che indicava il concetto di servitù.
  • 9. 8 In questo racconto di Čapek, il robot è un essere artificiale creato dal dottor Rossum e successivamente prodotto in serie allo scopo di sostituire l’essere umano in ogni compito, e con il fine di creare una società utopica, dove l’uomo si potesse liberare dalla schiavitù del lavoro. La nascita del concetto di robotica invece la si deve allo scrittore Isaac Asimov, che nel racconto fantascientifico “Liar!” del 1941 [5], conia questo termine per indicare la scienza che comprende lo studio e la creazione dei robot. Questi ultimi, nelle sue opere, acquistano una tale intelligenza e comprensione di sé da diventare soggetti attivi all’interno della società. Per questo Asimov, che tutt’oggi è riconosciuto come il padre della robotica, nelle sue opere pone le basi per un’analisi scientifica, etica e sociale che una tale innovazione avrebbe comportato. Per far fronte a possibili distopie o “rivolte delle macchine” Asimov inventa delle regole per il controllo dei robot, infatti ogni unità robotica ha nella sua programmazione tre dogmi inviolabili che prendono il nome di Leggi della Robotica: 1. Un robot non può recar danno a un essere umano, né permettere che, a causa della propria negligenza, un essere umano patisca danno. 2. Un robot deve sempre obbedire agli ordini degli esseri umani, a meno che contrastino con la Prima Legge. 3. Un robot deve proteggere la propria esistenza, purché questo non contrasti con la Prima o la Seconda Legge. È innegabile in effetti che la creazione di intelligenze artificiali complesse e robot sempre più sofisticati stiano portando e porteranno nei prossimi anni ad uno sconvolgimento della società e del mondo del lavoro, così come sono stati concepiti e considerati fino ad oggi, ed è per questo che è riconosciuta la grandezza di Asimov nell’aver anticipato tale futuro, come una specie di profeta della tecnologia.
  • 10. 9 Figura 1.1: catena di montaggio completamente automatizzata Sviluppo dei robot nell’industria Negli ultimi 50 anni la distanza tra fantascienza e realtà si è andata ad accorciare sempre più e la figura del robot è divenuta un’entità fondamentale nell’industria, dove sempre più lavori vengono totalmente o quasi automatizzati. La robotica pertanto è divenuta ormai da tempo una vera e propria branca dell’ingegneria che, attraverso un approccio pluridisciplinare, studia e sviluppa metodi sempre più sofisticati per migliorare l’efficienza del robot nell’eseguire dei compiti specifici riproducendo in modo automatico il lavoro umano. In questo nuovo scenario si è passati da macchinari con gradi di libertà e capacità di carico limitate, utilizzati per lo più nella saldatura e assemblaggio di scocche nel settore automobilistico, a dei modelli evoluti e antropomorfi, con un aumento di capacità e precisione che permette il loro massiccio utilizzo in tutti i tipi di industria [figura 1.1]. "Un manipolatore con più gradi di libertà, governato automaticamente, riprogrammabile, multiscopo, che può essere fisso sul posto o mobile per utilizzo in applicazioni di automazioni industriali" Definizione norma ISO TR/8373-2.3 di robot industriale [7]
  • 11. 10 I robot attualmente utilizzati sono dei sistemi ibridi complessi, composti da vari sottoinsiemi hardware e software, dove componenti prettamente meccaniche, come giunti e servomeccanismi, per l’esecuzione dei movimenti, vengono collegate a componenti elettroniche quali computer e microcontrollori che devono essere opportunamente programmate. Sebbene esistano moltissime tipologie di robot differenti, ognuna sviluppata per ricoprire gli impieghi più disparati, si può comunque catalogarli in due macro categorie: • Robot “non autonomi”: sono direttamente pilotati dall’uomo o guidati da un software deterministico che fa eseguire loro sequenze prestabilite di operazioni ripetitive e con un alto grado di precisione. Fanno parte di questa categoria i robot utilizzati nelle fabbriche per adempiere a compiti specifici e ripetitivi, poiché riescono a garantire in maniera più esatta ed efficiente dell’uomo una produzione ad alta precisione, veloce e a costi ridotti. Rientrano in questa categoria anche i robot utilizzati per lavorare in ambienti sensibili o ostili (in ambito medico, nello spazio o a stretto contatto con materiale pericoloso), essi sono molto più precisi e flessibili di quelli impiegati nei settori ordinari e sono in grado di adattarsi alla variazione delle condizioni operative, poiché non può esserci alcun intervento umano in caso di errori. Si tratta tipicamente di robot mobili, pensati per operare in ambienti non del tutto noti a priori o con possibili interferenze nel modello d’ambiente di lavoro precedentemente programmato; tali robot hanno la capacità di modificare il modello interno per correggerlo e perfezionarlo in tempo reale. Per riuscire in tali compiti non definiti, i robot vengono spesso dotati di sistemi di visione artificiale, in grado di identificare gli oggetti attorno a loro, al fine di riuscire a manipolarli o a compiere semplici variazioni di traiettoria e/o di logica di gestione. Sono quindi in grado di completare, scegliendo la migliore strategia di controllo, il loro compito programmato a fronte di fenomeni di disturbo non prevedibili a priori.
  • 12. 11 Figura 1.2: un cobot aiuta un operaio umano nello stabilimento Ford • Robot “autonomi”: sono macchine in grado di operare in totale autonomia ed indipendenza, senza dover sottostare all’ingerenza umana, e di prendere decisioni anche a fronte di eventi totalmente inaspettati, imprevedibili persino per i loro costruttori. Sono anche questi dei robot mobili e sono in grado di operare in ambienti del tutto ignoti a priori, grazie ad una programmazione che si rifà a tecniche di intelligenza artificiale (machine learning, reti neurali, ...). Attualmente il robot autonomo non viene ancora impiegato in mansioni industriali, poiché il loro costo è ad ora troppo elevato. Un esempio evoluto di robot "non autonomo" sono gli ultimi esemplari introdotti nella catena di montaggio dell’automobile Fiesta negli stabilimenti Ford di Colonia in Germania [figura 1.2], infatti dal 2016 [8] è in fase di sperimentazione l’uso dei cobots (co-robots): robot collaborativi in grado di lavorare assieme agli operai della catena di montaggio, senza necessitare di protezioni. Questo lavoro coordinato uomo-macchina è un approccio innovativo, infatti fino al decennio 2010 i robot erano delimitati da delle transenne o protezioni per
  • 13. 12 evitare che potessero nuocere agli operai e quindi il lavoro automatico e quello umano erano slegati. In tempi recenti e con la nuova ricerca di un Industria 4.0 [9], si è scelto un approccio diverso, integrando il lavoro robotico a quello umano. Il cobot infatti è un robot “non autonomo” realizzato appositamente per aiutare l’operatore umano e interagire in uno spazio di lavoro condiviso, quindi possiede tutte le caratteristiche come visione artificiale e scocca “morbida”, per evitare di nuocere all’operatore e modificare la propria traiettoria in tempo reale. La sua invenzione risale al 1996 grazie a J. E. Colgate e M. Peshkin, professori presso la Northwestern University [10], che nel brevetto lo descrivono come “un’attrezzatura e un sistema per far interagire fisicamente una persona e un manipolatore polifunzionale controllato da un computer”. Il team General Motors ha utilizzato il termine Intelligent Assist Device (IAD) [11] come alternativa al cobot, soprattutto nel contesto della gestione dei materiali industriali e delle operazioni di assemblaggio di automobili. Esempi di robot “autonomi” invece sono quelli utilizzati per il taglio dell’erba nei giardini e nelle pulizie domestiche: mappano lo spazio di lavoro ex novo e in tempo reale e decidono autonomamente quando partire, dove tagliare/pulire e quando tornare alla base per ricaricarsi. Ma un esempio evoluto di robot autonomo è il modello ASIMO (Advanced Step in Innovative MObility) [12], un robot androide progettato e sviluppato dall’azienda giapponese Honda. Introdotto nel 2000, ASIMO è stato progettato per essere un assistente mobile multifunzione in grado di camminare e di adattarsi ed interagire in diverse situazioni a contatto con l’uomo, al fine di migliorare la qualità della vita. L’ultimo modello ha l’aspetto di un piccolo astronauta, è alto 130 cm, pesa 48 kg e può correre su due piedi alla velocità di 9 km/h [figura 1.3].
  • 14. 13 Figura 1.3 ASIMO è il primo esempio di robot che incorpora il controllo del movimento previsto (predicted movement control), una tecnica che permette al robot di anticipare in tempo reale il suo prossimo movimento, spostando così il suo baricentro in anticipo per garantire una maggiore flessibilità articolare e fluidità di movimento, così da rendere la camminata più umana. ASIMO quindi è in grado di camminare, correre, salire e scendere le scale, stare in equilibrio su una gamba e interagire con suoi simili e gli esseri umani, riuscendo a riconoscere le persone e a comunicarci. Dalla sua prima presentazione ad oggi, questo modello risulta unico nel suo genere, ed ha acquisito una notevole esposizione mediatica, con il fine di indirizzare un maggior numero di studenti verso studi di carattere scientifico, attinenti alla robotica. Anno dopo anno la robotica si sta sempre più evolvendo ed espandendo in tutti i settori, in un’epoca relativamente recente infatti ha trovato applicazione in modo esponenziale in campi quali quello medico/chirurgico o di laboratorio che fino a prima erano prerogativa della capacità e intelligenza umana.
  • 15. 14 Figura 1.4 Alcune case produttrici, infatti, hanno dovuto scontrarsi con problemi tecnici, burocratici e perfino etici prima di poter ottenere le necessarie autorizzazioni per permettere l’utilizzo dei loro robot in operazioni mediche o a stretto contatto con l’essere umano. Il primo robot in questa campo, il modello da Vinci [figura 1.4] [13], è stato progettato e prodotto nella Silicon Valley, e nel 2000 ha ottenuto l’autorizzazione per un primo intervento di laparoscopia dalla Food and Drug Administration, ente americano per la regolamentazione dei prodotti alimentari e farmaceutici. Negli ultimi anni la richiesta di automazione nelle industrie e in gran parte delle aziende sta crescendo e ciò comporta una maggiore richiesta di robot industriali. Questo per far fronte al recente concetto di Industria 4.0 o Quarta Rivoluzione Industriale, che prende il nome dall’iniziativa europea Industry 4.0, a sua volta ispirata ad un progetto del governo tedesco che prevedeva investimenti su infrastrutture, scuole, sistemi energetici, enti di ricerca e aziende per ammodernare il sistema produttivo tedesco e riportarlo ai vertici mondiali rendendolo competitivo a livello globale.
  • 16. 15 Figura 1.5: le innovazioni che hanno caratterizzato ogni Rivoluzione Industriale La chiave di volta dell’Industria 4.0 sono i sistemi ciberfisici (CPS) ovvero sistemi fisici che sono strettamente connessi con i sistemi informatici e che possono interagire e collaborare con altri sistemi CPS [figura 1.5]. I punti cardine di questa nuova visione dell’industria sono [14]: • Smart production: tecnologie produttive innovative che creano collaborazione tra tutti gli elementi presenti nella produzione ovvero collaborazione tra operatore, macchine e strumenti. • Smart services: nuove infrastrutture fisiche e virtuali ed algoritmi informatici che permettono di integrare i sistemi tra loro • Smart energy: un nuovo modo di pensare lo spreco e il consumo energetico, creando sistemi più performanti secondo i paradigmi tipici dell’energia sostenibile.
  • 17. 16 Questi punti, grazie ad uno studio pubblicato sul Boston Consulting [15], si ottengono adottando nuove tecnologie abilitanti, concetti già presenti ma che non hanno mai sfondato il muro della divisione tra ricerca applicata e sistemi di produzione veri e propri e che sono strettamente collegati alla robotica e all’intelligenza artificiale: • Advanced manufacturing solution: sistemi avanzati di produzione, ovvero sistemi e macchinari interconnessi tra loro che permettano una maggiore flessibilità e performance. In quest’ambito rientra la robotica avanzata, con macchine dalla maggiore capacità e autonomia e allo stesso tempo macchine interagenti con gli operatori, i cobot. • Additive manufacturing: sistemi di produzione additiva che aumentano l’efficienza dell’uso dei materiali, ne sono un esempio le stampanti 3D. • Augmented reality: sistemi di visione con realtà aumentata per guidare meglio gli operatori nello svolgimento dei loro compiti quotidiani. • Simulation: simulazione tra macchine interconnesse per ottimizzare i processi. • Horizontal e vertical integration: integrazione e scambio di informazioni in orizzontale e in verticale, tra tutti gli attori del processo produttivo. • Industrial internet: comunicazione tra tutti gli attori del processo produttivo, non solo all’interno dell’azienda, ma anche all’esterno grazie all’utilizzo di reti locali o Internet. • Cloud: implementazione di tutte le tecnologie cloud per il salvataggio online delle informazioni.
  • 18. 17 Figura 1.6: stima +15% annua Figura 1.7 • Cyber-security: sicurezza delle informazioni e dei sistemi che non devono essere alterati dall’esterno. • Big Data Analytics: tecniche di gestione di grandissime quantità di dati attraverso sistemi aperti che permettono previsioni o predizioni. Dalla richiesta degli ultimi anni [figure 1.6-1.7] [16] si può comprendere come la robotica sia oramai passata da uno stato di pura speculazione e fantasia umana ad essere una vera e propria scienza e insieme di tecnologie mature e feconde.
  • 19. 18 Figura 1.8: rappresentazioni 3D di giunti rispettivamente prismatici e rotoidali Robot manipolatori Nel contesto della robotica generale, la maggior parte dei robot rientra nella categoria dei robot manipolatori o bracci robotici. Un manipolatore è un modello di robot industriale progettato come una serie di bracci rigidi (link) che si estendono da una base a un terminale, uniti da articolazioni (giunti o joint) azionate da un attuatore. Il link iniziale è collegato alla base (terreno, carrello, …) e quello finale è connesso all’end effector (pinza, saldatore), l’organo terminale che interagisce con gli oggetti che il robot deve manipolare. Spesso ha la struttura di un braccio antropomorfo (spalla, gomito, polso, mano) e 6 articolazioni, poiché richiede almeno 6 gradi di libertà per posizionare un oggetto manipolato o il proprio end effector in una posizione ed un orientamento arbitrari nello suo spazio di lavoro. Il braccio robotico viene azionato da degli attuatori, posti tipicamente in corrispondenza delle articolazioni, che ne determinano la natura del movimento, giunti rotoidali o giunti prismatici [figura 1.8]. La struttura tipica e più semplice di manipolatore è quella a catena cinematica aperta o seriale; una catena cinematica è detta aperta quando i link sono disposti in
  • 20. 19 serie e connettono la base all’end effector senza formare circuiti chiusi tra loro, nel qual caso si parla di catena cinematica chiusa. In una catena cinematica aperta ogni giunto prismatico o rotoidale garantisce un singolo grado di libertà, il primo tipo conferendo un moto traslatorio tra due link mentre il secondo un moto rotatorio. Si prediligono i giunti rotoidali per una maggiore compattezza e stabilità. I manipolatori a cinematica aperta si dicono manipolatori seriali, e sono i più usati per il minor numero di attuatori richiesti e quindi per una complessità di controllo e un costo inferiori, mentre quelli a cinematica chiusa, detti manipolatori paralleli, necessitano di più giunti per raggiungere gli stessi gradi di libertà e quindi gli attuatori e la complessità di controllo aumentano, ma vengono utilizzati quando sono richieste portate più elevate e si necessita di una maggiore rigidezza. I gradi di libertà utili per manipolare un oggetto nello spazio in qualsiasi posizione e orientamento sono 6, tre per posizionare un punto dell’oggeto nello spazio di lavoro e tre per orientarlo rispetto ad una terna di riferimento. Se si hanno più gradi di libertà, rispetto a quelli richiesti per manipolare correttamente un oggetto, un robot si dice ridondante da un punto di vista cinematico. Un manipolatore ha uno spazio di lavoro limitato dalla sua costruzione e geometria e dalla massima ampiezza di movimento a cui possono arrivare i giunti, tale spazio rappresenta la porzione dell’ambiente circostante a cui può accedere l’end effector. I manipolatori più utilizzati a livello mondiale sono [17]: • Manipolatore cartesiano [figura 1.9] • Manipolatore SCARA [figura 1.10] • Manipolatore antropomorfo [figura 1.11]
  • 21. 20 Figura 1.10 Figura 1.9 Manipolatore cartesiano Il manipolatore cartesiano è un robot usato per operazioni di trasporto e assemblaggio; è composto da 3 giunti prismatici che garantiscono un grado di libertà per ogni grado di mobilità dell’end effector e non modifica l’orientamento dell’oggetto manipolato. Presenta ottime caratteristiche di rigidezza meccanica e di precisione di posizionamento dell’end effector, che rimane costante nello spazio di lavoro e monta attuatori elettrici o pneumatici, se ha a che fare con carichi più pesanti. Manipolatore SCARA (Selective Compliance Assembly Robot Arm) Il manipolatore SCARA è usato per la manipolazione di piccoli oggetti; presenta 2 giunti rotoidali e uno prismatico, azionati da attuatori elettrici. Presenta un’elevata rigidezza a carichi verticali, una cedevolezza a carichi orizzontali e la precisione di posizionamento del polso si riduce al crescere della distanza del polso stesso dall’asse del primo giunto.
  • 22. 21 Figura 1.11 Figura 1.12 Manipolatore antropomorfo Il manipolatore antropomorfo è il robot che sarà trattato in questo elaborato, per la sua stretta somiglianza in aspetto e movimenti al braccio umano; esso è composto da tre link e tre giunti rotoidali, normalmente azionati da attuatori elettrici, che determinano la posizione in tre dimensioni nello spazio di lavoro. Il giunto della base è perpendicolare agli altri due giunti, paralleli tra loro; grazie alla somiglianza al braccio umano, il secondo giunto viene anche chiamato giunto spalla, e il terzo giunto gomito. Mancando completamente i giunti prismatici, il manipolatore antropomorfo perde del tutto la corrispondenza tra gradi di libertà e variabili dello spazio cartesiano (si deve definire nelle variabili x, y, z un movimento generato da rotazioni spaziali dei giunti); questo comporta anche un continuo cambiamento di precisione nel posizionamento dell’end effector in tutto lo spazio di lavoro. Il polso sferico [figura 1.12] è un pezzo aggiuntivo per i manipolatori, usato più frequentemente nei manipolatori antropomorfi per arrivare a 6 gradi di libertà, dotato di tre giunti rotoidali per determinare l’orientamento dell’end effector.
  • 23. 22 Figura 2.4 Capitolo 2: Problematiche sul controllo Come spiegato nel capitolo precedente, uno dei robot più utilizzati nell’industria è il braccio o manipolatore robotico. Un braccio robotico può essere schematizzato da un punto di vista meccanico come una catena cinematica, composta da bracci connessi assieme da giunti rotoidali o prismatici, che determinano il moto elementare di un braccio rispetto al precedente e definiscono i gradi di libertà complessivi del manipolatore. Ogni grado di libertà è dato dal numero di coppie giunto-braccio e rappresenta il numero di variabili indipendenti necessarie per determinare univocamente la sua posizione nello spazio. Il moto complessivo della struttura è dato dalla composizione di ogni moto elementare, ed è fondamentale descrivere la posizione e l’orientamento dell’organo terminale (end-effector) rispetto alla base del braccio così da poter manipolare un oggetto nello spazio. Tipicamente i bracci robotici sono realizzati in modo tale da essere schematizzati come catene cinematiche aperte, cioè dove ogni link è connesso con
  • 24. 23 Figura 2.5 al massimo altri due link, in questo modo si può mantenere la corrispondenza tra gradi di libertà e coppie giunto-braccio, si snellisce il calcolo cinematico e si evitano ridondanze [figura 2.1]. In questo capitolo verranno analizzati i problemi di cinematica che si sono dovuti affrontare per controllare il braccio robotico, la teoria alla base del controllo e le scelte intraprese per semplificare la complessità di calcolo. Posa di un corpo e matrici di rototraslazione Un corpo è completamente descritto nello spazio in termini della sua posizione e del suo orientamento (in breve posa) rispetto a una terna di riferimento. La posizione dell’oggetto è data dal punto 𝑜′ rispetto alla terna di coordinate 𝑂𝑥𝑦𝑧 [figura 2.2] è espressa in forma matriciale come: Mentre l’orientamento è dato dai versori della terna 𝑂′ 𝑥′𝑦′𝑧′:
  • 25. 24 Figura 2.6 Utilizzando una notazione compatta i tre versori formano la matrice di rotazione: E, siccome i vettori colonna di R rappresentano dei versori di una terna ortonormale, sono ortogonali tra loro e hanno norma unitaria; di conseguenza la matrice R risulta essere una matrice ortonormale: Le matrici di rotazione fondamentali sono quelle che esprimono le rotazioni elementari, cioè una singola rotazione lungo un asse della terna di riferimento [18]: Rotazioni lungo x, y, z: [figura 2.3]
  • 26. 25 Figura 2.7 La matrice di rotazione R può assumere una triplice valenza: • Fornisce l’orientamento di una terna di coordinate rispetto ad un’altra; i vettori colonna della matrice R sono i coseni direttori, i coseni degli angoli tra gli assi della terna ruotata rispetto alla terna di partenza. • È l’operatore che consente di ruotare un vettore in una stessa terna di coordinate [figura 2.3]. • Rappresenta una trasformazione di coordinate che mette in relazione le coordinate di uno stesso punto in due terne differenti, ma di origine comune [figura 2.4]. Per trasformare le coordinate di un punto p da una terna all’altra e viceversa si usa: Con lo stesso procedimento si possono anche combinare più rotazioni elementari per generare qualsiasi rotazione arbitraria: con
  • 27. 26 L’apice del vettore p indica rispetto a quale terna esso è descritto, mentre nella matrice R apice e pedice indicano rispettivamente la terna rispetto alla quale avviene la rotazione e la terna che ruota; la terna espressa nell’apice di R si chiama terna corrente. La rotazione complessiva è composta da una successione di rotazioni parziali, ognuna attuata sull’esito della rotazione precedente; la matrice che indica tale rotazione complessiva è data dalla moltiplicazione delle matrici delle rotazioni parziali da sinistra verso destra. Per le caratteristiche di ortonormalità delle matrici di rotazione risulta inoltre: Oltre che dalla rotazione, la posa di un corpo rigido nello spazio è data anche dalla sua posizione, essa è individuata in termini della posizione di un opportuno punto solidale al corpo rispetto a una terna di riferimento e l’operazione che la definisce è la traslazione. La trasformazione di coordinate di un vettore da una terna all’altra è la combinazione di rotazione e traslazione e si ottiene con semplici considerazioni geometriche come: Se si vuole ottenere una rappresentazione compatta del legame esistente tra le rappresentazioni delle coordinate di uno stesso punto rispetto a due terne differenti [figura 2.5], si può introdurre la rappresentazione omogenea di un generico vettore, aggiungendo una quarta componente unitaria [17]:
  • 28. 27 Figura 2.5 Grazie a tale rappresentazione si può arrivare ad una rappresentazione della trasformazione di coordinate tramite una matrice [ 4 x 4 ] che prende il nome di matrice di trasformazione omogenea: con La trasformazione di coordinate dalla terna 0 alla terna 1 è descritta con la formula inversa: Si nota come la proprietà di ortogonalità non è più valida per la matrice di trasformazione omogenea, e quindi: In definitiva una matrice di trasformazione omogenea A esprime in una forma compatta la trasformazione di coordinate tra due terne.
  • 29. 28 Se le terne hanno la stessa origine, A si riduce essenzialmente ad una matrice di rotazione; nel caso invece di terne con origini distinte, A esprime anche la traslazione delle due origini e consente di mantenere la notazione con apice e pedice della matrice di rotazione, che permette di definire la terna corrente e la terna fissa. Allo stesso modo delle matrici di rotazione, anche una successione di trasformazioni consecutive di coordinate si compone per prodotto come segue: Angoli di Eulero L’utilizzo delle matrici di rotazione fornisce una descrizione ridondante dell’orientamento di una terna, poiché ogni matrice di rotazione è caratterizzata da nove elementi che non sono indipendenti ma legati tra di loro dai sei vincoli dovuti alle condizioni di ortogonalità. In realtà bastano quindi solo tre parametri effettivi per descrivere l’orientamento, una descrizione con solo parametri indipendenti tra loro costituisce una rappresentazione minima. In generale una rappresentazione minima del gruppo speciale ortonormale SO(m) richiede m(m-1)/2 parametri, quindi per parametrizzare SO(3) sono necessari appunto 3 parametri. Tale rappresentazione minima dell’orientamento può essere ottenuta utilizzando un insieme di tre angoli 𝝓 = [ 𝝋 𝝑 𝝍 ] T . Come si è visto, considerando le matrici di rotazione che esprimono la rotazione elementare intorno agli assi, ogni matrice di rotazione può essere ricavata per composizione di tre rotazioni elementari secondo opportune sequenze, in maniera tale da garantire che due rotazioni successive non avvengano intorno ad assi paralleli. Questo comporta che, tra le 27 combinazioni di 3 angoli possibili, solo 12 siano adatti a questo scopo, essi prendono il nome di angoli di Eulero.
  • 30. 29 Figura 2.6 Nella nostra trattazione abbiamo scelto una precisa terna, quella degli angoli ZYX, o angoli RPY dalle iniziali dei termini inglesi Roll - Pitch - Yawn, usati in ambito (aero)nautico, in italiano tradotti come rollio, beccheggio e imbardata. In questo caso la terna 𝝓 = [ 𝝋 𝝑 𝝍 ] T rappresenta rotazioni definite rispetto a una terna fissa solidale al baricentro dello scafo [figura 2.6]. La rotazione complessiva rappresentabile con gli angoli RPY si può ottenere attraverso le seguenti rotazioni elementari: • Si ruota la terna origine di un angolo 𝜓 intorno all’asse x (imbardata); tale rotazione è descritta dalla matrice di rotazione 𝑅 𝑥(𝜓). • Si ruota la terna origine di un angolo 𝜗 intorno all’asse y (beccheggio); tale rotazione è descritta dalla matrice di rotazione 𝑅 𝑦(𝜗). • Si ruota la terna origine di un angolo 𝜑 intorno all’asse z (rollio); tale rotazione è descritta dalla matrice di rotazione 𝑅 𝑧(𝜑).
  • 31. 30 La rotazione globale della terna è caratterizzata dalla matrice ottenuta moltiplicando da destra verso sinistra le matrici rappresentative delle rotazioni elementari effettuate: Cinematica Diretta Un manipolatore è costituito da un insieme di bracci connessi in cascata tramite coppie cinematiche o giunti, tale struttura forma una catena cinematica, dove un estremo di essa è vincolato alla base mentre all’altro estremo è connesso un end effector per poter manipolare gli oggetti. In questo elaborato si tratteranno solamente manipolatori seriali, quindi verranno analizzate solamente catene cinematiche aperte: tutti i bracci sono collegati al massimo ad altri due bracci e non si formano sequenze ad anello. La struttura meccanica di un manipolatore è caratterizzata da un numero di gradi di libertà che ne determinano la postura, cioè la descrizione di tutti i corpi rigidi che la costituiscono; ogni grado di libertà viene associato ad un giunto e costituisce una variabile di giunto. Obiettivo della cinematica diretta è la determinazione della posa dell’end effector in funzione dei valori assunti dalle variabili di giunto. La posa dell’end effector rispetto ad una terna di riferimento è caratterizzata dal vettore posizione dell’origine e dai versori di una terna solidale all’end effector stesso. Tale terna solidale ad esso è detta terna utensile, e si sceglie in maniera conveniente per ogni tipologia di end effector, mentre la terna di riferimento è la terna base 𝑂 𝑏 − 𝑥 𝑏 𝑦 𝑏 𝑧 𝑏. Con riferimento ad un organo terminale di tipo pinza, l’origine della terna utensile 𝑝𝑒 si pone al centro della pinza, il versore 𝑎 𝑒 (approccio) si sceglie nella
  • 32. 31 Figura 2.7 direzione di avvicinamento ad uno oggetto, il versore 𝑠𝑒 (scivolamento) si sceglie normale ad 𝑎 𝑒 nel piano di scorrimento degli elementi prensili, e il versore 𝑛 𝑒 (normale) si sceglie normale agli altri due, in modo tale da formare una terna levogira [figura 2.7]. La funzione cinematica diretta è espressa dalla matrice di trasformazione omogenea in cui q è il vettore [ n x 1 ] delle variabili di giunto: Affrontando catene cinematiche semplici, con relativamente pochi elementi e quindi poche variabili di giunto, si può calcolare la cinematica diretta grazie ad una semplice analisi geometrica della struttura del manipolatore assegnato. Quando però la struttura del manipolatore risulta complessa e il numero di giunti diventa elevato, è preferibile un utilizzo di una procedura sistematica e generale.
  • 33. 32 Figura 2.8 La definizione di tale procedura sistematica per il computo della cinematica diretta scaturisce naturalmente dalla struttura a catena cinematica aperta del manipolatore. Un manipolatore seriale infatti è costituito da n+1 bracci connessi tra loro tramite n giunti, dove ogni giunto fornisce un singolo grado di libertà corrispondente alla variabile di giunto, e fissato il braccio 0 convenzionalmente a terra. Siccome ciascun giunto connette al massimo due bracci consecutivi, si può isolare il problema della definizione della funzione di cinematica diretta in due sotto problemi: il problema della descrizione di ciascun legame cinematico tra bracci consecutivi e la successiva ricombinazione delle singole descrizioni in maniera ricorsiva per poter giungere alla descrizione complessiva della cinematica del manipolatore. Si procede quindi alla definizione delle terne di coordinate solidali a ciascun braccio, dal braccio 0 al braccio n [figura 2.8], e si calcolano le matrici di trasformazione omogenea di tra ogni coppia di terne.
  • 34. 33 La trasformazione di coordinate complessiva che esprime posizione e orientamento della terna n rispetto alla terna 0 è data da: Tale calcolo è ricorsivo e viene ottenuto in maniera sistematica attraverso i semplici prodotti delle matrici di trasformazione omogenea, ognuna delle quali risulta funzione di una singola variabile di giunto. Infine la trasformazione di coordinate effettiva che descrive la posa della terna utensile rispetto alla terna base viene ottenuta come: Le due trasformazioni omogenee della terna base e della terna utensile sono tipicamente costanti e descrivono posizione e orientamento rispettivamente della terna 0 rispetto alla terna base e della terna utensile rispetto alla terna n. Convenzione di Denavit-Hartenberg Per calcolare l’equazione cinematica diretta per un manipolatore seriale, attraverso l’espressione ricorsiva descritta nel capitolo precedente, bisogna delineare un metodo generale e sistematico per definire posizione e orientamento relativi di due bracci consecutivi. Il problema si riconduce all’individuazione delle terne solidali a ciascun braccio e alla determinazione della matrice di trasformazione omogenea che lega le due terne. Attraverso la convenzione di Denavit-Hartenberg (DH) si possono risolvere entrambi i problemi, permettendo di esprimere la posa dell’end effector rispetto al sistema di riferimento della base, a cui e fissato il braccio.
  • 35. 34 Figura 2.9 Come primo passo si definiscono gli assi dei giunti [figura 2.9], assumendo come asse i l’asse del giunto che connette il braccio i-1 al braccio i, successivamente si passa alla definizione della terna i-esima [17][19]: • si sceglie l’asse 𝑧𝑖 giacente lungo l’asse del giunto i+1 • si individua 𝑂𝑖 all’intersezione dell’asse 𝑧𝑖 con la normale comune (la retta a cui appartiene il segmento di minima distanza tra due assi sghembi) agli assi 𝑧𝑖−1 e 𝑧𝑖, e con 𝑂𝑖′ si indica l’intersezione della normale comune con 𝑧𝑖−1 • si assume l’asse 𝑥𝑖 diretto lungo la normale comune agli assi 𝑧𝑖−1 e 𝑧𝑖 con verso positivo dal giunto i al giunto i+1 • si sceglie l’asse 𝑦𝑖 in modo da completare una terna levogira La convenzione di Denavit-Hartenberg fornisce una definizione non univoca di tale terna nei seguenti casi:
  • 36. 35 • Nella terna 0, per la quale la sola direzione dell’asse 𝑧0 risulta specificata e si possono quindi scegliere arbitrariamente 𝑂0 e 𝑥0, ricordando che 𝑦0 deve essere definito per completare la terna levogira. • Nella terna n, per la quale il solo asse 𝑥 𝑛 risulta soggetto a vincolo (deve essere normale all’asse 𝑧 𝑛−1), infatti non esiste il giunto n+1, per cui non è definito 𝑧 𝑛 e lo si può scegliere arbitrariamente. • Quando due assi consecutivi sono paralleli, in quanto la normale comune tra loro non è univocamente definita. • Quando due assi consecutivi si intersecano, in quanto il verso di 𝑥𝑖 è arbitrario. • Quando il giunto i è prismatico, nel qual caso la sola direzione dell’asse 𝑧𝑖−1 è determinata. In tutti questi casi si può sfruttare tale indeterminazione per semplificare la procedura ricercando, per esempio, condizioni di allineamento tra gli assi di terne consecutive per snellire la complessità della formula. Una volta definite le terne solidali ad ogni braccio si passa alla definizione dei seguenti parametri: • 𝑎𝑖 distanza di 𝑂𝑖 da 𝑂𝑖′ • 𝑑𝑖 coordinata su 𝑧𝑖−1 di 𝑂𝑖 • 𝛼𝑖 angolo intorno all’asse 𝑥𝑖 tra l’asse 𝑧𝑖−1 e l’asse 𝑧𝑖 valutato positivo in senso antiorario; • 𝜗𝑖 angolo intorno all’asse 𝑧𝑖−1 tra l’asse 𝑥𝑖−1 e l’asse 𝑥𝑖 valutato positivo in senso antiorario.
  • 37. 36 Di questi quattro parametri, 𝑎𝑖 e 𝛼𝑖 sono sempre costanti e dipendono dalla geometria del manipolatore mentre degli altri due uno soltanto è variabile in dipendenza dal tipo di giunto utilizzato per connettere il braccio i-1 al braccio i: se il giunto i è rotoidale la variabile è 𝜗𝑖, se è prismatico la variabile è 𝑑𝑖. A questo punto si può definire la matrice di trasformazione omogenea che lega la terna i alla terna i-1, essa è composta a sua volta da due matrici di trasformazione: • la matrice che porta dalla posa della terna i-1 a quella della terna i′, traslando di 𝑑𝑖 e ruotando 𝜗𝑖 lungo l’asse 𝑧𝑖−1 • la matrice che porta dalla posa della terna i′ a quella della terna i, traslando di 𝑎𝑖 e ruotando 𝛼𝑖 lungo l’asse 𝑥𝑖′ • La trasformazione di coordinate complessiva si ottiene moltiplicando le precedenti matrici:
  • 38. 37 Questa procedura può essere applicata con semplicità a qualsiasi catena cinematica aperta anche complessa; per ottenere infine la funzione cinematica, come abbiamo visto nel precedente paragrafo, è necessario moltiplicare assieme tutte le matrici di trasformazione omogenea e poi moltiplicare il prodotto per le trasformazioni omogenee della terna base e della terna utensile: Problema cinematico inverso Come si è visto, la cinematica diretta definisce le relazioni funzionali esistenti tra le variabili di giunto Θ e la posa dell’end effector Χ 𝐸𝐸: Χ 𝐸𝐸 = {𝑥 𝑒, 𝑦𝑒, 𝑧 𝑒, 𝜗𝑥, 𝜗 𝑦, 𝜗𝑧} Χ 𝐸𝐸 = 𝑓(Θ) Il problema della cinematica inversa, invece, affronta la determinazione delle variabili di giunto che un manipolatore deve assumere una volta assegnata la posa dell’end effector [20]: Θ = 𝑓−1(Χ 𝐸𝐸) La risoluzione di tale problema è di notevole importanza per tradurre le specifiche di moto assegnate all’end effector nello spazio operativo, nei moti corrispondenti nello spazio dei giunti, per consentire l’effettuazione del movimento desiderato; inoltre tale problema risulta molto più complesso da risolvere rispetto a
  • 39. 38 Figura 2.10 quello della cinematica diretta poiché non esiste alcun metodo di tipo generale e sistematico per trovare una soluzione ad esso. Questo perché nell’equazione cinematica diretta la matrice di trasformazione finale è determinata in maniera univoca, una volta assegnate le variabili di giunto, mentre il problema cinematico inverso risulta più complesso per i seguenti motivi [17]: • le equazioni da risolvere sono in generale equazioni non lineari di cui non sempre è possibile trovare una soluzione analitica (in forma chiusa) • si possono avere soluzioni multiple [figura 2.10] • si possono avere infinite soluzioni, come nel caso di un manipolatore ridondante • possono non esistere soluzioni ammissibili, data la struttura cinematica del manipolatore Per quanto riguarda l’esistenza di soluzioni, questa è garantita se la posa assegnata appartiene allo spazio di destrezza del manipolatore, cioè un sottoinsieme dello spazio di lavoro dove l’end effector può arrivare con più di un orientamento.
  • 40. 39 Il problema delle soluzioni multiple dipende invece non solo dal numero dei gradi di libertà, ma anche dal numero di parametri di Denavit-Hartemberg ( 𝑎𝑖, 𝑑𝑖, 𝛼𝑖, 𝜗𝑖), in generale: maggiore è il numero di parametri diversi da 0, maggiore è il numero di configurazioni ammissibili. Prendendo come esempio un manipolatore seriale a 6 gradi di libertà e senza fine-corsa meccanici, cioè ogni giunto libero di muoversi per tutta l’ampiezza geometrica possibile (giunti rotoidali 360°) e i bracci non generano collisione tra loro o con il suolo, esistono in generale fino a 16 soluzioni possibili. La presenza di fine-corsa meccanici ai giunti o criteri di scelta oculati per la ricerca dei parametri DH potrebbe eventualmente ridurre il numero di soluzioni multiple riscontrabili nella struttura reale. Per risolvere il problema della cinematica inversa vengono utilizzati diversi metodi, per giungere alla definizione di due tipologie di soluzioni: • soluzioni analitiche (o in forma chiusa) • soluzioni numeriche I metodi che ricercano una soluzione analitica consistono nella ricerca delle soluzioni dell’equazione: 𝐴 𝑒 𝑏( 𝜗1, . . . , 𝜗 𝑛) = 𝑇 = [ 𝑟11 𝑟12 𝑟13 𝑝 𝑥 𝑟21 𝑟22 𝑟23 𝑝 𝑦 𝑟31 𝑟32 𝑟33 𝑝𝑧 0 𝑂 𝑂 1 ] Dove 𝐴 𝑒 𝑏 è la matrice omogenea della cinematica diretta e 𝑇 è la posa dell’end effector espressa in forma matriciale. L’obiettivo della risoluzione analitica è trovare i 𝜗0, . . . , 𝜗 𝑛 tali che soddisfino l’equazione matriciale. Data la struttura della matrice omogenea infatti, questa equazione corrisponde a 12 equazioni trascendenti non lineari con n variabili di giunto incognite [1].
  • 41. 40 Per risolvere l’equazione si può utilizzare un approccio algebrico o uno geometrico. Con l’approccio algebrico si identifica il sistema di equazioni contenente le posizioni dei giunti e lo si manipola algebricamente per giungere ad una soluzione, riducendo il numero di variabili in modo tale da trovare una qualche dipendenza tra loro. L’approccio geometrico invece prevede di prendere in considerazione la struttura del manipolatore e di suddividere il problema generale in due sotto problemi di cinematica inversa, trattando separatamente posizione ed orientamento, che risultano più semplici da risolvere. Affinché tali metodi di risoluzione forniscano una soluzione analitica, sono necessarie delle condizioni sufficienti; per un manipolatore a sei gradi di libertà, ad esempio, tali condizioni sono che gli assi di 3 giunti rotoidali consecutivi si devono intersecare in un punto (polso sferico) oppure che gli assi di 3 giunti consecutivi devono essere paralleli ad un altro asse. Le soluzioni analitiche sono preferibili alle soluzioni numeriche, poiché i calcoli possono essere eseguiti in modo molto rapido e questa velocità è fondamentale per i robot che devono calcolare i propri movimenti in tempo reale. Un altro vantaggio molto utile per preferire le soluzioni analitiche, è dato dalla possibilità di trovare tutte le soluzioni per la posa dell’end effector, ottenendo una maggior flessibilità rispetto alle tecniche che convergono ad una singola soluzione. Purtroppo non tutti i tipi di manipolatori garantiscono l’esistenza di una soluzione analitica, anche se normalmente le aziende costruttrici di bracci robotici tendono a progettarli in modo tale da soddisfare le condizioni per garantirne l’esistenza. Quando non è possibile giungere a tale soluzione, si procede a ricercare una soluzione numerica; i metodi per giungere a tale soluzione non dipendono dalla struttura del manipolatore e possono essere quindi applicati a qualunque
  • 42. 41 configurazione; il loro svantaggio però è che possono essere lenti ed in alcuni casi non forniscono tutte le possibili soluzioni. Esiste un largo numero di metodi iterativi differenti per trovare una soluzione numerica al problema della cinematica inversa. Molti di essi convergono ad una singola soluzione basandosi su una stima iniziale e la qualità di tale stima ha un notevole impatto sul tempo di calcolo per arrivare alla soluzione reale. Quindi, nel caso in cui non si giunga ad una soluzione analitica per una particolare configurazione di manipolatore, i metodi tradizionali richiedono una elevata complessità di calcolo dovuta all’articolata struttura del manipolatore.
  • 43. 42 Figura 3.8 Capitolo 3: Strumentazione utilizzata Braccio robotico Per questo progetto, è stato messo a disposizione dall’università un manipolatore robotico AL5D della Lynxmotion [figura 3.1]. Lynxmotion è un’azienda americana fondata nel 1995 da Jim Frye ed è una delle più vecchie nella produzione di kit robotici per uso accademico [3]. Il AL5D PLTW Robotic Arm Kit è un modello che fa parte dei kit modulari Set Servo Erector, invenzione della Lynxmotion per permettere la facilità di montaggio e la compatibilità tra tutti i propri prodotti, per incentivare la sperimentazione di diverse configurazioni robotiche.
  • 44. 43 Figura 3.2 Figura 3.3 Il kit AL5D è un modello di piccole dimensioni in alluminio pensato per uso didattico, monta cinque servomotori e ha come end effector una pinza per afferrare gli oggetti, così da simulare il comportamento della mano umana. Questo manipolatore monta 5 servomotori e ha 4 gradi di libertà; per aumentare la sua destrezza lo si è dotato di un kit per il polso rotante a medio carico, il Wrist Rotate Upgrade (Medium Duty) sempre facente parte del Set Servo Erector della Lynxmotion [figura 3.2]. Questa miglioria ha portato il braccio robotico ad avere 5 gradi di libertà, nonché a poter mimare il comportamento del polso umano [figura 3.3].
  • 45. 44 Figura 3.4 Servomotori Per muovere i giunti del braccio robotico sono messi in dotazione 6 servomotori elettrici. Il servomotore è una particolare tipologia di motore che si differenzia dai motori tradizionali, poiché le sue condizioni operative sono soggette ad ampie e spesso repentine variazioni, sia nel campo della velocità sia della coppia motrice. Per quanto appena detto, il servomotore è uno strumento molto utilizzato nella robotica per l’azionamento dei giunti. Esso si presenta come un piccolo contenitore di materiale plastico da cui fuoriesce un perno in grado di ruotare in un angolo compreso tra 0 e 180° mantenendo stabilmente la posizione raggiunta. Anche la limitazione a soli 180 gradi di escursione può sembrare penalizzante per il movimento, esso può risultare più che sufficiente per manovrare un robot, poiché la geometria di quest’ultimo e/o la combinazione di più servomotori garantisce tutta la mobilità e la destrezza richieste.
  • 46. 45 Figura 3.5 All'interno del servomotore è presente un motore a corrente continua, un meccanismo di demoltiplica, cioè una serie di ingranaggi che riducono la velocità del motore e aumentano la coppia motrice, un circuito di controllo e un potenziometro [figura 3.4] [21]. Il circuito e il motore vengono alimentati da una tensione continua stabilizzata, normalmente la maggior parte dei servomotori funziona con un valore compreso tra 4,8 V e 6,0 V. Il motore liberamente ruoterebbe ad una velocità troppo elevata per essere impiegata direttamente nei robot, quindi tutti i servomotori prevedono ingranaggi che riducono l'uscita del motore a una velocità compresa tra 50 giri/m e 100 giri/m. Il motore, attraverso il meccanismo di demoltiplica, muove il perno esterno verso la posizione desiderata; una volta raggiunta, il perno si blocca grazie al circuito di controllo interno, in grado di rilevare l'angolo di rotazione raggiunto tramite un potenziometro resistivo e spegnere il motore nel punto desiderato. L’insieme di motore, potenziometro e circuito di controllo definisce un sistema di feedback ad anello chiuso [figura 3.5]. Il motore si aziona grazie all’invio di un segnale digitale al circuito di controllo, la rotazione precisa di un angolo da parte di un servomotore in risposta a determinati segnali digitali rappresenta una delle funzionalità più sfruttate in tutti i campi della robotica.
  • 47. 46 Figura 3.6 Figura 3.7 Il servomotore è normalmente collegato ad una scheda integrata attraverso un cavo composto da 3 fili. Due di questi fili sono riservati all'alimentazione in corrente continua (rosso per la positiva, nero per la negativa), il terzo filo (normalmente di colore bianco o giallo) è riservato per il controllo del posizionamento [figura 3.6]. Tramite il filo del controllo è necessario applicare un segnale impulsivo o PWM (Pulse Width Modulation) le cui caratteristiche sono quasi univoche per qualsiasi servomotore disponibile in commercio. Per riuscire a pilotare un servomotore, la scheda di controllo (microcontrollore) trasmette alla scheda di controllo del servomotore circa 50 impulsi positivi al secondo (uno ogni 20 ms), la durata di tale impulso stabilisce la posizione del perno (con un intervallo massimo compreso tra 0.25ms e 2.75ms). Con un impulso di durata pari a 1.5 ms il perno del servomotore si pone esattamente al centro del suo intervallo di rotazione, se la durata è minore il perno ruota in senso antiorario altrimenti si avrà una rotazione in senso orario quando l'impulso fornito ha durata superiore [figura 3.7].
  • 48. 47 Il potenziometro del servomotore svolge un ruolo fondamentale poiché esso consente di stabilire l'istante in cui il motore ha portato l'albero di uscita nella posizione desiderata, essendo collegato solidamente ad esso. Fungendo da partitore di tensione, il potenziometro fornisce al circuito di controllo una tensione che varia in funzione della variazione dell'uscita del servomotore. Il circuito di controllo del servomotore mette in relazione questa tensione con la temporizzazione degli impulsi digitali di ingresso e genera un segnale di errore nel caso in cui debba correggere la tensione da inviare al motore. Questo segnale di errore è proporzionale alla differenza rilevata tra la posizione del potenziometro e la temporizzazione definita dal segnale in ingresso. Per compensare questa differenza, il circuito di controllo invia al motore un segnale che tiene conto di questo errore, fino a quando non lo annulla e spegne il motore. I servomotori del manipolatore utilizzato in questa trattazione sono di categoria entry level: poco precisi, facilmente soggetti ad usura ma con un costo molto basso. Caratteristiche fondamentali per la descrizione di un servomotore sono [21]: • Coppia motrice: è il momento meccanico del sistema di forze esercitate dal motore sul perno. Viene espresso in chilogrammo forza per centimetro, cioè il lavoro necessario per sollevare di un centimetro un corpo con massa di un chilogrammo. I servomotori possiedono una coppia motrice considerevole, soprattutto grazie agli ingranaggi di riduzione della velocità del motore. • transitorio (o slew rate): esprime una misura approssimativa del tempo richiesto dal servomotore per ruotare il motore di 60°, più è piccolo il transitorio e più veloce risulta il suo funzionamento; i servomotori di piccole dimensioni tendono ad avere un transitorio più piccolo rispetto a quelli di dimensioni più grandi.
  • 49. 48 Figura 3.8 *I DUE VALORI RIPORTATI IN OGNI CASELLA DELLACOLONNA INDICANO IL VALORE RISCONTRATO A SECONDA CHE I SERVOMOTORI LAVORINO A 4.8 V OPPURE 6 V Servo controller SSC-32U MODELLO [22][23] POSIZIONE TRANSITO * s/60° COPPIA MOTRICE * Kg ∙ cm HS-485HB BASE 0.2 – 0.17 5.2 – 6.4 HS-805BB SPALLA 0.19 - 0.14 19.8 – 24-7 HS-755HB GOMITO 0.28 – 0.23 11 – 13.2 HS-645MG POLSO (BECCHEGGIO) 0.24 – 0.20 7.7 – 9.6 HS-225MG POLSO (ROLLIO) 0.14 – 0.11 3.9 – 4.8 HS-422 PINZA 0.21 – 0.16 3.3 – 4.1
  • 50. 49 Compresa all’interno del kit del braccio AL5D, vi è una scheda elettronica SSC-32U per il controllo dei servomotori [figura 3.8]. Lynxmotion SSC-32U è un servo controller dedicato con un core Atmel ATmega328p, ha un range da 0.50 𝑚𝑠 a 2.50 𝑚𝑠 che fa fronte ad un intervallo di circa 180°, è caratterizzato inoltre da un’alta precisione (1 𝜇𝑠) che gli consente un posizionamento preciso; per questi motivi risulta utilizzabile per la maggior parte dei servomotori [3]. Da notare che, siccome SSC-32U è un servo controller dedicato, come tale non è programmabile ma semplicemente riceve ed esegue comandi inviati ad esso da un dispositivo esterno come un computer o un microcontrollore. Questo può risultare molto utile con un microcontrollore, poiché si risparmia la memoria di quest’ultimo, non dovendo implementargli un codice per la gestione dei servomotori. Mentre, per essere collegato ad un computer, SSC-32U è munito di un ingresso USB seriale attraverso il quale può essere sia alimentato che ricevere i comandi di posizionamento dei servomotori. Il microprocessore del servo controller può ricevere solo comandi inviati in formato seriale, quindi un chip FTDI converte il datastream USB in seriale e consente alla scheda di essere rilevata come porta COM del computer una volta collegata. SSC-32U può controllare fino a 32 servomotori, ognuno di essi può essere collegato ai suoi 3 pin per la massa, la tensione di alimentazione e l’invio del segnale per il comando di posizione. Il controllo del movimento viene gestito attraverso l’invio di una stringa di caratteri ASCII che invia un comando che garantisce: una risposta immediata, una velocità controllata, un movimento temporizzato o una combinazione di essi. Il movimento temporizzato è un comando molto utile per i manipolatori, poiché garantisce l’inizio e la fine di un movimento di tutti i servomotori richiesti in un tempo prestabilito; questo è interessante poiché il servo controller riesce a dare una velocità precisa ad ogni servomotore in modo tale che si rispetti questo vincolo
  • 51. 50 di tempo, quindi un servomotore che si deve muovere di 180° andrà tipicamente più veloce di uno che debba muoversi di 30°. Il protocollo di SSC-32U per posizionare uno o più servi è semplice e intuitivo, esso si compone di un segnale seriale composto da una stringa in caratteri ASCII nel seguente formato [24]: # < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 > 𝐓 < 𝐭𝐦𝐩 > < 𝐜𝐫 > • #< 𝐜𝐚𝐧𝐚𝐥𝐞 > : il canale ovvero il numero che caratterizza il servomotore al quale è diretto il segnale di posizione, questo è un numero intero compreso tra 0 e 31. • 𝐏 < 𝐩𝐨𝐬 > : la larghezza di impulso desiderata, cioè la posizione che il servomotore deve assumere; è un numero intero con valori utili per i servomotori che vanno da 500 𝜇𝑠 (servo a 0°) a 2500 𝜇𝑠 (servo a 180°). • 𝐕 < 𝐯𝐞𝐥 > : velocità di movimento del servo in 𝜇𝑠/𝑠, per capire come il servo controller elabora la velocità per i servomotori si deve considerare che per 90° di spostamento la larghezza dell’impulso sarà di 1000 𝜇𝑠, quindi impostare un valore di velocità pari a 100 𝜇𝑠/𝑠 fa muovere un servomotore di 90° in 10 secondi, mentre se impostato a 2000 𝜇𝑠/𝑠 consentià al servo di ruotare di 90° in mezzo secondo. Da notare che ogni servomotore ha una velocità massima in gradi al secondo, quindi se gli si forniscono comandi a velocità troppo elevate esso sarà comunque fisicamente limitato. • 𝐓 < 𝐭𝐦𝐩 > : tempo espresso in 𝑚𝑠 per spostare tutti i servomotori dalla posizione corrente alla posizione indicata; la temporizzazione di un comando implica che tutti i movimenti debbano completarsi entro il tempo indicato, se nello stesso comando sono indicate anche le velocità, esse vengono
  • 52. 51 considerate solo se uguali o inferiori a quelle calcolate da SSC-32U per completare il movimento in tempo, altrimenti vengono modificate in modo tale da rispettare la temporizzazione. Il tempo massimo impostabile è 65535. • < 𝐜𝐫 > : il tredicesimo carattere ASCII di ritorno a capo usato per far comprendere al servo controller la fine del comando, nel linguaggio di programmazione Java si può usare il carattere “r” oppure inviarlo automaticamente con il metodo .println(String comando). I comandi inviati non sono case sensitive, quindi non vengono riconosciute differenze tra le lettere maiuscole e le minuscole; spazi, caratteri di tab o di semplice ritorno testuale “n” non vengono considerati. Mentre canale e posizione sono parametri obbligatori da indicare per la riuscita di un comando, velocità e tempo sono facoltativi, nel qual caso i servomotori si muoveranno al massimo della loro velocità fisica. Il primo comando inviato all’accensione non tiene conto dei parametri di velocità o tempo, quindi è preferibile inviare un “comando sicuro” ai servomotori, cioè un posizionamento molto vicino alla posa di riposo del manipolatore, per evitare di danneggiare i servomotori con movimenti troppo “bruschi”. Oltre ad un comando per un singolo servomotore, si possono combinare più comandi assieme usando il formato: # < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 > … # < 𝐜𝐚𝐧𝐚𝐥𝐞 > 𝐏 < 𝐩𝐨𝐬 > 𝐒 < 𝐯𝐞𝐥 > 𝐓 < 𝐭𝐦𝐩 > < 𝐜𝐫 > In questo modo si possono muovere fino a 32 servomotori con una sola riga di comando, con differenti velocità o con un singolo comando temporizzato.
  • 53. 52 Figura 3.9 Leap Motion Per rilevare la posizione e l’orientamento della mano si è deciso di utilizzare il controller Leap Motion dell’omonima azienda americana. Il controller Leap Motion è un dispositivo a corto raggio, pensato per poter essere posto su una scrivania e rilevare i movimenti delle mani a breve distanza e con una buona precisione. Questo dispositivo è piuttosto recente, infatti nasce nel 2012 da un progetto di D. Holz e M. Buckwald in Florida, che hanno voluto innovare in modo radicale gli strumenti per interfacciarsi ai computer, mouse o tastiera [2]. Questa invenzione ha ultimamente trovato terreno fertile soprattutto nei nuovi dispositivi di realtà aumentata e nei visori 3D, dove è indispensabile poter utilizzare lo spazio tridimensionale con gesti più complessi. Dal punto di vista prettamente tecnologico il controller Leap Motion presenta dei notevoli progressi rispetto a un sensore di prossimità, infatti è una periferica USB, collegabile al computer attraverso l’API fornita dalle librerie dinamiche di Leap Motion, che riconosce e traccia non solo la posizione ma anche l’orientamento e l’accelerazione delle mani e delle dita, con precisione e frequenza di monitoraggio elevate [figura 3.9].
  • 54. 53 Figura 3.10 Figura 3.11 Questo tracciamento discreto avviene grazie a 2 telecamere monocromatiche ad infrarossi e 3 LED infrarossi con un campo visivo di circa 150 gradi, l’intervallo efficace del Leap Motion si estende da circa 25 a 600 millimetri sopra il dispositivo e con una precisione di 0,01 mm [figura 3.10]. Il software Leap Motion riceve i dati del sensore e ne effettua un’analisi specifica per rilevare mani, dita e braccia; inoltre, per far fronte a condizioni di monitoraggio difficili, mantiene un modello interno della mano umana e confronta tale modello ai dati del sensore per determinarne meglio la forma anche a fronte di condizioni di monitoraggio difficili [figura 3.11].
  • 55. 54 I dati del sensore vengono analizzati fotogramma per fotogramma con una frequenza variabile tra 30 e 60 al secondo (normalmente 50 fps) e il controller, dopo averli analizzati, li invia alle applicazioni abilitate a Leap Motion; ogni fotogramma ricevuto contiene infatti tutte le posizioni note, le velocità e le identità degli oggetti tracciati. Possedendo nella memoria un modello di mano umana, il Leap Motion riesce a fornire un monitoraggio predittivo anche quando parti della mano dell’utente non sono visibili. Questo garantisce che la posizione delle cinque dita possa venir stimata, sia durante un tracciamento ottimale che in occasione di una temporanea ed imprevista mancanza di dati essenziali (per esempio a causa di occlusioni nel campo visivo, cattiva illuminazione o vetro protettivo delle videocamere sporco). Il funzionamento di questo sistema di predizione intelligente utilizza le parti visibili della mano, il suo modello interno e le osservazioni passate per calcolare le posizioni più probabili delle parti che eventualmente non fossero ben visibili. Per incentivare l’utilizzo del dispositivo Leap Motion e lo sviluppo di software che ne facciano uso, l’azienda madre fornisce un SDK (Software Development Kit), cioè un insieme di strumenti per lo sviluppo e la documentazione di software, scaricabili gratuitamente dal portale Leap Motion per sviluppatori [25]. Leap Motion SDK contiene due librerie di base che definiscono l'API per i dati di tracciamento del dispositivo Leap Motion, una scritta in C e l’altra in C++. Si può comunque sviluppare anche in altri linguaggi di programmazione: • C# e Objective-C: grazie alle classi Wrapper, cioè le classi che incapsulano i dati primitivi, che creano i collegamenti linguistici con i linguaggi nativi. • Java e Python: attraverso lo strumento open source SWIG che collega le chiamate generate da questi linguaggi di programmazione alla libreria nativa in C++.
  • 56. 55 • JavaScript e lo sviluppo di applicazioni Web: l’azienda fornisce un server WebSocket e una libreria JavaScript lato client. Tutti i file di libreria, di codice e di intestazione richiesti per sviluppare applicazioni e plug-in compatibili con Leap Motion sono inclusi nel pacchetto SDK, fatta eccezione della libreria JavaScript del client leap.js. Sul sito Leap Motion vi è un pacchetto disponibile per ogni sistema operativo supportato (Microsoft Windows, macOS e distribuzioni GNU/Linux) mentre la libreria client JavaScript può essere scaricata dal servizio di hosting GitHub [26]. Visto che il software oggetto di questa trattazione è interamente scritto in Java per un computer a 64 bit su cui è installato Windows 10, i metodi creati e le librerie utilizzate sono espressamente realizzati in questo linguaggio di programmazione e per questo sistema operativo. Nella programmazione in Java alla base del modello di dati del controller vi è il frame, questo oggetto rappresenta il fotogramma e tutti i dati utili calcolati; esso è il macroinsieme di tutte le mani o gli oggetti tracciati, specificandone le proprie proprietà in un solo momento [25]. Da ogni frame si possono estrapolare gli oggetti Hand, essi rappresentano ogni mano e ogni dato ad essa collegato. In questo modo si può ottenere informazioni sul numero totale di mani, assegnare ad ognuna un ID, prendere la loro posizione e altre caratteristiche associate ad esse. Infatti, oltre a poter indicare le loro caratteristiche (destra o sinistra, grandezze fisiche di ogni loro parte), il controller elabora direttamente i punti e vettori utili per definire la posizione e l’orientamento di ogni componente della mano. Nello specifico, per definire la posizione nello spazio, il controller Leap Motion utilizza un sistema di coordinate cartesiano destrorso, l'origine è centrata nella parte centrale del vetro protettivo delle videocamere; l’asse y è verticale e a valori positivi crescenti verso l’alto mentre gli assi x e z si trovano nel piano
  • 57. 56 Figura 3.13 Figura 3.12 orizzontale, con l’asse z rivolta verso l’utente e l’asse x lungo il bordo lungo del dispositivo con il verso a completare la terna [figura 3.12]. I vettori definiti dai metodi in linguaggio Java .palmNormal( ) e .direction( ) semplificano molto l’analisi dell’orientamento della mano, poiché, definendo rispettivamente il vettore perpendicolare al palmo e quello con direzione concorde al verso delle dita [figura 3.13], si possono usare per il calcolo degli angoli di Eulero. Questi angoli possono far ricreare al braccio robotico i gesti complessi come la pronosupinazione, cioè la rotazione del polso, la dorsiflessione, ovvero l’inclinazione della mano verso il basso o verso l’alto, o le deviazioni radiali o ulnari, che definiscono lo spostamento a sinistra e a destra [27]. Questi movimenti sono appunto associati agli angoli rispettivamente di rollio, beccheggio e imbardata.
  • 58. 57 Figura 3.14 Figura 3.15 Le dita invece vengono rappresentate attraverso gli oggetti Finger, dove il controller fornisce informazioni su ciascun dito visualizzato, o al limite a stime dello stesso nel caso sia poco visibile, gli assegna un ID e le sue caratteristiche vengono stimate in base alle recenti osservazioni e al modello anatomico della mano [figura 3.14]. Il controller è in grado di identificare il tipo di dito e per il progetto ci si è serviti appunto di questa potenzialità per rilevare e quindi utilizzare solo la posa del pollice, per comandare l’apertura e chiusura della pinza. Per definire uno spazio di lavoro per la mano, e quindi di conseguenza per il manipolatore, si usa l’oggetto InteractionBox, esso definisce un’area rettilinea all'interno del campo di vista Leap Motion; finché la mano dell'utente rimane all'interno di quest’area, è garantito che rimanga anche nel campo di vista Leap Motion [figura 3.15].
  • 59. 58 Figura 3.16 Questo oggetto è utile per migliorare la mappatura dell’area d’interazione dell’utente, poiché garantisce che tutta la parte mappata sia all’interno dell’area di visualizzazione e, attraverso il metodo .normalizePoint( ) è possibile normalizzare lo spazio di lavoro, suddividendo l’area in un intervallo reale [0,1] così da poter modificare facilmente i valori di posizione dello spazio dell’utilizzatore per le misure dello spazio di lavoro del robot [figura 3.16].
  • 60. 59 Capitolo 4: Sviluppo del Software In questo capitolo verrà descritto il progetto finale del software in Java per il controllo del braccio robotico. In particolare questo software ha richiesto la comunicazione dei seguenti dispositivi: • Servo controller SSC-32U (a cui è collegato il braccio AL5D) • Computer • Leap Motion Il programma è stato sviluppato con il linguaggio Java sull’ambiente di sviluppo Eclipse, un software libero e gratuito di Eclipse Foundation [4]. Per poter far comunicare i dispositivi tra di loro si sono utilizzate le seguenti librerie: • leapmotion • jSerialComm Queste librerie sono entrambe scaricabili dal loro rispettivo sito omonimo e sono facili da utilizzare grazie alla documentazione pubblicata sullo stesso [25][28]. L’obiettivo finale era creare un software che non solo connettesse manipolatore e Leap Motion per poter ricreare il movimento del braccio umano ma potesse risultare anche user frendly.
  • 61. 60 Ecco perché si è scelto di implementare una semplice GUI (Graphical User Interface), un’interfaccia grafica in grado di far gestire all’utilizzatore finale il lancio, la connessione e la terminazione di tutti i processi. GUI Per l’implementazione di un’interfaccia grafica si è scelto l’utilizzo di Swing e AWT (Abstract Window Toolkit), due librerie standard del pacchetto Java che creano e implementano i widget, cioè gli oggetti grafici come pannelli, pulsanti e caselle di testo [29]. La libreria Swing viene utilizzata come libreria ufficiale per la realizzazione di interfacce grafiche in Java ed è un'estensione della AWT. Oltre ai widget, queste librerie danno la disponibilità di gestire e implementare [30]: • eventi: cioè oggetti che rappresentano il verificarsi di un’azione dell’utente o del sistema (click di un tasto o del mouse, eventi temporizzati, interazione con un widget, …). • listener: cioè oggetti che contengono i metodi relativi al tipo di evento che si vuole intercettare; essi ricevono una notifica quando si verifica tale evento e possono lanciare metodi o, a loro volta, altri eventi. Una volta implementato un listener bisogna collegarlo al controllo grafico da cui vogliamo intercettare gli eventi e sarà quest'ultimo infine a notificarci le azioni invocate su di esso, ad esempio la pressione di un pulsante.
  • 62. 61 Figura 4.9 Eventi e listener sono elementi fondamentali per le GUI poiché consentono di intercettare l’interazione con l’utente e di modificarle in tempo reale. Nella GUI sono stati implementati i seguenti widget, con relativi eventi e listener [figura 4.1]: • JComboBox Lista Porte: è una combo box, cioè un widget che permette all'utente di effettuare una scelta selezionandola da un elenco; in questo caso una volta premuto il tasto Cerca offre una lista di tutte le connessioni seriali collegate in quel momento al computer. • JButton Cerca: è il pulsante che al primo click avvia una ricerca di possibili porte seriali connesse al computer, se non le trova rimane nello stesso stato, altrimenti modifica la lista di porte seriali della combo box Lista Porte e cambia stato in Connetti [figura 4.2]. Clickando nuovamente su Connetti genera la connessione seriale con la porta selezionata nella combo box ed invia un segnale di accensione al braccio robotico, che cambia la sua posizione da riposo ad attivo, infine il bottone cambia stato in Disconnetti. In quest’ultimo stato, al suo click spegne il braccio robotico, riportandolo alla posizione di riposo, e interrompe la connessione seriale tornando allo stato Connetti. Se nel mentre le porte cambiano e non è più presente la porta segnalata dalla combo box, allora lo stato ritorna a Cerca.
  • 63. 62 Figura 4.10 Figura 4.11 • JButton Avvia: è un pulsante che si attiva solo una volta avviata una connessione seriale con il braccio robotico [figura 4.3], una volta clickato cambia stato in Interrompi e inizializza la connessione con il sensore Leap Motion. In questo preciso stato del programma inizia la trasmissione tra il Leap Motion e il braccio robotico. Clickando nuovamente interrompe questo collegamento e il braccio si ferma. • JLabel Avvisi: è un’etichetta che segnala qualsiasi avviso da parte dei collegamenti. • JLabel Errori: è un’etichetta che segnala qualsiasi errore riscontrato nel programma.
  • 64. 63 Figura 4.4 Controllo del manipolatore Come si è visto nel capitolo 2, più un manipolatore è provvisto di gradi di libertà più il calcolo della cinematica inversa diventa complesso. Siccome il braccio robotico AL5D ha cinque servomotori (numerati da 0 a 4) per il movimento dei bracci e un servo (numerato come 5) per la chiusura dell’end effector a pinza [figura 4.4], risulta avere cinque gradi di libertà quindi la risoluzione del problema della cinematica inversa richiederebbe un sistema di 12 equazioni trascendenti. Volendo però ricreare il movimento della mano in tempo reale, l’end effector del manipolatore non richiede una posa così precisa e ben definita, poiché i dati presi dalla Leap Motion sono soggetti ad errori e i frame hanno una frequenza così elevata rispetto alla velocità dell’utilizzatore da risultare inutili se considerati singolarmente. Per questo motivo si è scomposto il calcolo della cinematica in più sottoproblemi.
  • 65. 64 Si è posto la terna di base del manipolatore ad altezza del piano a cui il braccio è fissato e direttamente sotto al polso del braccio robotico, così da centrare l’InteractionBox (lo spazio di lavoro del Leap Motion) in uno spazio di lavoro più congeniale alla geometria del manipolatore. L’orientamento della terna di base segue quello del Leap Motion, tranne per l’asse Z che risulta invertita, non puntando verso l’utilizzatore ma verso l’end effector. La posizione di partenza della mano dell’utilizzatore è aperta con il palmo rivolto verso il basso e le dita unite tra loro. La posa del braccio robotico è data dalla combinazione dei seguenti problemi di cinematica, che considerano ognuno un preciso gruppo di servomotori e vengono risolti con metodi diversi: • Cinematica diretta con angoli di Eulero [servomotori 0 - 3 - 4]: sfruttando i dati ottenuti dall’orientamento della mano si muovono il servomotore 0 della base del manipolatore con l’imbardata e i servomotori 3 e 4 del polso rotante rispettivamente con il beccheggio e il rollio. In questo modo, deviando il palmo della mano si ruota il manipolatore attorno all’asse Y del Leap Motion, permettendogli così di raggiungere anche posizioni poste sull’asse X, ed inoltre i movimenti di pronosupinazione e dorsiflessione azionano i due servomotori del polso, andando così a modificare l’orientamento dell’end effector [figura 4.5]. • Cinematica inversa [servomotori 1 - 2]: attraverso i dati ottenuti dalla posizione della mano lungo il piano YZ del Leap Motion si può muovere il polso del manipolatore in altezza (alto/basso) e profondità (avanti/indietro). Questo movimento si ottiene grazie alla risoluzione di un problema di cinematica inversa in due dimensioni, a due gradi di libertà (i servomotori 1 e 2), quindi con solo due equazioni. La
  • 66. 65 Figura 4.5 Figura 4.6 ricerca di una soluzione analitica per questo problema ha generato due possibili soluzioni e di conseguenza due configurazioni ammissibili del manipolatore. Per risolvere questa indeterminazione si è scelta la configurazione con il gomito del manipolatore rivolto verso l’alto [figura 4.6].
  • 67. 66 • End effector Pinza [servomotore 5]: per determinare come aprire e chiudere la pinza si è scelto di collegare il suo servomotore 5 all’angolo che si forma tra il vettore solidale al palmo della mano e quello di direzione del pollice. L’utilizzatore, aprendo o chiudendo il pollice, può a sua volta aprire o chiudere la pinza. Con la combinazione di questi sottoproblemi si ottiene il completo controllo di tutti i giunti del braccio robotico attraverso la posa della mano dell’utilizzatore. Inoltre, per migliorare il controllo del manipolatore nei pressi dei limiti inferiore e superiore del suo spazio di lavoro, si è scelto di imporre che l’orientamento dell’end effector sia sempre parallelo al suolo per qualsiasi posizione lungo il piano YZ e che venga modificato solo dal beccheggio del servomotore 3. Il software realizzato ottiene i dati dal Leap Motion, li elabora con i metodi sopra elencati e li invia al servo controller SSC-32U sotto forma di comandi temporizzati; la scelta di temporizzare i comandi alleggerisce il numero di dati da elaborare, poiché le velocità vengono calcolate automaticamente da SSC-32U. Per migliorare il controllo e rendere i movimenti più fluidi, ovvero per eliminare possibili disturbi, si è deciso inoltre di utilizzare un semplice filtro passa basso IIR digitale: 𝑦[𝑛] = 𝛼 ⋅ 𝑥[𝑛] + (1 − 𝛼) ⋅ 𝑦[𝑛 − 1] Dove 𝑥[𝑛] e 𝑦[𝑛] sono rispettivamente l’entrata presente e l’uscita presente del segnale digitale (in questo caso i dati del frame), 𝑦[𝑛 − 1] è il dato elaborato del frame precedente e 𝛼 è un numero reale positivo molto piccolo. Siccome 𝛼 è molto piccola, l’uscita viene influenzata poco dal dato attuale e maggiormente dall’andamento delle uscite precedenti, infatti (1 − 𝛼) ≃ 1. Il risultato è un leggero delay nei movimenti del braccio robotico e la garanzia che un singolo frame con dati errati (cattiva elaborazione dei dati, movimenti scattosi
  • 68. 67 dell’utilizzatore, rumore) abbia poca influenza sul movimento del braccio robotico e quindi i movimenti di quest’ultimo risultino più fluidi e stabili.
  • 69. 68 Conclusione Lo sviluppo del software in grado di comandare il braccio robotico AL5D della LynxMotion è stato reso possibile grazie all’analisi della posa e gestualità della mano, attraverso il controller infrarossi Leap Motion. Durante il montaggio del braccio robotico si è scoperta la presenza di un servo controller SSC-32U compreso nel kit, al quale si è potuto delegare sia l’invio dei segnali ai servi che il controllo automatico delle loro velocità di movimento. Per il controllo della posizione e dell’orientamento dell’end effector si sono analizzati i numerosi problemi di cinematica e si è optato per una suddivisione del problema generale di movimentazione in più sottoproblemi, affrontati sia con la ricerca di una soluzione analitica per la cinematica inversa sia con gli angoli di Eulero. Si è studiato il funzionamento del controller Leap Motion e si sono analizzati i dati utili da estrapolare dalla posa della mano dell’utente per poter essere elaborati per il controllo del braccio robotico. Infine si è implementata un’interfaccia grafica per permettere all’utente di lanciare e terminare il collegamento tra il braccio robotico e il Leap Motion, migliorando l’analisi dei dati grazie alla realizzazione di un filtro digitale e aggiustando la posizione dell’end effector del manipolatore per migliorare l’esperienza di utilizzo e la fluidità dei movimenti.
  • 70. 69 Risultati ottenuti Allo stato attuale, i movimenti del manipolatore sono sufficientemente fluidi e articolati mentre il controllo, in particolari circostanze, risente di problemi di precisione, soprattutto nell’acquisizione dei dati del rollio del polso e dell’apertura della pinza. Quando il polso dell’utente ruota di 90° ponendosi verticalmente, il controller Leap Motion non riesce a tracciare bene la posizione del pollice, utile per l’apertura della pinza. In questa posizione inoltre, siccome il Leap Motion possiede un modello interno della mano, si possono verificare predizioni errate sia della posizione del pollice che addirittura dell’orientamento del polso (da 90° a −90°). Questo comporta che il polso del braccio robotico può ruotare repentinamente in posizioni che non corrispondono al reale orientamento del polso dell’utente e la pinza ha problemi a chiudersi. Visto la precisione complessiva però la scelta della Leap Motion risulta comunque consigliabile in ambito accademico o in ambiti che non richiedano movimenti accurati e manipolazioni delicate (ambiti ludici o di intrattenimento). Un possibile sviluppo, che andrebbe a migliorare il controllo e a diminuire gli errori, potrebbe riguardare un’acquisizione di più parametri dal controller per definire metodi che predicano più accuratamente l’orientamento del polso dell’utente durante il rollio a ±90°.
  • 71. 70 Bibliografia Siti web accessibili all’ultima consultazione in data 01/12/2017. [1] Leap Motion, “Leap Motion Website”, https://www.leapmotion.com [2] B. M. Matessi, “Controllo di un braccio robotico mediante i movimenti della mano”, tesi Ingegneria Informatica 2013/14 Università degli studi di Trieste [3] Lynxmotion, “Lynxmotion Website”, http://www.lynxmotion.com/ [4] Eclipse, “Eclipse Website”, http://www.eclipse.org/ [5] K. Čapek, “R.U.R. Rossum's Universal Robots”, a cura di Alessandro Catalano, Marsilio editore 2015. [6] I. Asimov, “Io, Robot”, Oscar Mondadori 2011 [7] Robotek Group, “Robotica Industriale”, http://www.robot- industriali.it/automazione-industriale-robotica-industriale.html [8] A. Zaleski, “Man and machine: The new collaborative workplace of the future”, https://www.cnbc.com/2016/10/31/ford-uses-co-bots-and-factory- workers-at-its-cologne-fiesta-plant.html
  • 72. 71 [9] H. Kagermann, W. Wahlster, W. D. Lukas, “Industrie 4.0: Mit dem Internet der Dinge auf dem Weg zur 4. industriellen Revolution”, http://www.vdi-nachrichten.com/Technik-Gesellschaft/Industrie-40-Mit- Internet-Dinge-Weg-4-industriellen-Revolution [10] J. Van, “Mechanical Advantage”, http://articles.chicagotribune.com/1996- 12-11/business/9612110101_1_hoist-assembly-worker-robotics [11] P. Akella, M. Peshkin, E. Colgate, W. Wannasuphoprasit, N. Nagesh, J. Wells, S. Holland, T. Pearson, B. Peacock, “1999 IEEE International Conference on Robotics and Automation”, http://ieeexplore.ieee.org/document/770061/ [12] Honda, “Asimo Website”, http://asimo.honda.com/ [13] Humanitas Research Hospital, “Robot Da Vinci”, http://www.humanitas.it/cure/robot-da-vinci [14] Ministero dello sviluppo economico, “Piano nazionale Industria 4.0”, http://www.sviluppoeconomico.gov.it/images/stories/documenti/Piano_Indu stria_40.pdf [15] M. Rüßmann, M. Lorenz, P. Gerbert, M. Waldner, J. Justus, P. Engel, M. Harnisch, “Industry 4.0: The Future of Productivity and Growth in Manufacturing Industries”, http://www.inovasyon.org/pdf/bcg.perspectives_Industry.4.0_2015.pdf
  • 73. 72 [16] IFR - International Federation of Robotics, “IFR forecast: 1.7 million new robots to transform the world´s factories”, https://ifr.org/ifr-press- releases/news/ifr-forecast-1.7-million-new-robots-to-transform-the-worlds- factories-by-20 [17] B. Siciliano Bruno, L. Sciavicco, L. Villani, G. Oriolo, “Robotica”, The Mcgraw-Hill Companies 2008 [18] B.Siciliano, “Elementi di Robotica Industriale”, http://www.prisma.unina.it/courses/Cinematica_EdRI.pdf [19] M.Gabiccini, “Cinematica diretta ed inversa di manipolatori seriali”, http://www.dimnp.unipi.it/gabiccini-m/RAR/04%20- %20Cinematica%20diretta%20ed%20inversa%20manipolatori%20seriali.pdf [20] C. Santoro, “Programmazione Sistemi Robotici”, http://www.dmi.unict.it/~santoro/teaching/psr/slides/Manipulator.pdf [21] Adrirobot, “Il servomotore”, http://www.adrirobot.it/servotester/il_servomotore.htm [22] Hitec Multiplex, Specifiche servomotori, http://hitecrcd.com/ [23] Robotshop, Specifiche servomotori, http://www.robotshop.com/ [24] Lynxmotion, “Lynxmotion SSC-32U USB Servo Controller Board”, http://www.lynxmotion.com/images/data/lynxmotion_ssc- 32u_usb_user_guide.pdf
  • 74. 73 [25] Leap Motion, “Leap Motion SDK documentation”, https://developer.leapmotion.com/documentation/java/index.html [26] Leap Motion Javascript, Download client library, https://github.com/leapmotion/leapjs [27] D. Molteni, “Progetto, implementazione tecnologica e valutazione di un ambiente di test per la riabilitazione neuromotoria”, Tesi di diploma triennale in musica elettronica e nuove tecnologie, Conservatorio G. Verdi, Como 2014/15 [28] jSerialComm, “jSerialComm Website”, http://fazecast.github.io/jSerialComm/ [29] Oracle Help Center , “Java API”, https://docs.oracle.com/javase/7/docs/api/ [30] R. Brighi, “Corso di Algoritmi e programmazione”, http://www3.cirsfid.unibo.it/didattica/upload/134_eventi-listener.pdf