3.8.1
Comandi di Debug
Si riporta di seguito un elenco riassuntivo di alcuni comandi che CLIPS mette a disposizione e che si rivelano molto utili in fase di debug:
(facts) produce la stampa della Fact-List, è fondamentale nel debug del Sistema Cognitivo, in questo modo ci è permesso di “sbirciare” nella mente del robot e scoprire, nell’istante dell’esecuzione del comando, quali sono i fatti di cui è conoscenza. In questi fatti va ricordato che sono comprese sia tutte le informazioni in entrata dai sensori che le informazioni di secondo livello, risultato delle inferenze dovute al motore di regole.
(rules) produce una stampa della lista che riporta tutte le regole correttamente implementate nel robot. E’ utile allo sviluppatore per capire ad esempio se una regola non è stata definita correttamente, motivo sufficiente a non farla comparire nella lista. Se il comando (facts) ci permette di fare una fotografia della Working Memory, il comando (rules) ci consente di avere in mano un istantanea della Knowledge Base del robot.
(agenda) è sicuramente il comando più utile allo sviluppatore per comprendere l’andamento del brain. Il comando (agenda) restituisce una stampa in cui si può leggere la lista di tutte le regole che sono in attesa di essere eseguite, i fatti (indicati con i rispettivi Fact-Index) che ne hanno determinato l’attivazione, e
3.8. COMANDI FONDAMENTALI DI CLIPS 57
la salienza di ogni regola. Questo comando ci da una chiara idea di come sta operando l’Inference Engine ed è il mezzo perfetto per conoscere le variazioni del motore di regole in seguito a un cambio di Conflict Resolution Strategy. Un esempio della stampa prodotta da questo comando è riportata nel codice 3.12.
Codice 3.12: Stampa dell’Agenda.
100 i n t r u s i v e : f-7 , f-1 , f-2 100 l o o k r u l e _ l o n g d i s t a n c e : f-6 , f-1 , f-2 100 l o o k r u l e _ l o n g d i s t a n c e : f-5 , f-1 , f-2 100 l o o k r u l e _ d i s t a n c e : f-4 , f-1 , f-2 100 l o o k r u l e _ l o n g d i s t a n c e : f-3 , f-1 , f-2 0 l o o k r u l e _ a n g l e : f-7 , f-1 0 l o o k r u l e _ r i s e h a n d : f-6 , f-1 , f-2 0 l o o k r u l e _ a n g l e : f-6 , f-1 0 l o o k r u l e _ a n g l e : f-4 , f-1 0 l o o k r u l e _ r i s e h a n d : f-3 , f-1 , f-2 0 l o o k r u l e _ a n g l e : f-3 , f-1 For a t o t a l of 11 a c t i v a t i o n s .
3.8.2
Altri comandi essenziali
(run) è il comando che fa partire l’esecuzione delle regole nell’ordine disposto nell’Agenda. Un singolo (run) equivale a una singola esecuzione, questa modalità è utile in fase di prova del sistema, chiaramente nel momento in cui si dovrà collegare il blocco cognitivo con il blocco sensoriale e di attuazione, e renderlo autonomo, questo comando dovrà essere eseguito continuamente, in
loop.
(reset) è il comando che va lanciato prima di qualsiasi altro. La sua azione consiste nello svuotare completamente la memoria e inizializzarla con tutte le definizioni implementate nel codice del brain. In questo procedimento rimangono intatte tutte le regole che sono state definite. Questo comando viene utilizzato per inizializzare il sistema, e non va eseguito una volta che il robot è acceso, pena la perdita di tutti i dati presenti nella Working Memory ad eccezione dei fatti definiti nei (deffacts) che vengono reinseriti nella Fact-List.
58 CAPITOLO 3. CLIPS: IL MOTORE DEL SISTEMA COGNITIVO
(clear) è un comando simile a (reset) ma ha effetti molto più distruttivi. Si potrebbe dire che (clear) azzera completamente il sistema, e con questo si intende non solo la lista dei fatti, ma anche tutte le regole che sono state definite. Ha effetti devastanti sia sulla Working Memory che sulla Knowledge
Base quindi va utilizzato solo in casi di emergenza, e in ogni caso è sempre
preferibile spegnere il robot e lanciare un (reset) prima di rimettere il brain in funzione.
Capitolo 4
Design del Sistema Cognitivo
Sulla base delle conoscenze apprese riguardo al software CLIPS e alle sue funzioni principali, presentate nel capitolo 3, questo capitolo tratterà la progettazione del Sistema Cognitivo finalizzato a conferire al Robot Sociale FACE le abilità necessarie ad eseguire i processi decisionali tipici di un modello attentivo ispirato a quello umano. Questo processo decisionale terrà conto di alcuni aspetti sociali fondamentali in una normale interazione tra esseri umani, e dovrà gestire contemporaneamente il controllo dell’espressione del robot in relazione agli eventi che si presenteranno nel contesto circostante.
Si partirà da alcune osservazioni sul paradigma di programmazione ibrido deciso per il sistema e dalla presentazione dell’interfaccia grafica del servizio I-CLIPS Brain che ne facilita l’uso, per poi passare al processo creativo che ha portato a delineare il
design del Sistema Cognitivo e del motore di regole al suo interno (Clips Engine).
4.1
Un paradigma di programmazione ibrido
Si è parlato fino a questo punto del linguaggio di programmazione a eventi e di come questo sia particolarmente conveniente e appropriato nello sviluppo di un Sistema Cognitivo. Bisogna ricordare però che tutti i servizi facenti parte dell’architettura del sistema sono stati scritti tramite Visual Studio in linguaggio C#.
L’utilizzo di un paradigma di programmazione ibrido porta con sé dei vantaggi non indifferenti.
Ci sono infatti ambienti in cui è richiesta una grossa potenza di calcolo numerico, non solo per la quantità dei dati ma anche perché in questi ambienti l’informazione di base da elaborare è costituita, appunto, da numeri. Questo vale soprattutto per
60 CAPITOLO 4. DESIGN DEL SISTEMA COGNITIVO
quella parte di sistema che definiamo di basso livello. Basti pensare ai dati ricevuti dai sensori e quelli che devono essere processati per il controllo dell’attuazione. Finché ci manteniamo a questo livello l’informazione sarà necessariamente costituita da coordinate spaziali, angoli, intensità del suono e valori di potenza nella parte di percezione; mentre corrisponderà a valori di corrente e tensione da impartire ai motori per quanto riguarda l’attuazione. Certo CLIPS non è stato progettato per compiere operazioni di trigonometria, tanto meno per gestire trentadue servomotori. C# invece è un linguaggio sicuramente più adeguato a queste mansioni.
Quando però queste informazioni, ad esempio in metri o decibel, devono rag- giungere il “cervello” ed essere elaborate inizialmente come distanza e volume, per poi diventare concetti come “tu sei troppo vicino” o “quel soggetto sta parlando” allora ecco che un paradigma di programmazione procedurale diventa obsoleto e inappropriato. Qui deve entrare in gioco CLIPS. Una volta elaborate le informazioni mantenendo un alto livello di astrazione si deve poi ritornare ai numeri, al linguaggio procedurale, quello necessario a gestire contemporaneamente e in maniera fluida la posizione di un grande numero di motori.
Questo è chiaro, e oltre a ricordare estremamente la fisiologia umana apporta dei grandi vantaggi a livello di costo computazionale, ma ci sono anche degli svantaggi, o meglio, delle complicazioni. Non è affatto semplice far dialogare tra loro due linguaggi diversi, specie all’interno di cicli di lavoro che hanno una frequenza molto elevata.
La possibilità di includere il linguaggio CLIPS all’interno di una simile architettura è garantita da due metodi con i quali viene gestito il flusso dell’informazione: il primo è il sistema di pacchetti XML gestito dalla rete YARP, il secondo è la libreria
CLIPSNet Library, una libreria .NET sviluppata nel Marzo del 2008 e messa a
disposizione gratuitamente dagli autori del software, la si può scaricare dal sito ufficiale1. La CLIPSNet Library si occupa di fare da tramite tra i due diversi software
utilizzati (Visual Studio e CLIPS) tramite l’utilizzo dei wrapper.
Si può così asserire dall’ambiente C# dei fatti nell’ambiente CLIPS, e vice versa si può richiamare dall’ambiente CLIPS una funzione scritta in C# all’interno di un servizio esterno.
La CLIPSNet Library prevede una sintassi leggermente diversa da quella originale di CLIPS, di cui si riporta un esempio nel codice 4.1, in questo ci viene in aiuto l’interfaccia grafica implementata nel servizio.