Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2017-1:grupo08:tp3

Grupo 8 - 404! Esse grupo não existe!

Trabalho Prático 3

Peter Petrelli the PD Programmer

Introdução

Um dos grandes desafios da robótica móvel é a localização: é esperado de um robô autônomo que ele seja capaz de saber os caminhos que pode percorrer, evitando se chocar com obstáculos ou se mover por rotas que não o levem a lugar algum (becos sem saída). Para isso, o robô deve perceber o mundo a sua volta por meio de sensores, planejar suas ações em seu controlador e executá-las utilizando atuadores.

Uma das possíveis formas de se localizar é a utilização do Sistema de Posicionamento Global - GPS. Com ele, consegue-se saber, por meio dos dados fornecidos pelos satélites, a posição do receptor de sinal instalado no robô. Este sistema é bastante útil para aplicações globais, já que funciona no mundo todo, mas para aplicações robóticas de pequena escala pode ser bastante problemático. Isso porque o GPS não funciona em locais fechados, como cavernas ou prédios, e fornece uma precisão que varia na casa dos metros, o que é muito pouco para um robô que se move em uma plataforma de cerca de 2m x 1m, por exemplo.

Na ausência do GPS, outra forma de se localizar é a odometria: contam-se as voltas dadas pelas rodas, sabendo-se assim, teoricamente, onde o robô vai parar. Porém, essa técnica por si só não é suficiente, pois a cada movimento acumulam-se erros de movimentação, já que as rodas podem derrapar ou até mesmo estar desalinhadas uma em relação à outra. Para contornar esse problema, devem-se adicionar informações à odometria, como o uso de giroscópios, acelerômetros ou bússolas. Algumas outras formas clássicas de resolver o problema são baseadas em localização relativa, como o Filtro de Kalman, e em localização absoluta (utilizando marcos/mapas), como os algoritmos de Markov e de Monte Carlo.

O objetivo deste trabalho em relação à tarefa de localização é fazer com que o robô saiba de que lado da plataforma está. Para isso, são utilizadas lâmpadas polarizadas (uma de cada lado da mesa) e um sensor LDR diferencial coberto por filtros polarizadores. Além disso, o robô é capaz de navegar seguindo linhas pretas demarcadas, por meio de um sensor óptico-reflexivo, e de se movimentar em linha reta, quadrado ou triângulo com diferentes comprimentos, valendo-se da odometria (implementada via sensores break beam) e do controle proporcional derivativo (PD).

Especificações das tarefas

Tarefa de Localização

A tarefa de localização foi dividida em duas partes:
. Montagem do sensor LDR diferencial; e
. Identificação da fonte de luz mais próxima através dos algoritmos implementados.

Tarefa de Odometria e Controle

A tarefa de odometria e controle foi dividida em quatro partes:
. Montagem e adaptação dos sensores;
. Shaft encoding;
. Desenvolvimento do algoritmo de PD; e
. Desenvolvimento dos algoritmos dos trajetos.

Tarefa de Navegação

A tarefa de navegação se constituiu de duas partes:
. Montagem dos sensores óptico-reflexivos; e
. Implementação do algoritmo.

Menu

Todas as tarefas puderam ser acionadas facilmente pelo Menu.

Especificações do robô

A estrutura do robô segue os mesmos moldes do trabalho anterior, no qual são usadas de apoio duas rodas fixas atuadas de forma independente e uma roda esférica na frente. Para o acionamento das rodas fixas houve uma redução de 3:25 em cada roda e os motores foram acionados com cerca de 40% de potência. A velocidade das rodas utilizada foi de 10 variações no break beam por segundo. O valor das constantes de controle foram Kp = 10 e Kd = 3 (obtidos empiricamente). As alterações estruturais notáveis foram a adição de um suporte traseiro para o sensor LDR diferencial (que pode ser visto na foto ao lado) e a remoção da caixa responsável por bloquear as luzes que interferiam na tarefa de identificação de cores.

A seguir encontram-se mais informações sobre as montagens dos sensores.

Montagem do Sensor LDR Diferencial

O sensor LDR diferencial consiste na união de dois LDR simples. Enquanto uma das extremidades é alimentada com 5V, a outra é aterrada. Um cabo de sinal é conectado na união dos dois LDRs e ligado a uma saída analógica, de forma que quando um deles recebe pouca luz a leitura tende a 1024 (máximo), e quando o outro recebe pouca luz a leitura tende a 0 (mínimo). Os LDRs são cobertos com filtros polarizadores defasados de 90°, de maneira tal que, quando expostos a uma fonte luz polarizada, tendam ao valor máximo ou mínimo (dependendo da orientação da polarização da fonte). Os sensores foram protegidos por uma caixa, de maneira que só recebessem luz filtrada pelo polarizador.

Montagem dos Sensores Óptico-Reflexivos

Os sensores óptico-reflexivos são compostos por um LED emissor e um receptor. Ambos são alimentados com 5V e conectados a um resistor. Foram utilizados 330 Ohm para o emissor e 10 kOhm para o receptor. O cabo de sinal foi conectado junto à saída de aterramento do receptor e a uma porta digital, de forma que fornecia valores binários dependendo de se o receptor estava ou não recebendo os dados do emissor. A montagem dos sensores óptico-reflexivos pode ser vista na imagem abaixo.

Montagem dos Sensores Break Beam

Os sensores break beam possuem o mesmo funcionamento dos óptico-reflexivos citados acima. A única diferença é que o emissor e o receptor estão um de frente ao outro. Entre o emissor e o receptor foi colocada uma polia de 6 furos que rodava na mesma velocidade angular da roda. Dessa maneira, com a alternância do sinal (de 0 pra 1 e de 1 pra 0), sabia-se o quanto a roda havia girado. A foto abaixo ilustra um dos sensores break beam antes da montagem no robô.

Desenvolvimento da lógica do código

Localização:

O algoritmo de localização foi construído da seguinte maneira: O robô girava 360 graus (48 mudanças no encoder), medindo, a cada mudança, os valores de luminosidade gerados pelo LDR diferencial e estocando os valores máximo e mínimo, junto com a posição da roda no momento da leitura. Após o giro, o robô fazia a diferença entre 1024 e a leitura máxima e comparava com a leitura mínima. O menor valor da comparação corresponde à fonte que o robô deve se alinhar. Sabendo o lado, o robô voltava à posição do encoder gravada durante as leituras, estando, portanto, alinhado à fonte de luz mais próxima.

Teste de Localização:


Odometria e Controle:

A odometria foi implementada com um algoritmo que computava quantas mudanças (0 para 1 ou 1 para 0) ocorriam na leitura do break beam. O número de mudanças era incrementado a uma variável e servia de base para se saber quantos graus a roda havia girado.

O controle utilizado foi o PD. Para isso, verificaram-se quantas mudanças ocorriam na leitura do break beam em 1 segundo, comparava-se o resultado ao valor desejado, obtendo o erro, e gerava-se um novo input para o motor, que era a soma de uma ação proporcional ao erro e de uma proporcional à derivada do erro. O procedimento era repetido enquanto os motores estivessem ligados.

Testes de Odometria e Controle:


Navegação:

O algoritmo responsável pela navegação foi inicialmente idealizado com a utilização de dois sensores óptico-reflexivos que ficariam posicionados nas partes brancas fora da linha. Com isso, cada motor seria ativado em um instante e sempre que a leitura de um dos sensores mudasse os motores também alternariam. Durante os testes foi constatado que havia um problema para o robô fazer curvas do formato T e, por isso, resolveu-se usar apenas um sensor e reposicioná-lo no centro do robô, atrás da roda de apoio. Isso deixou a implementação relativamente simples, e se seguiu como base o código apresentado em sala. O fluxo de execução segue:

loop
liga o motor direito até o sensor identificar uma troca de cor;
identifica a troca de cor;
liga o motor esquerdo até o sensor identificar uma troca de cor;
identifica a troca de cor;
volta pro loop

Testes de Line Following:



Problemas encontrados

. A criação de um algoritmo de navegação com o uso de dois sensores óptico-reflexivos. Optou-se por utilizar um só.
. Inicialmente a localização procuraria por um mínimo ou máximo global no valor de leitura do LDR diferencial em vez de utilizar o shaft encoder. Porém, flutuações nos valores faziam com que o robô encontrasse máximos/mínimos locais e parasse no momento errado.
. A utilização de variáveis globais gerou muita confusão com funções que chamavam outras e usavam as mesmas variáveis. Foi necessário criar variáveis com múltiplos nomes para as mesmas funções sem que houvesse interferência no funcionamento correto.
. A implementação do controlador foi desafiadora.
. O shield dos sensores do Arduíno estava dando mal contato, o que atrapalhava algumas leituras.
. Ao trocarmos a Handy Board pelo Arduíno surgiram alguns problemas. O mais proeminente deles foi que o novo microcontrolador não permitia a utilização de multi-processos e isso nos atrasou bastante quanto ao desenvolvimento do PD.

Outros Vídeos

cursos/introrobotica/2017-1/grupo08/tp3.txt · Última modificação: por 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki