Tabela de conteúdos
TP3
Introdução
Este trabalho possui três objetivos:
- Localização: Utilizando os conceitos do LDR diferencial, o robô deve ser capaz de se alinhar com a fonte de luz mais próxima presente no campo
- Odometria e Controle: Implementar um controlador PD para controlar a velocidade do robô. O robô deve ser capaz de realizar um determinado caminho que será selecionado através do menu (Reta, Quadrado, Triângulo).
- Navegação: O robô deverá seguir as linhas marcadas no campo de competição. Para isso deverá utilizar no máximo dois sensores ópticos
Todos os itens citados devem ser facilmente organizados em um menu.
Localização
Foi feita a montagem dos LDRs com os polarizadores, como mostra a foto abaixo:
Esse módulo foi posicionado na parte traseira do robô, de forma que, ao se alinhar para a luz, o mesmo fique de frente para o lado livre da mesa.
Os valores de conversão analógica digital encontrados para as medições de luminosidade perto da luz são, para o lado A (logo em frente à porta): entre 200 e 300 com o robô voltado para luz e aproximadamente 600 para qualquer outro lado; para o lado B: aproximadamente 900 com o robô voltado para luz e 600 para qualquer outro lado.
Odometria
Para a odometria, utilizou-se os pinos de interrupção, número 18 e 19, e um shaft encoder; cada interrupção é feita por um dente de uma engrenagem, que tem o total 24 dentes, e uma volta completa da roda equivale a 14cm.
Os cálculos de velocidade são feitos a cada segundo, gerando uma valores com unidades em cm/s. Esta velocidade é utilizada no controlador que trabalha para manter a velocidade em aproximadamente 10cm/s, a ideia é que ambas as rodas mantenham a mesma velocidade para que o robô faça uma reta e além de tudo completasse uma distância pré-determinada.
Utilizou-se o controlador da biblioteca PID, pareceu ser uma boa escolha já que seria possível abstrair a parte da criação do controlador, e a biblioteca permitia inserir parâmetros como KP, KI e KD. Seguindo essa linha de raciocínio, a biblioteca exigia um input para Setpoint e outro para valores reais dos parâmetros(no caso velocidade), assim a velocidade calculada é utilizada como parâmetro para alcançar a velocidade de setpoint.
Os maiores problemas durante a implementação foram o escorregamento das rodas, que ocorriam sempre, o que dificultou bastante tanto a parte de odometria, quanto qualquer outro movimento que fosse necessário. O escorregamento foi frequente, talvez, porque o robô ficou bastante estreito e as rodas ficaram bem próximas, além de essas serem bastante lisas. O outro problema foi a implementação do controle, o robô consegue andar reto, mas ao tentar realizar um quadrado, apesar de esse acertar o ângulo de giro, não era obtido o resultado esperado. Ao retornar da função de girar 90° e tentar fazer uma reta, o robô tendia para o lado contrário do giro, o que talvez seja por conta de o controlador tentar compensar a roda que fica parada durante o giro.
Um segundo problema está ligado a taxa de amostragem, tendo em vista que a velocidade das rodas eram baixas e havia somente 24 dentes, nem sempre os valores eram aquisitados num tempo ideal para fazer o controle no instante exato; dessa forma, ao começar a andar o robô ja iniciava tendendo para um lado até o controle ser feito.
Navegação
Na tarefa de navegação o grupo usou 2 sensores óptico-reflexivos um do lado do outro na frente do robô para seguir uma linha preta no chão.
Para se orientar na linha é feita uma leitura digital em ambos os sensores, um resultado de 1 equivale a o sensor estar em cima da linha e um resultado 0 corresponde a estar no chão branco/fora da linha.
Um sensor devolver um valor 0 quer dizer que o robô está se movendo inclinando em determinada direção e saindo da linha, então o motor correspondente ao lado do sensor cuja leitura é 0, motor da esquerda se for o sensor da esquerda e motor direito se for o da direita, tem sua velocidade aumentada para que o robô comece a andar inclinado na direção oposta, voltando para a linha até ter uma leitura contrária, como o sensor do lado oposto retornando o valor 0 e fazendo um movimento semelhante para o outro lado, andando sempre em diagonal em cima da linha.
Dificuldades encontradas:
- Alterar a velocidade do robô durante a movimentação resultava em derrapagens que faziam com que o robô saísse da linha depois de algumas alterações, para resolver esse problema adicionamos no código variáveis de estado para garantir que determinados comandos fossem executados somente uma vez, como por exemplo parar o robô por alguns milissegundos antes de mudar a velocidade, diminuído drasticamente o quando o robô derrapava.
- Outro problema encontrado foi que uma das rodas aleatoriamente não giraria como deveria causando uma grande mudança na direção do robô e resultando em o robô sair completamente da linha e ter grandes dificuldades para se orientar.




