quinta-feira, 18 de junho de 2015

Scorpion, o Robô construtor autônomo


Olá galera!

Hoje vou compartilhar um making of, ou simplesmente um apanhado de informações sobre os passos do desenvolvimento do tão temido Traballho de Conclusão de Curso, ou somente, TCC!

Ok, o que é um robô autônomo?

A grande diferença que a palavra autônomo dá ao robô, é principalmente, saber lidar com o ambiente a sua volta, com o uso de sensores. Então é isso que diferencia um robô que fica parado ou se move sobre locais pré-determinados (como trilhos), de um robô que se move de acordo com o ambiente que o cerca.

A ideia de construir um robô autônomo veio de alguns exemplos, como a sonda Curiosity, que é um robô autônomo que pousou em Marte para fazer explorações e análises da superfície do planeta. Durante a navegação pelo planeta, ela utiliza 4 pares de câmeras chamadas Hazard avoidance cameras (câmeras para evitar perigos ou obstáculos) para observar o ambiente a sua volta.



Outro exemplo são os robôs de reconhecimento de plantas das usinas nucleares de Chernobyl e Fukushima, que devem não só ter total percepção do ambiente, mas também um hardware capaz de se locomover por destroços, escadas e quaisquer outros obstáculos.


Vamos agora para o nosso projeto:



Scorpion




O Scorpion (nome do nosso robô) é basicamente composto por três partes principais:

  • Base móvel
  • Braço robótico
  • Unidade de controle



Base móvel

Para a base, optamos pela Base móvel diferencial. É um forma bem simples de controlar um robô, tanto em hardware quanto em software. Funciona posicionando dois motores de cada lado da base (com uma roda "boba" para sustentação) e de acordo com o acionamento em cada um dos motores, é possível ir para frente, para trás ou fazer curvas.



Esses motores nas laterais são motores de passo (28BYJ-48 + Driver ULN2003). São bem fáceis de usar, e já tem várias bibliotecas prontas para Arduino.




Para saber para onde ir, usamos 7 sensores de distância ultrassônicos (HC-SR04). Também bem fácil de mexer com bibliotecas para Arduino.



Eles foram posicionados de forma que pudessem perceber a localização e inclinação do robô dentro do espaço de testes, a todo momento. Para que ele pudesse, baseado nas leituras, corrigir a sua trajetória e se alinhar.






A precisão do sensor de distância (teoricamente) é de 3 mm, porém na prática as medições são muito ruidosas, variando até 1 cm em leituras repetidas com o robô parado. Então foi necessário fazer um filtro digital de média móvel, ou filtro FIR (Finite Impulse Response), para limpar o ruído e proporcionar uma medição mais confiável.


Braço robótico


O projeto de um braço robótico não é algo fácil. São inúmeros fatores que influenciam na definição das características do braço como alcance necessário, graus de liberdade, material, capacidade de carga necessidade ou não de contra-peso, etc. Então resolvemos desenhar o nosso próprio braço já personalizado para a nossa aplicação. Utilizamos MDF cortado a laser pelo baixo custo, por ser leve, mas ainda assim com uma boa resistência mecânica.

Precisávamos de um braço robótico com pelo menos 3 graus de liberdade. São duas articulações de movimento do braço, e mais movimento de rotação do braço, que podemos considerar um "grau de liberdade virtual", sendo que esse movimento é conseguido com a base diferencial e não com uma articulação do braço.



Para movimentar o braço, precisamos de atuadores que devem ser capazes de responder a demanda de carga que é dada pela massa total da estrutura do braço e pela massa das estruturas a serem manipuladas. Então escolhemos servomotores comumente usados por hobbistas usuários de Arduino (DGServo – S05NF e Hitec – HS422):




O componente final do braço robótico é a garra que vai efetivamente manipular os objetos. Utilizamos uma garra atuada por um pequeno servomotor (S05NF). Ela é de alumínio, e tem uma embreagem antitravamento que conecta o servomotor às engrenagens da garra. Isso melhora a pega da garra e evita danos ao motor.





Unidade de controle

Para controlar toda essa parafernália, nós usamos o estimado e aclamado Arduino. Que é uma placa de desenvolvimento open-source (hardware livre) de fácil desenvolvimento. Usamos o Arduino Mega, que é uma das muitas placas "Arduino". Nela tem um microcontrolador de 8 bits da Atmel (o ATmega2560). A placa nos dá acesso a 54 pinos de I/O e tem um clock de 16 MHz.



Então o Arduino é o responsável por:

  • Fazer a leitura constante dos sensores
  • Processar esses dados de leitura
  • Guiar o robô com os motores de passo da base até o destino
  • Controlar o movimento do braço robótico quando for necessário
E para facilitar o acesso aos pinos do Arduino (ou seja, para não ficar uma medusa de fios), nós fizemos uma placa de expansão ou "Shield" que encaixa no Arduino Mega e dá acesso aos pinos de uma forma mais confortável para cada aplicação.





O shield dá acesso direto (no formato do conector) a:
  • Pinos de alimentação de 7V a 9V (por bateria conectada ao shield)
  • Botão liga/desliga com LED de sinalização
  • Botão de reset
  • 5 servo motores
  • 2 motores de passo (compatível com a pinagem do driver ULN2003)
  • 10 sensores ultrassônicos
  • Mais 21 I/Os de uso geral
  • Mais barramentos de pinos de 7V-9V, 5V e de GND
Veja como ficou:






Para uma explicação (MUITO) mais detalhada de todos os passos dessa construção, dê uma olhada na nossa monografia.


E finalmente...
Veja aqui o vídeo do robô sambando na cara do recalque!



Agradecimento especial aos meus queridos companheiros de trabalho e amigos, Allan Dinato e André Ferro.


Diego



Faça você! (Links do artigo)

GitHub - Código Arduino e Projeto Eagle do shield para Arduino Mega
Shield do Arduino Mega a venda no Curta Circuitos (projeto público, sem lucros)
Desenho do braço e base para corte a laser
Monografia do Projeto Robô Construtor Autônomo

Nenhum comentário:

Postar um comentário