\chapter{Objetivos y Metodología} \label{chapter:objetivos}

Una vez presentado el contexto general sobre el que se asienta este 
proyecto, vamos a pasar a explicar una descripción detallada de los
objetivos que pretendemos resolver con la realización de
este trabajo y de los requisitos que han condicionado la solución
desarrollada.


\section{Descripción del problema} \label{sec:descripcion}

El objetivo general del proyecto consiste en ofrecer una arquitectura
de vídeo vigilancia distribuida, escalable, interoperable con otros
sistemas y basada en software libre. Además, el sistema debe ser
estable, robusto y capaz de notificar diferentes alarmas que se
configuren en el sistema. Por último, el sistema será capaz de
interactuar con un dispositivo móvil mostrando alarmas, vídeos en
tiempo real e información de monitorización del sistema. 


Este objetivo global lo hemos articulado en tres sub-objetivos:

\begin{enumerate}

\item \emph{Sistema de grabaciones y alarmas:} El sistema de
  grabaciones debe realizar de una manera distribuida, robusta y fiable grabaciones
  de las cámaras en el disco duro. Este sistema se podrá regular y
  modular para permitir grabaciones a diferentes resoluciones,
  velocidad del flujo de vídeo, formato de vídeo, etc.

El sistema de alarmas debe ser capaz de gestionar las alarmas
producidas por los generadores de alarmas y tratarlas correctamente
para guardar la información relevante y actual emitiendo los avisos
oportunos. Este sistema debe ser lo suficientemente genérico para
aceptar diferentes tipos de generadores de alarmas.

\item \emph{Sistema distribuido:} El sistema debe proveer de mecanismos
  para su uso distribuido en redes heterogéneas. Para ello, será
  necesario utilizar las técnicas adecuadas para conseguir un buen
  rendimiento del sistema, y que no se vea penalizado por el tráfico
  en la red. Además, ya que un objetivo claro del proyecto es la
  interoperabilidad con el mayor número de sistemas posibles, este
  sistema distribuido debe ser programable en el mayor número de
  lenguajes posibles, para facilitar lo más posible la integración
  continua con nuevo software.

\item \emph{Integración del \emph{smartphone}:} El sistema debe
  contar en una de sus partes con la incorporación de un
  \emph{smartphone}. Además de visualizar la información de
  grabaciones y alarmas, deberá mostrarse información en tiempo real
  de las grabaciones y de las cámaras que dispone el sistema. El uso
  del \emph{smartphone} no quedará como un mero visualizador, debe
  formar parte del sistema pudiendo analizar el contexto y
  emitiendo alarmas si procede.



\end{enumerate}


Además, realizaremos numerosas pruebas y experimentos reales para comprobar
el correcto funcionamiento del desarrollo y de las decisiones tomadas en el
sistema. Se realizarán evaluaciones de las mediciones de cómputo para
llegar a un comportamiento en tiempo real en algunas de la
funcionalidades básicas del sistema, como pueda ser las grabaciones y
notificaciones de las alarmas.

Por último, como objetivo personal tenemos el hecho de aprender y
conocer nuevas tecnologías modernas de distribución y movilidad.

\section{Requisitos} \label{sec:requisitos}

El desarrollo del proyecto estará guiado por los objetivos comentados
anteriormente y deberá ajustarse a los requisitos que comentaremos a
continuación para asegurar un buen comportamiento del sistema.

Estos requisitos son:

\begin{enumerate}

\item El sistema se compondrá de: cámaras USB (donde recogeremos la
  información visual), ordenadores (donde se analizará, grabará y
  guardará la información) y \emph{smartphone} con los cuales
  tendremos acceso al sistema desde cualquier localización.

\item El sistema debe ser \emph{estable, eficiente y robusto}, 
      especialmente a los posibles fallos de grabaciones,  para
      conseguir una solución viable en un entorno tan competitivo.

\item El sistema debe tener un bajo coste y un bajo consumo de 
  energía, haciéndolo más versátil, económico y ecológico.

\item En cuanto al software, vamos a desarrollar el comportamiento
  del sistema en la plataforma denominada \emph{JDEROBOT} que se explicará
  detalladamente en el siguiente capítulo. Nos apoyaremos también en
  el sistema distribuido de \emph{ICE}.

\item Una parte del sistema ejecutará sobre el sistema operativo
  \emph{GNU/Linux}, concretamente sobre la distribución \emph{Debian
    Lenny}, y la otra parte ejecutará en el sistema operativo para
  móviles \emph{Android}.

\item El código resultante de este proyecto será liberado bajo la
  licencia
  \textbf{GPLv3}\footnote{http://www.gnu.org/licenses/gpl-3.0-standalone.html}. La
  documentación generada a lo largo de estos meses de desarrollo se
  liberará bajo la licencia Creative Commons
  Reconocimiento-Compartir.

\end{enumerate}

\section{Metodología empleada}

En esta sección veremos la metodología utilizada para la realización
de este proyecto. Básicamente se basa en realizar iteraciones que se
componen de: diseño, implementación y experimentos de cada una de las
partes del sistema.

Para la realización de un proyecto se deben establecer unas tareas a
realizar desde la idea del proyecto hasta la realización del mismo.
Este modelo de desarrollo establece unos requisitos de entrada para
producir salidas satisfactorias.

El desarrollo de este proyecto seguirá el modelo de desarrollo
en espiral basado en prototipos. La elección de este modelo de
desarrollo se basa en la necesidad de separar el comportamiento final
en varias subtareas más sencillas para luego fusionarlas. Cada tarea
finalizada aporta los requisitos e información necesaria para abordar
la siguiente iteración del modelo de desarrollo.

La gran ventaja de este modelo de desarrollo es la existencia de
puntos de control al finalizar cada iteración. Además es altamente
flexible en cuanto al cambio de requisitos, hecho muy común en este
tipo de proyectos de investigación.

Además, durante todo el desarrollo del proyecto se realizan reuniones
semanales con el tutor para definir los siguientes pasos en el
prototipo y tener puntos de control cercanos en el tiempo para evaluar
y validar el trabajo realizado.

\subsection{Desarrollo en espiral}

En este tipo de desarrollos los productos son creados gracias al
número de iteraciones que se da en el proceso de vida de software.
\begin{itemize}

\item Determinar los objetivos. Los objetivos de un ciclo de
  desarrollo deben ser identificados y especificados.

\item Valorar y reducir los riesgos. Los riesgos son valorados y
  ciertas actividades son acotadas para reducir los riesgos
  claves.

\item Desarrollar y validar. El sistema se desarrolla y es validado
  usando pruebas que verifican el cumplimiento de los requisitos
  fijados.

\item Planificar. El proyecto es repasado y la próxima fase de la
espiral es planificada.

\end{itemize}

\begin{figure}[htbp]
\centering
\includegraphics[width=0.6\textwidth]{img/espiral}
\caption{Modelo en espiral}
\label{fig:espiral}
\end{figure}

En la figura ~\ref{fig:espiral} se pueden observar las fases que forman
cada ciclo en este modelo de desarrollo: Análisis de requisitos, diseño e
implementación, pruebas y planificación del próximo ciclo de
desarrollo.


\subsection {Plan de trabajo}

En esta sección vamos a dejar reflejado el plan de trabajo que hemos
seguido, repartiéndolo en diferentes fases cuyos resultados son
prototipos o conocimiento adquirido.

Un prototipo es una versión preliminar de un sistema con fines de
demostración o evaluación de ciertos requisitos. Se suele estimar la
finalización de una iteración en el modelo de desarrollo como la
obtención de un nuevo prototipo. De hecho, el modelo que hemos
seleccionado se basa justamente en esto, en la finalización de cada 
iteración se obtiene un nuevo prototipo. Cierto es que la obtención de
un prototipo no implica que se utilice para el producto final, si se
cree necesario se puede desechar dicho prototipo.


\begin{itemize}

\item \textbf{Fase 1:} Estudio del estado del arte. En esta fase
  estudiaremos y analizaremos bibliografía sobre \emph{middleware}
  distribuidos y sistemas de vídeo vigilancia. Para ello leeremos y
  analizaremos el mercado para ver qué soluciones existen con estas
  características y qué tipo de tecnologías usan. Esta fase tiene como
  resultado: \emph{adquisición de conocimiento}.

\item \textbf{Fase 2:} Familiarización con plataforma software JDEROBOT. Es
  necesario un primer contacto con la arquitectura software que vamos
  a utilizar para la realización del proyecto. Esta fase tiene como
  resultado: \emph{adquisición de conocimiento}.

\item \textbf{Fase 3:} Estudio y familiarización con el
  \emph{middleware} distribuido \emph{ICE}. Es necesario una toma de
  contacto generosa para entender y explotar la funcionalidad
  distribuida que nos brinda esta librería. Esta fase tiene como 
  resultado: \emph{adquisición de conocimiento}.

\item \textbf{Fase 4:} Grabaciones. En esta fase estudiaremos las
  diversas opciones existentes para realizar grabaciones estables y
  eficientes desde las cámaras. Se evaluará la manera óptima de
  guardar toda la información sobre grabaciones, incluyendo las
  imágenes y vídeos. Esta fase tiene como resultado:
  \emph{prototipo-1}.

\item \textbf{Fase 5:} Alarmas. En esta fase evaluaremos las alarmas
  más comunes en estos entornos y seleccionaremos uno o dos relevantes
  para llevarlas a la práctica en nuestra solución. Esta fase
  tiene como resultado: \emph{prototipo-2}.


\item \textbf{Fase 6:} \emph{Streaming} o flujo de vídeo. En esta fase
  estudiaremos las posibilidades existentes para realizar flujo de
  vídeo hacía el dispositivo móvil o \emph{smartphone}. A priori, se
  presenta ambiciosa esta fase pero es necesaria para conseguir
  nuestros objetivos en este proyecto. Esta fase tiene como resultado:
  \emph{prototipo-3}.

\item \textbf{Fase 7:} Visualización en el \emph{smartphone}. En esta
  fase evaluaremos los dispositivos móviles del mercado,
  seleccionaremos el más adecuado a nuestros objetivos y
  desarrollaremos los módulos necesarios para poder visualizar en el
  \emph{smartphone} la información interesante del sistema. Esta fase
  tiene como resultado: \emph{prototipo-4}.


\item \textbf{Fase 8:} Análisis en el \emph{smartphone}. En esta
  última fase dotaremos de cierta funcionalidad al dispositivo móvil
  para poder analizar y emitir alarmas desde el mismo. Esta fase
  tiene como resultado: \emph{prototipo-5}, que será el prototipo que
  se convierta en la aplicación final.



\end{itemize}

\section{Esfuerzo temporal del proyecto}

Hemos querido mostrar el esfuerzo que hemos empleado a
lo largo de este proyecto. La figura \ref{fig:graph-pfc} muestra el
esfuerzo empleado desde el inicio hasta el fin del proyecto basándose
en los \emph{commits} realizados, tanto en el código como en la memoria.


\begin{figure}[htpb]
\begin{center}
\includegraphics[height=11.0cm]{img/grafica-esfuerzo}
\end{center}
\caption{Gráfica de esfuerzo}
\label{fig:graph-pfc}
\end{figure}


%\begin{figure}[htpb] 
%\begin{center} 
%\includegraphics[height=12.0cm]{img/graph-pfc}
%\end{center}
%\caption{Gráfica de esfuerzo}
%\label{fig:graph-pfc}
%\end{figure} 
%\newpage

%Si observamos la figura~\ref{fig:graph-pfc} podemos ver cómo iniciamos
%el proyecto suavemente adquiriendo conocimientos sobre el estado del
%arte y sobre la plataforma software. Un primer pico de trabajo 
%lo tuvimos en diciembre del 2007 ya que estábamos implementando y
%afinando el prototipo 2 (atención visual). Más tarde, en abril y mayo
%del 2008 también observamos dos picos, correspondientes a los
%prototipos 3 y 4. El prototipo 3 costó afinarlo y obtener un
%comportamiento estable y robusto. Igualmente el prototipo 4 es uno de
%los puntos importantes del proyecto, donde se buscó la eficiencia y
%robustez en el cálculo del píxel homólogo. Finalmente, durante los
%meses de julio y agosto, se dedicó exclusivamente a engrasar las
%piezas del proyecto y conseguir un comportamiento correcto. Además, la
%realización de la memoria ha constituido un esfuerzo considerable,
%representado en la gráfica.



