Trabalho prático 2: Locomoção, sensores & paralelismo
O projeto
O TP2 aborda a robótica móvel e as interações entre o robô e ambiente. O braço manipulador do último TP teve que ser desmontado (:c) para elaborarmos uma estrutura sobre rodas capaz de realizar movimentos simples de rotação e movimentação linear. Além disso, o novo robô utiliza sensores para medir algumas informações básicas do ambiente.
Foram definidas três tarefas para este trabalho, e cada uma delas pode ser acessada independentemente por meio de um menu programado no Arduino:
- locomover-se em três trajetos pré-definidos: uma linha reta, um quadrado e um triângulo;
- Utilizar o sensor para identificar a cor de cubos presentes no laboratório;
- Realizar a locomoção e identificação de cubos em paralelo, tomando uma decisão baseada na cor do cubo.
A estrutura
O nosso robô tem formato de paralelepípedo, com uma extensão que comporta a roda esférica e um sensor de luminosidade. O interior contém dois motores (e as respectivas reduções), um para cada roda comum. O Arduino encaixa-se no topo da estrutura.
Programação
Como as tarefas propostas eram independentes, estas foram divididas entre o grupo para agilizar a programação:
- Tarefa 1: locomoção - A movimentação do robô baseia-se em duas funções, avanco() e rotacao(). Cada uma recebe uma velocidade e um tempo em milissegundos como parâmetros. Para realizar a tarefa 1, aplicamos uma sequência dessas funções para cada forma geométrica necessária, com um intervalo de 10 segundos entre cada uma para reorientar o robô. As velocidades e tempos foram determinados empiricamente, de acordo com as pilhas disponíveis para o projeto. [foto dele mexendo]
- Tarefa 2: Sensoriamento - O sensor foi construído combinando um sensor LDR e um LED que emite as três cores primárias (RGB). Os componentes foram montado em uma placa e encaixados na estrutura de lego na parte frontal do robô. O programa controla a emissão das três faixas de luz, capta a resposta de cada uma e, comparando as informações recebidas, determina a cor do objeto colocado à sua frente.
- Tarefa 3: multitarefa - As tarefas simultâneas consistem em locomover o robô em linha reta, até que ele encontre um cubo colorido. A partir daí, o robô tomaria uma decisão de acordo com a cor do cubo encontrado (virar para a direita, virar para a esquerda, dar meia-volta, dar uma volta completa). Passados 10 segundos sem encontrar nenhum cubo, o robô para.
A tarefa 3 foi programada usando as funções implementadas nas tarefas 1 e 2, adaptadas para não utilizarem a função delay() do Arduino (Essa função bloqueia o processamento do Arduino, impedindo a realização do paralelismo).
Desafios encontrados
O principal desafio encontrado está nas rodas do robô. O uso de motores diferentes causa problemas para equalizar a velocidade das rodas. Se as rodas se movimentarem com velocidades diferentes, o robô não consegue se movimentar em linha reta.
A primeira tentativa de solução foi utilizar motores “iguais”. Mesmo assim as velocidades estavam um pouco diferentes. Essa discrepância foi amenizada alterando a redução de um dos motores para compensar, além de um pouco de tentativa&erro no código.
Outro desafio importante foi realizar a tarefa 3. Demoramos para fazer a matemática correta dos 10 segundos (por exemplo, resetar o contador depois de encontrar um bloco), resultando em algumas batidas e tombamentos.
Conclusão
Com relação ao projeto de manipuladores, foi mais fácil corrigir as discrepâncias entre os motores que contornar os problemas causados pelo atrito do manipulador. Entretanto, o paralelismo adiciona desafios um pouco mais complicados na robótica, obrigando-nos a utilizar os recursos do processador de forma mais eficiente.
Considerações para o próximo projeto
Para o próximo projeto, devemos considerar diminuir o peso do robô para aumentar a vida útil das pilhas, e sobrarem peças Lego para aumentar o reforço estrutural do robô.
Galeria






