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.
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.
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.
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.
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.
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.
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.
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.
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.
Cor Amarela
Distância | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 |
---|---|---|---|---|---|---|---|---|---|---|
1cm | 61 | 61 | 62 | 61 | 61 | 62 | 61 | 61 | 61 | 62 |
2cm | 48 | 49 | 49 | 49 | 48 | 49 | 49 | 49 | 50 | 50 |
3cm | 38 | 38 | 39 | 39 | 39 | 39 | 40 | 40 | 40 | 40 |
Cor Azul
Distância | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 |
---|---|---|---|---|---|---|---|---|---|---|
1cm | 81 | 80 | 80 | 81 | 81 | 80 | 81 | 81 | 81 | 80 |
2cm | 58 | 57 | 61 | 61 | 60 | 60 | 60 | 60 | 60 | 60 |
3cm | 49 | 50 | 50 | 49 | 50 | 50 | 50 | 50 | 50 | 50 |
Cor Verde
Distância | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 |
---|---|---|---|---|---|---|---|---|---|---|
1cm | 47 | 47 | 48 | 48 | 49 | 48 | 47 | 48 | 48 | 48 |
2cm | 39 | 38 | 39 | 38 | 38 | 39 | 39 | 39 | 39 | 39 |
3cm | 31 | 30 | 31 | 31 | 30 | 31 | 31 | 31 | 31 | 31 |
Cor Vermelho
Distância | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 |
---|---|---|---|---|---|---|---|---|---|---|
1cm | 45 | 46 | 47 | 46 | 46 | 46 | 46 | 46 | 46 | 47 |
2cm | 38 | 39 | 39 | 38 | 39 | 39 | 39 | 39 | 39 | 39 |
3cm | 31 | 32 | 31 | 31 | 32 | 32 | 32 | 32 | 32 | 32 |
Cor Amarela
76 | 76 | 76 | 77 | 77 | 77 | 76 | 77 | 77 | 77 |
Cor Azul
108 | 108 | 108 | 108 | 109 | 109 | 109 | 109 | 109 | 109 |
Cor Verde
101 | 101 | 101 | 102 | 102 | 102 | 102 | 103 | 103 | 103 |
Cor Vermelho
80 | 82 | 83 | 83 | 83 | 84 | 84 | 84 | 84 | 84 |
Cor Amarela
74 | 74 | 74 | 74 | 75 | 75 | 75 | 76 | 75 | 75 |
Cor Azul
104 | 104 | 104 | 104 | 103 | 103 | 104 | 103 | 104 | 104 |
Cor Verde
102 | 102 | 102 | 103 | 103 | 103 | 103 | 103 | 104 | 104 |
Cor Vermelho
84 | 84 | 84 | 84 | 85 | 85 | 85 | 85 | 85 | 85 |
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.
Relatório: relatorio_tp3.pdf
Código: tp3_codigo.tar.gz