% ------------------------------------------------------------------------------------------------
%  Description on how xb3 works with ROS
% ------------------------------------------------------------------------------------------------

De forma a integrar a câmara \textit{bumblebee xb3} na plataforma ROS (\textit{Robot Operating System}), 
foi necessário desenvolver um nodo capaz de
comunicar com a câmara através da interface IEEE-1394b e publicar 
os respetivos tópicos de imagem para o processamento estéreo
posterior.

\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{Images/xb3_ros_diagram.eps}
\caption{\textit{Baselines} da xb3}
\label{fig:xb3_blocks}
\end{figure}

O diagrama \ref{fig:xb3_blocks} representa duas combinações possíveis para \textit{baselines}.
A lente da esquerda em combinação com a central formam o \textit{short baseline}
e com a da direita formam o \textit{wide baseline}.

O nodo responsável pela leitura de imagens da câmara é baseado em bibliotecas 
escritas em C para a comunicação \textit{FireWire} para obtenção de imagens
que são posteriormente convertidas para o formato do OpenCv para que seja possível efetuar algumas
operações como a diminuição da resolução das imagens, ou filtragem. O nodo é capaz 
de publicar para o ambiente ROS os seguintes tópicos:

\begin{itemize}
 \item $/short/left/image \_ raw$;
 \item $/short/left/camera \_ info $;
 \item $/short/right/image \_ raw $;
 \item $/short/right/camera \_ info $;
 \item $/wide/left/image \_ raw $;
 \item $/wide/left/camera \_ info $;
 \item $/wide/right/image \_ raw $;
 \item $/wide/right/camera \_ info $.
\end{itemize}

Cada tópico acima enumerado com a terminação $image \_ raw$ representa o 
conjunto de píxels obtidos diretamente das câmaras respetivas, cuja resolução
pode ser ajustada quer para 1280x960, quer para 640x480. 
Os tópicos do tipo $camera \_ info $ contém dados relativos às matrizes das câmaras
e dos \textit{baselines}, nomeadamente as matrizes intrínsecas, de retificação e de projeção,
e ainda os coeficientes de distorção. Esta estrutura de dados é essencial para poder
executar as diversas ferramentas do ROS destinadas ao processamento estéreo.
Normalmente, não são utilizadas imagens com resolução muito elevada, uma vez que
quanto maior a dimensão das imagens maior será o custo computacional envolvido.
Neste caso, as imagens originais do dispositivo, com uma resolução de 1280x960, 
foram ajustadas para 640x480, após passagem de um filtro 
gaussiano de 5x5 e de rejeitar as colunas e linhas pares.