Tabela de conteúdos

Trabalho Prático 3

Introdução

O trabalho prático 3 consiste em criar um robô autônomo utilizando peças Lego. O robô deverá ser capaz de realizar tarefas associadas ao uso de sensores.

As tarefas são: reconhecimento de cores, percorrer um trajeto sobre uma linha preta no chão, seguir luzes polarizadas, seguir paredes e implementar um sistema de controle capaz de permitir a movimentação em linha reta.

Objetivos

O objetivo do trabalho é familiarizar com o uso de sensores, como sua construção, avaliação e processamento dos sinais medidos.

Os sinais serão utilizados como dados de entradas em procedimentos relacionados às tarefas que o robô deverá ser capaz de realizar.

Desenvolvimento

Inicialmente, optamos por modificar a estrutura do robô que tínhamos até então do trabalho prático anterior.

Utilizávamos até então pequenas esteiras entre algumas engrenagens. Essa estrutura tornava movimentos como curvas difíceis de controlar e muitas vezes imprevisível. :-/

Visando a estabilidade e uma maior facilidade no movimento do robô, trocamos essa estrutura e inserimos uma “rosca sem fim” no eixo do motor. Isso garantiu maior estabilidade.

O próximo passo foi o estudo do funcionamento dos sensores. Utilizamos nessa montagem:

Foi necessário, para todo sensor LDR utilizado, envolvê-lo numa espécie de capa para isolá-lo, em algumas direções, da luz ambiente e focar suas leituras. Isso aumenta a qualidade das medidas filtrando ruídos provenientes da luz ambiente.

Para o conjunto de reconhecimento de cores utilizamos uma placa de circuito impresso para facilitar a montagem.

Tal placa foi fixada à frente do robô. Logo abaixo foi fixado o sensor de proximidade e mais dois sensores LDR responsáveis por detecção de obstáculos e seguir a linha preta, respectivamente.

Os sensores responsáveis por seguir as luzes polarizadas foram montados a partir da melhor posição dos filtros. Tal posição é escolhida verificando para qual orientação do filtro há uma maior luminosidade a partir de uma certa fonte de luz polarizada X.

Por fim, os sensores break-beam foram instalados na parte de baixo do robô. Foi necessário criar em papelão uma espécie de “círculo dentado”, para que fosse possível contar o número de voltas. Uma vez que sabemos o número de “dentes” de tal círculo, sabemos quando houve uma volta completa e assim faz-se as inferências necessárias ao controle PD.

Algoritmos Implementados

Reconhecimento de cores

Como a luz ambiente é altamente variável e inconstante foi implementado um algoritmo de calibração.

Tal algoritmo liga cada led por alguns segundos e toma 50 medidas e faz a média dos valores obtidos. O valor final é uma combinação linear das medidas feitas.

Formalmente, o valor da cor é calculado como:

COR = (leitura_led_amarelo) + 2*(leitura_led_vermelho) + 4*(leitura_led_verde) + 8*(leitura_led_azul);

O reconhecimento ocorre com uma leitura como feita na calibração e uma tolerância de erro é aplicada. Procura-se então um valor de cor calibrado que esteja no intervalo lido.

Seguindo luzes polarizadas

O algoritmo implementado no robô que melhor respondeu ao propósito foi utilizar apenas 1 sensor por luz.

A idéia é: para o filtro ajustado para um tipo de luz responderá com menor valor quanto este estiver melhor direcionado para a fonte. Já que haverá maior luminosidade e portanto menor valor retornado pelo sensor.

Portanto o algoritmo é iniciado com uma leitura no sensor para o tipo de luz escolhida no menu na posição inicial. O robô faz uma pequena curva à esquerda e faz outra medida. Das duas possibilidades:

1 - Caso a medida seja menor, ou seja, a intensidade de luz é maior, essa direção é considerada adequada. O robô continua fazendo curvas à esquerda enquanto o valor lido seja menor que o anterior. Caso o valor lido seja maior, o robô vira à direita, para refazer a trajetória correta e anda reto por um certo tempo.

2 - Caso a medida seja maior, ou seja, a intensidade de luz é menor, o robô retorna à posição original e tenta a mesma estratégia em 1, mas dessa vez tentando sempre à direita.

Após achar a melhor direção e seguir reto por um instante, todo o algoritmo recomeça.

Seguindo a linha preta do campo

Decidimos por fixar os dois sensores LDR sobre a linha preta. A máquina de estados implementada possui, portanto os seguintes estados e ações para os sensores:

Estado Ação
Direito: Preto; Esquerdo: Preto Continuar em linha reta
Direito: Preto; Esquerdo: Branco Aumente a potência do motor esquerdo em 10%
Direito: Branco; Esquerdo: Preto Aumente a potência do motor direito em 10%
Direito: Branco; Esquerdo: Branco Ande em marcha ré

Os pares estado-ação descritos acima realizaram a tarefa de seguir a linha de forma interessante e robusta, uma vez que não há necessidade do robô parar para tomar qualquer decisão já que os sensores são lidos ao mesmo tempo que se move.

Reconhecimento de obstáculos

Os obstáculos no contexto deste trabalhos são os blocos coloridos disponibilizados.

Neste ponto não é necessário calibração a todo instante como o algoritmo de reconhecimento de cores. Basta apenas, previamente, definir qual a distância adequada para a detecção dos blocos.

A partir disso, olha-se a leitura do sensor de proximidade e guarda-se o valor. Este será usado operando de comparação a todo instante para verificar a existência de blocos no caminho.

Shaft Encoder e Controle PD

O controle do shaft encoder foi realizado utilizando uma biblioteca da linguagem IC.

Arquivos SENCDR4.ICB e SENCDR5.ICB. Que são responsáveis por contar a quantidade de voltas, bem como calcular a velocidade a cada 64ms.

A partir desses valores utilizamos o código do controlador exposto em aula, o código se encontra nas trasparências do livro: Robotics Explorations: A hands-on Introduction to Engineering, Fred Martin, 2001, Prentice-Hall.

Estudo das medidas dos sensores

Assim como especificado no trabalho, o estudo das variações de medidas a partir dos sensores foram estudados. A seguir os dados são apresentados. Vale lembrar que os valores lidos na Handyboard são dados de 0 a 255.

Leituras feitas com o sensor sem proteção e com LEDs desligados

Cor Amarela

Distância D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
1cm61616261616261616162
2cm48494949484949495050
3cm38383939393940404040


Cor Azul

Distância D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
1cm81808081818081818180
2cm58576161606060606060
3cm49505049505050505050


Cor Verde

Distância D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
1cm47474848494847484848
2cm39383938383939393939
3cm31303131303131313131


Cor Vermelho

Distância D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
1cm45464746464646464647
2cm38393938393939393939
3cm31323131323232323232

Leituras feitas sem caixa de proteção e motor desligado

Cor Amarela

76767677777776777777


Cor Azul

108108108108109109109109109109


Cor Verde

101101101102102102102103103103


Cor Vermelho

80828383838484848484

Leituras feitas sem caixa de proteção e motor ligado

Cor Amarela

74747474757575767575


Cor Azul

104104104104103103104103104104


Cor Verde

102102102103103103103103104104


Cor Vermelho

84848484858585858585

Conclusão

O trabalho proporcionou o contato direto com as dificuldades na utilização e calibração de sensores. Pôde-se ver que a influência da luz ambiente tem grande relevância na medição e que, por este motivo, soluções para eliminar esta influência indesejada são implementados, pois assim, o robô desenvolvido não está calibrado somente para um ambiente, mas sim para qualquer ambiente em que este esteja.

Documentação

Relatório: relatorio_tp3.pdf

Arquivos

Código: tp3_codigo.tar.gz