Sistemi per il Governo dei Robot
Silvia Rossi - Lezione 13
Esempio
E’ utile considerare come RUNAWAY per evitare ostacoli è implementato comunemente su veri robot.
Siccome i sensori sono montati permanentemente sulla piattaforma, il loro angolo αi, relativo al fronte è conosciuto.
Se un sensore riceve una lettura di distanza, qualche cosa è di fronte a quel sensore.
Sotto un campo repulsivo per RUNAWAY, il vettore
di input sarà di 180° opposto a αi. Il sensore non è
capace di dire molto sull'ostacolo: solo che si trova
diritto di fronte a lui ed è ad esso perpendicolare.
Esempio
Se questo sensore fosse l'unico sensore sul robot, il behaviour RUNAWAY sarebbe molto stringente.
Ma cosa accade se, come nel caso di Khepera, il robot ha più sensori di distanza?
Gli ostacoli più grandi saranno scoperti da più sensori allo stesso tempo.
In genere si ha un behaviour RUNAWAY per ogni sensore.
Questa operazione è chiamata istanziazione
multipla dello stesso behaviour.
Nel frammento di codice a istanziazione multipla sottostante si nota che tutto quello che deve essere fatto è di aggiungere un ciclo per sondare ogni sensore.
In questo caso sfruttiamo le due proprietà della somma
vettoriale: associativa (a+b+c+d) può essere calcolata come ((a + b) + c) + d), commutativa (non importa in che ordine i vettori sono sommati).
WHILE(ROBOT==ON) {
VECTOR.MAG=VECTOR.DIR=0.0; //INIZIALIZZA A 0 FOR (I=0; I<=NUMBERIR; I++ {
VECTORCURRENT=RUNAWAY(I);//GUARDA UN CERTO SENSORE VECTOROUTPUT=VECTORSUM(TEMPVECTOR,VECTORCURRENT);
} TURN(VECTOR.DIR);
FORWARD(VECTOR.MAG*MAX_VELOCITY);
Box Canyon
Il robot è capace di uscire fuori da una trappola tipo caverna, detta un box canyon, senza costruire un
modello del muro. Ogni istanza offre un vettore, alcuni dei quali hanno una componente X o Y che lo porta
fuori.
Da una prospettiva etologica, il programma è elegante perché è equivalente alla instanziazione di behaviour negli animali.
Si ricordi, nel modello di rana computrix e la sua
controparte nella vita reale, il rospo, dove ogni occhio
vede e risponde indipendentemente dall'altro occhio al
passaggio di una mosca. In questo caso, il programma
tratta il robot come se avesse 8 occhi indipendenti!
Da un punto di vista robotico, l'esempio illustra due punti importanti.
Primo, l'accoppiamento diretto delle operazioni di sentire e di agire.
Secondo, la programmazione con behaviour è
consistente con le buone pratiche di ingegneria
del software.
La funzione RUNAWAY esibisce una coesione funzionale, dove la funzione fa una sola cosa e bene ed ogni asserzione nella
funzione ha direttamente qualche cosa a che fare con lo scopo della funzione.
La coesione funzionale è desiderabile, perché questo vuole dire che è improbabile che la funzione presenti side effects nel programma principale o che sia dipendente da un'altra funzione.
L'organizzazione complessiva mostra l’accoppiamento dei dati, dove ogni chiamata di funzione prende un semplice argomento.
L’accoppiamento dei dati è buono, perché ciò vuole dire che
tutte le funzioni sono indipendenti; per esempio, il programma
può essere cambiato facilmente per tener conto di più sensori.
L'alternativa alla instanziazione multipla è fare in maniera che lo schema percettivo di RUNAWAY processi tutte le 8 letture di
distanza.
Un approccio è quello di sommare internamente tutti gli 8
vettori. (Si può facilmente vedere che il vettore risultante è lo stesso).
Questo non è elegante dal punto di vista dell’ingegneria del
software perché il codice ora è specifico del robot (si dice che la funzione ha una coesione procedurale), e può essere usato solamente con un robot che ha otto sensori di distanza in
quelle ubicazioni.
Un altro approccio che produce un behaviour emergente
diverso è quello che prevede che lo schema percettivo ritorni la direzione e la distanza delle sole letture di distanza più grandi.
Questo rende il behaviour più selettivo.
Campi di Potenziale e Sussunzione
Come possiamo formare un behaviour emergente più complicato dei semplici behaviour?
Alla stessa maniera dei campi di potenziale più complicati che sono costruiti da campi primitivi:
combinando instanziazioni multiple di behaviour primitivi.
Questo può essere visto rivisitando il behaviour di
esempio che descriveva l'architettura di sussunzione.
Nel caso del Livello 0 nella sussunzione, se non ci sono ostacoli all'interno del raggio d’azione, il robot non sente la forza repulsiva ed è immobile. Se un ostacolo entra
all'interno del raggio d’azione ed è rivelato da più di un sonar, ognuna delle letture sonar crea un vettore,
puntando il robot nella direzione opposta.
Nell'esempio della sussunzione, si può immaginare, che questi vettori vengano sommati nel modulo
RUNAWAY come mostrato.
In un sistema a campi di
potenziale, ciascuna lettura sonar rilascia un’istanza del behaviour RUNAWAYpf.
Il behaviour di RUNAWAYpf usa un campo di potenziale repulsivo. I
vettori di output sono quindi
sommati, e il vettore risultante è usato per guidare la svolta e
l’avanzamento del motore.
While (robot==ON) {
vector.magnitude=vector.direction=0;
For (i=0; i<=numberSonars; i++) {
Reading=readSonar (); // schema percettivo currentVector=runaway(reading); // schema
motorio vector=vectorSum(vector, currentVector);
}
turn(vector.direction);
forward(vector.magnitude*MAX_velocità);
}
Il modulo COLLIDE nella sussunzione non coincide con un behaviour nella metodologia a campi di potenziale.
Si ricordi che lo scopo di COLLIDE è fermare il robot se tocca un ostacolo; e questo accade se il behaviour RUNAWAY fallisce.
Questa descrizione va bene per la definizione di behaviour, cioè: ha un input sensorio (distanza dall’ostacolo = 0) ed un pattern riconoscibile dell'attività motoria (si ferma).
Ma non produce un campo di potenziale, a meno che un campo uniforme di vettori di ampiezza 0 non sia considerato lecito.
Se fosse trattato come un behaviour, il vettore a cui esso contribuisce sarebbe sommato con gli altri vettori prodotti dagli altri behaviour. Ma un vettore di ampiezza 0 è la funzione identità per la somma dei vettori, così un vettore COLLISION non avrebbe alcun impatto.
Invece le collisioni sono spesso trattate come situazioni di "panico",
provocando una risposta di emergenza fuori della struttura del campo
di potenziale.
Alcune differenze più sottili tra campi di potenziale e sussunzione appaiono quando è considerato il caso del Livello 1.
La stessa funzionalità può essere portata a termine
aggiungendo un solo blocco di behaviour WANDER.
Come prima, il behaviour genera una direzione nuova per muoversi ogni n secondi.
Questo potrebbe essere rappresentato da un campo di potenziale
uniforme dove il robot sente la stessa attrazione ad andare in una certa direzione, incurante di dove si trova, per n secondi.
Comunque, combinando l’output di WANDER con l’output dei vettori di
RUNAWAYpf, il bisogno di un nuovo behaviour AVOID è
eliminato.
Il vettore WANDER è sommato al vettore repulsivo e di
conseguenza, il robot si
allontana contemporaneamente dagli ostacoli e va verso la
direzione desiderata.
Le differenze principali in questo esempio sono che i campi di
potenziale esplicitamente incapsulano percezione e azione in behaviour primitivi, e non devono sussumere nessun behaviour più basso. Come con la sussunzione, il robot diventa più “intelligente” quando il
behaviour WANDERpf viene aggiunto al behaviour RUNAWAYpf.
Ora vediamo, per il Livello 2, come sarebbe implementato follow- corridor in un sistema a campo di potenziale.
In questo caso si vede bene la differenza concettuale tra i due approcci.
Il robot avrebbe due behaviour concorrenti: RUNAWAYpf e follow- corridor. RUNAWAYpf rimarrebbe lo stesso di prima, ma WANDER potrebbe essere scartato.
In termini di campi di potenziale, il task di seguire un corridoio richiede
due behaviour simili, mentre il task di vagare richiede due behaviour
diversi.
Follow-corridor
Il behaviour follow-corridor è interessante, perché richiede un campo di potenziale più complesso.
Questo può essere fatto usando due campi di potenziale: un campo
uniforme perpendicolare al confine sinistro e che punta al centro, ed un campo uniforme perpendicolare al confine destro che punta al centro.
Si noti che entrambi i campi hanno un decremento lineare in ampiezza non appena il campo si avvicina al centro del corridoio. In pratica
questo abbassamento impedisce al robot di oscillare al centro.
Si noti anche che i due campi uniformi non sono sufficienti perché non permettono al robot di muoversi in avanti; il robot si muoverebbe nel mezzo del corridoio e si fermerebbe là.
Perciò si aggiunge un terzo campo uniforme che è parallelo al corridoio.
Questi tre campi combinati producono un campo smussato che spinge il robot nel mezzo del corridoio secondo una funzione di prossimità al
muro, mentre contemporaneamente il robot va spostandosi in avanti.
Si ricordi, in questo esempio, che il robot non sta proiettando confini passati o futuri del corridoio; la visualizzazione del campo lo fa apparire così
PS:
Find-wall
MS: Perp.
MS: Uniform S
Sonars
orientation
Representation of a wall?
It’s not really reasoning that it’s a wall, rather it is reacting to the stimulus which happens to be
smoothed (common in neighboring neurons)
1 pfield per behavior
Follow-corridor e Avoid
Il behaviour di follow-corridor usa gli stessi dati dei sonar di AVOID; perciò i muri produrranno un
campo repulsivo che generalmente spingerebbe il robot verso il mezzo del corridoio.
Perché non usare un solo campo parallelo
uniforme per follow-corridor?
Design Trade Spaces
Is it really a discrete behavior or an emergent behavior?
Is there something different (such as perception) for having following versus just two instances of avoid obstacle for really long duration?
What is the modularity and reusability?
Can you “find” and debug the intended behavior?
Does it degrade gracefully?
Follow-corridor e Avoid
Prima di tutto i behaviour sono indipendenti. Se
c'è un behaviour follow-corridor, esso deve essere capace di seguire i corridoi senza dipendere da
effetti collaterali dagli altri behaviour.
Secondo, la simmetria polare dei campi repulsivi
può causare oscillazioni, così c'è un vantaggio
pratico ad avere un behaviour separato.
L'uso di conoscenza di behaviour-specifico del dominio
(data al momento dell’instanziazione come un parametro di inizializzazione opzionale) può migliorare ulteriormente il
behaviour complessivo del robot.
Se il robot conosce l'ampiezza del corridoio a priori, follow- corridor può sopprimere le istanze di AVOID perché per gli ostacoli sa che quella è la forma del confine del muro.
Quindi eviterà solamente gli ostacoli che sono nel corridoio.
Se non ci sono ostacoli, follow-corridor produrrà una traiettoria diritta.
Se gli ostacoli sono prossimi ad un muro, il follow-corridor
tratterà il profilo dell'ostacolo come un muro e si sposterà
più vicino al centro.
Gli schema motori per un behaviour possono
essere ordinati in sequenza. Un esempio di questo è il behaviour di docking.
Docking (approccio) è quando un robot si deve muovere verso una specifica ubicazione (la
stazione di docking) con un certo orientamento.
Questo è utile per i robot che maneggiano
materiali in una industria. Per prendere un pezzo di materiale da trasportare il robot deve, nella sua
posizione finale, essere abbastanza vicino al lato
giusto del nastro trasportatore e trovarsi rivolto
verso di esso.
Poiché il docking richiede una specifica posizione ed orientamento, non può
essere fatto con un schema motorio attrattivo.
Con questo campo il robot andrebbe in
linea retta verso il nastro, anche se alle sue spalle; il robot si fermerebbe dietro la
posizione giusta con l’orientamento sbagliato.
Invece, è necessario un campo di
attrazione selettivo. Qui il robot "sente"
solamente la forza attrattiva quando è
all'interno di un certo range angolare della
Sfortunatamente l'attrazione selettiva non copre il caso di quando il robot si avvicina dalla parte posteriore o di lato.
Come si può muovere un robot in un'area dove c’è un campo di attrazione selettivo?
Un modo per fare questo è avere un campo tangenziale
che permette al robot di orbitare attorno al dock finché
non entra nell'area di attrazione selettiva.
Un aspetto interessante del behaviour di docking è quando il robot sta operando in prossimità del dock.
Il dock rilascia un’istanza di AVOID che impedisce al robot di andare vicino alla posizione desiderata.
In questo caso, i behaviour di docking devono attenuare l’ampiezza (il guadagno) del vettore di output dell’AVOID instanziato nell'area di dock.
Essenzialmente questo è come se inibisse in parte il behaviour di AVOID in alcune regioni selezionate.
Avremo quindi che tra attrazione e repulsione il robot si ferma dove l'attrazione selettiva del dock si bilancia con la repulsione.
I campi selettivi e tangenziali non sono sufficienti in pratica, a
causare delle limitazioni percettive. Se il robot non può vedere il
dock, non può istanziare i campi.
Almeno tre schemi percettivi sono necessari per il behaviour di docking. Uno è necessario per estrarre la direzione relativa del dock per l'attrazione
regolare.
Un altro è uno schema percettivo capace di
riconoscere il dock in generale, anche dalla parte posteriore o dai lati, al fine di sostenere il campo tangenziale.
Il terzo schema percettivo è necessario per il campo di attenzione selettiva e deve essere capace di
interagire con la parte anteriore del dock e valutare
la distanza e l’orientamento relativo del robot.
Il behaviour di docking è definito quindi come costituito da tre schemi percettivi e tre schemi motorii (potrebbero essere raggruppati in 3
behaviour primitivi).
Una rappresentazione in termini di schema-theory indica che il behaviour ha alcuni programmi di
controllo per coordinare e controllare questi
schemi.
Nel caso del behaviour di docking, una macchina a stati finiti è una scelta ragionevole per coordinare la sequenza di schemi percettivi e motorii.
Essa fornisce una maniera formale per rappresentare la sequenza, ed anche ricorda al progettista di considerare transizioni di stato fuori dell’ordinario.
Il robot per esempio potrebbe stare muovendosi verso il dock sotto l’influenza dei campi tangenziali e dell’attenzione selettiva. Se una
persona gli passa davanti, essa occluderebbe la vista del dock e quindi cesserebbe l’attrazione.
Allora si riattiva lo schema motorio di attrazione generale, e insieme allo schema percettivo associato rivalutano la direzione del dock alla luce del nuovo ostacolo.
Il nuovo vettore permetterebbe al robot di evitare la persona andando in una direzione favorevole al raggiungimento del dock e tentare di
raggiungerlo.
Il behaviour di docking illustra anche quale impatto hanno le capacità sensoriali del robot sui
parametri dello schema motorio.
Si noti che l’ampiezza angolare del campo di
attenzione selettivo è determinata dagli angoli ai quali il terzo schema percettivo potrebbe
identificare il dock.
Similmente il raggio del campo tangenziale e di
attrazione selettiva è determinato dalla distanza
alla quale il robot può percepire il dock.
Class Discussion:
When Does a Field End?
• Imagine the case of a “SodaPup” robot (MIT)
– task: find and pick up a Coca-Cola can
– environment: red cans are only red object in world
– behavior: ??
Vantaggi e svantaggi
L’architettura a campo di potenziale ha molti vantaggi.
Il campo di potenziale è una rappresentazione continua che è facile visualizzare su una grande regione dello spazio. Di
conseguenza, è più facile per il progettista visualizzare il behaviour complessivo del robot.
È anche facile combinare campi, e, linguaggi come C++, forniscono strumenti per la creazione di biblioteche
comportamentali.
I campi di potenziale possono essere parametrizzati: il loro range di influenza può essere limitato e una funzione continua può
esprimere il cambio in ampiezza rispetto alla distanza (lineare, esponenziale, ecc.).
Inoltre un campo bi-dimensionale di solito può essere esteso ad
un campo tri-dimensionale, e così behaviours sviluppati per 2D
Pfields Summary
• Reactive Paradigm: SA, sensing is local
– Solves the Open World problem by emulating biology
– Eliminates the frame problem by not using any global or persistent representation – Perception is direct, ego-centric, and distributed
• Two architectural styles are: subsumption and pfields
• Behaviors in pfield methodologies are a tight coupling of sensing to acting;
modules are mapped to schemas conceptually
• Potential fields and subsumption are logically equivalent but different implementations
• Pfield problems include
– local minima (ways around this) – jerky motion
– bit of an art