%---------------------------------------------------------------------
%
%                          Capítulo 6
%
%---------------------------------------------------------------------

\chapter{Solución Propuesta}

\begin{FraseCelebre}
\begin{Frase}
La simplicidad es la máxima sofisticación.
\end{Frase}
\begin{Fuente}
Leonardo da Vinci.
\end{Fuente}
\end{FraseCelebre}

%-------------------------------------------------------------------
\section{Caseo de Estudio}
\label{cap6:sec:caso-estudio}
%-------------------------------------------------------------------
En los sistemas digitales y tecnologías inalámbricas, se van abriendo nuevos escenarios de estudio, algunos muy lejos de sus fundamentos electrónicos como lo es la dependencia que presenta la sociedad a la conectividad de redes de Internet y/o temas más cercanos al Hardware, como la gestión inteligente y eficiente de energía o direccionamiento y enrutamiento de paquetes de datos. En estos último años la transformación de redes cableadas a redes inalámbricas va en aumento, debido a la flexibilidad de conexión. Estas terminologías entran en juego en aplicaciones donde factores geográficos, confort del usuario o económicos, impiden la utilización de redes cableadas, implicando las virtudes y premuras inherente a la utilización del espacio libre como canal. Ante la necesidad de estar vinculados en tiempo real, transfiriendo información en una gran gama de escenarios, es preciso estudiar y diseñar formas de asegurar el flujo de datos en los nuevos escenarios en las que las redes inalámbricas se desempeñarán.

\subsection{Problemática}
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Vectorial/nodos_estaticos}
	\caption{Modelo de solución de conectividad mediante Router Estático.}
\label{fig:nodos_estaticos}
\end{figure}

Cuando se habla de utilizar medios inalámbricos, una condición fundamental es que la comunicación sólo puede efectuarse si se encuentran los dispositivos dentro de su área de cobertura. Si se desea establecer una conexión entre dos dispositivos inalámbricos, básicamente se pueden encontrar los siguientes escenarios:
\begin{enumerate}
\item Comunicación directa: Nodo emisor y nodo receptor pertenecen al área de cobertura del otro. 
\item Comunicación indirecta: Caso cuando la distancia entre el nodo emisor y el nodo receptor superan el rango de cobertura, se pueden utilizar nodos intermedios(Gateway) que realicen enrutamientos de los paquetes de datos.
\end{enumerate}
Cuando un usuario requiere comunicación continua con un terminal \citet{Farm} exponen que, en una granja, considerando escenarios de trabajo fijos, la solución es la conectividad mediante un despliegue de router estáticos como se muestra en la Figura~\ref{fig:nodos_estaticos}, si bien es factible y utilizada comúnmente, carece de factibilidad energética y económica, debido al alto consumo de electricidad, costo de instalación y mantención indiviual de cada nodo. Además cabe señalar que sólo se utiliza un pequeño conjunto de nodos para cumplir el objetivo como muestra la Figura~\ref{fig:nodos_estaticos}(antenas encerradas en circulo), mientras los demás no realizan acciones importante en el enlace establecido, provocando consumo innecesario de energía. También la disponisición de los nodos repetidores afectan la geografía del lugar.
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Vectorial/nodos_dinamicos}
	\caption{Modelo de solución de conectividad mediante Router Móvil.}
\label{fig:nodos_dinamicos}
\end{figure}
\\
Lo que \citet{Farm} proponen es entregar conectividad mediante router móviles (ver Figura~\ref{fig:nodos_dinamicos}), que disminuye drásticamente la cantidad de nodos desplegados, comparado a la Figura~\ref{fig:nodos_estaticos}. Teniendo en consideración la eficiencia energética y costos implicados, la opción mas eficiente es la utilización de \RRAs , ya que, disminuye el número de unidades en funcionamiento y permite una organización dinámica de la red.
\\
En entornos donde se tendría poca o nula información de las caracteristicas de la zona de trabajo, para mantener la conectividad entre unidades exploradores de adquisición de datos y un punto de recopilación de información(base), \citet{Link} exponen que un factor importante a considerar es la rápida degradación de la calidad de la comunicación al penetrar en el interior de edificios, túneles o cuevas. Para este problema ellos sugieren que una solución robusta es contar con un despliegue de unidades móviles, generando un convoy de robots que proporcionen redundancia de enlace a la unidad de interés. La característica de robustez en un enlace es deseable en casos donde la información es de vital importancia como: Operaciones militares terrestres, rescates, exploración y búsqueda. Todos estos escenarios se caracterizan por no poder contar con un conocimiento geográfico de la zona y requerir un despliegue dinámico de unidades.
\\
Otra problemática a abordar es la confección de algoritmos de comportamiento para un sistema donde el enlace de datos es posible gracias a la utilización de nodos intermedios que proveen enrutamiento (\RRA), considerando además que su comportamiento no es aleatorio, a lo menos una de las unidades finales(Target o Gateway) son agentes móviles de comportamiento aleatorio. Con lo mencionado se puede inferir dos problemáticas:
\begin{enumerate}
\item El sistema de comunicación es una red inalámbrica móvil, lo que conlleva inconvenientes de pérdida de conexión o calidad de enlace debido a que la posición de los robots es dinámica.
\item El anclaje de red, proceso por el cual un dispositivo inalámbrico móvil actúa como pasarela para ofrecer conectividad de datos a otros dispositivos (Tethering), mediante nodos inalámbricos móviles equipados con algoritmos de control y tomando como parámetros de calidad de señal valores entregados por los dispositivos transceptores.
\end{enumerate}
Se pretende dar un servicio de exploración o aseguramiento de terreno donde un robot explorador parte de un punto fijo o base a explorar una zona aledaña. Un ejemplo particular es en circunstancias donde se requiere explorar zonas de riesgo para las personas como estructuras colapsadas, debido a la irregularidad del terreno impiden una conexión simple, entran en juego la utilización de robots que actúan como Router Móviles asegurando la estabilidad del enlace entre la base y el robot explorador. Para solucionar este escenario, \citet{TesisPalma} proponen un algoritmo de Machine Learning denominado Q-Learning, cuya señal de entrada es el indicador de fuerza de la señal recibida(RSSI, por sus siglas en inglés) con un modelo log-distance Shadowing\footnote{https://www.gaussianwaves.com/2013/09/log-distance-path-loss-or-log-normal-shadowing-model/} con el cual se definen 3 indicadores:
\begin{enumerate}
\item Minimizar la diferencia absoluta($Min_{Dif_a}$): Minimizar el módulo de la diferencia de RSSI de los vínculos prioritarios para lograr acercarse al punto óptimo(PO), que es parte de la recta de diferencia nula.
\item Maximizar el vínculo lejano($Max_{vl}$):El objetivo a cumplir es función a un solo vínculo prioritario, en el cual el Router Robótico debe maximizar el valor de RSSI del vínculo prioritario más lejano.
\item Minimizar el vínculo cercano($Min_{vc}$): Corresponde al opuesto de maximizar el vínculo lejano.Sin embargo, alejarse del vínculo cercano (minimizar el RSSI), no implica acercase al vínculo lejano.
\end{enumerate}

\subsection{Alcances}
Al desarrollar algoritmos de aseguramiento de enlace de comunicación inalámbrica mediante una colonia de robots, se presentan variadas restricciones que dependen del medio físico y del Hardware que se desea implementar. Debido a la infinita posibilidad de escenarios virtuales, este trabajo sólo abordará una temática ya estudiada en la misma casa de estudio (\citet{TesisPalma}). 
\subsection{Segmentación del Problema}

En la problemática de brindar Aseguramiento de Conexión a un Dispositivo Mediante el Despliegue Dinámico de Robots Enrutadores, se plantea la siguiente segmentación del problema en función del análisis de las prestaciones del software de simulación y las consideraciones propuestas para el modelo de estudio. Se identifican tres sub-problemas: 
\begin{enumerate}
\item Representación de una Estación Base de comunicación.
\item Comportamiento Individual de nodos de repetición móviles (mantención de vínculos).
\item Trayectoría del robot principal (tipo de instrucciones a seguir).
\end{enumerate}


\subsubsection{Q-Learning}
%-------------------------------------------------------------------
Básicamente con este algoritmo el agente aprende a asignar valores de recompensa a los pares (estado, acción).
Para continuar con el entendimiento de este algoritmo se necesita conocer las siguientes definiciones:
\begin{itemize}
\item Recompensa a largo plazo: premio que esperamos acumular a la larga si en cada estado realizamos la mejor acción posible.
\item Recompensa directa: premio que se genera en una acción inmediata.
\item Recompensa mixta: es una combinación de la recompensa a largo plazo con la recompensa directa, y se calcula de forma voraz (greedy).
\item Experiencia: incluye un estado, la acción realizada, la recompensa recibida, y como novedad, el estado siguiente tras realizar esta acción.
\item Velocidad de aprendizaje (learning rate): es un valor entre 0 y 1 que indica cuanto se puede aprender de cada experiencia:
\begin{itemize}
\item 0: no aprende de la experiencia nueva.
\item 1: olvida todo lo que sabía hasta el momento y confía en la nueva experiencia completamente.
\end{itemize}
\item Factor de Descuento (Discount Factor): es un valor entre 0 y 1 que indica cuán importante es el largo plazo:
\begin{itemize}
\item 0: indica los refuerzos inmediatos son importantes.
\item 1: indica que los refuerzos inmediatos no son importantes, solo importa el largo plazo.
\end{itemize}
\item Política: Objetivo de aprendizaje esperado.
\item Problema MDP: cumple con los siguientes atributos:
\begin{itemize}
\item S: conjunto de estados.
\item A: conjunto de acciones.
\item Estado inicial $S_0$.
\item modelo de transiciones: $\sigma*(s,a,s')$.
\item Función de recompensa. R(s).
\end{itemize}
\end{itemize}
\medskip
Si un agente está en un determinado estado y toma una acción concreta, se debe observar la recompensa inmediata que recibe, pero también en las recompensas futuras que se obtendrán por pasar a otros estados donde se pueden tomar otras acciones, que seguirán una política particular. En el algoritmo Q learning, el valor Q de una par (estado, acción) contiene la suma de todas estas posibles recompensas. El problema es que esta suma podría ser infinita en caso de que no haya un estado terminal que alcanzar. Además, es posible que no se quiera dar el mismo peso a las recompensas futuras, en cuyo caso se hace uso de un refuerzo acumulado con factor de descuento. El agente, al comienzo, no tiene información, por lo que su primer objetivo es aproximar lo mejor posible esta asignación de valores Q, como estos dependen de recompensas futuras y actuales, se proporciona un método capaz de calcular el valor final a partir de valores inmediatos y locales. Para ello:
\begin{itemize}
\item Si una acción en un estado determinado causa un resultado no deseado se debe aprender a no aplicar esa acción en ese estado. Si una acción en un estado determinado causa un resultado deseado se debe aprender a aplicar esa acción en ese estado.
\item Si todas las acciones que se pueden tomar desde un estado determinado dan resultado negativo, es conveniente aprender a evitar ese estado. Es decir, no tomar acciones desde otros estados que nos lleven a él.
\item Si cualquier acción en un determinado estado da un resultado positivo, se debe aprender que es conveniente llegar a él. Este hecho es lo que permite propagar la recompensa de par(estado, acción) a los pares de estados adyacentes.
\end{itemize}
Esto se modela matemáticamente de la siguiente manera:
$$Q(s_t , a_t ) = r(s_t , a_t ) + \gamma max_{a_{t+1}} Q(s_t+1 , a_t+1 )$$
Esto es, el valor de Q óptimo para un par (estado, acción) es la suma de la recompensa recibida cuando se aplica la acción junto al valor descontado del mejor valor Q que se puede conseguir desde el estado alcanzado al aplicar esa acción. Para aproximar este cálculo, al principio del aprendizaje, los valores Q se establecen a un valor fijo (puede ser aleatorio). A continuación el agente va tomando pares de (estado, acción) y anota cuánta recompensa recibe en ellos, entonces, actualiza el valor almacenado del valor Q de cada par considerando como ciertas las anotaciones tomadas de los otros pares (algunas de las cuales habrán sido aproximadas en pasos anteriores).\\
Una variante de la ecuación anterior podría ser la siguiente:
$$Q'(s_t ,a_t )=( 1 - \alpha )Q(s_t ,a_t ) + \alpha *[r( s_t , a_t ) + \gamma max_{a_{t+1}} Q( s_t+1 , a_t+1 )]$$

Esta segunda ecuación intenta que la actualización de la función sea más gradual, no permitiendo cambios en una determinada dirección de forma tan brusca. Para ello, introduce un factor de aprendizaje, alpha , que controla la variación de Q. El nuevo valor de Q es la combinación ponderada del antiguo valor de Q y la nueva información que el agente debe creer.
Un aspecto importante del aprendizaje por refuerzo es la restricción de que solo se actualizan los valores Q de acciones que se ejecutan sobre estados por los que se pasa, no se aprende nada de acciones que no se intentan. Pero puede ser interesante que, sobre todo al principio del aprendizaje, el agente intente una gama más amplia de acciones, para hacerse una idea de lo que funciona y lo que no. Más concretamente, en cualquier momento el agente puede elegir:
\begin{itemize}
\item seleccionar una acción con el valor Q más alto para ese estado (explotación)
\item seleccionar una acción al azar (exploración). Se formalizará este proceso de decisión en términos de probabilidades.
\end{itemize}
La posibilidad más simple es elegir completamente al azar entre una opción y otra, pero usaremos una opción un poco más inteligente y asignaremos una probabilidad a cada acción en función del valor Q asociado, de forma que cuanto mayor sea el valor Q de esa acción, mayor será la probabilidad de ser elegida. De esta forma, incluso las acciones con valores Q más bajos tendrán opciones de ser elegidas. También tiene sentido hacer que la probabilidad de exploración dependa del tiempo que el agente lleva aprendiendo, T , de tal forma que al principio se favorece la exploración porque lo que el agente haya aprendido todvía no es confiable y porque todavía quedan muchas opciones que no han sido consideradas y, más tarde se potencia la explotación, porque la experiencia del agente hace que su conocimiento sea más confiable. Así, la ecuación de la probabilidad de seleccionar la acción at sería:
$$P(a_t) = \frac{e^{E*T*Q(s_t , a_t)}}{\sum_{v_{t}} e^{E*T*Q( s_t, v_t)}}$$
Donde E es una constante de explotación, y $v_t$ representa todas las posibles acciones que se pueden tomaºr desde st. Gracias a la función exponencial, a medida que T(temperatura) aumenta, las acciones que tengan un valor Q más alto se hacen mucho más grandes, por lo que tendrán mas probabilidades de serán elegidas.
En caso de que el espacio de estados sea una cantidad finita y manipulable, no es necesario realizar toda la segunda parte de selección de acciones para equilibrar la exploración con la explotación, basta realizar un recorrido completo de todos los posibles pares e ir actualizando el valor de Q. La convergencia del método asegura que obtendremos el resultado deseado.
\newpage
%-------------------------------------------------------------------
\subsubsection{Algoritmos de programación}
%-------------------------------------------------------------------

En definitiva el algoritmo general de aprendizaje por refuerzo es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(a,b)$ es la estimaci\'on inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$  //pol\'itica de selecci\'on de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
$ejecutar a$\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$ //varias formas de actualizar $Q(s,a)$\\
$Q(s,a) \leftarrow  actualizar$
$s \leftarrow s'$
$a \leftarrow a'$
\textbf{end while}
\\
\\
\\
El Algoritmo Q-learning para entornos deterministas es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(a,b)$ es la estimaci\'on inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$  //pol\'itica de selecci\'on de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
ejecutar a\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$\\
$Q(s,a) \leftarrow r + y * max_b Q(s',b)$\\
$s \leftarrow s'$\\
$a \leftarrow a'$\\
\textbf{end while}
\\
\\
\\
El Algoritmo Q-learning para entornos No deterministas es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(s,a)$ es la estimación inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$\\ // politica de selección de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
ejecutar a\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$\\
$Q(s,a) \leftarrow Q(s,a) + alpha * [r+ y * max b Q(s',b) - Q(s,a)]$\\
$s \leftarrow s'$ // $0 < alpha < 1:$ learning step\\
$a \leftarrow a'$
\textbf{end while}
\\
\\
\begin{figure}[h]
	\centering
		\includegraphics[width=.6\textwidth]{Imagenes/Vectorial/action_reward_state}
	\caption{Esquema General Q-Learning.}
\label{fig:ac_re_st}
\end{figure}

Y en general, está demostrado en el esquema de la Figura ~\ref{fig:ac_re_st}



%-------------------------------------------------------------------
\section{Esquema General}
\label{cap6:sec:esquema-general}
%-------------------------------------------------------------------
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Vectorial/enlace_B_RR_RE}
	\caption{Modelo final de estudio}
\label{fig:enlace_B_RR_RE}
\end{figure}
Por comportamiento general se entiende la inteligencia que planifica el funcionamiento del conjunto total de elementos que conforman el sistema (colonia de robots). Comprende los algoritmos que permiten realizar tareas como: activación y desactivación de enlaces, determinación de vínculos prioritarios, interconexión entre diferentes link de comunicaciones. Todo esto en función de mantener una topología deseada.\\
La Figura ~\ref{fig:enlace_B_RR_RE} ilustra dos posibles escenarios que la Inteligencia Colectiva debería administrar. Un primer escenario es un link de comunicación simple presentando una unidad Target y Gateways, conectados mediante dos Gangeway(red de vínculos verde). Un segundo escenario expuesto por la red identificada por sus vínculos de color rojo, cada nodo posee más de un vínculo de comunicación. Una tercera posibilidad es que la red tenga dos unidades objetivos Targets, ejemplo caracterizado por la red de vínculos azules. Es posible identificar en las redes expuestas: Nodos vinculados a dos exploradores GG nz , Nodos que dan servicio de pasarela a dos redes $GG_{nx}$ , Nodos críticos que de perder conectividad inhabilita a la red $GG_{np}$ y Nodos enrutadores pero de carácter estáticos $GG_{nh}$ .La Figura ~\ref{fig:enlace_B_RR_RE} expone tres topologías de red puntuales, además se pueden presentar variadas iterconexiones entre los terminales generando nuevos escenarios, esto se debe ha que las unidades son móviles.\\ Dicha inteligencia debe ser capaz de administrar y solucionar temas como: concurrencia, designación de vínculos, Tablas de ruteo, Identificación de unidades redundantes innecesarias y activación de unidades adicionales. Los problemas mencionados, entre otros, son los que se deberán afrontar al diseñar una estrategia de Comportamiento General.


%-------------------------------------------------------------------
\subsection{Estructura}
\label{cap6:ssec:estructura}
%-------------------------------------------------------------------
Para el programa general se definirán los siguientes puntos:
\begin{itemize}
\item Cantidad de \RRA : este parámetro esta dado en el archivo xml utilizado por gazebo denomido \verb|world|, que genera una cantidad fija de \RRA .%~\ref{cap6:ssec:RRA}
\item Inteligencia Artificial: consta de una función en el archivo principal que tendrá una entrada(para este Trabajo de Titulo será la potencia de la señal) al sistema de \IA o Machine Learning programado para cada \RRA .%~\ref{cap6:ssec:machine-learning}
\item Trayectoria del Robot Explorador: Definición del trayecto a realizar por el Robot Explorador.%~\ref{cap6:ssec:REA}
\end{itemize}
\begin{verbatim}
Comando para Iniciar Simulación:

user@user:roslaunch nombre_programa archivo.launcher

Ejemplo:
user@user:roslaunch Try_1 Try_3.launcher 

Comando para Dar Ordenes al REA:
user@user:rostopic pub /REA std_msgs/String "e REA/archivo_trayectoria"

Ejemplo:
user@user:rostopic pub /REA std_msgs/String "e REA/zigzag"

\end{verbatim}
\newpage
%-------------------------------------------------------------------
\subsection{Diagrama de flujo}
\label{cap6:ssec:diagrama-flujo}
%-------------------------------------------------------------------
\begin{figure}[h]
	\centering
		\includegraphics[width=.4\textwidth]{Imagenes/Bitmap/DiaProgramaGeneral}
	\caption{Diagrama de Flujo general del programa de simulación.}
\label{fig:diag_flujo}
\end{figure}

El esquema de programación propuesto es el mostrado en la Figura~\ref{fig:diag_flujo}, en el cual se inicia el software de simulación con un comando denominado roslaunch, el cual necesita un archivo *.world, a través de una función load se cargan diferentes modelos de robots, luego se inicia el software gazebo con la simulacion detenida, una vez iniciada, avanza a la función OnUpdate, que inicia el proceso de IA con la función IARobot, a continuación se calcula el RSSI para entregar la entrada al algoritmo de IA(Q-Learning), el cual como salida se obtiene una acción que es modificada según la posición relativa del \RRA y, finalmente se almacenan las variables utilizadas en un archivo csv para su posterior analisis en gráficos. Para finalizar el programa se necesita el uso del comando \verb|Ctrl + c| debido al uso de ubuntu como sistema operativo del ordenador. Todas las funciones mencionadas están más detalladas en el Capítulo 5.

%-------------------------------------------------------------------
\section{Robots a utilizar}
\label{cap6:sec:robots-a-utilizar}
%-------------------------------------------------------------------
\subsection{Estación Base(REB)}
\figura{Bitmap/Turtlebot}{width=.5\textwidth}{fig:REB}%
	{TurtleBot.}%
Debido a que el programa Gazebo no permite dar características funcionales a los objetos, se propone optar por utilizar un robot de forma estática para así representar una estación base de comunicación y poder llevar a cabo la simulación. El robot para cumplir esta función será el mostrado en la Figura~\ref{fig:REB}.

\newpage
\subsection{Robot Router Autónomo(RRA)}
\label{cap6:ssec:RRA}
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Vectorial/Mov_RRA}
	\caption{Esquema de movimiento del Robot Router Autónomo.}
\label{fig:EsqMovRRA}
\end{figure}
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Bitmap/Irobot}
	\caption{iRobot create.}
\label{fig:RRA}
\end{figure}
Para efectos prácticos de estudio el \RRA debe ser un robot omni-direccional, sin embargo, no todos los robots omni-direccionales entregados por la comunidad son fiables, es decir, no se comportan de forma omnidireccional pura, por lo que se utilizará un robot con 2 ruedas. Además dado que gazebo puede utilizar robots comerciales reales cuyo URDF(ver Capítulo 4) es compartido por la comunidad, en la mayoría de los casos, se optará por utilizar el robot de la Figura~\ref{fig:RRA} que se encuentra en (\citep{RRA}). Los movimientos del RRA serán los expuestos en la Figura~\ref{fig:EsqMovRRA}, incluyendo el movimiento A0 que es detenerse.

\subsection{Robot Explorador Autónomo(REA)}
\label{cap6:ssec:REA}
\begin{figure}[h]
	\centering
		\includegraphics[width=.5\textwidth]{Imagenes/Bitmap/Pioneer2DX}
	\caption{Pioneer 2DX.}
\label{fig:REA}
\end{figure}
Cuando se habla de exploración muchas veces el robot explorador tiene que ser robusto ante escenarios adeversos, es por esto que se propone utilizar un robot denominado Ground debido a su existencia comercial (\citep{REA}) ver Figura~\ref{fig:REA}.
       
%-------------------------------------------------------------------
\section{Código comunicación}
\label{cap6:sec:codigo-comunicacion}
%-------------------------------------------------------------------
\begin{figure}[h]
	\centering
		\includegraphics[width=.6\textwidth]{Imagenes/Vectorial/Esquema_General}
	\caption{Esquema General de Comunicación}
\label{fig:Esq_Grl}
\end{figure}
La comunicación entre robots será con wifi simulado(ver Capítulo 5, Calcular RSSI). El Robot Estación Base tendra comunicación directa con solo un robot. Al principio será con el REA y luego sólo con los RRA como muestra la Figura~\ref{fig:Esq_Grl}. Por otro lado el RRA tendrá una comunicación con más de 2 robots al mismo tiempo al ser un Gateway. Finalmente el Robot Explorador tendrá comunicación directa con un Robot pudiendo ser primero el REB y luego solo un RRA para así asegurar una buena comunicación final entre Estación Base y Explorador.

\newpage
%-------------------------------------------------------------------
\subsection{Machine Learning}
\label{cap6:ssec:machine-learning}
%-------------------------------------------------------------------
\begin{figure}[h]
	\centering
		\includegraphics[width=.6\textwidth]{Imagenes/Vectorial/Esquema_ML}
	\caption{Esquema de funcionamiento de la Inteligencia Artificial.}
\label{fig:EsqML}
\end{figure}

La \IA de un robot puede ser modificada sin tener que cambiar el hardware del mismo, es por esto que se propone utilizar un archivo modificable, donde la entrada es la magnitud de la señal RSSI(ver Capítulo 5, Calcular RSSI) y la salida es el movimiento en cualquiera de las direcciones posibles como muestra la Figura~\ref{fig:EsqML}.


% Variable local para emacs, para  que encuentre el fichero maestro de
% compilación y funcionen mejor algunas teclas rápidas de AucTeX
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../Tesis.tex"
%%% End:
