terça-feira, 14 de julho de 2015

Robótica: Line Follower Robot

Este foi um projeto acadêmico muito interessante em que participei, contemplando a robótica como ponto central, onde tínhamos que desempenhar no robô as tarefas de andar seguindo linha e desviando de objetos. Além destes problemas, havia a questão de sua parte elétrica e mecânica, envolvendo escolha de peças, bateria, fabricação do chassi, entre outros. Além disto, a necessidade de adaptar o robô para, por exemplo, subir rampas e andar por superfícies com anormalidades e interrupções na linha representavam outro nível de problema. Por fim, a forma de locomoção foi o ponto de partida para as decisões por vir, e foi dada preferência para um robô movido por esteiras.

Para desempenhar as tarefas do robô e sua interação com as outras partes, utilizamos os seguintes componentes:


  • Arduino Mega
Placa projetada com microcontrolador e suporte a entrada e saída, digital e analógica, para leitura e manipulação de dados e componentes. Utilizada para gerir e executar a lógica do robô em tempo real. É programada através da interface instalada no computador e trabalha com a linguagem Arduino, baseada em C/C++. Possui suporte a alimentação externa e interface USB, via que fornece comunicação com computador. Este modelo foi escolhido em alternativa ao Arduino Uno por ser maior, contendo suficientemente mais portas (digitais e analógicas) e mais memória.
Arduino Mega

  • Motor Shield
Utilizado juntamente com o Arduino para controlar a velocidade dos motores de corrente contínua. Possui canais de controle e um chip baseado em Ponte H, permitindo uma tensão ser aplicada em qualquer direção para ambos os motores. Suporta uma corrente de saída de 600mA e tensão de 4,5 a 36V.

MotorShield L298N


  • Sensores de Refletância
Sensores analógicos utilizados para detectar linha no percurso. Trabalham com led infravermelho e fototransistor, emitindo luz e detectando seu reflexo no solo, sendo possível assim medir intensidade do sinal captado e interpretá-lo como sendo ou não uma linha.
No projeto foram utilizados 5 sensores, sendo destes 3 sensores posicionados no centro, para ajuste de precisão do percurso reto, e 2 sensores subjacentes (esquerda e direita), para detecção de curva através das bordas na linha.
Modelo TCRT-5000

  • Sensores de Ultrassom
Sensores digitais utilizados para detectar objeto no percurso. São os "olhos" do robô (e parecem mesmo). Trabalham com onda sonora, que será emitida e rebatida pelo objeto mais próximo, retornando ao receptor. O cálculo de distância então irá derivar do tempo de emissão e recebimento do sinal.
No projeto foram utilizados 3 sensores, posicionados nos pontos central e laterais, de forma a trabalhar como uma visão periférica, primeiramente detectando um objeto a frente e posteriormente utilizando os laterais para contorná-lo, a uma distância predefinida. Uma alternativa seria utilizar apenas um deste sensor e direcioná-lo para as laterias utilizando um servo-motor convencional.
Modelo HC-SR04


Como utilizamos componentes que realizam algumas funções complexas, utilizamos algumas bibliotecas próprias, como a QTRSensors, do sensor de linha, e a NewPing, do sensor ultrassônico.

O robô se movimenta pelo acionamento de seus dois motores, comandados e controlados pelo Arduino e pela sua interação com o componente MotorShield, ao qual os motores são conectados. A direção é definida através da diferença da velocidade entre os dois motores. Para a realização de uma curva para a direita, por exemplo, o robô deve aumentar a velocidade do motor da esquerda e diminuir do motor da direita, simultaneamente, a fim de iniciar um movimento de rotação. Também, para girar em torno do próprio eixo, pode-se aplicar uma mesma velocidade aos dois motores, contanto que girem em sentidos opostos. A correção de velocidade dos motores, estratégia para realização de curvas e seguir linha, entre outros, são tarefas realizadas pelo controle PID, que será explicado mais detalhadamente em outro post.

O algoritmo no Arduino é constituído basicamente de 2 etapas: Setup e Loop. O Setup é a etapa de inicialização dos programas, setando as variáveis iniciais e realizando as ações primárias do robô, como por exemplo a calibragem dos sensores, que consiste numa varredura em 180º graus do robô, girando em torno do seu próprio eixo, para realizar a primeira detecção de linha e evoluir sua precisão, de acordo com fatores de ambiente. O Loop é onde definimos toda a ação em tempo real do robô, ou seja: validações, tratamentos e demais ações cíclicas que são realizadas no decorrer do percurso.

Para o desvio de objetos, a cada ciclo emitimos o sinal ultrassônico e lemos a distância até o objeto mais próximos, considerando um limite de distância. Nesta situação de proximidade, a decisão a ser tomada pelo robô primeiramente é parar e olhar os lados (através dos sensores ultrassônicos laterais), a fim de buscar o lado mais livre para percorrer, e tomar esta direção. Para realizar este desvio, o robô realiza um percurso predefinido em torno do objeto, andando primeiramente para o lado mais livre até se distanciar o suficiente do objeto, e assim, dobrar para o lado do objeto até cruzar sua posição e poder contorná-lo com mais uma curva, até que o robô ache a linha de volta.

No caso de haver interrupção na linha, o robô ativa um estado de sonda, anda uma certa distância para frente, procurando pela linha, e, caso não encontre, ele desfaz este caminho e o refaz, de forma sinuosa, até encontrar a linha nas proximidades do caminho.

Obs: fluxogramas, algoritmos, fotos do bicho e demais materiais não serão fornecidos por questões autorais.

Nenhum comentário:

Postar um comentário