Skip to content
January 23, 2013 / Ricardo Dias

Visão – Detecção do Farol

Neste post, iremos explicar a forma como vamos usar a câmara para detectar o farol. Tendo uma câmara, poderíamos usá-la para localização absoluta no labirinto, mas não iremos fazê-lo. Vamos antes usá-la para detectar o farol, substituíndo assim os sensores infra-vermelhos convencionais.

A câmara escolhida foi a PS3Eye, uma vez que se encontra facilmente a bom preço pela net (eBay, claro está) e há drivers para unix bastante elaborados, que incluem o controlo dos diferentes parâmetros da aquisição de imagem.

No entanto, a câmara original tinha 2 problemas principais: ângulo de visão reduzido e filtro de infra-vermelhos (bloqueia os infra-vermelhos e deixa passar a luz visível).

Isto levou-nos a realizar pequenos moddings na câmara. O primeiro problema foi ultrapassado através do uso de uma lente diferente, com Field of Vision superior. O segundo foi mais complicado, tendo nós de filtrar a luz visível e deixar passar na gama IV. Para este efeito de filtragem, testámos várias soluções tendo escolhido usar um filme de fotografia antigo, virgem e revelado. O filtro foi introduzido e fixado entre o CCD e a lente e esta última acoplada ao suporte original.

20130123_223848

Depois do hardware, vamos ao software!

O processo “vision” que irá correr na Raspberry encontra-se em estado de desenvolvimento final, já nos sendo possível detectar o farol com precisão considerável. O ângulo de visão da nova lente ronda os 100º, o qual é possível expandir através do uso de um sistema de PAN baseado num servo. Com este sistema, poderemos detectar o farol numa gama superior a 300º em torno do robô. O objectivo principal é manter o farol visível sempre que possível.

A figura seguinte é um screenshot do processo de visão, onde se pode ver a detecção farol em tempo real, com a câmara a cerca de 1 metro do farol.

Screenshot from 2013-01-23 22:43:12

Quando falamos de sistemas de tempo real, os recursos são tipicamente escassos. No que diz respeito à Raspberry, a maior limitação é mesmo o CPU, ou melhor, a sua velocidade. Torna-se fulcral a monitorização do tempo de processamento de forma a que cada ciclo do software execute numa janela temporal entre 2 frames consecutivas da câmara, para que não haja perda de frames.

O algoritmo usado para detectar o farol foi desenvolvido propositadamente para o efeito e executa em 2 a 3 milisegundos num PC razoável. Já na RaspberryPI, o tempo ronda os 20ms, o que é um tempo não desprezável. Contudo, se tomarmos a decisão de trabalhar a 15FPS (66ms/ciclo), o que é suficiente, dado o meio pouco dinâmico, este tempo é aceitável.

Para além disto, ao visualizar a janela na Raspberry, o CPU é usado para renderizar o ambiente gráfico, logo roubando ciclos para o processamento da imagem. Pensamos que ao adicionar a opção de processamento sem renderização e correr os processos sem o ambiente gráfico, o desempenho pode melhorar significativamente.

Estamos assim um passo mais próximos de concluir o nosso Stuart Little!

UPDATE 1: Depois de adicionada a opção de correr o processo de visão sem visualização, o processamento demora cerca de 1-4 ms.

Leave a comment