% Neste capítulo segue uma breve introdução ao projeto atlas e alguns dos objectivos pretendidos.

% -------------------------------------------------------------
% Secção sobre o projecto atlas
% -------------------------------------------------------------
Para facilitar a interação entre os diversos sensores e controladores de baixo nível,
utiliza-se atualmente a plataforma ROS (\textit{Robot Operating System}), de arquitetura modular.
Esta plataforma permite a criação e gestão de diversos módulos de software e garante 
a comunicação entre eles de uma forma estruturada e robusta~\cite{ROS}.

O ROS é constituído por uma plataforma de programação \textit{open source} para robôs, criada em 2007
para o desenvolvimento do projeto STAIR (\textit{STanford Artificial Intelligence Robot})~\cite{STAIR}.
A partir dessa data o grupo de desenvolvimento de hardware e software \textit{open source}
\textit{Villow Garage} tem assegurado a continuidade do projeto~\cite{ROS_PAPER}.

O sistema operativo ROS foi desenvolvido com a intenção de cumprir os seguintes
objetivos~\cite{ROS_PAPER}:

\begin{itemize}
 \item Facilitar o desenvolvimento modular do software;
 \item Constituir uma plataforma gratuita e \textit{open source};
 \item Fornecer ferramentas para implementação de código como servidor de parâmetros de configuração, 
visualizador de mensagens, auto geração de documentação, entre outros;
 \item Suportar várias linguagens de programação (atualmente \textit{C++}, \textit{Python}, \textit{Octave} e \textit{LISP}~\cite{ROS_PAPER});
 \item Constituir um sistema operativo leve e robusto;
 \item Permitir a utilização \textit{peer-to-peer}.
\end{itemize}

O ambiente ROS apresenta diversas facilidades, como por exemplo, a possibilidade de gravação de mensagens de nodos em disco, 
um facto interessante na pois permite a posterior 
análise e desenvolvimento de software em laboratório com dados reais.
Por exemplo, é possível gravar as imagens de uma câmara em disco e posteriormente 
reproduzi-las como se fossem novamente publicadas pela câmara e desenvolver o software de 
processamento de imagem \textit{offline}. 
A plataforma ROS está implementada de acordo com a nomenclatura de nodos,
mensagens, tópicos e serviços~\cite{ROS_PAPER}.
Os nodos são os processos que fazem a computação do 
sistema, e que constituem os diversos módulos do software. Com 
a arquitetura modular, é necessário que os nodos comuniquem entre
si, processo efetuado através de mensagens. Uma mensagem constitui uma
estrutura de dados específica com os tipos de dados primitivos das 
linguagens de programação (\textit{integer}, \textit{floating point}, \textit{boolean}, entre outros).
Uma mensagem pode ser composta por outras mensagens ou por vetores de mensagens
e podem constituir estruturas de dados bastante complexas.
Para que um determinado nodo possa subscrever ou publicar uma 
determinada mensagem no sistema, é necessário atribuir-lhe um nome.
Desta forma, o nome de uma mensagem constitui um tópico. 
É possível que possam existir diferentes nodos a publicar e subscrever 
no mesmo tópico, bem como o mesmo nodo publicar e subscrever diversos tópicos.
A comunicação entre mensagens é feita sob a filosofia publicar/subscrever
que, embora seja bastante flexível,
não é adequada para situações em que seja necessário o uso de 
RPC(\textit{Remote Procedure Call})~\cite{ROS_PAPER}.
Por isso, na constituição do sistema ROS existem os serviços para 
comunicações do tipo pedido/resposta. Desta forma, um serviço
constitui um par de mensagens: uma para o pedido e outra para a resposta.

O software baseado em ROS é organizado em \textit{packages}.
A definição de \textit{package} é um pouco complexa, pois depende da aplicação a
que se destina e o seu grau de complexidade. Contudo uma \textit{package}
consiste obrigatoriamente num diretório que contém um ficheiro XML com uma descrição geral
e com a informação sobre dependências de software~\cite{ROS_PAPER}. 
Normalmente, no diretório de uma \textit{package} existem diversos
sub diretórios para organizar a informação e separar, por exemplo, ficheiros de 
código fonte de ficheiros executáveis para que o software possa ser desenvolvido
de uma forma organizada. Para exemplificar o conceito, existem \textit{packages} destinadas
à comunicação com sensores, à perceção, navegação ou planeamento de trajetórias.

Desta forma, para garantir uma boa continuidade do software desenvolvido,
é de extrema importância garantir a  sua organização e documentação
e nesse sentido a plataforma ROS assume um papel importante.
 