Trabalho Prático 2: Robô RYP-2
Objetivo
O segundo trabalho prático da disciplina de Introdução à Robótica tinha como principal objetivo o desenvolvimento de um robô móvel para a introdução dos conceitos de controle em malha aberta e processamento de sinais medidos através do uso de diferentes sensores no Arduino.
A proposta do trabalho consistia no desenvolvimento de um robô móvel capaz de realizar três tarefas pré-definidas. A primeira tarefa a ser realizada pelo robô se relacionava à capacidade de locomoção. Para isso, o robô deveria estar apto para percorrer três caminhos, como mostrado abaixo.
A segunda tarefa a ser executada no projeto relacionava-se a habilidade de identificação de cores. O grupo deveria desenvolver um sensor de cor usando LEDs e um sensor LDR para ser capaz de diferenciar as cores azul, verde, vermelho e amarelo.
Por fim, a última tarefa que deveria ser desenvolvida consiste em utilizar as tarefas desenvolvidas anteriormente para ser capaz de executá-las simultaneamente e, além disso, o robô deveria estar apto a tomar decisões. Em resumo, o robô deveria identificar a presença de um bloco à sua frente e determinar sua cor. A partir da cor identificada o robô deverá tomar uma decisão e cumprir uma outra tarefa, sendo:
- Bloco Azul → vire à direita 90 graus e ande para frente;
- Bloco Verde → vire à esquerda 90 graus e ande para frente;
- Bloco Amarelo → gire 180 graus e ande para frente;
- Bloco Vermelho→ pare e dê um giro de 360 graus (permanecendo parado após o giro).
Caso o robô não identificasse a presença de um bloco após 10 segundos, ele deveria encerrar a tarefa atual.
Solução proposta
A parte mecânica do robô foi desenvolvida de modo que não ficasse nem muito grande e pesada, nem muito leve e frágil. Além disso, foi testado um conjunto de engrenagens e reduções que fosse suficiente para garantir a relação velocidade x torque para que o robô pudesse cumprir com os objetivos sem nenhum empecilho. A estrutura montada pode ser vista nas figuras abaixo.
Para cumprimento dos requisitos do projeto foi necessário desenvolver dois sensores para o robô. O primeiro sensor desenvolvido foi o sensor de cor. Para isso, o grupo optou por utilizar um LED RGB e um sensor de luz LDR para que o resultado fosse um sensor mais compacto. A lógica de funcionamento do sensor consistiu em piscar o LED nas cores vermelha, verde e azul e armazenar o valor lido pelo sensor LDR. Em seguida, foi feita a comparação entre os valores lidos a fim de determinar qual era a cor do bloco em questão. A escala de comparação entre as cores foi estruturada da seguinte forma:
O segundo sensor desenvolvido no projeto foi o sensor para detecção da presença ou não de um bloco. Para construção deste sensor o grupo optou por utilizar apenas um sensor óptico reflexivo. O sensor foi implementado com uma lógica digital e apresentava o valor 0, caso encontrasse um bloco e o valor 1, caso contrário. A distância máxima de confiança para detecção do bloco foi de 3 cm.
Os sensores desenvolvidos foram ligados ao Arduino e posicionados na parte dianteira do robô dentro de uma caixa de proteção para aumentar a confiabilidade das leituras. Veja abaixo as fotos que demonstram o resultado final do robô com os sensores acoplados.
Para melhor utilização do robô e escolha de qual tarefa deveria ser executada foi proposto um Menu que continha todas as ações possíveis de serem executadas pelo robô. Veja abaixo a simulação do Menu feito pelo grupo.
Principais desafios
O principal desafio encontrado durante a execução desse projeto foi a grande diferença nas velocidades dos motores utilizados. Um motor era significativamente mais rápido que o outro, logo, para que fosse possível fazer o robô andar em linha reta foi necessário um longo período de testes para ajuste das velocidades e dos tempos de delay utilizados para cumprir os percursos da tarefa 1. Além disso, como os motores utilizados estavam com uma diferença muito grande, qualquer pequena alteração nos valores utilizados, imperfeições na pista de teste e queda no nível de corrente/tensão fornecidos pelas pilhas tinham efeito significativo na qualidade da execução da tarefa pelo robô.
Após um longo período de testes foi possível determinar um range no qual o comportamento do robô era bem próximo e de acordo com o desejado. Usamos esses valores para a construção de toda a lógica de programação do projeto e garantimos que as pilhas estivessem com carga total, ou quase total, para os momentos de validação do código desenvolvido.
Não tivemos muitos problemas em relação aos sensores construídos para cumprimento das tarefas propostas. Nossos sensores ficaram bastante robustos e não tinham tanta influência da luz do ambiente de modo que ela interferisse na leitura. Isso foi possível pois não utilizamos valores fixos durante as comparações, portanto, não era necessário calibrar o sensor a cada novo ambiente ou nova situação em que ele deveria funcionar. Isso tornou nosso sensor confiável e facilitou bastante o desenvolvimento do projeto e cumprimento das tarefas 2 e 3.
Resultados
Após as fases de desenvolvimento e testes finais, o robô realizou as tarefas 1, 2 e 3 de maneira satisfatória.
Na tarefa 1, o robô apresentou algumas inconsistências discretas nas trajetórias, especialmente ao percorrer o trajeto quadrado. Os ângulos de rotação não foram exatamente iguais e, por isso, a trajetória não foi exatamente quadrada. Fora esse pequeno problema, a tarefa foi executada conforme o previsto.
Na tarefa 2, o robô reconheceu as cores de maneira impecável. Acertou todos os testes, acertando as 4 cores (amarelo, azul, verde e vermelho) independentemente da ordem ou da intensidade da luz no ambiente.
Na tarefa 3, o robô interpretou as cores corretamente, mostrando em todas as situações as cores esperadas no visor. Na execução dos comandos, porém, aconteceram dois problemas. O robô estava programado com os comandos verde e azul trocados e, por isso, quando ele deveria virar à direita ele virou, na verdade, à esquerda. Além disso, as trajetórias (assim como na tarefa 1), foram um pouco diferentes do especificado (as linhas não foram exatamente retas, e os ângulos das curvas não foram exatamente o esperado).
Os resultados dos testes e a apresentação final do robô mostraram-se satisfatórios, pois foi possível cumprir com os objetivos sem usar um sistema de controle. A estratégia de definição dos valores de velocidade e delay construída de maneira empírica fez com que a adaptação do comportamento dos motores à pista fosse mais complexa, o que tornou o robô sensível a desníveis e irregularidades presentes no solo.





