sábado, 7 de abril de 2012

Rumo ao México 2012: Rescue B



No mês de Junho nossa equipe Emerotecos irá para o México participar do campeonato mundial de robótica da RoboCup Rescue B.

Vou falar um pouco sobre esse "robô" que estamos fazendo, mas antes um pouco de como funciona o campeonato.


O campeonato

Exemplo de arena da competição

A competição em teoria, é a simulação de um resgate de vítimas em um prédio. O objetivo principal, é "resgatar" essas vítimas colocadas no "prédio".

A arena (foto) é composta por 2 andares, conectados por uma rampa. Em cada andar, são colocadas paredes verticais criando um labirinto. As vítimas que são aquecidas eletricamente são colocadas nas paredes desse labirinto, em qualquer lugar da arena, e em qualquer andar.

O robô começa em um lugar qualquer que o juiz queira, e o robô deve seguir autonomamente procurando as vítimas presentes, e quando achadas, deve "avisar" com alguma luz, que achou uma vítma.

A pontuação e detalhes da competição podem ser vistos aqui em ingles: http://goo.gl/PqrN9

O problema

Um dos maiores problema que lidamos, é achar TODAS as vítimas de forma mais rápida possível. O objetivo principal não é chegar na saída, e sim percorrer todas as paredes do labirinto para achar todas as vítimas possíveis. O número de vitimas não é divulgado, até que o robô entre na arena, bem como a "forma" do labirinto, só é sabido na hora do round.

Além de tudo, podem existir obstáculos irregulares no labirinto, oque dificulta locomover o robô no meio de tudo. E por fim, o robô não pode ficar por mais de 5 segundos em "dead-ends", que seriam rotas sem voltas, mostrados em cinza escuro na imagem.


O robô: mecânica



Este ano, estamos removendo inteiramente a necessidade do NXT. Eu amo esta plataforma, e acho ela muito boa de se trabalhar, mas para este caso, não teríamos espaço para usar os motores da lego, e o NXT com 6 pilhas ficaria pesado.

Optamos por criar do zero, um robô feito para o Rescue B (foto). Ele é feito por 2 camadas de acrílico 5mm, e vigas em baixo para sustentar o motor, e a eletrônica.

As rodas Mecanum, parecidas com o sistema omni-direcional, funciona do mesmo modo, mas pode ser montado de forma paralela (4 rodas), dando total liberdade de movimentação e giro para o robô, sem a necessidade de coloca-las em ângulos de 120 ou 90 graus.

O servo motor que fica no centro da segunda camada, suporta todos os sensores, dando a eles uma maior liberdade de "visão", e mais facilidade na hora de fazer as leituras.

O tamanho do robô é de 20x20cm, e sua largura máxima é 24cm (o espaçamento das paredes são de 30cm) permitindo ele girar no próprio eixo, sem tocar em nenhuma das paredes.

Preferimos utilizar Acrílico 5mm, pois já fizemos testes e constatamos que é resistente para este tamanho de peça, e super fácil de se fabricar (cortamos a Laser na CopyExpress), e possui precisão de centésimos de milimetro.

Todos os desenhos das peças foram feitos no SolidWorks, estas fotos são as renderizações feitas, e não o robô real, ainda!


O robô: Eletrônica




Sim, este é um celular! Como estamos pensando em usar algoritmos bem pesados este ano, e não queremos ter barreiras de processamento, resolvemos colocar um celular Android para processar tudo isso em tempo real. Android, pois podemos programar em Java sem problema algum, e ainda contamos com uma tela LCD, câmera, e claro, um painel de toque, perfeito para fazer configuradões iniciais e visualizar em tempo real oque ele "pensa".

Como o celular não consegue acionar os motores, ler os sensores de luz, temperatura, e controlar a posição dos encoders (leitura dos graus do motor), subdividimos em 3 placas basicamente.

Para alimentar todo o robô, incluindo sensores, motores e placas, colocamos uma bateria de lipo, 11.1v que consegue suportar até 65A de corrente, e é bem leve comparada a 6 pilhas (usadas no NXT).

Interface

Responsável por interligar o Android via USB com a placa IOIO, que por sua vez, comunicará com as outras duas placas responsáveis por Locomoção, e Sensoreamento.

Locomoção

Contamos com 4 motores, um para cada roda, já que o sistema omni-direcional Mecanum, necessita de um controle independente para cada roda. Cada motor possui uma força de 6kg, e consegue ler 3592 passos do encoder por volta do eixo final (redução de 75:1).

Para processar todos esses "passos" de motores, sem perda de nenhum deles devido a falta de processamento, colocamos uma placa MBED que possui um ARM Cortex M3, rodando a 100Mhz.

Esta placa seria também responsável por controlar a velocidade dos motores.
O protocolo que iremos utilizar, para ler os encoders da Interface, e setar as velocidades sera I2C Fast, visto que ambas suportam o modo "Fast".

A placa MBED, possui contador de encoder interno para somente 3 motores, logo precisaremos fazer para 1 motor a contagem via software (Se a NXP ler isso, poderiam colocar 4 da próxima vez!).

Sensoreamento

O algoritmo que vamos utilizar, necessita de varias medidas de distancia ao redor do robô, para isso colocamos nessa placa, um Arduíno, que ira controlar um servo motor, que movimenta todos os sensores do topo do robô. Rotacionando 90º, teremos 360º de medidas já que utilizamos 4 sensores de infra vermelho de distância, e 180º de leituras de temperatura (mais que o necessário).

Esta placa seria responsável por fazer as medidas, filtrar, e enviar para a Interface via I2C. Estamos pensando em talvez usar Serial comum.

IMU

Além de todos esses sensores, ainda temos uma "carta na manga".

Temos uma IMU (Inertial Measurement Unit) de 9 eixos. É basicamente uma unidade que possui: giroscópio de 3 eixos, acelerômetro de 3 eixos e magnetômetro de 3 eixos, dando ao robô um completo modo de saber com muita precisão, sua posição, e angulo em relação a todos os eixos.


O robô: Software



Ainda não temos nada concreto, de qual algoritmo vamos usar, sabemos que temos todas as ferramentas necessárias (Mecânica e hardware) para fazer oque precisarmos, mas não decidimos "como" vamos utilizar isso tudo, para conseguir se locomover e achar todas as vítimas no menor tempo possível.

Normalmente, escrevemos todo código em C, desta vez, utilizaremos o C para a placa de sensoreamento (Arduino Nano), C++ para a MBED, e Java (e C++) para o Android.


A viagem

Viajaremos de 16 à 27 de junho, temos já 2 passagens  doadas pela NovaDidacta, Cortes a Laser oferecidos pela CopyExpress e componentes eletrônicos da Proesi.

Precisamos de 30 mil para que isso tudo consiga chegar até o México, junto com:
Felipe Nascimento (nosso técnico), Hudson Cássio (nosso mentor), André Seidel, Ivan Seidel, Gabriel Lima e Matheus Canejo.

Desculpem a paralisação do blog!

Olá leitores!
Estive ausente por um tempo pois estive muito ocupado com o final do semestre (sim, final do semestre em até abril!). Lembram que entrou em greve? pois bem, acabo de "terminar" o semestre nesse mês agora, e tudo deve voltar ao normal!
Vídeos, fotos e posts!
Estou com projetos aos montes, e pretendo postar somente quando terminados, se não acabo enrolando vocês de mais!
Desculpem esse gap de posts,
Ivan