Trabalho Prático 2: Identificação de cores e linhas escuras

1. Proposta

Como os grupos já estão familiarizados com os métodos e ferramentas disponíveis, é hora de expolorar técnicas mais avançadas. O objetivo deste trabalho é desenvolver os conhecimentos dos alunos em sensoriamento e processamento de infomração. Para tanto, os robôs devem ser adaptados de modo a implementarem duas novas funcionalidades:

  • Identificar cores de objetos em um conjunto pré-determinado;
  • Identificar linhas escuras no piso e desenvolver uma lógica para que o robô as siga.

2. Planejamento Inicial

A primeira decisão de projeto foi reaproveitar o robô anterior (a “carroça a vapor”), pois esta já possuia todo o sistema de apoio e transmissão prontos. Uma descrição mais detalhada do que foi feito neste aspecto será apresentada nas próximas seções. Além disto, dada a natureza das atividades propostas, adotamos como fundamentos para este projeto os seguintes conceitos:

  • Usar técnicas de medição diferencial sempre que possível;
  • Adicionar isolamento aos sensores ópticos, de modo que estes recebam estímulos significativos provenientes apenas de direções desejadas;
  • Prover fontes de luz à montagem dos sensores ópticos (adequadas ao tipo de medição).

Estes três conceitos foram propostos pelo mesmo motivo: Medições baseadas em sensores de luminosidade são muito susceptíveis a variações de condições do ambiente onde são realizadas. Especificamente, o isolamento reduz a exposição dos sensores a fontes de estímulos indesejados, a iluminação incorporada ao circuito garante uma quantidade mínima de sinal a ser detectado e a montagem diferencial permite eliminar interferências que atuam sobre todos os sensores envolvidos em uma medição. Outra vantagem desta última técnica é reduzir o tempo gasto em calibrações, pois como boa parte das influências do ambiente serão eliminadas, não é necessário caracterizá-las exaustivamente.

3. Implementação dos Sistemas de Sensoriamento

Para atender as especificações deste trabalho, desenvolvemos dois sistemas de medição independentes, sendo um para a identificação de cores e outro para a detecção de transições entre ambientes claros e escuros. Ambos são baseados em resistores fotossensíveis (LDRs) e foram montados em uma mesma placa de circuito impresso. A implementação física destes sistemas e a lógica de interpretação de seus sinais estão descritas nas subseções seguintes.

3.1 Sensor de Cores

A figura 1 mostra os elementos principais usados para captar estímulos

figura 1

Apesar da baixa qualidade da imagem, podemos identificar o LDR no centro, envolvido em um tubo termoretrátil, e três LEDs colocados ao seu redor. Cada um dos LEDs fornece uma das cores primárias (o de cima é vermelho, a esquerda temos o azul e a direita, o verde).

Para identificar a cor de um objeto o sistema faz quatro leituras do valor do LDR: uma com cada LED aceso, para medir quanto de cada componente o objeto reflete, e outra com todos os LEDs apagados, que detecta a parcela correspondente à reflexão da luz ambiente. Subtraindo o resultado da última medida (todos apagados) das demais, temos indicadores da característica de reflexão do objeto para cada cor primária. Comparando estes valores com uma tabela previamente montada, podemos identificar a cor do objeto. Para montar a referida tabela, anotamos vários valores de saída para as cores que pretendíamos identificar, até determinar faixas confiáveis e ao mesmo tempo abrangentes. Foram usadas dez medições para cada cor que nosso robô seria capaz de reconhecer.

Um problema decorrente desta montagem foram diferenças na potência dos LED's quando submetidos a tensões iguais. A solução adotada foi adicionar “pesos” à cada leitura, de acordo com o LED ativado. Para manter a coerência na eliminação da influência ambiente, o valor e a ser subtraído em uma dada medida foi multiplicado pelo peso da mesma. Os valores atribuídos a cada peso foram determinados empiricamente.

3.2 Sensor de Linha Escura

O sensor desenvolvido para esta funcionalidade pode ser visto na figura 2

figura 2

Este sensor foi posicionado na parte de baixo da placa e seus principais elementos são dois LDRs e um LED, conforme pode ser visto na imagem. Neste caso não foi tão necessário envolver os sensores em tubo temrmoretrátil, pois o próprio corpo do robô bloqueavam boa parte da luz ambiente. No entanto foi necessário isolar a área lateral do LED, de modo que os LDRs captassem sua luz apenas por reflexão.

Inicialmente pretendíamos usar uma medição diferencial, porém seria necessário verificar qual lado detectou o maior (ou menor valor) em todas as medidas feitas. Uma solução mais simples para este caso foi inspirada na seção 2.4 do livro-texto, que fala sobre “Veículos de Braitenberg”. A implementação utilizada está descrita em mais detalhes na versão pdf deste relatório, mas basicamente o sistema adota um comportamento reativo. A princípio, ambos os motores são ligados com 20% de sua potência máxima. Os sensores tem sua saída normalizada para valores entre 0 a 80, e armazenada em uma variável que é somada à potência do motor. Como alta luminosidade produz saídas maiores em nossos sensores, cada motor é controlado pela leitura do LDR do mesmo lado. Assim, se o robô começa a se desviar para um dos lados, o motor correspondente aumentará sua potência, fazendo a trajetória se curvar para o outro lado. Uma característica interessante desta abordagem é produzir trajetórias suaves, pois a diferença entre a potência dos motores dependerá apenas do quão longe um sensor está da linha escura.

Para completar o algoritmo, falta uma lógica para definir o comportamento do robô caso os dois sensores percam a linha escura simulâneamente, por exemplo em uma curva de 90 graus ou no fim do caminho. Neste caso, aplicamos valores de potência iguais mas com sinais contrários aos motores, e esta condição se mantém até que um dos sensres volte a detectar algo. Assim, caso o robô se perca, ele irá girar no próprio eixo até encontrar o caminho de volta.

4. Montagem

Conforme já foi dito, esta montagem foi construída sobre o robô do tp1, no entantoas características das atividades deste trabalho e a implementação de algumas melhorias propostas anteriormente conferiram características únicas a este novo modelo.

A primeira mudança foi aumentar o espaço onde é colocada a handyboard, de modo que ela fosse apoiada por peças de lego em todos os lados (eliminando a necessiadede de se usar uma gominha para prendê-la). O resultado pode ser visto na figura 3, que mostra o robô atual e o anterior, ambos com a frente voltada para a esquerda.

figura 3

Nota-se que outra diferença foi o sentido demovimento do robô. Transferimos os eixos que apoiavam a caneta para o outro lado, e fixamos neles a placa dos sensores, assim a traseira do robô passou a ficar apoiada no roll-on, reduzindo trepidações observadas na montagem anterior. Também acrescentamos mais travas verticais e algumas peças ente a handyboard e o suporte do roll-on, para melhorar a rigidez mecânica da montagem, porém isto aumentou consideravelmente o peso do robô.

A figura 4 mostra os dois robôs vistos por baixo

figura 4

Nesta figura podemos ver melhor a posição de fixação da placa. Nota-se também o aumento de comprimento do robô. Apesar do aumento de peso e tamanho, a estrutura agora parece bem mais resistente. Durante os testes avaliaremos se esta configuração é realmente adequada ou será necessário procurar um compromisso entre estas variáveis.

Destacamos que, apesar de não nos preocuparmos em medir a velocidade do robô neste trabalho, os sensores de interrupção de feixe acoplados às rodas foram mantidos. Isso porque, além de estarem fixados em peças importantes na sustentação da estrutura, provavelmente usaremos este mesmo robô como base para o próximo trabalho e a competição, onde certamente estes componentes se farão necessários.

Para completar, as figuras 5 e 6 mostram, respectivamente, a frente e traseira da montagem final.

figura 5

figura 6

Neste estágio, já tínhamos a montagem pronta e calibrada, mas faltava nomeá-la. Originalmente todos os nossos robôs receberiam o nome de algum carro do desenho animado “Corrida Maluca”, porém devido aos recorrentes erros de identificação de cores nos primeiros testes, quebramos este paradigma e nomeamos nosso segundo robô Dalton.

Teste e Resultados

Para limitar a complexidade das tarefas, ambas seriam apresentadas em ambiente controlado. Por exemplo, a identificação de cores seria testada usando apenas cubos de isopor pintados, disponíveis no laboratório. Dentro de um conjunto de seis cores, todos os robôs deveriam ser capazes de identificar pelo menos quatro delas, sendo três escolhidas pelo grupo e a outra correspondendo ao bloco negro. Para a nossa apresentação, escolhemos os blocos azul, verde e vermelho .

Constatamos que o sensor de cores do robô fornecia bons resultados a até cinco centímetros de distância do objeto. Para distâncias maiores, ainda havia algum sinal detectável, porém, pela redução significativa da relação sinal-ruído, consideramos estas medidas não-confiáveis. Acima de dez centímetros de distância já não há sinal inteligível na saída do sensor. Na seção três descrevemos como usar este sensor para identificar a cor do obejto, baseado em um conjunto pré-estabelecido. Uma consequência desta implementação é a incapacidade do robô diferenciar blocos escuros da ausência de objeto, pois em ambos os casos, a luminosidade medida para cada componente é muito próxima do valor ambiente. Um fato interessante é que nosso robô foi capaz de identificar as cores programadas em outros objetos além dos blocos de isopor, como as lixeiras plásticas do prédio e alguns tipos de papel. No entanto, não obtivemos resultados satisfatórios ao tentar identificar outras cores além das primárias, principalmente naquelas em que o componente vermelho é mais significativo.

Para o teste das linhas escuras, foi utilizada a plataforma de madeira disponível no laboratório. Nosso robô apresentou o comportamento esperado, descrevendo trajetórias suaves e não saindo da linha em nenhuma das tentativas. Um ponto mais complicado do traçado apresentava bifurcações em forma de “T”, onde a nossa solução sempre tomava o caminho da esquerda, devido à rotação programada para quando os dois sensores simultâneamente “perdessem a linha”. Uma deficiência desta implementação foi a incapacidade do robô em se orientar caso inicialmente não haja uma linha escura a uma distância menor do que metade do seu comprimento, aproximadamente, pois o robô começará a girar, mas a condição de saída deste estado nunca será atingida.

Conclusões e Propostas de Melhorias

Nosso robô conseguiu cumprir todas as tarefas propostas, o que por si só representa um avaço significativo quando comparado ao primeiro trabalho. O que mais nos chamou a atenção desta vez foi como interferências e ruídos são significativos em sistemas autônomos. De fato, aprendemos lições valiosas sobre avaliar a coerência de medidas e os fatores ambientais que podem influenciar o sistema, bem como alguns métodos e idéias para reduzir efeitos indesejados. Destacamos como o conjunto de soluções adotadas para eliminar as interferências foi eficaz neste projeto, especialmente o uso de fontes de luz acopladas à montagem e a execução de múltiplas medidas para cada identificação de cores.

Porém, apesar dos bons resultados obtidos, ainda há pontos que precisam ser melhorados em nossa montagem. Abaixo listamos os que consideramos mais relevantes:

  • Reavaliar a estrutura mecânica do robô, de modo a reduzir seu peso sem comprometer a estabilidade;
  • Usar LEDs de potências semelhantes no sensor de cores. Em especial, substituir o LED vermelho por um componente de alto brilho tão logo seja possível;
  • Acrescentar sistemas de isolamento aos LDRs do sensor de faixa escura, para reduzir ainda mais as influências indesejadas;
  • Substituir o sistema de detecção de velocidade atual por outro que utilize componentes montados externamente às rodas para interromper o feixe dos sensores. Assim, poderemos reduzir a distância do chassis do robô e seus pontos de apoio, minimizando a deformação vertical no eixo de tração;
  • Alterar a interpretação do sinal lido no LDR frontal, de forma a diferenciar um bloco escuro da ausência de blocos;
  • No algoritmo de seguir linhas, introduzir alguma solução que permita ao robô expandir sua região de detecção quando as busca de uma trajetória falhar sucessivamente. Como idéia inicial, poderíamos fazer o robô andar em espiral quando não detectar nada, ou descrever aleatóriamente círculos e linhas retas até achar algo para seguir.

A idéia de propor uma lista de melhorias para o próximo trabalho se mostrou bastante conveniente. Ao começar este projeto, já possuíamos algumas idéias claras sobre o que deveria ser corrigido, e trabalhamos em sua implementação paralelamente ao planejamento das novas funcionalidades. Portanto, esperamos ter pelo menos alguns dos itens desta nova lista implementados para o próximo trabalho.

Documentação

cursos/introrobotica/2010-2/grupo07/tp2.txt · Última modificação: 2010/10/20 15:50 por mauroantonio