Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Ernesto Burattini » 14.Architetture a Campi di Potenziale


Metodologie a Campi di potenziale

Un altro stile di architettura reattiva è basato sui campi di potenziale. Le architetture specifiche che usano il tipo a campi di potenziale sono troppo numerose per essere descritte tutte, per cui ci limiteremo ad una generalizzazione.

Lo stile a campo di potenziale dei behaviour fa uso sempre di vettori per rappresentare i behaviour e della somma vettoriale per combinare vettori di behaviour diversi per produrre un behaviour emergente.

Visualizzazione dei campi di potenziale

Il primo dogma di un’architettura a campi potenziale è che l’azione motoria di un behaviour deve essere rappresentata come un campo di potenziale .

Un campo di potenziale è un array, o campo di vettori.

Un vettore è una struttura matematica che consiste di una ampiezza ed una direzione.

Un vettore V può essere descritto anche come un coppia (m,d), dove m sta per ampiezza e d per direzione.

Per convenzione l’ampiezza è un numero reale tra 0 e 1, ma in generale può essere qualunque numero reale così come la direzione che è fornita in radianti.

Visualizzazione dei campi di potenziale (segue)

L’array rappresenta una regione di spazio.
In molte applicazioni robotiche lo spazio è bidimensionale, rappresentando una prospettiva a volo di uccello del mondo come fosse una mappa.
La mappa può essere divisa in quadrati, creando una griglia (x,y). Ogni elemento dell’array rappresenta un quadrato dello spazio. Oggetti percepibili nel mondo esercitano un campo di forza sullo spazio circostante.
Il campo di forza è analogo ad un campo magnetico o gravitazionale.

Il robot può essere pensato come una particella che entra nel campo emesso da un oggetto o da un ambiente. Il vettore rappresenta la forza, cioè la direzione di rotazione e l’ampiezza o velocità da intraprendere in quella direzione.

I campi di potenziale sono continui e ad ogni punto nello spazio è associato un vettore.

Visualizzazione dei campi di potenziale (segue)

La Fig. mostra come un ostacolo produce un campo sul robot e lo fa fuggire. Se il robot è vicino all’ostacolo, diciamo entro i 5 metri, esso è nel campo di potenziale, allora si genera una forza che lo spinge ad allontanarsi dall’ostacolo.

Se il robot non è all’interno del raggio dell’ostacolo, esso resta là perché nessuna forza è applicata su lui. Si noti che il campo rappresenta quello che dovrebbe fare il robot (lo schema motorio) se il robot percepisse un ostacolo (lo schema percettivo).

Il campo non dà conto di come il robot arriva vicino all’ostacolo; il robot sente la stessa forza sia se si sta muovendo all’interno del raggio sia se sta fermo al suo interno.

Campo di potenziale: un esempio

Campo di potenziale: un esempio


Visualizzazione dei campi di potenziale (segue)

Un modo di pensare ai campi di potenziale è di immaginare un campo di forza che agisce sul robot. Un altro modo è pensare a loro come ad una superficie di energia potenziale in tre dimensioni (la gravità spesso è rappresentata così) ed il robot come una palla di marmo. In questo caso, il vettore indica la direzione verso cui il robot rotolerebbe sulla superficie.

Dossi sulla superficie fanno sì che il robot rotoli via o giri intorno (i vettori dovrebbero puntare lontano dalla “vetta” della collina), e le valli fanno sì che il robot rotoli verso il basso (vettori che puntano verso il fondo).

Visualizzazione dei campi di potenziale (segue)

Ci sono cinque campi di potenziale di base, o primitivi che possono essere combinati per costruire campi più complessi:
uniforme, perpendicolare, attrattivo, repulsivo, e tangenziale.
La Fig. a) mostra un campo uniforme.
In un campo uniforme, il robot sente la stessa forza indipendentemente da dove si trova e quale orientamento abbia. Esso dovrebbe sentire il bisogno di girare e allinearsi alla direzione della punta della freccia e muoversi in quella direzione ad una velocità proporzionale alla lunghezza della freccia. Un campo uniforme si usa spesso per descrivere il behaviour “va in direzione di …”.

Campi di potenziale primitivi

Campi di potenziale primitivi


Visualizzazione dei campi di potenziale (segue)

La Fig. b) mostra un campo perpendicolare, dove il robot è orientato perpendicolarmente all’oggetto o al muro o al confine. Il campo mostrato è diretto fuori dal muro grigio, ma un campo perpendicolare può essere puntato anche verso un oggetto.

Campi di potenziale primitivi

Campi di potenziale primitivi


Visualizzazione dei campi di potenziale (segue)

In Fig. c) si illustra un campo attrattivo.

Il cerchio al centro del campo rappresenta un oggetto che sta esercitando un’attrazione sul robot. Dovunque il robot sia, il robot sentirà una forza dovuta all’oggetto. I campi attrattivi sono utili per rappresentare un qualche tropismo, dove l’agente è letteralmente attirato da luce, cibo o una meta. L’opposto di un campo attrattivo è un campo repulsivo, mostrato in Fig. d). I campi repulsivi sono associati comunemente agli ostacoli, o a oggetti che l’agente dovrebbe evitare. Più vicino il robot è all’oggetto, più è forte la forza repulsiva che lo allontana di 180° via da lui.

Campi di potenziale primitivi

Campi di potenziale primitivi


Visualizzazione dei campi di potenziale (segue)

L’ultimo campo primitivo è il campo tangenziale in Fig. e).
Il campo è una tangente attorno all’oggetto (si pensi ad un vettore tangente come perpendicolare alle linee radiali che si estendono verso l’esterno dell’oggetto).
I campi tangenziali possono essere destrorsi o antiorario; la Fig. e) mostra una rotazione destrorsa. Essi sono utili per spingere un robot a girare attorno ad un ostacolo, o a investigare su qualche cosa.

Campi di potenziale primitivi

Campi di potenziale primitivi


Profili di ampiezze

Si osservi che in Fig. c),d),e) la lunghezza delle frecce è diversa a seconda della distanza dall’oggetto. Il modo in cui l’ampiezza dei vettori cambia nel campo è chiamata profilo di ampiezza. (Il termine “profilo di ampiezza” è usato qui perché il termine profilo di velocità è usato dagli ingegneri di controlli automatici per descrivere come i motori di un robot accelerano e rallentano per produrre un particolare movimento senza dare scosse.)

Campi di potenziale primitivi

Campi di potenziale primitivi


Profili di ampiezze (segue)

Si consideri il campo repulsivo in Fig d.
Matematicamente, il campo può essere rappresentato in coordinate polari ed il centro del campo è l’origine (0, 0):
(4.1)

Vdirection =
Vmagnitude = c
In questo caso, l’ampiezza è un valore costante c; la lunghezza delle frecce cioè rimane la stessa. Questo può essere visualizzato con un plot della ampiezza mostrata in Fig. a).

Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.

Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.


Profili di ampiezze (segue)

Questo profilo dice che il robot fuggirà (la direzione verso cui correrà è ) sempre alla stessa velocità, non importa quanto vicino sia all’oggetto, finché è nel raggio dell’ostacolo. Appena il robot esce dal raggio d’azione dell’ostacolo, la velocità cade a 0, fermando il robot.
Il campo è essenzialmente binario: il robot o sta fuggendo a velocita’ costante o si ferma.
In pratica c’è qualche problema con l’ampiezza costante. Si può infatti produrre un moto a scatti lungo il perimetro del raggio d’azione del campo. Questo si nota quando un robot andando in una particolare direzione, incontra un ostacolo. Fugge, lasciando quasi immediatamente il campo, poi torna indietro di nuovo sul suo percorso originale, incontra il campo di nuovo, e così via.

Profili di ampiezze (segue)

I profili di ampiezza rendono anche possibile al progettista rappresentare la riflessività (una risposta che dovrebbe essere proporzionale alla forza dello stimolo) e creare risposte interessanti.
Si consideri il profilo in Fig. b). Esso può essere descritto dal comportamento visto da un osservatore che guarda il robot :
se il robot è lontano dall’oggetto, esso andrà in giro e si muoverà rapidamente, quando si dirige verso lui inizierà a rallentare per evitare di colpire l’oggetto.

Campo di potenziale: profilo di ampiezza lineare. Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.

Campo di potenziale: profilo di ampiezza lineare. Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.


Profili di ampiezze (segue)

In matematica, questo andamento è detto linear drop off (esaurimento lineare), perché la velocità alla quale l’ampiezza si esaurisce può essere rappresentata da una linea retta. La formula di una retta è y = mx + b dove x è la distanza e y è l’ampiezza. b influenza l’inizio della linea e m è l’inclinazione [ m =(Δy / Δx )]. Qualunque valore di m e b è accettabile. Se non è specificato, m = 1 o -1 (una inclinazione di 45° in su o in giù) e b = 0 per le funzioni lineari.
Il profilo lineare in Fig. b soddisfa il behaviour desiderato dal progettista di avere un robot che reagisca di più, quanto più è vicino.

Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.

Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.


Profili di ampiezze (segue)

Per catturare il bisogno di una reazione forte e più accentuata si deve usare un altro profilo. Un tale profilo è una funzione detta a esaurimento esponenziale in cui l’esaurimento è proporzionale al quadrato della distanza: per ogni unità di distanza dall’oggetto la forza sul robot diminuisce della metà.

Campo di potenziale: profilo di ampiezza esponenziale. Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.

Campo di potenziale: profilo di ampiezza esponenziale. Foto riprodotta dal testo di R. R. Murphy con il permesso di MIT Press.


Profili di ampiezze (segue)

Come si può vedere dagli esempi precedenti, quasi nessun profilo di ampiezza è accettabile. La motivazione di usare profili di ampiezza è quella di raffinare il behaviour.

È importante notare che il robot calcola solamente i vettori che agiscono su di lui nella sua posizione corrente. Le figure, invece, espongono il campo intero per tutte le possibili ubicazioni del robot.

La domanda che sorge è: perché le figure mostrano un campo intero su uno spazio?

Prima di tutto, questo aiuta a visualizzare quello che il robot farà complessivamente, non solo ad un particolare istante di tempo.

Secondo, siccome i campi sono rappresentazioni continue, questa è una semplificazione che conferma se il campo è corretto e rende subito evidente ogni cambio improvviso.

Campi di potenziale e percezione

Negli esempi precedenti, la forza del campo di potenziale in ogni dato punto era una funzione del profilo di ampiezza e della distanza relativa tra il robot ed un oggetto.

La forza di un campo di potenziale può però essere una funzione dello stimolo, indipendentemente dalla distanza. Come esempio si richiama dalla lez. 9 il behaviour di cibo per il piccolo di rondine artica dove il behaviour cibo è guidato dallo stimolo “rosso.” Questo può essere modellato da un campo attrattivo. Più grande e rosso è un oggetto nel campo visivo del piccolo, più forte l’attrazione, suggerendo un profilo di ampiezza che usa una funzione esponenziale crescente.

Un altro importante punto che già è stato menzionato è che i campi di potenziale sono ego-centrici perché la percezione di un robot è ego-centrica.

Programmazione di un singolo campo di potenziale

I campi di potenziale sono facili da programmare, specialmente quando sono ego-centrici rispetto al robot.

La visualizzazione di un intero campo può indurre a pensare che il robot e gli oggetti sono in un sistema di coordinate fisso, assoluto, ma in realtà non lo sono.

Il robot calcola l’effetto del campo di potenziale, di solito come una linea retta, ad ogni aggiornamento tra dove era prima a dove il robot si è spostato, senza usare memoria.

Vediamo alcuni esempi.

Programmazione di un singolo campo di potenziale (segue)

Un campo di potenziale primitivo è rappresentato usualmente da una sola funzione. Il vettore che ha un impatto sul robot è calcolato ad ogni aggiornamento. Si consideri il caso di un robot con un solo sensore di distanza rivolto in avanti. Il progettista decide che è adatto un campo repulsivo con una attenuazione lineare.
La formula è indicata nella figura a lato.

Dove D è il range massimo dell’effetto del campo, o la massima distanza a cui il robot può scoprire l’ostacolo.
(D non è sempre la distanza di rilevamento. Può essere la distanza alla quale il robot dovrebbe rispondere ad un stimolo. Per esempio, molti sonar possono scoprire ostacoli lontani 60 cm, producendo una risposta quasi infinitesima nel behaviour emergente ma richiedendo un alto runtime per la chiamata di funzione.
In pratica, un esperto metterebbe un D di 2 metri
).
Si noti che la formula produce un risultato quando
0.0 <= Vmagnitude <= 1.0.


Programmazione di un singolo campo di potenziale (segue)


Programmazione di un singolo campo di potenziale (segue)

A questo punto, è facile illustrare come un campo di potenziale può essere usato da un behaviour, RUNAWAY, per un robot con un solo sensore. Il behaviour GENERAZIONE MOTO userà la funzione repulsive() come schema motorio, ed una funzione readSonar() come schema percettivo. L’output del behaviour è un vettore.

GENERAZIONE MOTO è chiamato dal robot ad ogni ciclo di aggiornamento.


Combinazione di behaviour e Campi

Come affermato precedentemente, il primo attributo di una vera metodologia di campi di potenziale è che essa richiede che tutti i behaviour siano implementati come campi di potenziale.

Il secondo attributo è che essa combini i behaviour non mediante una sussunzione uno dell’altro, ma mediante una sommatoria di vettori.

Un robot avrà generalmente forze agenti su lui provenienti da behaviour multipli e concomitanti.

Vogliamo fornire due esempi di come behaviour multipli sorgono e come sono implementati e sono combinati.

Combinazione di behaviour e Campi (segue)

Un primo esempio è la semplice navigazione di un robot che sta perseguendo una meta (specificata come “10.3 m in direzione Θ“) ed incontra un ostacolo. Lo schema motorio del behaviour di move2goal è rappresentato con un campo di potenziale attrattivo che usa gli shaft encoder del robot per dire se è giunto alla posizione di meta. Il behaviour GENERAZIONE MOTO è un campo repulsivo ed usa un sensore di distanza per scoprire se c’è qualche cosa di fronte a lui.


Combinazione di behaviour e Campi (segue)

Le fig. mostrano una vista a volo di uccello dell’area di azione a), e una visualizzazione del campo di potenziale b). Il behaviour di move2goal in Fig. b) esercita un campo attrattivo sull’intero spazio; dovunque sia il robot, esso sarà attratto dalla meta. Il behaviour GENERAZIONE MOTO in Fig. a) esercita un campo repulsivo in un raggio attorno all’ostacolo (tecnicamente il campo repulsivo si estende su tutto lo spazio come fa move2goal, ma l’ampiezza della repulsione è 0.0 oltre il raggio d’azione). Il campo combinato è mostrato in Fig. c).


Combinazione di behaviour e Campi (segue)

Ora si consideri il behaviour emergente del robot immerso in questo campo quando parte dall’angolo in basso a sinistra, mostrato in fig.
Al tempo t0, il robot sente il mondo. Può percepire solamente la meta e non può percepire l’ostacolo, così l’unico vettore che sente è attrattivo (GENERAZIONE MOTO ritorna un vettore di ampiezza 0.0). Esso si muove su una linea retta verso la meta. A t2, aggiorna i suoi sensori ed ora percepisce la meta e l’ostacolo. Entrambi i behaviour offrono un vettore; i vettori sono sommati ed il robot ora si allontana. A t3, il robot si è mosso già oltre l’ostacolo e la meta va ora esercitando la forza più forte. A t4, riprende la corsa e raggiunge la meta.

Combinazione di behaviour e Campi (segue)

L’esempio illustra anche altri punti sui metodi a campi di potenziale: l’impatto della velocità di aggiornamento e i minimi locali. Si noti che la distanza (lunghezza delle frecce) tra aggiornamenti è diversa. Questo è dovuto ai cambi nella ampiezza del vettore di output che controlla la velocità del robot. Se il robot ha un vettore più “corto”, viaggia più lentamente e, perciò, copre meno distanza nello stesso ammontare di tempo. Può anche superare il segno tra un aggiornamento e l’altro come visto tra t3 e t4 dove il robot va veloce senza girare e quindi deve tornare indietro. Il cammino sarà più breve se l’aggiornamento è più frequente. Un altro aspetto della frequenza di aggiornamento è che il robot può superare la meta, specialmente se sta usando shaft encoders (la meta è a 10.3 metri da dove il robot è partito). Qualche volta i progettisti usano campi attrattivi con una ampiezza che si attenua man mano che il robot si avvicina, facendo rallentare il robot che così può dire che è giunto alla meta. (I programmatori mettono di solito una tolleranza sull’ubicazione della meta, per esempio invece di 10.3m la meta è 10.3m±0.5m.)

Behavior con campi di potenziale attrattivi e repulsivi

Behavior con campi di potenziale attrattivi e repulsivi


Combinazione di behaviour e Campi (segue)

I campi di potenziale trattano il robot come se fosse una particella che può cambiare istantaneamente velocità e direzione. Questo non è vero per i robot reali. Robot di ricerca come Khepera possono girare in qualunque direzione, ma devono fermarsi prima e c’è un ammontare misurabile di errore a causa dell’attrito tra le ruote e la superficie. Molti robot hanno Ackerman, o sterzi di automobile, e chiunque ha tentato di parcheggiare un’automobile sa che una macchina può andare solamente in certe direzioni.

Combinazione di behaviour e Campi (segue)

Un terzo problema è che i campi possono anche dare somma 0. In fig., si disegni una linea tra la Meta e l’Ostacolo. Lungo questa linea dietro all’ostacolo, i vettori hanno solamente una testa (direzione della freccia) e nessun corpo (lunghezza della freccia). Questo vuole dire che l’ampiezza è 0 e che il robot se raggiunge quel posto, si fermerà e non si muoverà più. Questo stato è chiamato un problema di minimo locale, perché il campo di potenziale ha un minimo, o un avvallamento che intrappola il robot. Soluzioni al problema di minimi locali saranno descritte alla fine della lezione.


Esempio che usa un behaviour per sensore

Per avere un altro esempio di come è potente questa idea di sommatoria di vettori, è utile considerare come GENERAZIONE MOTO per evitare ostacoli è implementato comunemente su veri robot. La fig. a) mostra una configurazione dei sensori di distanza IR su un robot Khepera.

Esempio di canyon box

Esempio di canyon box


Esempio che usa un behaviour per sensore (segue)

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.

Se questo sensore fosse l’unico sensore sul robot, il behaviour GENERAZIONE MOTO 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 GENERAZIONE MOTO per ogni sensore.
Questa operazione è chiamata istanziazione multipla dello stesso behaviour.

Esempio che usa un behaviour per sensore (segue)

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).


Esempio che usa un behaviour per sensore (segue)

Come si vede nelle fig. a), b), 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, (lezione 11) il 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!

Behavior con campi di potenziale attrattivi e repulsivi

Behavior con campi di potenziale attrattivi e repulsivi


Esempio che usa un behaviour per sensore (segue)

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 GENERAZIONE MOTO 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.

Esempio che usa un behaviour per sensore (segue)

L’alternativa alla instanziazione multipla è fare in maniera che lo schema percettivo di GENERAZIONE MOTO 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.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion