quinta-feira, 10 de abril de 2014


Calibração da Câmara


Para iniciar esta nova semana foi feita a calibração da nova câmara ( Logitech c310 ) para resoluções de 1280 x 960 e 800 x 600, tendo-se verificado a alteração dos parâmetros utilizando a mesma câmara com diferentes resoluções. Foi ainda feita a correção da distorção, tendo-se esta verificado mais notória para a resolução de 800 x 600. Uma vez que a distorção é tão pequena que seria impossível notar num padrão com linhas rectas e para tornar este efeito visível foram adquiridas duas imagens de uma superfície completamente branca, uma com distorção e outra com a distorção corrigida. Como se pode verificar nas figuras abaixo a correção da distorção leva a uma imagem com margens pretas, mais notórias a meio da arestas.


Imagem com distorção

Imagem com distorção corrigida



Distância ao marcador


A passada semana foi dedicada à calibração da câmara, bem como à obtenção da imagem com a distorção corrigida e finalmente ao cálculo da distância ao marcador.

Neste sentido, foi melhorado o módulo criado para publicação da imagem, o qual publica agora também a informação relativa à câmara. Deste modo é possível calibrar a câmara, tendo sido criada uma launch file que visa facilitar esse processo. Para esse efeito, basta alterar, na referida launch file, os parâmetros relativos ao xadrez utilizado na calibração, ou seja, o número de quadrados interiores e a sua dimensão, tal como a designação da câmara utilizada, de forma que cada câmara tenha a sua calibração.
Foi ainda utilizado o módulo ROS de correção da distorção da imagem, o qual subscreve a imagem original e publica a imagem corrigida, com base na calibração previamente efetuada.
Posteriormente foi criada uma mensagem que permite o envio da informação relativa ao marcador detectado.
Por fim foi criado um novo módulo que permite o cálculo da distância ao marcador. Este recebe a mensagem com a informação relativa ao marcador, e com base nas suas dimensões e na calibração da câmara calcula a sua distância aproximada. Este tem ainda como função fazer a amostragem da detecção do marcador tal como dos resultados obtidos.



Exemplo da detecção, descodificação e cálculo da distância para um marcador

terça-feira, 1 de abril de 2014


Ponto da Situação


Primeiramente, após as sessões ministradas no LAR, foi necessária uma familiarização com a linguagem C++ assim como com o ambiente ROS.

Posteriormente foi efetuado um levantamento do estado da arte, no que diz respeito à descodificação de Data Matrix. Como resultado dessa pesquisa foram encontradas duas bibliotecas possíveis de implementar em linguagem C++, ambas Open Source, sendo estas a libdmtx e zxing. Porém, apenas a biblioteca libdmtx foi desenvolvida em linguagem C, a qual é totalmente compatível com C++. Adicionalmente, esta biblioteca possuí uma documentação relativamente organizada o que facilita a sua utilização e compreensão. Tendo sido, portanto, esta a biblioteca adotada para o desenvolvimento deste trabalho.

Após um período de adaptação à referida biblioteca, foi possível desenvolver um módulo ROS que faz a leitura em tempo real de um Data Matrix, tendo sido posteriormente estendido à leitura de múltiplos Data Matrix.

Foi ainda possível, após estudo da biblioteca em questão, encontrar o posicionamento dos Data Matrix na imagem. Nesta fase foram encontrados alguns obstáculos, uma vez que, após compreensão das estruturas de dados presentes na biblioteca, a posição dos Data Matrix não se encontrava correta. Isto deveu-se ao facto de a origem da imagem na biblioteca libdmtx não corresponder à origem na biblioteca OpenCV, biblioteca esta que foi utilizada para mostrar a imagem e marcar a posição dos Data Matrix. Facto que levava os pontos a aparecerem deslocados da sua posição ao longo das colunas.

Já na passada semana, foi desenvolvido um novo módulo de aquisição e publicação da imagem em ambiente ROS, uma vez que com o módulo até então utilizado apenas foi possível a aquisição de imagem usando a webcam integrada do computador.

Por último foi feita a transição de todo o trabalho para o controlo de versões do laboratório e criada documentação para os módulos ROS desenvolvidos.