Sistemi per il Governo dei robot
Shakey il robot “Autonomo”
Forastiere Manolo 50/007
Marrello Valentino 50/010
Struttura del seminario
•Paradigma reattivo
Esempio di funzionamento
Passi per progettare un sistema reattivo
Architettura a sussunzione
Tabella dei behavior per sussunzione
FSA
Architettura a campi di potenziale
•Conclusioni
Nel presente seminario si vuole mostrare come Shakey, il robot mobile dell’università di Stanford, implementato da Nilsson, nato con lo scopo di pianificare ogni azione o task che doveva compiere prima di poter procedere, potrebbe essere pensato utilizzando un paradigma reattivo in modo da agire in maniera riflessiva agli stimoli dell’ambiente in cui è immerso.
Sense plan act
Si passa quindi dal
Sense act
Al
Esempio di funzionamento
Per capire come Shakey potrebbe diventare autonomo e quindi essere adattato al paradigma reattivo, prendiamo come esempio un ambiente costituito da stanze, porte e oggetti e vediamo, utilizzando sia un’architettura a sussunzione che una a campi di potenziale come si riesce a risolvere un compito come quello di cercare un oggetto della quale non si conosce la collocazione.
Per far ciò mostriamo in sequenza i vari passi che ci portano a descrivere la nicchia ecologica di Shakey per poi specificare i behavior e come questi vengono integrati.
Step 1 Descrizione del task
L’obiettivo di shakey è quello girare per delle stanze attraversare porte per individuare un oggetto di colore rosso e raggiungerlo. Per fare questo però bisogna tener presente che nell’ambiente sono posti degli ostacoli come pareti e oggetti.
Step 2 descrizione del robot
Shakey è un robot di circa 50 cm per 50 cm con una altezza di 150 cm. E’ dotato di due ruote motrici poste ai suoi lati e di una ruota girevole anteriore. I sensori di cui è equipaggiato sono:
1 range finder situato sull’albero al centro orientato sul davanti del robot, che permette di ricavare la distanza di un oggetto e l’allineamento con lo stesso in un raggio di 2 metri;
1 telecamera a colori con un raggio d’azione in ampiezza di circa 150° e in profondità di circa 4 metri
2 Bumper detector posti uno sul davanti e uno sui lati.
Ovviamente dal momento che Shakey non deve richiedere l’intervento dell’uomo, non sarà utilizzato il dispositivo radio che nel paradigma gerarchico serviva per mandare istruzioni per i relativi compiti che doveva eseguire.
Step 3 Descrizione dell’ambiente
L’ambiente in cui è immerso Shakey come già menzionato è composto da due stanze (di 7x7 m2) che hanno in comune un corridoio (di 14x2 m2), per accedere al corridoio dalle stanze vi sono due porte. Nelle stanze possono essere presenti ostacoli (alti quanto shakey) ed in una delle tre stanze viene posto l’oggetto di colore rosso che Shakey deve trovare. Le pareti del corridoio sono di colore blu, diverse rispetto al pavimento in modo da poterle distinguere con la telecamera, mentre le porte sono di colore marrone.
L’amipezza delle porte è maggiore dell’ampiezza di shakey.
Step 4 descrizione delle reazioni di shakey in risposta all’ambiente
Possiamo ora concentrarci su ciò che Shakey dovrebbe fare cioè il comportamento che dovrà avere in base alle situazioni ambientali che si presentano.
Nel momento in cui Shakey viene introdotto in una delle stanze possono essere percepite dal sistema sensoriale diverse situazioni:
1- Shakey è posto difronte ad un ostacolo e quindi deve avere un Behavior per evitare l’ostacolo
2- Shakey vede l’oggetto che deve raggiungere e quindi bisogna prevedere un behavior per raggiungere lo stesso
3- Se Shakey vede le pareti blu il suo behavior sarà quello di seguirle
4- Se shakey non vede ne un ostacolo ne un obiettivo, bisogna prevedere un behavior che permetta di passeggiare per la stanza in modo da riuscire a trovare l’oggetto
A questo punto dal momento che l’oggetto può non essere presente nella stanza bisogna far sì che Shakey non passeggi per un tempo indeterminato, ma prevedere che egli possa cambiare stanza. Visto che ci sono delle porte che separano una stanza dall’altra bisognerebbe mettere un limite al tempo che Shakey impiega nel passeggiare casualmente e fare in modo che se dopo un determinato tempo t non viene avvistato l’obiettivo porsi come un nuovo obiettivo quello di attraversare una porta.
Se Shakey invece individua il corridoio allora bisogna prevedere un behavior che gli permetta di seguirlo e nello stesso tempo di controllare se vi sono ostacoli o obiettivi da raggiungere.
Step 5 Raffinare ogni behavior (1/8)
A tal punto abbiamo un’idea complessiva di quello che Shakey dovrebbe poter fare. Il robot dovrebbe essere in grado di evitare ostacoli e pareti, di rilevare ed attraversare una porta, di rilevare ed attraversare un corridoio, di rilevare il goal e dirigersi verso di esso. I behavior individuati sono i seguenti:
• Collide • RunAway• Wander• Avoid• Follow_corridor• Through_door• Move_to_goal
Il behavior collide ha lo scopo di fermare i motori nel momento in cui lo schema percettivo “avverte” l’urto del robot con un oggetto.
Di seguito è riportata una descrizione in termini di schema theory di ciascun behavior primitivo
Collide bumper
Read_bumper() Stop_wheel()
Always_on
stop motor Schema percettivo
Read_bumper()
percetto Bumper_status
Schema motorio
stop_wheel(bumper_status)
Step 5 Raffinare ogni behavior (2/8)
Il behavior RunAway ha lo scopo di aggirare un ostacolo presente davanti Shakey. Il sonar dà un’indicazione della distanza dell’oggetto da Shakey, lo schema percettivo estrae il percetto in termini di coordinate polari (distanza,angolo) e se necessario, lo schema motorio provvede ad inviare i comandi per arretrare e invertire la rotta di 45°
RunAway Sonar
Extract_distance() Turn()
Always_on
Inverti rotta Schema percettivo Extract_distance()
Percetto (d,θ)
Schema motorio Turn(d, θ)
Step 5 Raffinare ogni behavior (3/8)
Il behavior Wander ha lo scopo di generare una direzione casuale ogni n secondi che Shakey dovrebbe seguire. Lo schema percettivo potrebbe essere pensato come un timer che segnala lo scadere degli n secondi. Lo schema motorio genera di conseguenza una direzione casuale (in termini di coppia (distanza,angolo))
Wander timer
Count_down() Random_walk()
Always_on
Direzione casuale
Schema percettivo Count_down()
Percetto Time_remaining
Schema motorio Random_walk()
Step 5 Raffinare ogni behavior (4/8)
Il behavior Avoid combina la distanza generata dal behavior wander con la lettura proveniente dal sonar. Lo schema percettivo somma il vettore proveniente da wander con il vettore che individua l’ostacolo ottenendo la direzione verso cui Shakey dovrebbe dirigersi. Lo schema motorio genera un pattern di azioni motorie da inviare agli attuatori per seguire la direzione desiderata.
Schema percettivo Feel_force()
Percetto (d, θ)
Schema motorio Avoid(d, θ)
Step 5 Raffinare ogni behavior (5/8)
Sonar Azioni motorie per seguire la direzione
Feel_force() Avoid()
Always_on
Wander Avoid
Il behavior Follow_corridor permette di individuare e percorrere il corridoio. La telecamera fornisce allo schema percettivo l’immagine dell’ambiente, lo schema percettivo individua la presenza del corridoio (dal colore delle pareti) mentre lo schema motorio genera un pattern di azioni motorie per attraversare il corridoio.
Follow_corridortelecamera
Extract_color() Go_straight()
See_corridor
Azioni motorie per attraversare il corridoio
Schema percettivo Extract_color(blu)
Percetto c_x
Schema motorio Go_straight(c_x)
Step 5 Raffinare ogni behavior (6/8)
Il behavior Through_door permette di individuare ed attraversare una porta (oggetto di colore marrone). Lo schema percettivo riceve dalla telecamera l’immagine dell’ambiente da cui estrae la posizione della porta (individuandone il colore), lo schema motorio genera un pattern di azioni motorie per attraversarla.
Through_doortelecamera
Extract_color() Through_door()
See_door
Azioni motorie per attraversare la porta
Schema percettivo Extract_color(brown)
Percetto c_x
Schema motorio Through_door(c_x)
Step 5 Raffinare ogni behavior (7/8)
Il behavior Move_to_goal infine permette di individuare e dirigersi verso l’obiettivo (oggetto di colore rosso). Lo schema percettivo riceve dalla telecamera l’immagine dell’ambiente e fornisce allo schema motorio la posizione dello stesso. Lo schema motorio provvede ad inoltrare i comandi giusti agli attuatori al fine di raggiungere l’oggetto.
Move_to_goaltelecamera
Extract_color() Move_to_goal()
See_goal
Azioni motorie per raggiungere
il goal
Schema percettivo Extract_color(red)
Percetto c_x
Schema motorio Move_to_goal(c_x)
Step 5 Raffinare ogni behavior (8/8)
Tabella dei behaviors
Releaser Behaviour Motor Scheme Percepts Perceptual scheme
Always_on Collide() Stop_wheel(Bumper_status) Bumper_status
Read_bumper()
Always_on Runaway()Turn(d,θ) (d,θ) Extract_Distance(sonar)
Always_on Avoid() Avoid(d,θ) (d,θ) Feel_force(wander,sonar)
Not_See_Goal=Extract_color(red)
Wander() Random_walk(Time_remaining) Time_remaining
Countdown()
See_door=Extract_color(brown)
Through door Through_door(c_x) c_x Extrat_color(brown)
See_corridor=Extract_color(blu)
Follow corridor() Go_straight(c_x) c_x Extract_color(blu)
See_Goal=extrat_color(red)
Move_to_goal() Move_to_goal(c_x) c_x Extract_color(red)
Automa a stati Finiti
Start
Move to goal
Wander
Through door
Follow corridor
See_goal
Not_See_goalAnd Not_see_corridor
See_goal
See_goal
See_goal
See_corridor
See_door
Not_See_goalAnd Not_see_corridor
See_door
See_corridor and not _See_goal
See_goal andBumper_on
stop
L1
L0Bumper
Sonar
Forward
Turn
Collide
RunAway
AvoidWander
s
I livelli di competenza L0 ed L1 permettono al robot di girovagare e nel contempo di evitare ostacoli. Nel caso in cui avoid genera una direzione (data dalla somma fra il vettore casuale di wander ed il vettore ostacolo), il modulo RunAway è soppresso.
Step 6 Sussunzione (1/6)
L2
L1
L0Bumper
Sonar
Forward
Turn
Collide
RunAway
AvoidWander
s
Extract_color
(blu)Telecamera Go_straight
s
corridor
Step 6 Sussunzione (2/6)
Il livello L2 permette al robot di attraversare il corridoio. Nel momento in cui lo schema percettivo Extract_color(blu) individua il corridoio, lo schema motorio Go_straight() dà al modulo avoid la direzione necessaria per attraversarlo sopprimendo il modulo wander. In tal caso il robot è in grado di attraversare il corridoio evitando eventuali ostacoli.
L3
L2
L1
L0Bumper
Sonar
Forward
Turn
Collide
RunAway
AvoidWander
s
Extract_color(blu)
Telecamera Go_straight
s
s
Extract_color(brown) Through_doordoor
corridor
Step 6 Sussunzione (3/6)
Il livello L3 permette al robot di attraversare una porta. Nel momento in cui lo schema percettivo Extract_color(brown) individua la porta, lo schema motorio Through_door dà al modulo avoid la direzione necessaria per attraversarla sopprimendo il modulo wander e Go_straight. In tal caso il robot è in grado di attraversare la porta evitando eventuali ostacoli.
L4
L3
L2
L1
L0Bumper
Sonar
Forward
Turn
Collide
RunAway
AvoidWander
s
Extract_color(blu)
Telecamera Go_straight
s
s
Extract_color(brown) Through_door
Extract_color (red)
Move_to_goal
s
Goal
door
corridor
Step 6 Sussunzione (4/6)
Il livello L4 permette al robot di individuare e dirigersi verso il goal (oggetto di colore rosso). Lo schema motorio Move_to_goal sopprime gli schemi
motori dei livelli sottostanti per poi terminare in avoid.
Step 6 Sussunzione (5/6)
Una struttura del genere non è del tutto sufficiente allo scopo. C’è il rischio che shakey abbandoni una stanza ancor prima di averla esplorata. Infatti lo strato di competenza L3 (attraversa la porta) sussume lo strato L1 (vaga nell’ambiente). Il problema può essere ovviato aggiungendo un ulteriore strato di competenza che ha lo scopo di inibire lo schema percettivo del behavior Through_door per n minuti permettendo a shakey di esplorare l’ambiente per almeno n minuti.
L4
L3
L2
L1
L0
L5
Bumper
Sonar
Forward
Turn
Collide
RunAway
AvoidWander
s
Extract_color(blu)
Telecamera Go_straight
s
s
Extract_color(brown) Through_door
Extract_color (red)
Move_to_goal
s
Goal
door
corridor
Clock
I
Step 6 Sussunzione (6/6)
I
Campi di potenziale (1/13)
A differenza dell’architettura a sussunzione non c’è un behavior che vince su tutti ma si tratta di una vera e propria fusione di più behaviors individuali che richiedono, per la loro realizzazione, un metodo generale di rappresentazione delle azioni prodotte. Implementando ciascun behavior individuale come uno schema è possibile ottenere il risultato richiesto come somma vettoriale dei vettori attuativi che ciascun behavior produce in risposta a particolari e ben specificati pattern percettivi. Per generare tali vettori si fa uso della tecnica generale dei campi di potenziale.
Le architetture behavior-based che utilizzano i campi di potenziale assumono che l'azione motoria di un behavior sia rappresentabile con un vettore. Analogamente a quanto avviene per i vettori di forza della meccanica, si suppone che tali vettori siano derivabile da un campo di potenziale. Come tutti i vettori, anche nel caso della risposta di un behavior, la rappresentazione è ottenuta assegnandone intensità e direzione.
Possiamo prevedere i seguenti campi di potenziale primitivi la cui combinazione può produrre campi di complessità arbitraria.
Si è fatta l'assunzione che l'intensità dei campi di potenziale in ogni punto del piano sia, in generale, una funzione che dipende dalla distanza relativa del robot dall'oggetto in questione e dal profilo d'intensità. Si considerino, allora, i behaviors elencati nel seguito, i cui schemi motori sono implementati con campi di potenziale particolarmente semplici e che danno origine alla risposta del caso.
(2/13)
Campo repulsivo
Campo uniforme
Campo perpendicolare
Campo attrattivo
Move-to-goalSi tratta di un Behavior elementare con un attrattore che definisce l'obiettivo da raggiungere seguendo la direzione phigoal con una velocità proporzionale alla
distanza dallo stesso, che potrebbe essere pesata G in funzione del tipo di obiettivo.
NoiseQuesto behavior permette al robot di uscire da eventuali punti morti grazie ad una risposta costante in intensità e ad una direzione che viene cambiata ogni p secondi cosicchè tale consistenza determina la persistenza della direzione. Ne risulta un behavior elementare di wandering.
Vdirection = Φgoal
Vmagnitude =
Vdirection = direzione casuale cambiata
ogni p secondi
Vmagnitude = valore fissato di guadagno
D dper
D dper 0
GD
d
(3/13)
AvoidPermette l'allontanamento da ostacoli fissi che possono risultare pericolosi, evitando in questo modo la collisione. Con questo behavior il robot si allontana da un ostacolo con velocità linearmente decrescente all'aumentare della distanza da esso. Tale azione repulsiva è percepita da un appropriato sensore di distanza (range finder) fino ad una distanza massima D dall'ostacolo. Si noti, comunque, che D non deve necessariamente coincidere con il raggio d'azione del sensore. Ovviamente il valore del campo dipende dal valore corrente della distanza d dall'ostacolo.
Vdirection=180°
D dper
D dper
)(
0
GD
dDVmagnitude =
(4/13)
Move-aheadSi tratta di un behavior elementare che permette l'avanzamento nella direzione phibussola
indicata dalla bussola con velocità costante c.
Stay-on-pathIl behavior in questione costringe il movimento del robot verso il centro di una corsia, strada o corridoio per cui la traiettoria del robot tende a stabilizzarsi lungo il suo asse mediano. Nel calcolo dell'intensità del campo (velocità) bisogna tener conto della larghezza W del cammino, la distanza d dal centro, il guadagno G sul cammino contrapposto a quello P fuori di esso.
)2/( dper
(W/2) dper
2/
WGW
d
PVmagnitude
Vdirection = In direzione della linea centrale.
Vdirection = Φbussola
Vmagnitude = C
W
(5/13)
A questo punto vediamo come i vari behavior primitivi presentati devono essere fusi per ottenere un behavior più astratto.
Wander
Per ottenere il behavior wander infatti si può pensare di sommare le uscite dei seguenti tre behavior primitivi:
Noise
Avoid
timer
sonar
Wander
Σ
Move to goaltelecamera
(6/13)
Pseudocodice dei behavior primitivi di Wander
Noise
Vector Noise () { Double G; Double angle; Vector V; angle = random_percept(p); // schema percettivo V = pfield_noise(angle,G); // schema motorio return V;}
Vector pfield_noise (angle,G) { V.magnitude = C*G; V.direction = angle; return V; }
double random_percept (p) { for time=p downto 1 do { } return random(); }
(7/13)
Schema motorio Schema percettivo
AvoidVector Avoid () { double distanza; double G; Vector V; double D;
D = sfera di influenza dell’ostacolo; distanza = read_sonar(); // schema percettivo V = pfield.repulsive(distanza,G,D); // schema motorio return V;}
Vector pfield.repulsive (distanza,G,D) { Vector V; V.magnitude=V.direction=0; If distanza <= D { V.magnitude = ((D-d)*G)/D ; V.direction = 180°; } return V; }
(8/13)
Schema motorio
Move to goalVector move to goal () { centroide position; Vector V; double G; centroide = extract_color(red); // schema percettivo V = pfield.actraction (centroide,G); // schema motorio return Voutput;}
Vector pfield.actration(centroide,G) {V.magnitude = V.direction=0;V.magnitude = linear_dropoff(goal_strength)*G;V.direction = goal_angle; }return V; }
centroide extract_color(goal_color) { if not_see(goal_color) then{ Centroide.goal_angle=0; Centroide.goal_strength =0; else …
} return centroide; }
type def struct {
double goal_angle
double goal_strength } centroide
(9/13)
Schema motorio Schema percettivo
Void Wander () { vector V, V1,V2,V3; While (robot==on) { V1 = noise (); V2 = move_to_goal(); V3 = Avoid(); V= SumVectors(V1,V2,V3); Turn (V.direction); Forward(V.magnitude); }}
Infine avremo che i precedenti tre behaviors andranno fusi mediante la funzione di controllo del behavior astratto wander
(10/13)
Follow corriddor
Per ottenere il behavior follow corridor si può pensare di sommare le uscite dei seguenti cinque behavior primitivi:
Stay on path
Move ahead
Lateral-sonar
sonar
Follow corridor
ΣAvoid
Move to goal
Noise
telecamera
timer
bussola
(11/13)
Throught door
Per ottenere il behavior Throught door si può pensare di sommare le uscite dei seguenti due behavior primitivi:
sonar
Throught door
Σ
Avoid
telecamera Go throught door
(12/13)
Noise
Avoid
timer
sonar
Wander
Σ
Move to goaltelecamera
Stay on path
Move ahead
Lateral-sonar
sonar
Follow corridor
ΣAvoid
Move to goal
Noise
telecamera
timer
bussola
sonar
Throught door
Σ
Avoid
telecamera Go throught door
Action
C
O
O
R
D
I
N
A
T
O
R
(13/13)
Conclusioni
Nello sviluppo di una versione di shakey reattiva, le principali difficoltà riscontrate sono state l’individuazione dei behavior primitivi e come coordinare gli stessi. Infatti mentre nel paradigma gerarchico ad ogni percezione del mondo corrispondeva una pianificazione e poi un’azione, qui più behavior possono essere attivi contemporaneamente e teoricamente conflittuali. Mentre nell’architettura a sussunzione la coordinazione è risolta con l’uso di livelli di competenza basati su una strategia del “vincitore prende tutto”, in quella a campi di potenziale la coordinazione è risolta per mezzo del principio di sovrapposizione per cui l’azione emergente è meno facile da prevedere. Ne deriva che l’unico modo per essere certi del funzionamento è di provarlo sul campo.
Riferimenti
•Arkin R. , 1998. “Behavior-based robotics”
•Appunti del corso