Tabela de conteúdos

Trabalho Prático 3

Objetivo

Desde o primeiro trabalho prático, encontramos diversas dificuldades com relação ao controle da posição de nosso robô. Para resolver esses problemas, durante diversas aulas do semestre estudamos diversas formas de controle de posição e estratégias para podermos ter maior conhecimento da trajetória de nosso robô. O primeiro objetivo é obter a velocidade de rotação do eixo das rodas, informação que será utilizada para promover o controle da velocidade das rodas. Após, utilizando essa informação, nosso robô será capaz de percorrer distâncias mais precisas e girar ângulos, tarefas que serão essenciais para a execução do algoritmo de controle deliberativo (wave front). Além disso, o robô deve ser capaz de seguir a parede a partir de algoritmos definidos.

Evolução - Robolation 2.0beta

Após detectarmos diversos problemas na montagem anterior, decidimos por mudar todas nossa estrutura do robô, começando pelo acionamento. Anteriormente posicionamos o motor na posição vertical, acionando um roldana que por sua vez acionava o eixo de rotação. Porém nessa montagem, além de frágil, ocorria o travamento das rodas e o desgaste das peças. Dessa forma, optamos por fazer o acionamento na vertical e utilizar as rodas maiores, proporcionando uma maior velocidade ao robô.

Inicialmente tentamos de diversas formas o acionamento através do encaixe de roldanas, variando a relação de altura entre o acoplamento do eixo de rotação com as rodas. Por fim, optamos por utilizar correntes para ligar os dois eixos, uma solução que ficou simples e robusta, atendendo aos nosso requisitos. Porém, por utilizarmos eixos muito compridos, notamos que a distribuição de pesos entortava o eixo e por isso criamos uma forma de equilibrar esse peso. Com o fim da montagem mecânica iniciou-se o projeto e fixação dos sensores.

Shaft Encorder

A idéia inicial era de utilizar a chave ótica junto de uma roldana específica do kit lego, porém os únicos componentes encontrados não se encaixavam de forma a proporcionar a contagem dos pulsos. Nem mesmo nas lojas foi encontrado o componente necessário e por isso tentamos criar novas estratégias para realizar a contagem.

A primeira idéia foi, utilizando o metal de uma latinha de refrigerante, criar os círculos dos encoders com furos “simetricamente” espaçados para realizar a contagem. O metal, teoricamente, seria resistente fisicamente e proporcionaria um maior precisão da medida, já que teríamos mais furos por circunferência. As chaves óticas foram montadas, utilizando resistores de 330Ω, e acopladas em nosso robô. Pelo fato do espaçamento não estar muito preciso, a solução acima não funcionou e fomos atrás de outras possibilidades, chegando no encoder do mouse de bolinha. O número de ranhuras era muito grande para a leitura do sensor e tentamos assim diminuir o número de dentes, mas mesmo assim, não obtivemos sucesso.

Por fim, utilizando uma engrenagem pequena do próprio kit conseguimos criar uma forma de ler a velocidade de rotação do eixo das rodas, mesmo com uma faixa pequena de valores (entre 0 e 8 pulsos por segundo), possibilitando assim a criação do controlador de velocidade.

Controlador PD

Afim de projetar o controlador de velocidade tendo como referência, as informações obtidas pelos shaft enconders, projetamos um controlador PID. Porém devido a problemas na resolução (faixa de 0 à 8 pulsos por segundos) do enconders intalados, optamos por implementar o somente o controlador de posicão utilizando o número de counts. A Figura 1 mostra o resultado do algoritmo que recebe como parâmetro a distância e à anda utilizando o controlador PD.

Na Figura 2 mostra a velocidade retornada pelo enconders, nota-se a baixa resolução, nesses enconders.

WallFollow

Wave Front

Implementamos o algoritmo Wavefront para a navegação de nosso robô (Tal algoritmo é o mesmo disponibilizado na página de expecificação do trabalho, porem com os bugs nele existentes corrigidos). Seu funcionamento é o seguinte: fornecendo-se ao robô um mapa de sua posição atual, localização de obstáculos, e posição final, esse algoritmo calcula uma possível rota que o robô deve seguir para se deslocar da posição inicial até a final. O mapa fornecido é discretizado, sendo o tamanho dos grids dependente do nível de detalhes desejado.

O algorítmo do wavefront baseia-se em uma busca em largura que parte do ponto de destino e vai calculando a distância (em número de quadrados) de cada posição do grida até o ponto final. Tal algoritmo tem a propriedade de achar (se existir) uma tragetória de um ponto dado do grid até um outro ponto.

Para deslocar-se, nosso robô usa basicamente dois tipos de movimento: rotação de 90° e translação de 60cm (tamanho do grid; dimensão do piso paviflex). Esses movimentos de rotação e translação foram calibrados no próprio ambiente de apresentação, para minimizar os erros. A calibração foi feita utilizando-se a rotação fornecida pelos encoders pois no momento nos parecia a alternativa mais confiável.

Os resultados obtidos foram muito satisfatórios, e conseguimos uma boa calibração de rotação e translação do robô (vide video). O algoritmo se mostrou bastante funcional durante todo o tempo em várias circunstâncias diferentes que testamos.

Nota: Os bugs citados acima no algoritmo se referiam a erros de uma implementação errada de uma fila, e de falta de testes em algumas condições de contorno do algoritmo.

Código fonte: wavefront.pdf

Exercício da seção 3.6.5

a) Assumindo que o LED do sensor óptico tem uma queda de 2,0V e que ele esteja ligado em série a um resistor de 330 ohm e uma fonte de +5V, calculamos a corrente que flui pelo circuito: I = (5V – 2V) / 330 ohm = 9,1mA

b) Para múltiplos sensores (múltiplos diodos), ao invés de reservar uma entrada exclusiva pra cada diodo, podemos conectar vários à mesma entrada, economizando as portas da Handy Board. Para isso, conectamos os conjuntos diodo-resistor em paralelo, todos recebendo alimentação de +5V. Supondo que a corrente máxima que a Handy Board pode fornecer é de 500mA (esse dado não pôde ser confirmado, já que não encontramos essa especificação no manual da Handy Board), a quantidade máxima de LEDs que podemos conectar em paralelo são: nº LEDs = 500mA / 9,1mA = 54 Leds