Tesi di Laurea triennale che presenta lo sviluppo di un software in Java per il controllo di un braccio robotico tramite un dispositivo per il rilevamento della gestualità.
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
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
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