Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2017-1:grupo01:tp3

TP 3 / Projeto 1: Robótica móvel (navegação e controle)

Montagem

Para o segundo trabalho prático o grupo 1, nomeado Gambiarra Sinfônica, decidiu por fazer um veículo com tração traseira e uma roda dianteira feita a partir de uma esfera que pode se mover em todas as direções. A configuração final do veículo pode ser vista nas 3 figuras abaixo que trazem as vistas frontal, lateral e superior do veículo ao longo de sua construção.

tp3-premontagem2.jpeg

tp3-robofrente.jpg

tp3-visaocima.jpg

Dimensões

As dimensões do veículo são:

Comprimento: 200 mm

Altura: 120 mm

Largura: 150 mm

Sistema Propulsor

Para o sistema propulsor decidiu-se pela utilização de 2 motores elétricos DC iguais, sendo cada um responsável por mover apenas uma das rodas. Os motores foram fixados à uma peça descartável de LEGO com o auxílio de cola quente e posicionados próximos ao primeiro eixo da caixa de redução. O motor utilizado pode ser visto abaixo.

Cada motor está conectado a uma caixa de redução, conforme pode ser visto na figura abaixo, de razão igual a 243:1 com o objetivo de reduzir a velocidade do motor e aumentar o torque. Ao eixo final da caixa de redução foi acoplado uma engrenagem. Através de outra engrenagem, que pode ser vista na outra figura, o torque final é transmitido para uma segunda engrenagem acoplada ao eixo da roda, garantindo assim a rotação das mesmas com uma velocidade adequada e um torque suficiente.

tp3-caixareducao.jpeg

tp3-caixareducao2.jpeg

Sensores

Para o TP3, foi necessário usar três tipos de sensores: dois sensores ótico-reflexivos, dois LDRs para detecção de luz polarizada e dois sensores break-beam para controle do movimento. Os sensores óticos-reflexivos utilizados foram o modelo TCRT5000. Esse sensor utiliza um LED infra-vermelho e um fotoresistor para medir a distância entre o sensor e o objeto à sua frente.

Para o sensor de detecção das luzes polarizadas, foi preciso montar nosso próprio sensor, utilizando dois LDRs e pedaços de lentes polarizadas. Colamos as lentes com o auxílio de cola quente na frente dos LDRs e fizemos uma estrutura com papelão e fita isolante para que houvesse o mínimo de interferência em nossas leituras. Os LDRs foram ligados em série, e um divisor de tensão entre eles foi conectado à entrada analógica do HandyBoard.

Já para os sensores break-beam, tivemos que adaptar nosso próprio disco encoder feito de papelão, pois nenhuma peça do LEGO era fina o suficiente para passar na chave ótica. Para isso foi utilizado um furador de papel, um compasso e tesoura e através das corretas medições fizemos nosso próprio disco perfurado para que pudéssemos receber as leituras e realizar o controle.

tp3-sensoroticoreflexivo.jpg

tp3-sensorldr.jpg

tp3-sensorbreakbeam.jpg

Programação

Para a implementação dos menus, o código do TP 2 foi reaproveitado. Para o tratamento dos sensores ótico-reflexivos, utilizados para seguir as linhas na mesa, utilizamos histerese, atribuindo uma faixa de incerteza entre o valor para a cor branca e para a cor preta. O mesmo foi feito na leitura do LDR diferencial para identificar a direção das lâmpadas polarizadas.

Já para a implementação dos shaft-encoders, foi utilizada a biblioteca padrão do HandyBoard, com as funções enable_encoder, reset_encoder, read_encoder e disable_encoder. Essas funções ativam o código especializado para encoders no HandyBoard, que escreve o número de vezes que o feixe de luz foi interrompido pelo disco encoder. A partir desses valores para cada uma das rodas, é possível implementar um controlador proporcional-diferencial que acumula o erro relativo entre as rodas e controla a potência de cada um dos motores, de forma a manter o robô caminhando em linha reta. Os encoders também podem ser utilizados para a implementação das curvas de 90º, 180º e 135º utilizadas para fazer os movimentos em linha reta, triângulo e quadrado.

Também foi implementada uma rotina de calibração que lê os valores dos sensores óticos-reflexivos com o sensor em cima da faixa preta e da cor branca da mesa, e atribui um intervalo de incerteza correspondente a 3/5 da diferença entre o maior e menor valor encontrados. O mesmo é feito para o LDR diferencial: o robô é posicionado diretamente em frente a uma das lâmpadas, e então o valor do LDR é lido. Após isso, o robô é posicionado diretamente em frente à outra lâmpada polarizada, e o valor do LDR é lido. Feito isso, o intervalo de incerteza é novamente dado por 3/5 da diferença entre o maior e o menor valor encontrado. Esse intervalo foi encontrado através de experimentos, de forma a ser grande o suficiente para diminuir falsos negativos, mas não tão grande que o robô irá parar prematuramente.

Para a implementação da tarefa de localização, mandamos o robô girar em torno de si mesmo e fazemos a leitura do LDR diferencial. No entanto, essa tática não funciona muito bem quando o robô está posicionado longe das lâmpadas, próximo ao meio da mesa. Para corrigir esse caso, caso a leitura do LDR não saia da faixa de incerteza após o robô ter dado uma volta completa, a leitura passa a ser feita com um intervalo de incerteza 20% menor (novo início do intervalo = velho início * 1.1, novo final do intervalo = velho final * 0.9). Isso permite que o robô localize a lâmpada polarizada mais próxima até mesmo quando está no meio da mesa, mas sem comprometer a performance da tarefa quando ele está próximo à lâmpada.

Vídeos com o progresso do desenvolvimento

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki