Graduação

Neste espaço vou descrever algumas curiosidades sobre a elaboração do meu trabalho final de graduação, no qual defendi em 16/07/2009. Disponível para download aqui ou no link Publicações acima. Está disponível também para download o código fonte do programa aqui.

Bom, sempre me interessei pelo tema robótica, apesar de até então nunca ter desenvolvido ou programado algum robô. Estava decidido que o tema do meu trabalho final seria relacionado a essa área. Troquei várias idéias com professores, e a melhor idéia que havia surgido era programar um tanque de guerra para o simulador Robocode.

Foi então que descobri que a UNIFRA havia adquirido um robô da Lego, no qual era possível montar e programar! O nome do robô era Mindstorms NXT.

Porém, até o momento, ninguém havia se habilitado a desenvolver algum projeto utilizando o robô. Resolvi encarar o desafio. Nesse momento eu já havia achado um corajoso para me orientar, o professor Guilherme Dhein.

Pesquisando na internet descobri que o robozinho da Lego era bem flexível. O firmware do robô podia ser substituído, permitindo assim programá-lo em várias linguagens, como Java e C, ao invés de utilizar um software visual próprio da Lego. Decidi que a linguagem seria Java, para isso seria utilizado firmware LeJOS. Bom, perdi uma tarde inteira na UNIFRA mas finalmente consegui sobreescrever o firmware do maldito! O tal Java funcionava no robô!!

Era mais ou menos agosto de 2008 e começava uma rotina puxada. Trabalho de dia, aula de noite, e trabalho final para fazer. Como não conhecia nada sobre o tema robótica, tive que pesquisar e ler bastante. Nesse momento eu havia decidido em conjunto com o orientador, que iríamos utilizar o recurso de bluetooth do robô, e controlá-lo remotamente (com um notebook por exemplo). Chegamos a essa conclusão precipitadamente, pois achavámos que o robô tinha pouco poder de processamento e pouca memória, que era melhor partir logo para essa solução. Havíamos decidido também o objetivo do trabalho: estudar sobre tolerância a falhas em robótica, e criar um programa que o robô conseguisse seguir uma rota delimitada por uma linha preta no chão.

Até o final do semestre em dezembro de 2008 eu não havia feito muito progresso em desenvolver o programa para o robô seguir a linha. O tempo de reposta do bluetooth parecia ser lento, porém eu ainda achava que era alguma barberagem no código, e que tinha solução. Na primeira curva que surgia o robô se perdia completamente. Felizmente a parte escrita estava adiantada, a revisão bibliográfica estava feita (graças a orientação do meu orientador), porém era bom já entrar no último semestre com o código adiantado, pelo menos o robô conseguindo completar uma volta no circuito. Acabou o semestre e eu estava na mesma. Começava as férias de verão.

Eu não iria me render tão fácil! Entrei janeiro adentro e continuava tentando, até meu orientador eu incomodei nas férias (pobre coitado, passou trabalho comigo hehehe). Início de fevereiro, foi quando eu tive uma idéia, já que nada dava certo e já estava a fim de desisitir. Quem sabe não tento rodar o programa direto no robô, sem bluetooth, ou seja, embarcar o software? BINGO! Nossa, quando tempo perdido, o tempo de resposta do robô quando perdia a linha era quase instantâneo. Voltei a sorrir . Fiz até um vídeo para registrar o momento:

Claro, não estava perfeito, tinha que dar uma "mãozinha" nas curvas mais fechadas, mas até então ele não fazia nenhuma curva! Era um grande avanço. Projeto alterado: sai bluetooth e entra software embarcado! Pesquisando na internet e nos fóruns, descobri que o poder de processamento do robô não era tão fraco, até porque não se deve comparar com um computador normal que possui gigas de memória, são duas coisas bem diferentes! Tanto que celular tem poder bem fraco de processamento (comparado com um computador) e roda jogos com bastante processamento, como por exemplo, xadrez. Mais uma lição aprendida, ainda bem que estava com tempo.

A partir desse momento o trabalho andou rapidamente. Em maio de 2009 teve um seminário de andamento, nessa etapa o programa para seguir a linha já estava bem avançado, e a tolerância a falhas nos sensores incorporada no projeto. Porém um dos professores da banca, pediu que para a defesa final, tivessem curvas mais "desafiadoras" no circuito, no estilo cotovelo, ou 90°. Rapaz .. esse deu trabalho, perdi quase 1 mês para fazer essa parte do código para ele encontrar a linha. E ainda tive que utilizar as técnicas avançadas (vulgo POG) do meu orientador para ajudar a estruturar essa parte do código. Mas deu certo. Porém o meu orientador queria me judiar (certo ele, incomodei ele até nas férias hehe), queria que fizesse algum trabalho voltado a tolerância motora, não só de sensores. Como faltava cerca de 20 dias para entregar o trabalho, não deu para aprofundar muito o trabalho nessa parte. Porém deu para programar alguma coisa. Seguem abaixo os dois últimos vídeos do trabalho, o primeiro foi apresentado durante o seminário e o outro é a programação final do programa para seguir a linha.

Bom, deu trabalho mas valeu a pena, quase fiquei solteiro durante a realização do trabalho, mas no final tudo certo hehe. Participaram da banca, tanto do seminário quando da defesa final os professores (e amigos) Marcos Luis Cassal e Andre Zanki Cordenonsi que gentilmente aceitou meu convite para participar da banca. O trabalho rendeu 4 publicações, toda disponíveis no link Publicações.

Publicações
Revista do CCEI: Foi o primeiro artigo submetido, o trabalho ainda não estava terminando, somente a parte do sensor virtual. Considero a melhor publicação em termos de currículo, pois a revista possui Qualis.
SEPE: Evento local, da própria UNIFRA, foi publicado somente para divulgar o trabalho dentro da própria instituição. Em formato pôster.
SEMINFO: Seminário que ocorre anualmente em Torres - RS, foi a primeira vez que apresentei o trabalho fora da instituição. Apesar de não estar "lotado" o evento, achei que teve boa aceitação o trabalho. Pela falta de espaço (8 páginas) só pode ser abordada a parte de sensor virtual, assim como na revista do ccei, porém de forma mais resumida.
SEMINCO: Eu já havia "encerrado" os trabalhos do TFG com o SEMINFO, porém nesse evento surgiu a oportunidade de abordar a parte de tolerância motora, pois o artigo podia ter até 12 páginas. Achei difícil ser aceito, pois além do artigo ter que ser avaliado positivamente, somente os 13 melhores iriam para os anais do evento. Para a minha surpresa o artigo levou várias notas "excelente" nos aspectos avaliados, e foi aceito!! (É Guilherme, tu tava certo, se tivesse abordado desde o início os motores a gente tinha mais chance hehehe). Considero a melhor publicação em termos de conteúdo, pois é a que melhor representa o meu TFG. Infelizmente não pude ir apresentar, pois ficou muito em cima a notificação de aceite.