Corso di Sistemi per il governo dei robot
Progettazione e
realizzazione di un robot
behavior based
Architettura a Sussunzione
Lorenzo Riano
Propositi
► Chiarire
tra “il dire ed il fare” cosa c’è di
mezzo
► Esaminare la progettazione e la
realizzazione di un robot passo dopo
passo
► Forte interazione
Cosa sarà presentato
► Analisi
del problema
► Analisi dei requisiti
► Analisi progettuale
 Architettura fisica
 Sensoristica
 Supporto computazionale
► Realizzazione
► Problematiche
Cosa NON sarà presentato
► Analisi
metodologica (scelta di paradigmi,
panoramica storica…)
► Descrizione e valutazione del paradigma
► Dettagli di modelli matematici
► Tutto ciò che non era nella slide precedente
(ovvio!)
Descrizione del problema
► Realizzazione
di un robot autonomo che
debba navigare in un ambiente sconosciuto
per trovare un goal (cibo, casa, carica delle
batterie…)
Per autonomo intendiamo un robot che non
necessiti di nessun intervento esterno
(elaborazione off-board, intervento umano)
per il corretto funzionamento
Descrizione dell’ambiente - 1
► Pianeggiante,
senza asperità o elementi che
possano impedire il corretto movimento del
robot (buche, salite, precipizi…)
 Il piano su cui si muove il robot deve essere
abbastanza ruvido da non permettere un
eccessivo slittamento
► L’unico
ostacolo presente sarà il goal
 L’ostacolo deve essere riconoscibile dalla
sensoristica a disposizione
Descrizione dell’ambiente - 2
► Sul
terreno sono presenti opzionalmente delle
tracce che dovrebbero “guidare” il robot verso il
goal.
 Il robot deve essere in grado di distinguerle dallo
sfondo.
► Al
momento dell’attivazione del robot, il goal si
trova “di fronte” ad esso.
 Dato un sistema di coordinate cartesiane con origine nel
robot e con l’asse positivo delle ordinate orientato nella
direzione dove il robot si muoverebbe se andasse in
avanti, il goal è situato in ogni istante nel semipiano
delle ordinate positive.
Descrizione dell’ambiente - 3
y
x
Analisi dei requisiti
Di cosa abbiamo bisogno?
► Un robot che sia in grado di muoversi
 Come si muove?
►
Dei sensori per rilevare un ostacolo
 A distanza? Sonar? Infrarossi?
 A contatto? Bumper?
►
Dei sensori per rilevare le tracce




►
Come sono fatte le tracce?
Telecamera?
Un sensore che rileva il colore?
Un sensore che rileva la luminosità?
Cos’altro?
Analisi progettuale
Dobbiamo stabilire quale sarà l’architettura fisica e logica del
robot, in riferimento all’analisi dei requisiti e a cosa
realmente abbiamo o possiamo permetterci di avere.
Bisogna stabilire quindi:
► Fisicamente come deve essere fatto il robot (dimensioni,
sistema di movimento...)
► Di quali sensori disponiamo, quali devono essere comprati
(creati) e quali sono le loro caratteristiche
► Di che tipo di supporto computazionale (singolo
processore, SMP, Programmable logic Array...) abbiamo
bisogno.
Architettura fisica - 1
► Lego
Technic®
► Sistema di trazione differenziale
 Due motori indipendenti controllano due ruote
indipendenti poste sullo stesso asse. Una terza
ruota è libera di muoversi (caster wheel), e
serve solo a stabilizzare la struttura.
► Peso
e dimensioni sono rilevanti?
Gearing
Doppio differenziale
Motore Lego 71427
Architettura fisica - 2
Come funzionano i motori?
► Normalmente sono motori DC, ovvero a livelli di tensione
(maggiore tensione maggiore velocità angolare)
► Sono controllati in PWM (Pulse Width Modulation), ovvero
viene dato il massimo della tensione a frequenze variabili.
Un volano (flywheel) permette la conservazione
dell’energia meccanica tra un impulso e l’altro
V
9
t
Architettura fisica - 3
►
In che modo la potenza dei motori è
trasmessa alle ruote?
 Un sistema di ingranaggi permette di
trasferire il moto da un asse all’altro. A
seconda delle dimensioni delle ruote
dentate si ottiene un rapporto di
marce diverso. Una marcia alta
permette una buona velocità, perdendo
però in trazione (torque), mentre una
marcia bassa fornisce trazione a scapito
della velocità.
►
Quale rapporto di marce?
 Essendo i motori controllati in PWM, è
bene sacrificare velocità per trazione
Sensoristica
►
Quali sono i sensori a disposizione?
1.
Sensori di contatto (bumper)
Sensore di luminosità
Sensore di temperatura
Sensore di rotazione (shaft encoder)
2.
3.
4.
Sensore di contatto
Sono semplici sensori che indicano se sono stati premuti
(valore binario)
Come vanno inseriti nella struttura?
► Indipendentemente da quanti ne abbiamo a disposizione,
devono coprire almeno la zona frontale del robot (perché?)
► Non devono essere danneggiati! Il sensore di contatto si
attiva quando “già è troppo tardi”, ovvero quando l’impatto
è già avvenuto. Bisogna quindi che la forza dell’urto (anche
se debole) sia trasferita sulla struttura attorno al sensore,
ma non sul sensore stesso!
Sensore di contatto
Sensore di luminosità - 1
►
Misura la quantità di luce riflessa dal
materiale che ha davanti. Un piccolo led
posto a fianco del sensore provvede alla
luce da riflettere.


La quantità di luce riflessa non è funzione del
colore, ma del materiale dell’oggetto! A parità
di materiale, colori più scuri riflettono meno
luce
Il led posto a fianco del sensore può
“sporcare” le letture!
Sensore di luminosità - 2
► La
quantità luce non viene misurata lungo una
linea retta, ma attraverso uno “spot”, il cui raggio
dipende dalla distanza del led dal materiale che
sta riflettendo
► Ciò vuol dire che non misuriamo la luminosità di
un punto di fronte al sensore, ma la media dei
valori contenuti all’interno dello spot
Sensore di luminosità - 3
Sensore di Temperatura
► Misura
la temperatura a contatto (ovvio!)
► I valori letti possono essere convertiti in gradi
Celsius o Farhenheit
Sensore di rotazione
► Misura
le rotazioni compiute al suo interno.
Tipicamente è collegato ad un asse
collegato a sua volta ad un motore.
► Ha una risoluzione di 1/16, ovvero in un
giro si è “attivato” 16 volte.
► E’ in grado di distinguere rotazioni in un
senso (positive) o nell’altro (negative)
Sensore di rotazione
Digressione matematica
RADIANTI!
•Vr e Vl son rispettivamente la velocità lineare della ruota destra e sinistra
•Vr = Ir * F nel discreto
•Ir è il numero di giri contati dall’encoder
•F = (D*π) / (G*R) indica la distanza percorsa dalla ruota ad ogni impulso
dell’encoder
•D è il diametro della ruota (la stessa unità di misura di b)
•G è il rapporto delle marce tra il sensore di rotazione e la ruota
•R è la risoluzione dell’encoder (16)
Odometria - 1
► Consente
di avere un sistema di coordinate
egocentrico del robot (può essere
trasformato in assoluto)
► In ogni istante si possono stabilire
coordinate cartesiane ed orientamento del
robot
► E’ estremamente soggetto ad errori di
accumulo
Odometria - 2
Quali sono le possibili fonti di errore?
► Slittamento delle ruote
► Errori nella misura dei parametri
► Imperfezioni meccaniche
► Il peso del robot curva l’asse e diminuisce il
diametro delle ruote!
► Errori floating point
► ...
Odometria - 3
Come correggerli?
► Variare la sensibilità del sensore di rotazione (in
relazione alla formula vista)
 Diminuire il diametro delle ruote
 Aumentare la distanza tra le ruote
 Aumentare il rapporto delle marce
► Attenzione!
Un sensore di rotazione troppo
sensibile amplifica notevolmente l’errore!
► Comunque vada, anche un minimo errore tende
ad accumularsi col tempo.
Processore
►
►
►
►
►
►
►
►
►
RCX Hitachi H8300
8 Mhz
32 Kb di RAM
32 Kb di ROM
3 Convertitori A/D
3 Uscite analogiche
Torretta IR per la comunicazione
Un display dove è possibile vedere una stringa di massimo
5 caratteri o un numero esadecimale di massimo 5 cifre
Non ha supporto nativo alla matematica floating point!
Toast the Warranty
Interfacciamento verso i sensori
►I
sensori funzionano e “comunicano” in
analogico.
► Con tre convertitori A/D possiamo connettere
fino ad un massimo di 3 sensori (a parte
qualche trucco)
► Come sono alimentati i sensori?
 Il processore fornisce corrente di alimentazione di
base.
 Ogni tot millisecondi, “stacca” la corrente per
leggere i valori riportati dai sensori.
Multiplexer FPGA
Interfacciamento verso i motori
► Come
già visto, i motori sono controllati in
PWM
► La velocità è un parametro che può andare
da 0 a 255 memorizzato in un byte
► Ad ogni interrupt del timer, la velocità viene
sommata a se stessa. Se c’è overflow,
manda un impulso al motore
► Sistema non lineare!
LegOS - BrickOS
Progetto Open Source rilasciato sotto licensa GPL.
► Scritto in C
► Provvede un “sistema operativo” per il processore RCX
► Consente di astrarsi da molti dettagli tecnici relativi al
processore
► Fornisce un’interfaccia verso i sensori/motori
► Ha una dimensione in memoria di circa 18 Kb
► Simula la presenza di un coprocessore matematico per le
operazioni floating point
► Supporta (limitatamente) il multi-threading
►
Creazione di programmi - 1
► Un
programma può essere scritto in C\C++
► Non deve avere richieste di memoria
dinamica (statica e dinamica) eccessive
► Non deve prevedere un carico
computazionale eccessivo
► Non deve usare “troppa” matematica
floating point (meglio se non la usa proprio)
► Deve essere semplice e ben strutturato
(impossibilità di fare debugging)
Creazione di programmi - 2
► Il
programma è compilato off-line (cross
compiling)
 E’ possibile utilizzare uno dei migliori compilatori
esistenti: GCC
► Viene
pre-linkato off-line
► E’ trasferito sul processore tramite una torretta IR
► Una volta sull’RCX vengono effettuati gli ultimi
passi di linking con le routine messe a disposizione
da BrickOS
Alternative
►
Lego FIRMWARE
 E’ il firmware di base fornito dalla Lego. Può essere utilizzato tramite il
software fornito con il set base Mindstorms, un tool grafico molto semplice
da utilizzare quanto limitato
►
NQC (Not Quite C)
 Scritto da Dave Baum, è un linguaggio molto simile al C che non necessita
la creazione di nuovo firmware. Non ha matematica floating point ed è
limitato ad utilizzare al più 32 variabili
►
PbForth
 Il Forth è un linguaggio molto vicino alla macchina, usato per programmare
microcontrollori. Molto interessante, ma poco espressivo
►
Lejos: Micro macchina virtuale JAVA
 Non vi aspettate prestazioni superiori a quelle di Shakey
Realizzazione
► Sappiamo
adesso cosa abbiamo a disposizione.
► I requisiti cui deve soddisfare il robot che creiamo
devono essere:




Capacità di muoversi in un ambiente sconosciuto
Capacità di riconoscere e seguire delle “tracce” per terra
Capacità di riconoscere il goal come unico ostacolo
Come possiamo sfruttare l’informazione “Il goal si trova
di fronte al robot?”
IN OGNI MOMENTO IL ROBOT NON DOVRA’
MAI INVERTIRE DI 180° LA DIREZIONE CHE
AVEVA INIZIALMENTE
Wandering - 1
► “Il
robot deve essre in grado di muoversi in un
ambiente sconociuto”
► Il wandering è il processo di base del robot.
► La sua presenza è motivata principalmente
dall’informazione “Il robot dovrà muoversi in un
ambiente sconosciuto”
► In ogni caso non dovrà mai invertire la propria
direzione di partenza
► Non usa sensori
► Non ha releaser, è sempre attivo
Wandering - 2
►
►
►
Assumiamo che gli unici “turn” che il robot possa
compiere mentre è attivo il Wandering siano di 90° o a
destra o a sinistra.
Il Comportamento del modulo può essere modellato
tramite un automa a stati finiti
Non vi è uno stato di terminazione
Centrato
90° a sinistra
90° a destra
LineFollowing - 1
“Sul terreno sono presenti opzionalmente delle tracce che dovrebbero “guidare” il
robot verso il goal”.
► Come sono fatte le tracce?
►
►
►




Linee nere su sfondo bianco
Non è detto che portino al goal
Non si sa quando iniziano e quando finiscono
Il robot può entrare in un qualsiasi allineamento rispetto alla traccia


La linea nera riflette meno luce rispetto al bianco
Il range di valori tra il nero ed il bianco è 9
Come reagisce il sensore di luminosità ad una linea nera?
E quando lo spot si trova a metà tra il nero ed il bianco?\


►
Nel passaggio dal nero al bianco (e viceversa) il sensore legge tutti i 9 valori che li separa
Ciò vuol dire che possiamo sapere se stiamo per “abbandonare” una linea nera prima di
averla effettivamente abbandonata
E come correggiamo l’andamento?


L’unica informazione che abbiamo è che stiamo per abbandonare la linea nera, ma non
sappiamo se ciò avviene perché essa sta per terminare o perché rispetto al robot sta per
curvare
Possiamo eseguire due test:
1.
2.
•
•
Il primo, non troppo ampio, gira il robot in una direzione finché non trova il nero
Se il primo test è fallito, eseguiamo una svolta molto più ampia in direzione opposta
Se entrambi i test falliscono, allora vuol dire che la linea nera è effettivamente terminata
(oppure non siamo riusciti a riprenderla)
Il releaser è “Il sensore di luminosità vede nero”
LineFollowing - 2
Linea Nera
Vai avanti
Prima ricerca
Fai n tentativi a
destra
Bianco
Seconda ricerca
Fai 2n tentativi a
sinistra
Fine
Fermati
Reversing
►
►
►
►
►
“In ogni momento il robot non dovrà mai invertire il suo
orientamento di 180°
Compito del Reverser è garantire che questa regola sia in
ogni momento applicata
Se per qualche motivo (quali?) il robot inverte il proprio
orientamento, il Reverser prende il controllo e gira il robot
di 180°.
Il releaser è quindi: “Il robot ha un orientamento
maggiore di 180°”
Per tenere traccia dell’orientamento, il Reverser utilizza due
sensori di rotazione collegati alle due ruote della trazione
Goal
► “Il
goal è rappresentato dall’unico ostacolo
presente nell’ambiente”
► Ciò vuol dire che, nel momento in cui viene
rilevato un ostacolo, abbiamo raggiunto il nostro
obiettivo
► L’ostacolo è rilevato attraverso il sensore di
contatto
► Il releaser è: “Il sensore di contatto è stato
premuto”
► Il modulo di Goal ferma il robot
Riassunto dei Behaviors
RELEASER
SENSORI
BEHAVIOR
Nessuno
(sempre attivo)
Nessuno
Wandering
Linea nera
Sensore di
luminosità
LineFollowing
Inversione di
180°
2 Shaft Encoders
Reversing
Ostacolo
Bumper
Goal
Organizzazione a Sussunzione
Bumper
Goal
Shaft Encoders
Reversing
Light Sensor
LineFollowing
Wandering
S
S
S
Motori
Additional credits
► Prof.
Aloisio per la realizzazione di un
“multiplexer di sensori” tramite FPGA
► Prof. Milano per la collaborazione nel
(tentato) sviluppo di un controllore per i
motori
► L’intera comunità Open Source, grazie alla
quale ho potuto realizzare la mia tesi
► La Microsoft, per aver realizzato Power Point
► Chi mi ha fornito il seriale del Power Point
Ultima nota
►
►
►
Il numero di sensori utilizzati in totale è 4
Solo che l’RCX può avere al più 3 sensori
Come è stato possibile?
Il bumper, quando premuto, “ritorna” un livello di tensione
molto alto, molto più alto di quello degli altri sensori
► Collegandolo sulla stessa porta d’ingresso del sensore di
luminosità, il valore che si legge quando il bumper è
premuto non sarà sicuramente un valore di luminosità
► In questo modo, posso sapere univocamente quando viene
premuto il bumper, senza “sporcare” il segnale del sensore
di luminosità
Le vie della Lego sono infinite
►
Scarica

Progettazione e realizzazione di un robot behavior based