Laboratorio Avanzato di Robotica

Transcript

Laboratorio Avanzato di Robotica
UNIVERSITÀ DEGLI STUDI DI UDINE
Laboratorio Avanzato di Robotica
A.A. 2010/2011
MARMAR
Salatin Marco
matricola 87059
[email protected]
1
Indice
1 Introduzione
4
2 Il progetto
2.1 Principio astratto di locomozione . . . . . . . . . . . . . . . .
2.1.1 Schema del funzionamento della ruota dentata . . . . .
2.2 Whegs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
6
7
3 I materiali
8
R 2.0
4 Il Lego Mindstorms NXT 4.1 NXT Intelligent Brick (9841) . . . . . . . . . . . . .
4.2 Interactive Servo Motor (9842) . . . . . . . . . . . .
4.3 RGB Colour Sensor (9694) . . . . . . . . . . . . . .
4.4 Touch Sensors (9843) . . . . . . . . . . . . . . . . .
4.5 Ultrasonic Sensor (9846) . . . . . . . . . . . . . . .
4.5.1 Altre caratteristiche del sensore a ultrasuoni
4.6 LabVIEW Toolkit . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
10
10
11
11
12
5 Costruire le ruote
13
6 Progettare la struttura di locomozione
6.1 Il cingolo Lego . . . . . . . . . . . . . .
6.2 Il sistema di locomozione misto . . . .
6.3 Posizionamento dei sensori . . . . . . .
6.4 Il paraurti anteriore . . . . . . . . . . .
16
17
18
19
20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 Implementare i comportamenti
20
7.1 Software utilizzato . . . . . . . . . . . . . . . . . . . . . . . . 21
8 La scelta del nome
22
9 Caratteristiche del robot
22
10 Limiti del robot
23
11 Differenze con i Whegs
24
12 Somiglianze con i Whegs
24
TM
12.1 Confronto con il Whegs
I . . . . . . . . . . . . . . . . . . . 24
12.2 Confronto con il Whegs Ratasjalg . . . . . . . . . . . . . . . . 25
2
13 Conclusioni
26
A Possibilie implementazione in C
27
3
1
Introduzione
Durante il mio percorso di studi all’università di Udine, ho avuto l’occasione
di poter partecipare a un corso di Robotica tenuto dal Prof. Antonio D’Angelo: mi sono molto appassionato alla materia e ho deciso di costruire un
mio robot.
Ringrazio, lo stesso Prof. Antonio D’Angelo per i preziosi suggerimenti che
ha ritenuto opportuno darmi nel corso dell’evoluzione del progetto.
Ecco, allora, il mio progetto di Laboratorio Avanzato di Robotica.
4
2
Il progetto
L’obiettivo iniziale del progetto era:
“Costruire un robot che riesce a percorrere una rampa di scale di
gradini standard (altezza 17/18 cm, profondità 22 cm).”
2.1
Principio astratto di locomozione
Il primo problema che ho incontrato è stato quello di trovare un modo per
far superare al robot gli ostacoli di altezza 17/18 cm.
A seguito di alcune ricerche, che ho compiuto attraverso la rete internet, sui
vari modi con cui è possibile superare gli ostacoli, ho deciso di adottare un
particolare tipo di ruota dotata di tre denti disposti con angoli di 120◦ tra
loro.
Figura 1: Schema per superare il gradino.
5
2.1.1
Schema del funzionamento della ruota dentata
Figura 2: Ostacolo alto quanto il raggio
di una normale ruota.
Figura 3: Ostacolo alto quanto il raggio
della ruota dentata.
Figura 4:
dentata.
Figura 5: Superamento dell’ostacolo con
la ruota dentata.
Movimento
della
ruota
Figura 6:
La ruota dentata supera
ostacoli più alti del raggio (h>r).
Conclusione: la ruota con tre denti disposti a 120◦ gradi permette di superare ostacoli più alti del raggio della ruota stessa. Dopo questa analisi,
l’obiettivo del progetto è diventato:
“Costruire un robot che riesce a percorrere una rampa di scale
di gradini standard (altezza 17/18 cm, profondità 22 cm) e un
sistema di locomozione con quattro ruote a tre denti disposti a
120◦ tra loro.”
6
2.2
Whegs
Ho preso quest’idea dal sito del Biologically Inspired Robotics Lab [1] presso
la Case Western Reserve University e in particolare dal progetto: WhegsTM
I [3].
In robotica, la parola Whegs, oltre ad essere la serie di robot sviluppati
al Biologically Inspired Robotics Lab, è diventata l’identificatore della classe di robot che utilizza un particolare sistema di locomozione che combina
la semplicità dell’uso delle ruote con i vantaggi di superare gli ostacoli delle gambe. Whegs deriva appunto dall’unione delle due parole inglesi wheel
(ruota) e legs (gamba).
I robot Whegs sono nati osservando il modo in cui gli insetti camminano
(in particolare gli scarafaggi) superando una varietà di terreni diversi.
I robot Whegs sono stati anche ispirati dal robot Prolero, sviluppato nel
1996 all’Agenzia Spaziale Europea (ESA, European Space Agency) e dal robot RHex, sviluppato da uno sforzo di più università finanziato dall’agenzia
per i progetti di ricerca avanzata per la difesa americana (DARPA, Defense
Advanced Research Projects Agency) [2].
Figura 7: WhegsTM I.
Figura 8: Scarafaggio.
7
3
I materiali
Per costruire il robot ho utilizzato i seguenti materiali:
R 2.0 (8547);
- il kit Lego Mindstorms NXT - 3 set di carica batterie Duracell da 2 batterie stilo l’uno;
- degli adesivi antiscivolo;
- una vecchia camera d’aria di una bicicletta;
- un tubetto di colla Attack;
- 6 elastici.
R NXT 2.0 [4]
Ho scelto di costruire il robot utilizzando il Lego MindStorms [5] perché questo kit fornisce un’unità di controllo e dei sensori già integrati
tra loro che mi hanno evitato di dover gestire l’elettronica e del robot. Anche
il costo dello stesso era accessibile.
R 2.0.
Figura 9: Il kit Lego Mindstorms NXT 8
R 2.0
Il Lego Mindstorms NXT 4
La scatola contiene:
- 1 NXT Intelligent Brick (9841);
- 3 Interactive Servo Motor (9842);
- 1 RGB Colour Sensor (9694);
- 2 Touch Sensors (9843);
- 1 Ultrasonic Sensor (9846);
- LabVIEW Toolkit;
- Pezzi Lego [6];
R 2.0.
Figura 10: Scatola Lego Mindstorms NXT 4.1
NXT Intelligent Brick (9841)
Il componente principale, detto Nxt Intelligent Brick, è il cervello del sistema.
Si tratta di un microcomputer tramite il quale è possibile gestire i sensori e
i motori del robot costruito. Le sue caratteristiche sono le seguenti [7]:
Figura 11: NXT Intelligent Brick.
-
R 32 bit;
Processore: Atmel
R 8-bit;
Micro-controllore: Atmel
Ram: 64 KB;
Flash memory: 256 KB;
Display: 64x100pixel, LCD (bianco e nero);
Bluetooth;
USB 2.0;
4 porte di ingresso;
3 porte di uscita;
Altoparlante: mono 8 bit fino a 16 KHz;
4 bottoni per la navigazione;
Alimentazione: 6 batterie AA alcaline.
9
4.2
Interactive Servo Motor (9842)
Figura 12: Motorino.
4.3
I 3 servomotori hanno al loro interno un sensore
di rotazione per misurare sia la velocità che la
distanza, che vengono trasmessi al processore del
NXT [7].
La possibilità di controllare in modo indipendente
la velocità ed il verso di rotazione di ogni motore
permette alle ruote motrici di essere anche direttrici
del movimento (similmente a quanto accade per i
cingoli di un carro armato).
RGB Colour Sensor (9694)
Il sensore di colore ha tre funzionalità [7]:
- distingue sei colori:
bianco, nero, giallo, rossi, verde e blu;
- distingue le variazioni di intensità di luce;
- funziona come una lampada.
Figura 13: Sensore di colori.
LEGO
4.4
Giallo
4
Verde
3
Rosso
5
Bianco
6
Nero
1
Blue
2
Touch Sensors (9843)
I due sensori al tatto rilevano la pressione e il
rilascio [7].
Figura 14: Sensore al tatto.
10
4.5
Ultrasonic Sensor (9846)
Il sensore a ultrasuoni abilita il robot a vedere e scoprire oggetti, lo si può
usare per evitare ostacoli, misurare distanze o rilevare dei movimenti [7].
Figura 15: Sensore ultrasuoni.
Caratteristiche:
- misura distanze tra 0 e 255 cm con una precisione
di +/- 3cm;
- I2C bus interface;
- Risoluzione 6cm;
- Dimensioni: 55 mm x 42 mm x 26 mm;
Per il suo funzionamento utilizza lo stesso principio scientifico usato dai pipistrelli: misura distanza calcolando il tempo impiegato da un’onda sonora
a colpire un oggetto e ritornare come un’eco.
Il sensore è più sensibile a oggetti grandi con superfici dure, mentre lo è meno
con oggetti realizzati in stoffa o curvati (come una palla) oppure molto sottili
e piccoli.
4.5.1
Altre caratteristiche del sensore a ultrasuoni
Il sensore possiede un “campo visivo”asimmetrico di circa 45 gradi [8].
Figura 16: Campo visivo del raggio del sensore a ultrasuoni.
11
Il sensore presenta un’asimmetria dovuta al fatto che il lato destro emette il
fascio di ultrasuoni, mentre il lato sinistro lo riceve.
Le letture dal sensore possono essere effettuate al massimo una volta ogni
200 ms.
Figura 17: Lettura del sensore a ultrasuoni.
Attenzione: l’utilizzo di due sensori a ultrasuoni che operano nelle vicinanze
può rendere difficoltose le letture.
4.6
LabVIEW Toolkit
Il Lego Mindstorms è fornito di LabVIEW Toolkit, uno standard industriale
della programmazione. Creato da National Instruments, LabVIEW usa una
programmazione a flusso di dati (data flow) per creare uno strumento virtuale.
Altri software compatibili: Next Byte Codes & Not eXactly C, RobotC,
URBI, leJOS NXJ, MATLAB e Simulink, FLL NXT Navigation
12
5
Costruire le ruote
Nel realizzazione del robot, sono partito dal costruire le ruote a tre denti
disposti a 120◦ tra loro.
Nella fase di progettazione delle ruote, ho valutato l’ipotesi di costruirle utilizzando molti tipi di materiali (es: legno, ferro saldato, plastiche stampate
su misura, ecc..). Questi ipotesi sono rimaste tali per l’eccessivo costo di
realizzazione.
L’unico materiale con cui ho tentato la costruzione è il legno. Benché, una
volta tagliati i denti da una tavola e incollati con un’angolatura di 120◦ , non
sono riuscito integrare la ruota in legno con il perno che esce dal motorino
Lego. Quindi, nonostante i possibili costi, ho capito che l’integrazione con
altri materiali e i pezzi Lego non era la strada migliore ed quindi ho deciso
di costruire le ruote utilizzando le stesse plastiche fornite dalla Lego.
Figura 19: Il perno nel motore.
Figura 18: Il perno.
Con i pezzi Lego il maggior ostacolo che ho incontrato è stato quello di trovare una modo per disporre i denti con un’angolatura di 120◦ tra loro. Sono
riuscito a superare quest’ostacolo grazie a un cerchione Lego non fornito nel
kit Lego Mindstorms ma che ho preso da una vecchia macchina Lego. Questo
mi ha permesso di fissare i denti con l’angolatura che volevo.
Figura 21: Denti disposti a 120◦ .
Figura 20: Il cerchione.
13
Nell’integrare successivamente le ruote con la struttura del robot, ho incontrato delle difficoltà nello stabilire la lunghezza dei denti, poiché a denti più
lunghi corrisponde una maggiore instabilità nella camminata del robot, mentre a denti più corti corrisponde un’incapacità di aggredire e quindi superare
ostacoli più alti.
Figura 22: La prima ruota.
Figura 23: Modelli di ruote diverse.
Figura 24: La ruota di sinistra riesce a salire gradini di 18 cm, mentre quella di destra, gradini di 13 cm.
14
L’ultimo problema che ho affrontato nella costruzione delle ruote è quello di
trasmettere la maggior quantità di forza a terra. Infatti le plastiche Lego a
contatto con il terreno tendono a scivolare. La prima soluzione per ovviare a
questo problema è stata quella di applicare un adesivo antiscivolo sulla punta
dei denti della ruota che è a contatto con il terreno.
Purtroppo dai vari test del robot ho rilevato che l’adesivo antiscivolo si consuma velocemente e soprattutto che il piedino del robot non era ancora aderente
al suolo.
Quindi, ho pensato alla gomma delle classiche ruote Lego e alle suole delle
scarpe e ho compreso che proprio la gomma era il materiale più adatto per
rivestire i piedini della ruota dentata.
Allora, da una una camera d’aria ho ritagliato dei pezzi uguali che fissato
alle plastiche lego con della colla Attack e degli elastici.
Il risultato è stato molto positivo, il robot attraverso questo “piedino di gomma”riesce a scaricare meglio la forza dei motorini sul terreno.
Figura 26: Piedino di gomma.
Figura 25: La ruota finale.
15
6
Progettare la struttura di locomozione
La mia idea iniziale della struttura di locomozione prevedeva l’utilizzo di
quattro ruote dentate.
Figura 27: Schizzo della struttura con le quattro ruote dentate.
Nel tentativo di realizzarla, ho incontrato alcuni vincoli strutturali quali:
1 - il numero di soli 3 motorini forniti nel kit Lego Mindstorms (quindi
nemmeno uno per ruota);
2 - il peso del pezzo Lego NXT Intelligent Brick (che contiene 6 batterie
stilo);
3 - la difficoltà di mantenere una certo controllo del robot durante la camminata (con 4 ruote a tre denti, il robot “saltella”)
che hanno comportato la modifica della struttura iniziale.
Dopo diversi tentativi e prove di costruire la struttura, ho osservato che i
3 motorini Lego con il peso dell’Intelligent Brick non riescono a far girare le
quattro ruote dentate (vincolo 1 e 2). L’unico modo per farle girare è quello
di impostare i motorini alla massima potenza, che però introduce difficoltà
nel controllo della camminata (vincolo 3) e che comunque non è sufficiente
per percorrere la rampa di scale.
Questo mi ha costretto a passare a un tipo di locomozione misto, che vede
nella parte anteriore due ruote dentate (una per motorino), mentre mi ha costretto a utilizzare un altro sistema di locomozione per il sistema posteriore
(un solo motorino). L’unico sistema di locomozione che oltre a consentire la
camminata, aiuta anche la salita, è il cingolo.
Quindi l’obiettivo è diventato:
“Costruire un robot che riesce a percorrere una rampa di scale
di gradini standard (altezza 17/18 cm, profondità 22 cm) con
un sistema di locomozione misto: due ruote dentate a tre denti
disposti a 120◦ tra loro e un cingolo.”
16
6.1
Il cingolo Lego
In seguito ho integrato il cingolo Lego presente nel kit Lego Mindstorms con le due
ruote dentate, dando vita cosı̀ al sistema di
locomozione misto.
L’utilizzo del cingolo Lego, però, mi ha
fatto scoprire un altro vincolo strutturale: la
lunghezza del cingolo Lego permette di superare gradini di soli 9 cm indipendentemente
dalla lunghezza dei denti delle due ruote e
dalla distanza dal sistema di locomozione
posteriore da quello anteriore.
Figura 28: Fasi del cingolo
mentre supera un ostacolo.
Figura 29: Fasi del cingolo mentre supera un ostacolo.
Quindi l’obiettivo che ho raggiunto è nella seguente formula:
“Costruire un robot che riesce a percorrere una rampa di scale di
dei gradini standard (altezza 9 cm, profondità 22 cm) con un sistema di locomozione misto: due ruote dentate a tre denti disposti
a 120◦ tra loro e un cingolo.”
17
6.2
Il sistema di locomozione misto
Il robot, nella sua forma finale, presenta un sistema di locomozione misto, che
permette una maggiore stabilità nella camminata riducendo il “saltellio”delle
ruote dentate. Il sistema di locomozione misto aiuta anche nella definizione
delle traiettorie e permette un maggior equilibrio nell’affrontare diversi tipi
di terreno, sia esso sconnesso, con delle pendenze, liscio o ruvido.
Figura 30: Schema della struttura.
Figura 31: La struttura del robot.
18
6.3
Posizionamento dei sensori
Ho posizionato il sensore ad ultrasuoni nella parte più alta del robot in modo
da consentire la rilevazione degli ostacoli solo se questi sono più alti di 9 cm.
Il sensore di colori ha la caratteristica di rilevare o meno la presenza di
luce. Poiché in situazioni di poca luce il sensore tende ha “farsi ombra da
solo”, lo ho posizionato parallelo al suolo mentre il robot è fermo su un piano
orizzontale.
Figura 32: Il sensore ad ultrasuoni.
Figura 33: Il sensore di colori.
Figura 34: Profilo del robot in cui si vede la posizione dei sensori.
19
6.4
Il paraurti anteriore
Ho posizionato il paraurti nella parte anteriore del robot in modo che quando
il robot urta qualcosa, i due sensori al tatto ne rilevano il contatto.
Figura 35: Il paraurti.
7
Figura 36: Profilo del paraurti.
Implementare i comportamenti
I comportamenti che il robot manifesta sono [12]:
- PAURA DEL BUIO:
In mancanza di luce si ferma e accende la spia blu.
- AVANZAMENTO NELL’AMBIENTE:
In presenza di ostacoli più bassi di 9 cm davanti a sé accende la spia verde
e avanza.
- AGGIRARE OSTACOLI:
In presenza di ostacoli più alti di 9 cm, inizia la retromarcia per 2 secondi con i motorini alla massima potenza. Poi se davanti c’è spazio allora
avanza, sennò tenta ancora di retrocedere. Se non può avanzare e non può
retrocedere, si ferma e accende la spia rossa.
Lo spazio di manovra è di circa 60 cm.
- CATTURATO:
Se sta retrocedendo e il paraurti posteriore viene in contatto con qualcosa,
rimanendo premuto, il robot si ferma e accende la spia rossa finché non
viene “liberato”, cioè staccato dall’oggetto di contatto.
- PERCORRERE RAMPE: Nel caso in cui incontri delle rampe, non le rileva ma riesce a percorrerle fino a una pendenza di 30 gradi circa [10].
20
7.1
Software utilizzato
Per programmare il Brick e quindi implementare i comportamenti, ho utilizzato il software messo a disposizione da Lego: LabVIEW Toolkit.
Il programma contiene due LOOP simmetrici, uno che controlla la locomozione anteriore e uno quella posteriore.
All’interno di questi LOOP ci sono quattro IF, che contengono i comportamenti che il robot deve tenere nelle diverse situazioni.
Nell’IF più esterno si controlla se c’è la luce, in caso negativo il robot si ferma
e accende la luce blu.
In caso positivo si accede al secondo IF, che controlla la presenza di ostacoli:
se non viene rileva un ostacolo, il robot avanza, in caso negativo il robot
retrocede ruotando leggermente a sinistra per due secondi.
Successivamente, in entrambi i casi, si controlla con gli ultimi due IF se è
stato urtato qualcosa dal paraurti. Se viene urtato qualcosa il robot si ferma
e accende la luce rossa e non si muove più. In caso positivo, il robot riprende
il ciclo LOOL dal primo IF.
Figura 37: Loop che gestisce il motorino A.
21
8
La scelta del nome
Ho chiamato il robot MarMar dall’unione del mio nome (Marco) e quello
della mia ragazza (Mara).
Figura 38: Marmar.
9
Caratteristiche del robot
Figura 39: Marmar.
Peso: 1 kg;
Altezza: 20 cm;
Lunghezza: 30 cm;
Larghezza: 21 cm;
Raggio della ruota dentata: 8 cm;
Lunghezza del cingolo: 13 cm;
Abilità:
- superare ostacoli alti 9 cm;
- aggirare ostacoli più altri di 9 cm;
- scende da ostacoli alti 9 cm;
- percorrere rampe con pendenze di
30◦ circa;
- percorrere molti tipi di superfici.
22
10
Limiti del robot
Il robot presenta limiti nel rilevare gli ostacoli posti a destra o a sinistra della
traiettoria e non nettamente in centro.
Questo comportamento appare maggiormente quando il robot avanza dopo
aver compiuto la retromarcia poiché mette gli ostacoli a sinistra della sua
nuova traiettoria.
Il problema sta nell’ampiezza del raggio del sensore a ultrasuoni [8].
Per evitare questa situazione ed allargare la visuale del cono dell’onda dell’ultrasuono, ho provato a porre il sensore ad ultrasuoni a metà del corpo del
robot, ma non sono stati evidenziati notevoli miglioramenti.
Il robot fatica nel percorrere traiettorie curve, anche a causa del dalla presenza del cingolo, che ne ostacola il movimento soprattutto nella fase di
retromarcia.
Il robot si incastra se trova ostacoli alti tra i 10 e i 12 cm, poiché nella
camminata può capitare che il sensore ad ultrasuoni non li rilevi, e quindi
che riesca a salirci con il sistema di locomozione anteriore. Con quello posteriore non ce la fa e quindi il robot si incastra.
Se il robot sale solo con una ruota dentata su ostacoli troppo alti, può succedere che perda l’equilibrio e si rovesci.
23
11
Differenze con i Whegs
La differenza principale che si nota subito tra il Marmar e i Whegs in generale
è sicuramente l’utilizzo di un sistema di locomozione misto che ne migliora
la stabilità, sia nella definizione della traiettoria da seguire che nella fase si
salita. Il sistema di locomozione posteriore limita anche il “saltellio”tipico
dei Whegs.
Oltre a questa differenza c’è anche l’utilizzo di un motorino per “arto”. Normalmente i Whegs utilizzano un motorino per l’intera struttura di locomozione che permette di sfruttare sempre la somma di tutta potenza a bordo,
mentre nel nostro caso essa viene divisa nei tre punti dove sono collocati i
motorini. Compare poi una differenza nelle prestazioni di velocità, infatti i
Whegs hanno velocità nettamente superiori rispetto al robot Marmar.
12
Somiglianze con i Whegs
Caratteristiche in comune con i Whegs sono sicuramente quelle date dal
sistema di locomozione anteriore. Infatti, in comune c’è l’uso della ruota
dentata e quindi il modo di aggredire e superare gli ostacoli.
12.1
Confronto con il WhegsTM I
Confrontando Marmar con il protetto WhegsTM I da cui ho preso ispirazione,
oltre alla presenza del sistema di locomozione misto, il Marmar evidenzia uno
spazio di manovra minore del WhegsTM I.
La stabilità nella camminata è più o meno simile, anche se WhegsTM I riesce
a tenere velocità nettamente superiori. Ciò è dato sicuramente dal peso
minore del WhegsTM e dalla presenza del cingolo del Marmar, che lo rallenta
notevolmente.
Figura 40: WhegsTM I.
Figura 41: Marmar.
24
12.2
Confronto con il Whegs Ratasjalg
Un confronto particolarmente interessante è con il Whegs Ratasjalg progetto
dell’Università delle Tecnologie di Tallinn descritto in questo video [9] (si
tenga presente che al momento della progettazione non conoscevo il Whegs
Ratasjalg: lo ho trovato per caso tra i video presenti su youtube e la sua
documentazione prodotta è in lingua estone).
Figura 43: Marmar.
Figura 42: Ratasjalg.
I due robot presentano una somiglianza nella forma della struttura che ricorda un triangolo dove due vertici sono dati dalle ruote dentate, mentre il
vertice rimanente è occupato dal cingolo per il robot e per il Whegs Ratasjalg
da una piccola ruota.
La rotellina è molto utile nelle traiettorie curve, aumentando la precisione
con cui si seguono, ma non aiuta la fase di salita che nel Whegs Ratasjalg è
tutta a carico del sistema di locomozione anteriore.
25
13
Conclusioni
Il progetto di Laboratorio Avanzato di Robotica è stato molto utile; mi ha
fatto toccare con mano moltissimi aspetti della robotica sia a livello teorico
che, soprattutto, pratico.
Infatti, mi sono imbattuto in diverse problematiche, come la difficoltà di pensare e successivamente realizzare una struttura di locomozione.
Mi sono scontrato con i limiti strutturali del sistema utilizzato (il Lego MindR 2.0) e con quelli che il robot ha nell’interazione con l’ambiente
storms NXT reale.
In questo senso, sono riuscito a ottenere un buon compromesso, delineando
bene i vincoli strutturali e soprattutto trovandovi delle soluzioni accettabili.
Dal punto di vista strettamente informatico, mi sono imbattuto nella difficoltà di gestire l’implementazione dei comportamenti del robot: ho avuto
una grande soddisfazione nel vederli funzionare concretamente nella realtà.
Complessivamente, anche se nel corso del progetto ho dovuto rimodellare
gli obiettivi sulla base delle situazioni concrete, sono pervenuto a un risultato che ritengo più che soddisfacente: il robot riesce riesce a percorrere
agevolmente, sia in salita che in discesa, rampe di gradini di 9 cm [11].
26
A
Possibilie implementazione in C
Una possibile implementazione del comportamento del robot in C prevede
l’avvio di due processi in parallelo, uno per sistema di locomozione. I due
processi devono essere speculari, per evitare che i due sistemi di locomozione
vadano in conflitto tra loro.
Ecco una possibile implementazione del contenuto del processo per la gestione del sistema di locomozione del cingolo (motorino A):
int velmotore = 0;
var coloreluce{blu, rosso, verde, spento};
var luce{0,1};
int dist ost;
var rotmotore{orario,antiorario};
var urto1{libero,premuto}
var urto2{libero,premuto}
int momentoiniziale; int momentofinale;
while (il programma non viene terminato) {
luce = input sensore luce();
if (luce = 0) then{
vel motoreA = 0;
coloreluce = blue;
}else{
dist ost = input sensore ultrasuoni();
if (dist ost>30cm){
urto1 = input sensore tatto1();
if (urto1 == premuto){
vel motoreA = 0;
coloreluce = rosso;
}else{
urto2 = input sensore tatto2();
if (urto2 == premuto){
vel motoreA = 0;
coloreluce = rosso;
}else{
velmotore = 70;
coloreluce = verde;
rotmotore = antiorario;
}
}
27
}else{
urto1 = input sensore tatto1();
if (urto1 == premuto){
vel motoreA = 0 ;
coloreluce = rosso;
}else{
urto2 = input sensore tatto2();
if (urto2 == premuto){
vel motoreA = 0 ;
coloreluce = rosso;
}else{
momentoiniziale = time();
momentofinale = momentoiniziale + 2;
for (mentoiniziale == momento finale) {
velmotore = 90;
coloreluce = rosso;
rotmotore = orario;
momentoiniziale = momentoiniziale + 1;
wait(1 secondo);
}
}
}
}
}
}end while
28
Riferimenti bibliografici
[1] Sito del Biologically Inspired Robotics Lab:
http://biorobots.cwru.edu
[2] Definizione di Whegs:
http://www.enotes.com/topic/Whegs
[3] Sito del progetto WhegsTM I:
http://biorobots.cwru.edu/projects/whegs/whegs.html
[4] Sito ufficiale Lego Mindstorms:
http://mindstorms.lego.com/
[5] Pagina wikipedia sul Lego Mindstorms:
http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT
[6] Sito con l’elenco esatto di tutti i pezzi del Lego Mindstorms:
http://www.drgraeme.net/DrGraeme-free-NXT-G-tutorials/
WhichNXT/Lego-MindStorms-NXT-2.0-Retail/NXT-2.
0-Retail-Kit-Lego-MindStorms.htm
[7] Sito con la descrizione di alcuni pezzi dell’NXT:
http://mercurio.srv.dsi.unimi.it/~ornaghi/
IntelligenzaArtificiale/progettiLabAi/Percorsi/
[8] Sito con l’analisi delle prestazioni del sensore a ultrasuoni:
http://www.tik.ee.ethz.ch/tik/education/lectures/PPS/
mindstorms/sa_nxt/index.php?page=tests_us
[9] Video youtube del robot Ratasjalg:
http://www.youtube.com/watch?v=lrE8CcquOuQ
Video realizzati
[10] Marmar percorre una rampa di un garage con una pendenza di 30◦ circa:
http://youtu.be/op2mbW6CObE
[11] Marmar percorre una scala di gradini di 9 cm:
http://youtu.be/YOAS5JcrGYY
[12] Comportamenti di Marmar:
http://youtu.be/7NGzrRgCTNE
29