%
% RobotIntelligence.tex
%

\documentclass{beamer}

\usepackage{beamerthemeshadow}
\usepackage{listings}
\usepackage{graphics}
\usepackage{times}
\usepackage{algorithm2e}

\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade}
% \usepackage{amsmath,amssymb} \usepackage[latin1]{inputenc}
% \usepackage{colortbl}
\usepackage[english]{babel}

\newcommand{\erlang}{
\lstset{language=Prolog, basicstyle=\ttfamily\footnotesize,frame=trBL,
  frameround=fttt}}

\newcommand{\erlangsmall}{
\lstset{language=Prolog, basicstyle=\ttfamily\scriptsize,frame=trBL,
  frameround=fttt}}

\newcommand{\clang}{
\lstset{language=Prolog, basicstyle=\ttfamily\footnotesize,frame=trBL,
  frameround=fttt}}

\newcommand{\clangsmall}{
\lstset{language=Prolog, basicstyle=\ttfamily\scriptsize,frame=trBL,
  frameround=fttt}}

\newcommand{\clangtiny}{
\lstset{language=Prolog, basicstyle=\ttfamily\tiny,frame=trBL,
  frameround=fttt}}

\newcommand{\N}{\vskip 0.3 cm}
\newcommand{\n}{\vskip 0.2 cm}
\newcommand{\TAB}{\hskip 4 cm}
\newcommand{\tab}{\hskip 0.6 cm}


\erlang

\newcommand\blue{\color[rgb]{0,0,1}}
\newcommand\green{\color[rgb]{0,0.5,0}}
\newcommand\red{\color[rgb]{1,0,0}}
\newcommand\black{\color[rgb]{0,0,0}}

\newcommand\tape[9]{
\framebox{#1}
\framebox{#2}
\framebox{#3}
\framebox{#4}
\framebox{#5}
\framebox{#6}
\framebox{#7}
\framebox{#8}
\framebox{#9}}

\newcommand\two[2]{
\framebox{#1}
\framebox{#2}}

\newcommand\six[6]{
\framebox{#1}
\framebox{#2}
\framebox{#3}
\framebox{#4}
\framebox{#5}
\framebox{#6}}

\newcommand\three[3]{
\framebox{#1}
\framebox{#2}
\framebox{#3}}

\title[Intelligenza di un robot autonomo]{Intelligenza di un robot autonomo\\
Comportamento, ragionamento, pianificazione}
%%

\author[Corrado Santoro]
       {Corrado Santoro}

\date{ }

\institute[University of Catania]
  {
    \begin{center}
      \textbf{\red{}ARSLAB - Autonomous and Robotic Systems Laboratory}\\
      Dipartimento di Matematica e Informatica - Universit\`{a} di Catania, Italy\\
      \texttt{santoro@dmi.unict.it}\\
      \includegraphics[width=60pt]{robotEscher_Eura_blur.eps}\\%%~~~~\includegraphics[width=80pt]{logo_dmi.png}
      Programmazione Sistemi Robotici\\
    \end{center}
  }



\begin{document}


%%
\frame{\titlepage}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Comportamento, ragionamento, pianificazione}
%%
%%
\begin{block}{}
\begin{itemize}
%%
\item\footnotesize{}I modelli/metodi/algoritmi studiati finora ci
  permettono di:
%%
  \begin{itemize}
  \item\footnotesize{}\red{}Comandare il moto degli attuatori sulla base di un
    certo modello cinematico
  \item\footnotesize{}\red{}Tenere presente i vincoli dell'ambiente e creare i
    percorsi opportuni
  \end{itemize}
  \n
%%
\item Tuttavia i vari movimenti devono essere \textbf{coordinati} tra loro
  allo scopo di eseguire compiti pi\`{u} complessi
  \n
%%
\item L'insieme dei movimenti coordinati pu\`{o} poi far parte di una
  \textbf{\red{}strategia} che consente al robot di portare a termine un
  obiettivo ben preciso
  \n
%%
\item Tuttavia, dato un certo \textbf{\red{}obiettivo}, \`{e} possibile esistano
  \textbf{differenti strategie}: occorre dunque \textbf{\red{}pianificare}
  la strategia pi\`{u} adatta in quel momento specifico
%%
\end{itemize}
\end{block}
%%
%%
\end{frame}




%%
\begin{frame}[fragile]
%%
  \frametitle{Il ciclo dell' ``alto livello''}
%%
%%
\begin{block}{}
\begin{enumerate}
%%
\item Dato un certo \textbf{\red{}obiettivo}\N
%%
\item\textbf{\red{}Percepisco} l'ambiente per determinarne lo \textbf{stato} e
  verificare che l'obiettivo non sia stato effettivamente raggiunto\N
%%
\item Determino la \textbf{\red{}strategia} (insieme di azioni) che
  potrebbe portare al raggiungimento dell'obiettivo\N
%%
\item\textbf{\red{}Eseguo} le relative azioni\N
%%
\item Ritorno allo step 1
%%
\end{enumerate}
\end{block}
%%
%%
\end{frame}





%%
\begin{frame}[fragile]
%%
  \frametitle{Percezione e Stato dell'Ambiente}
%%
%%
\begin{block}{}
\Large\centering{}~\\Percezione e Stato dell'Ambiente\\~\\
\end{block}
%%
\end{frame}




%%
\begin{frame}[fragile]
%%
  \frametitle{Percezione e Stato}
%%
%%
\begin{block}{}
\begin{itemize}
%%
\item L'ambiente \`{e} un sistema dinamico a tutti gli effetti\N
%%
\item Tuttavia, durante la programmazione del comportamento di un robot,
  non siamo interessati agli aspetti prettamente ``controllistici'' (funzione di
  trasferimento, modello nello spazio di stato, etc.) ...\N
%%
\item ... ma sicuramente ad aspetti del tipo {\red{}``com'\`{e} fatto l'ambiente''} o
  {\red{}``cosa accade in questo preciso momento''}\N
%%
\item\textbf{\red{}Modellare l'ambiente} diventa pertanto uno degli aspetti
  fondamentale della
  programmazione del comportamento di un robot\N
%%
\item La modellazione dell'ambiente \`{e} inoltre strettamente legata alla
  tipologia di \textbf{\red{}sensori} impiegati per lo scopo
%%
\end{itemize}
\end{block}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Ambiente e Percezione}
%%
%%
\begin{block}{}
\begin{itemize}
%%
\item\footnotesize{}Un ambiente fisico \`{e} pervaso da:
%%
  \begin{itemize}
    %%
  \item\footnotesize{}\textbf{\red{}oggetti inanimati}, \underline{incapaci di azioni
    autome},
    %%
  \item\textbf{\red{}oggetti animati} (umani, altri robot),
    dotati di \underline{autonomia}
    %%
  \end{itemize}\N
%%
\item Essi sono caratterizzati da opportune
    \textbf{propriet\`{a}} quali \emph{forma}, \emph{colore},
    \emph{posizione}, etc.\N
%%
\item Alcune propriet\`{a} sono \textbf{immutabili} (\emph{forma},
  \emph{colore}), altre possono variare nel tempo (\emph{posizione})
%%
%%
\end{itemize}
\end{block}
%%
\begin{block}{}
\begin{itemize}
\item\footnotesize{}\textbf{Modellare l'ambiente} implica definire delle
  \textbf{\red{}entit\`{a} informatiche} (classi, oggetti, variabili, etc.)
  in grado di rappresentare gli oggetti dell'ambiente e le relative
  propriet\`{a}\N
%%
\item Tali informazioni \textbf{\red{}devono essere percepibili} (determinabili)
  dai sensori scelti per il robot
%%
\end{itemize}
\end{block}
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Esempio: Il Mondo dei Blocchi}
%%
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}{\red{}Un ambiente \`{e} pervaso da solidi di forma, colore e
  dimensioni diverse}
\item Propriet\`{a}:
\begin{itemize}
\item\footnotesize{}\textbf{\red{}Forma:} \emph{prisma, sfera, cilindro}
\item\textbf{\red{}Colore:} \emph{giallo, rosso, verde, nero, bianco}
\item\textbf{\red{}Dimensioni:} \emph{piccolo, grande}
\item\textbf{\red{}Posizione:} $(x,y,z)$
\end{itemize}
\end{itemize}
\end{block}
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef enum { PRISM, SPHERE, CYLINDER } t_shape;
typedef enum { YELLOW, RED, GREEN, BLACK, WHITE } t_color;
typedef enum { SMALL, LARGE } t_size;
typedef struct {
  t_shape shape;
  t_color color;
  t_size size;
  float x, y, z;
} t_block;

t_block my_blocks[....];
\end{lstlisting}%%
\end{block}
%%
\end{frame}




%%
\begin{frame}[fragile]
%%
  \frametitle{Esempio: Il Mondo dei Blocchi}
%%
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}{\red{}Se supponiamo che i blocchi possono trovarsi uno
  sopra l'altro \`{e} necessario modellare anche questa caratteristica}:
\begin{itemize}
\item\footnotesize{}attraverso una \textbf{funzione booleana} che si basa sulle
  coordinate dei blocchi, ...
\end{itemize}
\end{itemize}
\end{block}
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef enum { PRISM, SPHERE, CYLINDER } t_shape;
typedef enum { YELLOW, RED, GREEN, BLACK, WHITE } t_color;
typedef enum { SMALL, LARGE } t_size;
typedef struct {
  t_shape shape;
  t_color color;
  t_size size;
  float x, y, z;
} t_block;

t_block my_blocks[....];

bool upon(t_block * block1, t_block * block2)
{
   //....
}
\end{lstlisting}%%
\end{block}
%%
\end{frame}



%%
\begin{frame}[fragile]
%%
  \frametitle{Esempio: Il Mondo dei Blocchi}
%%
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}{\red{}Se supponiamo che i blocchi possono trovarsi uno
  sopra l'altro \`{e} necessario modellare anche questa caratteristica}:
\begin{itemize}
\item\footnotesize{} ... oppure aggiungendo \textbf{un'ulteriore
  propriet\`{a}} che rappresenta il
  link tra due blocchi
\end{itemize}
\end{itemize}
\end{block}
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef enum { PRISM, SPHERE, CYLINDER } t_shape;
typedef enum { YELLOW, RED, GREEN, BLACK, WHITE } t_color;
typedef enum { SMALL, LARGE } t_size;
typedef struct t_block {
  t_shape shape;
  t_color color;
  t_size size;
  float x, y, z;
  struct t_block * upon_block;
} t_block;

t_block my_blocks[....];

bool upon(t_block * block1, t_block * block2)
{
  return block1->upon_block == block2;
}
\end{lstlisting}%%
\end{block}
%%
\end{frame}






%%
\begin{frame}[fragile]
%%
  \frametitle{Esempio: Il Mondo dei Blocchi}
%%
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}{\red{}Se i blocchi vanno \textbf{catturati} \`{e}
  necessario modellare anche questo tipo di operazione}:
\begin{itemize}
\item\footnotesize{}utilizzando \textbf{due array}, uno per i blocchi non
  catturati ed un per quelli catturati ....
\end{itemize}
\end{itemize}
\end{block}
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef enum { PRISM, SPHERE, CYLINDER } t_shape;
typedef enum { YELLOW, RED, GREEN, BLACK, WHITE } t_color;
typedef enum { SMALL, LARGE } t_size;
typedef struct t_block {
  t_shape shape;
  t_color color;
  t_size size;
  float x, y, z;
  struct t_block * upon_block;
} t_block;

t_block free_blocks[....], captured_blocks[....];
\end{lstlisting}%%
\end{block}
%%
\end{frame}
%%






%%
\begin{frame}[fragile]
%%
  \frametitle{Esempio: Il Mondo dei Blocchi}
%%
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}{\red{}Se i blocchi vanno \textbf{catturati} \`{e}
  necessario modellare anche questo tipo di operazione}:
\begin{itemize}
\item\footnotesize{}... oppure aggiungendo un  \textbf{booleano} che indica
  se il blocco \`{e} stato catturato
\end{itemize}
\end{itemize}
\end{block}
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef enum { PRISM, SPHERE, CYLINDER } t_shape;
typedef enum { YELLOW, RED, GREEN, BLACK, WHITE } t_color;
typedef enum { SMALL, LARGE } t_size;
typedef struct t_block {
  t_shape shape;
  t_color color;
  t_size size;
  float x, y, z;
  struct t_block * upon_block;
  bool captured;
} t_block;

t_block my_blocks[....];
\end{lstlisting}%%
\end{block}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Rappresentazione ``Object-Oriented''}
%%
\begin{block}{}
%%
\begin{itemize}
%%
\item\footnotesize{}Poich\`{e} l'ambiente fisico \`{e} pervaso da
  \textbf{oggetti}, una rappresentazione spesso usata \`{e} basata sul
  modello \textbf{\red{}object-oriented}\N
%%
\item In realt\`{a} l'\emph{object-orientation} \`{e} nata nel 1965,
  all'interno dell'AI,  proprio per poter rappresentare i ``mondi'' dei sistemi
  artificiali\N
%%
\end{itemize}
\end{block}
%%
\begin{center}
\includegraphics[scale=0.3]{blocks_onto.eps}
\end{center}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Le Ontologie}
%%
\begin{block}{}
%%
\begin{itemize}
%%
\item\footnotesize{}Il modello \textbf{object-oriented} permette non solo
  di rappresentare ci\`{o} di cui \`{e} composto l'ambiente ma anche le
  \textbf{\red{}relazioni} tra le entit\`{a}
%%
\item\footnotesize{}Il risultato \`{e} una \textbf{mappa concettuale},
  denominata \textbf{\red{}ontologia}, che
  rappresenta (nel modo pi\`{u} fedele possibile) l'ambiente di
  riferimento/il contesto in cui si opera
%%
\end{itemize}
\end{block}
%%
\begin{center}
\includegraphics[scale=0.3]{blocks_onto_2.eps}
\end{center}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Le ``Basi di Conoscenza'' (Knowledge Base)}
%%
\begin{block}{}
%%
\begin{itemize}
%%
\item\footnotesize{}Qualunque tipo di rappresentazione deve essere
  ``interrogabile'' al fine di consentire una forma pi\`{u} o meno
  complessa di ragionamento
%%
\item Ad esempio, se il robot volesse \textbf{\red{}catturare
  l'oggetto verde che si trova sul tavolo bianco}, esso dovr\`{a} essere in
  grado di risalire all'oggetto (istanza di \texttt{Block}) relativo per
  poterlo poi raggiungere
%%
\item Data un'ontologia (o una rappresentazione analoga), le informazioni
  devono essere organizzate in un'apposita \textbf{base di conoscenza}
  (\textbf{\red{}knowledge base}) che possa essere interrogabile facilmente
%%
\end{itemize}
\end{block}
%%
\begin{center}
\includegraphics[scale=0.2]{blocks_onto_2.eps}
\end{center}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Le ``Basi di Conoscenza'' (Knowledge Base)}
%%
\begin{block}{}
%%
\begin{itemize}
%%
\item\footnotesize{}Una \textbf{Knowledge Base} \`{e} pertanto una
  struttura dati che permette di memorizzare la \textbf{\red{}conoscenza
    che il robot possiede sull'ambiente} di riferimento\N
%%
\item E' costituita da \textbf{concetti} che il robot \textbf{\red{}ritiene
  veri} (credenze, beliefs)\N
%%
\item Deve consentire la \textbf{\red{}interrogazione},
  \textbf{\red{}navigazione} e l'\textbf{\red{}inferenza} di nuova conoscenza
%%
\end{itemize}
\end{block}
%%
\begin{center}
\includegraphics[scale=0.2]{blocks_onto_2.eps}
\end{center}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Rappresentazione tramite logica del primo ordine}
%%
\begin{block}{}
%%
\begin{itemize}
%%
\item\footnotesize{}Il modello \textbf{logico} costituisce un'alternativa
  per la rappresentazione della conoscenza\N
%%
\item E' basato sulla definizione di \textbf{\red{}fatti} (credenze,
  beliefs) rappresentati da \textbf{\red{}predicati in logica del primo ordine}\N
%%
\item L'inferenza/interrogazione in questi sistemi si basa su
  \textbf{\red{}formule logiche}\N
%%
\item Esistono linguaggi di programmazione, come il \textbf{\red{}Prolog}
  supportano direttamente questo tipo di modello
\end{itemize}
\end{block}
%%
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Rappresentazione tramite logica del primo ordine}
%%
%%
\begin{block}{Esempio}
%%
\begin{itemize}
%%
\item\footnotesize{}Cilindro, prisma e sfera sono dei blocchi:\\
  \texttt{\textbf{block(cylinder), block(prism), block(sphere)}}\N
%%
\item Il cilindro \`{e} rosso, il prisma \`{e} bianco:\\
  \texttt{\textbf{color(cylinder, red), color(prism, white)}}\N
%%
\item Il cilindro \`{e} sul tavolo nero, il prisma \`{e} sul tavolo verde:\\
  \texttt{\textbf{upon(cylinder, black\_desk), upon(prism, green\_desk)}}\N
%%
\item{\red{}Qual \`{e} l'oggetto sul tavolo verde e qual \`{e} il suo
  colore?}:\\
\texttt{\textbf{upon({\red{}Obj}, green\_desk) and color({\red{}Obj},
    {\red{}Col})}}\N
%%
\item{\red{}Quali sono gli oggetti bianchi sul tavolo verde?}:\\
\texttt{\textbf{upon({\red{}Obj}, black\_desk) and color({\red{}Obj}, white)}}
%%
\end{itemize}
%%
\end{block}
%%
\end{frame}
%%







%%
\begin{frame}[fragile]
%%
  \frametitle{Percezione, Rappresentazione,\\Obiettivi, Pianificazione}
%%
%%
\begin{block}{}
\Large\centering{}~\\Percezione, Rappresentazione,\\Obiettivi, Pianificazione\\~\\
\end{block}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Percezione, Rappresentazione e Obiettivi}
%%
%%
\begin{itemize}
\item\footnotesize{}Un \textbf{obiettivo} rappresenta uno \textbf{\red{}stato
  dell'ambiente} che si desidera raggiungere
\item Un obiettivo pu\`{o} pertanto essere espresso tramite un predicato (o
  funzione booleana) sulle variabili che rappresentano l'ambiente
\end{itemize}
%%
\begin{block}{Il Mondo dei Blocchi}
\begin{itemize}
\item\footnotesize{}\textbf{Obiettivo:} \textbf{\red{}catturare tutti i blocchi}
\item L'obiettivo \`{e} raggiunto quando i campi \textbf{\texttt{captured}} di tutti
  gli elementi dell'array \textbf{\texttt{my\_blocks}} sono \texttt{true}
\end{itemize}
\end{block}
%%
%%
%%
\begin{block}{Possibile rappresentazione in C/C++}
\clangtiny%%
\begin{lstlisting}
typedef struct t_block {
  ....
  bool captured;
} t_block;

t_block my_blocks[....];

bool goal_done()
{
   for (i = 0; i < NUM_OF_BLOCKS; i++) if (!my_blocks[i].captured) return false;
   return true;
}
\end{lstlisting}%%
\end{block}
%%
\end{frame}






%%
\begin{frame}[fragile]
%%
  \frametitle{Obiettivi e sotto-obiettivi}
%%
%%
\begin{block}{}
\begin{itemize}
\item\footnotesize{}Raggiungere un obiettivo implica eseguire un certo
  insieme di azioni\N
%%
\item E tuttavia a volte un obiettivo cela, al suo interno, dei
  sotto-obiettivi\N
%%
\item{\red{}Esempio}: \textbf{\red{}catturare tutti i blocchi implica
  catturarli uno alla volta}\N
%%
\item Obiettivo: \textbf{catturare tutti i blocchi}\N
%%
\item Sotto-obiettivi: \emph{catturare la sfera}, \emph{catturare il
  cilindro}, \emph{catturare il prisma}, etc.\N
%%
\item I sotto-obiettivi non devono necessariamente essere eseguiti secondo
  una sequenza prefissata\N
%%
\item Tuttavia alcuni sotto-obiettivi potrebbero non essere fattibili
  (esempio: il cilindro non pu\`{o} essere catturato perch\`{e} c'\`{e} il
  prisma sopra)\N
%%
\item Occorre pertanto un processo di pianificazione/scelta dei
  sotto-obiettivi
%%
\end{itemize}
\end{block}
%%
%%
\end{frame}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Modello del processo di ragionamento e deliberazione}
%%
%%
\begin{center}
\includegraphics[scale=0.3]{deliberation_process.eps}
\end{center}
%%
%%
\end{frame}





%%
\begin{frame}[fragile]
%%
  \frametitle{Ragionamento e Deliberazione}
%%
%%
\begin{block}{}
\begin{itemize}
\item\footnotesize{}Il processo di deliberazione pu\`{o} essere pi\`{u} o
  meno complesso a seconda della complessit\`{a} dell'obiettivo da raggiungere\N
%%
\item Dal punto di vista computazionale pu\`{o} considerarsi un insieme di
  \textbf{\texttt{\red{}if}} su vari elementi della knowledge base\N
%%
\item Il risultato dei confronti determina poi il ``pezzo di codice'' che
  implementa le azioni da eseguire\N
%%
\item Il modello sottostante \`{e} sempre comunque assimilabile a un
  \textbf{\red{}automa a stati finiti} (finite-state machine, FSM)\N
%%
\item Spesso \`{e} proprio il modello FSM ad essere impiegato in questi
  casi
%%
%%
\end{itemize}
\end{block}
%%
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Ragionamento e Deliberazione}
%%
%%
\begin{block}{Esempio: il mondo dei blocchi}
\clangtiny%%
\begin{lstlisting}
void gather_all_blocks()
{
   for (;;) {
     bool have_prism = kb.have_i_the_object("prism");
     bool have_cylinder = kb.have_i_the_object("cylinder");
     bool have_sphere = kb.have_i_the_object("sphere");
     if (have_prism && have_cylinder && have_sphere) {
         return; // goal accomplished
     }

     // here we have a FIXED selection of sub-goals

     if (!have_prism) gather_object("prism");
     else if (!have_cylinder) gather_object("cylinder");
     else if (!have_sphere) gather_object("sphere");
   }
}
\end{lstlisting}
\end{block}
%%
%%
\end{frame}
%%








%%
\begin{frame}[fragile]
%%
  \frametitle{Ragionamento e Deliberazione}
%%
%%
\begin{block}{Esempio: il mondo dei blocchi}
\clangtiny%%
\begin{lstlisting}
void gather_object(const char *object_type)
{
   float x,y,z;
   if (!kb.get_object_position(object_type, &x, &y, &z) {
      // uh? I don't know object's position, let us try to find it
      if (!camera_sensor.detect(object_tpe, &x, &y, &z))
          return; // cannot detect object, the sub-goal fails
      kb.update_object_position(object_type, x, y, z);
   }

   robot.drive_to(x, y, z);
   while(true) {
      if (robot.position_reached(x,y,z)) break; // we got the position
      if (robot.motion_blocked()) return;       // goal failed
      if (timeout()) return;                    // goal failed
   }

   robot.pick_the_object();
   while(true) {
      if (robot.object_picked()) break; // we got the object
      if (timeout()) return;            // goal failed
   }

   kb.mark_object_picked(object_type);
}
\end{lstlisting}
\end{block}
%%
%%
\end{frame}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Modello del processo di ragionamento e deliberazione}
%%
%%
\begin{block}{Il mondo dei blocchi: FSM equivalente}
\begin{center}
\includegraphics[scale=0.3]{blocks_fsm.eps}
\end{center}
\end{block}
%%
%%
\end{frame}





%%
\frame{\titlepage}
%%



%%
%%
\end{document}
%%
%%

