Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2017-1:grupo10:tp2

Tabela de conteúdos

Objetivo

O objetivo deste trabalho foi desenvolver um robô móvel capaz de realizar um determinado caminho que será selecionado através de um menu. A figura abaixo representa os três caminhos que o robô deveria executar:

A locomoção deve iniciar e terminar nos pontos demarcados em vermelho.

O robô deveria realizar duas tarefas simultaneamente: locomover-se por uma trajetória em linha reta e, em um determinado momento, identificar a presença de um bloco à sua frente e tomar uma decisão com base na cor do bloco identificado.

Ações possíveis:

  • Bloco Azul → vire à direita 90 graus e ande para frente;
  • Bloco Amarelo → vire à esquerda 90 graus e ande para frente;
  • Bloco Vermelho → gire 180 graus e ande para frente;
  • Bloco Verde → pare e dê um gire de 360 graus.

Existiam ainda algumas restrições:

  • Deveriam ser utilizados no máximo 2 motores.
  • Após a identificação da cor, o robô deveria fazer um pequeno movimento para trás antes de realizar o giro para não mover o bloco.
  • Todas as tarefas deveriam ser interrompidas se o robô não encontrar nenhum bloco no intervalo de 10s.

Estrutura

A primeira dificuldade encontrada em relação ao robô foi a construção de um sistema no qual somente um motor ficasse responsável pela tração, em vez de dois. Como temos dois motores que fornecem potências bem diferentes, utilizar um motor em cada roda de tração dificultaria muito o processo de calibração, além de ser uma solução nem um pouco elegante.

Por isso, implementamos um diferencial no robô em conjunto com um freio unilateral. Esse sistema funciona da seguinte forma: Um motor aciona o diferencial, que fornece potência igual para ambas as rodas. Para realizar uma curva o freio unilateral é acionado e impede a movimentação de uma roda. Quando o motor de tração for acionado toda potência é direcionada à roda não bloqueada. Basicamente, a roda travada serve como eixo para a realização da rotação do robô. Como somente um motor aciona a tração de ambas as rodas, a redução de engrenagens teve que ser maior que o padrão, sendo de 108:1.

Todas as engrenagens foram postas no compartimento inferior do robô, liberando espaço para posicionar o freio e os motores no compartimento intermediário. No compartimento superior se encontra a handyboard. Além disso, tentamos carenar o máximo possível do robô, posicionando os motores dentro dele e isolando o máximo possível das rodas em relação ao ambiente. As únicas extensões que se encontram no robô são para o ponto de apoio (roller) e para o sensor e led RGB.


Software

O código foi desenvolvido de forma a facilitar a modificação de inputs, que se torna necessária para calibrar o robô. Por isso, toda tarefa realizada pelo robô foi subdividida em subtarefas até se obter uma unidade básica que pode ser transcrita em apenas uma função ou utilizar funções já feitas. Por exemplo, para percorrer o circuito de um quadrado, o robô deve, em linha reta, por 30 cm, girar 90 graus e repetir este processo 4 vezes. No caso, as unidades básicas (funções) seriam andar em linha reta por 30 cm e girar 90 graus. A tarefa pode ser obtida repetindo estas funções 4 vezes. Esta mesma metodologia pode ser aplicada para as outras tarefas que o robô realiza. O void main do código contém o menu e submenus de acesso às tarefas.

A maior dificuldade encontrada na elaboração do código foi criar uma função para realizar a leitura das cores. Devido à enorme quantidade de ruído presente no ambiente o robô necessita de calibragens de cor frequentes para realizar a leitura dos blocos corretamente.Para resolver este problema, criamos uma função de calibragens que realiza diversas leituras de todos os blocos e estabelece 3 faixas de mínimos e máximos com devidas histereses para cada cor de bloco. A função leitura() realiza 3 medições para cada cor de led, obtêm 3 médias e depois confere em qual faixa de cor determinado pela calibração a cor do bloco se encontra.

Outra função importante que foi desenvolvida foi a de reconhecimento de obstáculos. Primeiro o robô obtém valores iniciais para o ambiente, depois o sensor em conjunto com o led é ativado para funcionar indeterminadamente. Caso haja um obstáculo no caminho percorrido pelo robô, o sensor irá notar a diferença significativa entre o resultado obtido e aquele medido inicialmente.


Fotos

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki