%
% PathPlanning.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}}

\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[Path Planning e Obstacle Avoidance]{Navigazione\\
Path Planning e Obstacle Avoidance}
%%

\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{Cinematica, Posizione, Controllo}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Ogni sistema robotico \`{e} caratterizzato da un
  proprio \textbf{modello cinematico}
%%
\item Tale modello, che si utilizza per poter effettuare il \textbf{controllo in
  posizione}, prevede l'uso di
  \begin{itemize}
  \item\footnotesize{}\textbf{\red{}grandezze controllabili},
    es. velocit\`{a} delle ruote, posizione dei giunti, etc.
  \item\footnotesize{}\textbf{\red{}grandezze di lavoro},
    cio\`{e} le variabili del sistema di riferimento ``principale''
  \end{itemize}
%%
\item Non si tiene tuttavia conto della \textbf{\red{}reale composizione
  dell'ambiente} e degli eventuali vincoli fisici che esso pone al
  movimento del sistema robotico
%%
\end{itemize}
%%
%%
\end{frame}





%%
\begin{frame}[fragile]
%%
  \frametitle{Ambiente e Vincoli}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Nel manipolatore planare in figura, il punto
  $\red{}(X_t,Y_t)$ non \`{e} raggiungibile direttamente con un percorso
  rettilineo \textbf{\blue{}(percorso blu)} a causa della presenza
  dell'ostacolo
%%
\item Il \textbf{\red{}percorso rosso} consentirebbe di superare
  l'ostacolo e raggiungere la posizione
%%
\item Tuttavia, il {\red{}percorso rosso}, non essendo geometricamente
  ``rettilineo'',  andrebbe opportunamente \textbf{pianificato}
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.3]{manipolatore_2d_vincoli.eps}
\end{center}
%%
\end{frame}





%%
\begin{frame}[fragile]
%%
  \frametitle{Ambiente e Vincoli}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Nel modello di robot mobile in figura, il punto
  di destinazione non \`{e} raggiungibile direttamente con un percorso
  rettilineo
%%
\item Tuttavia possono esistere svariati percorsi (due dei quali
  rappresentati in figura) che consentono al robot di raggiungere la posizione
%%
\item Stabilire il percorso \`{e} compito di un opportuno algoritmo di
  \textbf{\red{}path planning}
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.15]{mobile_robot_paths.eps}
\end{center}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Path Planning e Layer Software}
%%
%%
\begin{center}
\includegraphics[scale=0.2]{all_layers.eps}
\end{center}
%%
\end{frame}





%%
\begin{frame}[fragile]
%%
  \frametitle{Path Planning}
%%
%%
\begin{block}{}
\Large\centering{}Path Planning\\
\end{block}
%%
\end{frame}


%%
\begin{frame}[fragile]
%%
  \frametitle{Path Planning: cosa serve}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}\textbf{\red{}Modello dell'ambiente}: l'ambiente dove
  opera il robot, con le sue caratteristiche geometriche e con i suoi
  vincoli deve essere opportunamente modellato nel software; un qualunque
  percorso pianificato deve trovarsi sempre \textbf{dentro l'ambiente} e
  \textbf{non deve intersecarsi} con i vincoli
%%
\item\textbf{\red{}Modello del robot}: il robot non pu\`{o} essere trattato
  come ``oggetto puntiforme'', ma la sua natura fisica e se le sue
  dimensioni devono essere tenute in conto nella pianificazione della
  traiettoria; questa deve poter essere seguita senza che il \textbf{robot
    possa intersecarsi} con i vincoli
%%
\item\textbf{\red{}Scelta della traiettoria}: occorre adottare una
  opportuna metodologia per la derivazione e la scelta della traiettoria,
  considerando opportuni parametri quali \textbf{distanza minima} o altro.
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.05]{mobile_robot_paths.eps}
\end{center}
%%
\end{frame}



%%
\begin{frame}[fragile]
%%
  \frametitle{Visibility Graph}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Questo metodo consiste nel modellare un \textbf{grafo}
  che rappresenta la \textbf{visibilit\`{a}} di tutti i vertici delle
  geometrie dei vincoli presenti nell'ambiente
%%
\item Ogni \textbf{vertice geometrico} (inclusi i punti di START ed END)
  sono modellati con un \textbf{\red{}vertice nel grafo}
%%
\item Due vertici vengono collegati con un ``edge'' se essi sono
  \textbf{\red{}visibili}
%%
\item Sul grafo risultante, che include START ed END, viene avviato
  l'algoritmo di Dijkstra per il calcolo del percorso minimo
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.2]{visibility_graph.eps}
\end{center}
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Visibility Graph}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}\textbf{Vantaggi:} E' semplice ed efficiente da
  implementare
%%
\item\textbf{Svantaggi:}
\begin{itemize}
\item\footnotesize{}I vincoli geometrici vanno ``ingrossati'' per tenere
  conto delle dimensioni del robot
\item Il path risultante passa ``troppo vicino'' ai vincoli
  (non \`{e} \emph{\red{}safe})
\item Se l'ambiente \`{e} denso di ostacoli, la complessit\`{a} del grafo
  aumenta enormemente
\end{itemize}
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.15]{visibility_graph.eps}
\end{center}
%%
\end{frame}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Voronoi Diagrams}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}I \textbf{\red{}diagrammi di Voronoi} sono definiti
  come il {\red{}luogo geometrico dei punti che hanno distanza massima
    dagli ostacoli}
%%
\item Essi si costruiscono usando un approccio tridimensionale:
\begin{itemize}
\item\footnotesize{}Per ogni punto dello spazio di navigazione si determina
  la sua distanza dal vincolo pi\`{u} vicino
\item Tale distanza viene rappresentata come un'\textbf{altezza} nello
  spazio bidimensionale
\item I punti equidistanti da uno o pi\`{u} ostacoli formeranno un
  {\red{}picco (massimo)}
\item Si uniscono tutti i picchi tra loro: {\red{}le geometrie risultanti sono le
  possibili ``strade'' che il robot pu\`{o} percorrere.}
\end{itemize}
%%
\end{itemize}
%%
%%
\begin{center}
\includegraphics[scale=0.2]{voronoi-diagram.eps}
\end{center}
%%
\end{frame}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Voronoi Diagrams}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}\textbf{Vantaggi:}
%%
\begin{itemize}
\item\footnotesize{}I possibili path sono minori e
  pi\`{u} efficienti rispetto al grafo di visibilit\`{a}
\item La navigazione \`{e} ``safe'' in quanto avviene sempre nei punti di
  maggiore distanza rispetto agli ostacoli.
\end{itemize}
%%
\item\textbf{Svantaggi:}
\begin{itemize}
\item\footnotesize{}La determinazione del diagramma \`{e} una procedura
  molto complessa (dal punto di vista computazionale), tuttavia essa
viene avviata solo nella fase iniziale di costruzione
\end{itemize}
%%
\end{itemize}
%%
%%
\begin{center}
\includegraphics[scale=0.2]{voronoi-diagram.eps}
\end{center}
%%
\end{frame}
%%


%%
\begin{frame}[fragile]
%%
  \frametitle{Cell Decomposition}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Si suddivide l'intera regione navigabile in un insieme
  di \textbf{celle}
%%
\item Per ogni cella si identifica un \textbf{punto di navigazione}
%%
\item Si costruisce un \textbf{grafo} in cui le celle sono rappresentate dai nodi e
  gli edge rappresentano il fatto che due celle siano confinanti
%%
\item Si fa girare l'algoritmo di Dijkstra per determinare il percorso
  minimo
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.15]{cell_decomposition.eps}
\end{center}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Cell Decomposition}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}L'algoritmo \`{e} facilmente implementabile ed \`{e}
  abbastanza efficiente
%%
\item Le sue caratteristiche dipendono fortemente da come sono suddivise le celle:
%%
\begin{itemize}
%%
\item\footnotesize{}\item{\red{}Pi\`{u} celle $\Rightarrow$ path pi\`{u} efficiente}
%%
\item{\red{}Meno celle $\Rightarrow$ algoritmo pi\`{u} veloce}
%%
\end{itemize}
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.15]{cell_decomposition.eps}
\end{center}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Fixed Cell Decomposition: NF1}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Si suddivide l'intera regione navigabile in un insieme
  di \textbf{\red{}celle di dimensioni fisse}
%%
\item Ogni cella \`{e} caratterizzata da una \textbf{\red{}marca numerica}
%%
\item Per ogni cella il \textbf{punto di navigazione} \`{e} il suo \textbf{centro}
%%
\item Si parte dal punto di arrivo (END), che si marca con il \textbf{\red{}valore
  ``0''}
%%
\item Ogni cella adiacente si marca con un valore \textbf{\red{}incrementato
  di 1}
%%
\item Si procede fino a marcare \textbf{\red{}tutte le celle}
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.2]{nf1.eps}
\end{center}
%%
\end{frame}
%%






%%
\begin{frame}[fragile]
%%
  \frametitle{Fixed Cell Decomposition: NF1}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Per determinare il percorso, si parte dal punto di
  START e si sceglie la \textbf{\red{}cella adiacente con il valore di
    marca minore}
%%
\item Si procede fino ad arrivare al punto di END
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.2]{nf1_2.eps}
\end{center}
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Potential Field}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Si modella lo spazio di navigazione come pervaso da un
  \textbf{\red{}campo di potenziale} composto da:
\begin{itemize}
\item\footnotesize{}\textbf{\red{}Forze attrattive verso il target}
\item\textbf{\red{}Forze repulsive} che allontanano dai vincoli
%%
\end{itemize}
%%
\item Il \textbf{\red{}potenziale} di un punto $q = (x,y)$ \'{e} definito
  come $\red{}U(q) = U_{att}(q) + U_{rep}(q)$
%%
\item Il \textbf{\red{}vettore di moto} di un punto $q = (x,y)$ corrisponde
  alla \textbf{forza} generata dal potenziale $\red{}F(q) = -\nabla
  U_{att}(q) - \nabla U_{rep}(q)$
%%
\item dove il simbolo $\nabla$ corrisponde all'operatore gradiente:
\[\red{}%
\nabla U(q) = \begin{bmatrix}
\frac{\partial U}{\partial x} \\ \frac{\partial U}{\partial y}\end{bmatrix}
\]
\end{itemize}
%%
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Potential Field}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Se $\red{}q_{goal}$ \`{e} il \textbf{\red{}punto target}, la forza
  attrattiva pu\`{o} essere modellata come:
\[\red{}%%
F_{att}(q) = - k_{att}(q - q_{goal})
\]
dove $k_{att}$ \`{e} uno scalare che agisce da ``peso''
%%
\item la forza repulsiva pu\`{o} essere invece espressa come:
%%
{\red{}%
\begin{eqnarray*}
F_{rep}(q) & = &
\left\{
\begin{array}{lr}
k_{rep}\left(\frac{1}{\rho(q)} -
\frac{1}{\rho_0}\right)\frac{1}{\rho^2(q)}\frac{q-q_{obstacle}}{\rho(q)}
& se~~\rho(q)\le \rho_0 \\
0 & se~~\rho(q)> \rho_0 \\
\end{array}
\right.
\end{eqnarray*}} dove
%%
\item $q_{obstacle}$ \`{e} il punto dell'ostacolo a distanza minima
\item $\rho(q)$ \`{e} la distanza minima da un ostacolo
\item $\rho_0$ \`{e} una soglia di distanza
\item $k_{rep}$ \`{e} un fattore di peso
\end{itemize}
%%
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Potential Field}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Il metodo consiste nel imporre al robot delle
  velocit\`{a} $v_x$ e $v_y$ proporzionali alle componenti della forza
  risultante.
%%
\item Il metodo consente di emulare il moto di una sfera che
  viene guidata gradualmente verso il punto target ``scendendo da una
  collina'' attraverso gli ostacoli; tuttavia ...
%%
\item L'algoritmo \`{e} fortemente dipendente dai pesi che si assegnano alla forza
  attrattiva e repulsiva $k_{att}$, $k_{rep}$
%%
\item L'andamento del gradiente non e' lineare; man mano che ci si avvicina
  agli ostacoli il contributo della repulsione diventa molto forte; questo
  pu\`{o} causare bruschi cambiamenti di velocit\`{a}
%%
\item Nel caso in cui ci siano ostacoli vicini tra loro, il metodo pu\`{o}
  innescare  sgradevoli oscillazioni nel moto
%%
\item Il metodo non tiene conto delle caratteristiche di manovrabilit\`{a}
  specifiche del robot
%%
\end{itemize}
%%
%%
\end{frame}
%%




%%
\begin{frame}[fragile]
%%
  \frametitle{Obstacle Avoidance}
%%
%%
\begin{block}{}
\Large\centering{}Obstacle Avoidance\\
\end{block}
%%
\end{frame}


%%
\begin{frame}[fragile]
%%
  \frametitle{Obstacle Avoidance}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Il path planning si basa sul fatto che le
  \textbf{caratteristiche dell'ambiente} sono \textbf{\red{}note}
%%
\item Qualora, invece, gli ostacoli \textbf{non siano noti}
  precedentemente, si parla di tecniche di \textbf{\red{}obstacle
    avoidance}
%%
\item L'obstacle avoidance presuppone che, durante il moto, un
  ostacolo non previsto possa trovarsi davanti al robot; in tal caso
  occorre:
%%
\begin{itemize}
\item\footnotesize{}\textbf{\red{}identificare la presenza dell'ostacolo},
  operazione che si effettua tramite opportuni sensori
\item\footnotesize{}\textbf{\red{}evitare l'ostacolo}, operazione che
  comporta l'uso  di opportuni algoritmi
\end{itemize}
%%
\end{itemize}
%%
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Obstacle Avoidance}
%%
%%
\begin{itemize}
%%
\item\footnotesize{}Se le \textbf{dimensioni dell'ostacolo} sono \textbf{\red{}note} (o
  determinabili a runtime), \`{e} possibile adottare uno degli algoritmi di
  path planning studiati; in tal caso occorre:
%%
\begin{itemize}
\item\footnotesize{}inserire l'ostacolo nel modello dell'ambiente
\item far girare l'algoritmo
\item se l'ostacolo \`{e} \textbf{mobile} utilizzare un \textbf{\red{}decay
  factor}  per ``far sparire'' l'ostacolo dal punto dopo un po' di tempo
\end{itemize}
%%
\end{itemize}
%%
%%
\end{frame}
%%



%%
\begin{frame}[fragile]
%%
  \frametitle{Bug Algorithm}
%%
%%
\begin{itemize}
%%
\item Se le dimensioni e la
  geometria dell'ostacolo \textbf{non sono note}, uno degli approcci
  pu\`{u} usati \`{e} il \textbf{\red{}bug algorithm}
%%
\item Si basa sulla presenza di un sensore a 360 gradi (sonar, LIDAR, etc.)
%%
\item Consiste nel circumnavigare l'ostacolo nella direzione del punto
  target fino a superarlo
%%
\end{itemize}
%%
\begin{center}
\includegraphics[scale=0.3]{bug.eps}
\end{center}
%%
\end{frame}
%%


%%
\frame{\titlepage}
%%



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

