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. Si passa quindi dal Al Sense Sense plan act act 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 Step 5 Raffinare ogni behavior (2/8) Di seguito è riportata una descrizione in termini di schema theory di ciascun behavior primitivo 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. Always_on bumper Collide Read_bumper() Stop_wheel() stop motor Schema percettivo Read_bumper() percetto Bumper_status Schema motorio stop_wheel(bumper_status) Step 5 Raffinare ogni behavior (3/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° Always_on Sonar RunAway Extract_distance() Turn() Inverti rotta Schema percettivo Extract_distance() Percetto (d,θ) Schema motorio Turn(d, θ) Step 5 Raffinare ogni behavior (4/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)) Always_on timer Wander Count_down() Direzione casuale Random_walk() Schema percettivo Count_down() Percetto Time_remaining Schema motorio Random_walk() Step 5 Raffinare ogni behavior (5/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. Always_on Sonar Wander Azioni motorie per seguire la direzione Avoid Feel_force() Avoid() Schema percettivo Feel_force() Percetto (d, θ) Schema motorio Avoid(d, θ) Step 5 Raffinare ogni behavior (6/8) 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. See_corridor telecamera Follow_corridor Extract_color() Go_straight() 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 (7/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. See_door telecamera Through_door Azioni motorie per attraversare la porta Extract_color() Through_door() Schema percettivo Extract_color(brown) Percetto c_x Schema motorio Through_door(c_x) Step 5 Raffinare ogni behavior (8/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. See_goal telecamera Move_to_goal Extract_color() Azioni motorie per raggiungere il goal Move_to_goal() Schema percettivo Extract_color(red) Percetto c_x Schema motorio Move_to_goal(c_x) Tabella dei behaviors Releaser Behaviour Always_on Collide() Always_on Runaway() Always_on Avoid() Not_See_Goal= Extract_color(red) See_door= Extract_color(brown) Wander() Through door Motor Scheme Percepts Perceptual scheme Stop_wheel(Bumper_status) Bumper_stat us Read_bumper() Turn(d,θ) (d,θ) Extract_Distance(sonar) Avoid(d,θ) (d,θ) Feel_force(wander,sonar) Random_walk(Time_remaining) Time_remain ing Countdown() 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 stop See_goal and Bumper_on See_goal Move to goal See_goal See_goal Not_See_goal And Not_see_corridor Start Through door See_corridor See_goal See_door Not_See_goal And Not_see_corridor See_door Wander Follow corridor See_corridor and not _See_goal Step 6 Sussunzione (1/6) 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. L1 Wander Avoid Sonar RunAway Bumper Collide s Turn L0 Forward 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. L2 L1 Telecamera Wander Extract_color (blu) s Go_straight corridor Avoid Sonar RunAway Bumper Collide s Turn L0 Forward 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. Extract_color (brown) L3 Telecamera L2 L1 L0 Wander Extract_color (blu) s door Through_door Go_straight s corridor Avoid Sonar RunAway Bumper Collide s Turn Forward 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. Extract_color (red) L4 Extract_color (brown) L3 L2 L1 L0 Telecamera Wander Extract_color (blu) s Move_to_goal Goal door Through_door s Go_straight s corridor Avoid Sonar RunAway Bumper Collide s Turn Forward 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. Step 6 Sussunzione L5 (6/6) Clock Extract_color (red) L4 L3 I Telecamera L2 L1 Wander I Extract_color (brown) Extract_color (blu) s Move_to_goal Goal door Through_door s Go_straight s corridor Avoid Sonar RunAway Bumper Collide s Turn L0 Forward 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. (2/13) Possiamo prevedere i seguenti campi di potenziale primitivi la cui combinazione può produrre campi di complessità arbitraria. Campo uniforme Campo perpendicolare Campo attrattivo Campo repulsivo 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. (3/13) Move-to-goal Si 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. Vdirection = Φgoal Vmagnitude = per d D 0 d D G per d D Noise Questo 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 = direzione casuale cambiata ogni p secondi Vmagnitude = valore fissato di guadagno (4/13) Avoid Permette 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° Vmagnitude = per d D 0 (D d ) D G per d D Move-ahead (5/13) Si tratta di un behavior elementare che permette l'avanzamento nella direzione phibussola indicata dalla bussola con velocità costante c. Vdirection = Φbussola Vmagnitude = C Stay-on-path Il 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. W Vdirection = In direzione della linea centrale. per d (W/2) P Vmagnitude d W / 2 G per d (W / 2) (6/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: Wander timer sonar telecamera Noise Avoid Move to goal Σ 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; } Schema motorio Vector pfield_noise (angle,G) { V.magnitude = C*G; V.direction = angle; return V; } Schema percettivo double random_percept (p) { for time=p downto 1 do { } return random(); } (7/13) (8/13) Avoid Vector Avoid () { double distanza; double G; Vector V; double D; D = sfera di influenza dell’ostacolo; distanza = read_sonar(); V = pfield.repulsive(distanza,G,D); return V; } Schema motorio 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; } // schema percettivo // schema motorio (9/13) Move to goal Vector move to goal () { centroide position; Vector V; double G; type def struct { centroide = extract_color(red); V = pfield.actraction (centroide,G); motorio return Voutput; } // schema percettivo // schema double goal_angle double goal_strength } centroide Schema motorio Vector pfield.actration(centroide,G) { V.magnitude = V.direction=0; V.magnitude = linear_dropoff(goal_strength)*G; V.direction = goal_angle; } return V; } Schema percettivo centroide extract_color(goal_color) { if not_see(goal_color) then{ Centroide.goal_angle=0; Centroide.goal_strength =0; else … } return centroide; } (10/13) Infine avremo che i precedenti tre behaviors andranno fusi mediante la funzione di controllo del behavior astratto wander 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); } } Follow corriddor (11/13) Per ottenere il behavior follow corridor si può pensare di sommare le uscite dei seguenti cinque behavior primitivi: Follow corridor Lateral-sonar Stay on path bussola Move ahead sonar telecamera timer Avoid Move to goal Noise Σ Throught door (12/13) Per ottenere il behavior Throught door si può pensare di sommare le uscite dei seguenti due behavior primitivi: Throught door sonar Avoid Σ telecamera Go throught door Wander timer sonar telecamera (13/13) Noise Avoid Σ C Move to goal O O Follow corridor Lateral-sonar Stay on path bussola Move ahead R D sonar Σ Avoid telecamera timer I N Move to goal A T Noise O Throught door sonar R Avoid Σ telecamera Go throught door Action 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