sexta-feira, 8 de março de 2013

Robit - biografia autorizada

 Capítulo 1 - Nascimento





Esse robozinho simpático aí da foto é o Robit. Ele iniciou sua existência com o projeto de robo com sucata que desenvolvi anteriormente. O projeto foi finalizado, mas o Robit não. Ele continua existindo e no que me toca vai continuar assim. A proposta do projeto era produzir um tutorial de um robo bem simples comandado pela porta paralela. O tutorial foi produzido e o Robit foi meio que um efeito colateral desse tutorial. Pra poder escrever o tutorial eu montei o robo que estava sugerindo e assim nasceu o Robit.

Como o foco do tutorial era o aproveitamento de sucata, a primeira idéia foi aproveitar uma caixa de drive de CD para a carcaça do Robit. Nada estético, mas sucatologicamente correto. Abaixo uma foto do primeiro protótipo usando caixa de CD.


Mas felizmente para o Robit, caixas de drives de CDs provaram ser uma péssima escolha para a carcaça. O metal é muito dificil de furar. Para conseguir instalar os motores e rodízios gastei um número absurdo de brocas e acabou que cheguei a conclusão que se é pra gastar, melhor que seja em uma carcaça apropriada do que em brocas. Então a versão caixa de CD do Robit, nunca chegou a funcionar, na verdade nunca foi além do que a foto mostra.

A carcaça que acabou prevalecendo e está nele até hoje foi encomendada em uma fábrica de perfilados. É uma caixa de alumínio nas medidas que especifiquei e o preço foi bem em conta. A resistencia do aluminio é muito boa e é um material infinitamente mais fácil de furar. Isso sem falar no charme que o alumínio deu ao Robit. Nem imagino o Robit em outra carcaça hoje.

Capítulo 2 - Infância

Na sua infancia, o Robit era basicamente motores, rodas e baterias, nenhum processamento era feito nele. Todo o trabalho "cerebral" vinha do computador. Além disso tinha o onipresente, enorme e pesado cabo paralelo que o Robit era obrigado a arrastar pra poder se mover e mesmo assim sem poder ir muito longe. Bem, como experiência para o estudo da robótica valeu, mas dava pena de ver aquele robozito recém-nascido sendo obrigado a arrastar todo aquele peso e saber que ele nunca ia poder se aventurar para terras mais distantes do que 1,80m do computador.

Mas o Robit nunca reclamou, mesmo porque ele nem tinha como reclamar. A comunicação era unidirecional, sempre do computador para o robo, nunca em sentido contrário. Não havia necessidade de nenhum retorno de informação porque não havia nada pra retornar. O Robit não tinha nenhum sensor e absolutamente nenhuma capacidade de processamento. Tinha apenas dois circuitos em seu hardware: uma proteção da porta paralela (com o 74LS541)  e um módulo de potencia para os motores que coloca os sinais que vem do computador na voltagem e potencia necessárias para ativar os motores de passo (com o ULN2803), algo como um amplificador de sinais.

Capítulo 3 - Evolução

Como responsável legal pelo Robit, eu não poderia deixar de notar que a configuração dele naquele momento era extremamente limitante e impediria o desenvolvimento de todo seu potencial como ser eletro-mecânico. Então, procurei maneiras de dar um up-grade no seu hardware. Ao mesmo tempo, também tentava convencer o software que roda no computador a ser mais amigavel com o Robit. Softwares quase sempre são bem teimosos, precisamos ter muita paciência para lidar com eles.

Foi quando entrei em contato com o Prof. Mario Guimarães que gentilmente forneceu um exemplar do PicStamp e explicou como usá-lo. Essa plaquinha mágica contém um PIC 18F2550 (que é um baita microcontrolador), já com todos os componentes necessários pra mante-lo rodando a 20 Mhz e o melhor de tudo, com conexão USB. A plaquinha tem um conector USB, dá pra conectar um cabo USB nela. Mas a mágica continua, além de ser possível reprogramar o PIC com um cabo USB, um driver bem conveniente cria uma porta COM virtual no computador e a associa à porta USB. Um programa que esteja rodando no computador, pode acessar a porta USB como se fosse uma porta COM. Isso facilita bastante a programação e deixa o software mais bem humorado. Depois disso Robit nunca mais foi o mesmo. Ter um PIC em seu hardware iniciou uma tendencia de evolução avassaladora, que não pode ser impedida.

PICStamp da Grande Ideia Studio



O PIC vem com um programa que associa oito pinos para a saída e oito (?) para a entrada. Ele fica o tempo todo monitorando a porta USB e os pinos de entrada. Qualquer byte que chegue do computador é enviado para os pinos de saída. Leituras nos pinos de entrada são enviadas para o computador.

Isso é bastante conveniente, sem maiores alterações, o Robit passou a receber comandos atravém de um microcontrolador conectado ao computador por um cabo USB. O cabo paralelo rapidamente tornou-se uma penosa lembrança. Depois de experimentar o cabo USB, muito mais fino, mais leve e podendo ser mais comprido, não tinha mais como impor o cabo paralelo ao Robit.

O PicStamp já estava prestando um enorme serviço ao Robit livrando ele do cabo paralelo, mas eu sabia que ele podia fazer muito mais do que isso: podia finalmente dar ao Robit capacidade de processamento, ou seja, um cérebro. Já podia imaginar os if( ) ... else ... encadeados que ele consultaria para tomar suas próprias decisões e em todo o potencial de desenvolvimento que se abriria para o Robit. Claro que eu precisava fazer algo a respeito, Robit merecia essa oportunidade.

E aí tentei reprogramar o PIC para se incorporar em definitivo ao Robit, mas o universo tinha outros planos. O PIC mostrou ter uma personalidade bem calada, não libera seus recursos facilmente e nem diz o suficiente pra gente saber o que ele quer. A programação do PIC provou ser um desafio maior do que o esperado, em especial porque era o meu primeiro contato com um microcontrolador. Dada a falta de sensibilidade do PIC em colaborar com a programação, esse projeto acabou por ficar em segundo plano enquanto tocava outros projetos.

E nesse tempo aconteceu o Wixel. Mais uma vez Robit mudou para nunca mais ser o mesmo de antes.

Capítulo 4 - Liberdade sem fio

O Wixel é uma daquelas raras coisas que parecem boas demais para ser verdade e que depois que você finalmente entende e consegue ter algum domínio, percebe que é ainda melhor do que parecia. Bom, não acha? Desde o início que eu imagino o Robit livre de cabos e amarras, vagando solto pela casa. Então nunca deixei de procurar opções de wireless e tinha algumas em vista, mas quando topei com o Wixel percebi que tinha encontrado a tampa da panela do Robit. Até então, as opções de wireless que eu tinha considerado apenas faziam a comunicação, basicamente funcionam como um cabo, mas sem o cabo. Ainda precisaria resolver o problema do cérebro do Robit, usando é claro algum microcontrolador. Bem, o Wixel resolveu tudo em uma tacada e por uma fração do custo de qualquer outra opção de wireless. Não só ele faz a comunicação wireless, mas também tem um microcontrolador embutido disponível para ser programado. E é um microcontrolador bem respeitável com 32k de memoria para o programa, 4k de memoria ram, roda a surpreendentes 24Mhz, 15 pinos disponíveis para a aplicação, leds indicadores e por aí vai.
Wixel da Pololu

E o Wixel mostrou ser muito mais comunicativo e amigável do que o PIC em matéria de confiar seus segredos e habilidades na hora da programação. A empresa que produz o Wixel (Pololu) investe bastante no suporte à programação. Fornece uma documentação bem detalhada, exemplos de aplicações e, extremamente importante, um forum onde qualquer feliz proprietário de um Wixel pode tirar dúvidas sobre a programação e funcionamento dele. Funcionários da empresa monitoram o forum e respondem rapidamente qualquer dúvida que apareça por lá. Isso fez toda a diferença. No final acabei entrando em acordo com o Wixel e ele ficou feliz em ser programado para ser parte definitiva do Robit.

Desde a primeira ativação do Robit com o wixel, já devidamente instalado e programado, dava pra ver a diferença que algum poder de processamento faz em um robô. Não era só o fato de finalmente estar livre de cabos, Robit agora controla seus próprios motores, não precisa mais passar pela humilhação de ter sua função mais básica, o movimento, controlada por uma entidade externa. E mais do que isso, Robit agora aprendeu a se comunicar, está todo falante e troca mensagens o tempo todo com o computador. Acabou a fase da obediência cega (e muda). O relacionamento dele com o computador agora está mais para trabalho em equipe do que pra mestre-escravo. E isso se reflete inclusive nos seus movimentos, agora eles estão muito mais seguros e precisos. Como é o Robit que controla o tempo entre os pulsos para os motores de passo, a duração dos pulsos está mais regular, além disso, o microcontrolador consegue medir intervalos de tempo muito menores do que o computador conseguiria com timers de alto nível. 

Capítulo 5 - Olhos para ver, sensores para sentir

Desde o Robit era apenas uma ideia, a intenção sempre foi que ele tivesse ou proporcionasse algum tipo de processamento de imagens, uma câmera acoplada ao Robit sempre foi um de seus propósitos. Afinal a minha especialidade é o processamento de imagens e juntar isso com robótica para estudar sistemas de navegação autônoma é algo que sempre quis fazer. Depois que os problemas básicos de movimento e comando foram resolvidos, era hora de colocar uma câmera nele. A primeira ideia foi usar uma camera IP wireless e por isso acabei comprando a Feasso citada neste post. O problema é que ela é grande e pesada demais, além disso consome muita energia. Mas como ela tem pan-tilt, serviu (e ainda serve) para testar alguns algoritmos e implementar algumas ideias, como por exemplo, a medição de distâncias com laser.

continua...