Primeiras linhas de código

Com um Rover já em condições de andar, faltava o video de demonstração da praxe (o que está no artigo de abertura desta série).

Antes de me meter à aventura com o Snap! limitei-me a transferir para o Raspberry Pi um script muito básico em python que faz o Rover por 4 vezes andar um troço a direito seguido de uma curva à esquerda (idealmente voltando ao ponto de partida mas como não usei nenhum tipo de sensores a única forma de o conseguir foi afinando os tempos à mão) e no final uma rotação em torno de si mesmo várias vezes para a direita:

import nxt
import nxt
import nxt.locator
from nxt.sensor import *
from nxt.motor import *
from time import sleep

brick = nxt.locator.find_one_brick()
left = Motor(brick, PORT_B)
right = Motor(brick, PORT_C)
both = nxt.SynchronizedMotors(left, right, 0)
leftboth = nxt.SynchronizedMotors(left, right, 100)
rightboth = nxt.SynchronizedMotors(right, left, 100)

for n in range(0,4):
 both.run(100)
 sleep(1.25)
 both.idle()
 sleep(0.25)
 leftboth.run(100)
 sleep(0.48)
 leftboth.idle()
 sleep(0.25)

rightboth.run(100)
sleep(4)
rightboth.idle()

A execução do script foi comandada manualmente (essencialmente acedi de modo wireless a partir do meu portátil por SSH e invoquei o script a partir da shell).

Roda livre

Não gostei da roda livre baseada num «pneu», os  movimentos curvos do Rover não me pareciam consistentes.

Tinha encontrado recentemente um artigo de uma roda livre com base numa bola de um conjunto Mindstorms que eu não tenho mas a ideia pareceu-me boa e experimentei primeiro com a bola da minha trackball e depois decidi usar um «abafador» (um berlinde de vidro grande, cerca do dobro do diâmetro de um berlinde normal).

DSC_0183-2 DSC_0185-2A forma como a roda livre está montada no chassis ainda é deficiente (ocorre alguma torção devido ao peso do Rover) mas os movimentos curvos são muito mais fluidos já que o eixo de rotação do Rover passou a ser a bola em vez de uma roda com o seu próprio eixo de rotação.

Entretanto ainda hei-de experimentar outra ideia bastante interessante, usar a bola de um desodorizante roll-on, requer bastante menos peças. O autor (Philippe “Philo”Hurbain) é bastante conhecido no mundo Lego Technic e Mindstorms, com análises tecnicamente muito detalhadas aos motores e baterias da Lego. Também tem no seu site diagramas para montagem de um Rover em Lego que  usa uma bola como roda livre (Spy Camera Rover).

 

Montagem do Rover

Para montar o Rover resta agora:

  • ligar os blocos maiores entre si (o conjunto bateria + Raspberry PI e o Mindstorms NXT) tendo o cuidado de não dificultar a troca de pilhas do NXT nem o acesso aos vários botões e fichas do conjunto:

IMG_2531-2IMG_2535-2IMG_2537-2IMG_2539-2IMG_2540-2IMG_2543-2IMG_2544-2IMG_2546-2

  • depois ligar os dois motores e as três rodas (uma roda por motor e uma terceira roda livre que serve apenas para sustentar o Rover e facilitar as curvas à esquerda ou à direita):

IMG_2547-2

  • e finalmente os cabos, o cartão SD e o adaptador WiFi USB:

IMG_2558-2IMG_2559-2

Esta foi a primeira versão, serviu para o primeiro video de demonstração mas o comportamento deixava muito a desejar (sobretudo devido ao centro de gravidade muito alto e à roda livre instável. Mais à frente mostrarei versões melhoradas, inclusive com sensores (um Rover para poder ser um robot autónomo precisa de algum tipo de sensor para entender o mundo à sua volta).

Legoficação de um Raspberry Pi

Material necessário (aconselho consultar a wiki RPi VerifiedPeripherals):

  • 1 Raspberry Pi (à venda na PTRobotics e na Portugal-Didáctico)
  • 1 Cartão SD 4GB (à venda em todo o lado)
  • 1 bateria com ficha USB (PNY PowerPack 5200mAh, à venda na FNAC)
  • 1 cabo USB-MicroUSB (vem com a bateria)
  • 1 adaptador WiFi USB, preferencialmente mini (D-Link DWA-131 à venda na FNAC)
  • 1 cabo USB A-B o mais curto possível (arranjei um cabo «prolongador» USB extremamente curto numa loja chinesa e juntei um adaptador A-B mas há cabos à venda no eBay)

Poderá ser conveniente, mas não indispensável:

  • 1 hub USB 2.0* (à venda na Worten)
  • 1 teclado USB (à venda em todo o lado, na Mediamarkt há uns muito pequenos)
  • 1 rato USB (à venda em todo o lado)
  • 1 monitor/TV com ligação HDMI ou DVI (neste caso é também necessário um adaptador HDMI-DVI)
  • 1 caixa para Raspberry Pi

* infelizmente nem todos servem, há alguns como o Targus ACH114EV que não seguem devidamente as normas e apesar de funcionarem num PC normal não funcionam no Raspberry Pi. Os modelos KUNFT H-088 e Mitsai H-092 funcionam (este último tem inclusive uma ficha para alimentação externa que poderá dar jeito se quisermos ligar dispositivos USB que consumam mais corrente do que o Raspberry Pi consegue fornecer)

É necessário ligar as duas peças mais volumosas (o Raspberry Pi e a bateria) às restantes peças Lego de um modo prático mas sólido. Optei por colar duas vigas Technic a cada uma de modo a poder tratá-las como se fossem blocos Lego normais.

Raspberry Pi + Bateria USB
Raspberry Pi + Bateria USB antes de serem legoficados

Usei uma cola de contacto própria para plásticos ABS tendo apenas o cuidado adicional de espaçar as vigas a colar com outras peças lego de modo a assegurar que a distância entre as duas respeita os padrões Lego.

Para a bateria usei duas vigas 1×9 (40490):

IMG_2519-2 IMG_2520-2

Para o Raspberry Pi (com caixa) usei duas vigas 1×11 (32525):

IMG_2521-2 IMG_2512-2

Como o espaço entre as vigas da bateria é duas unidades inferior ao espaço entre as vigas do Raspberry Pi podemos ligar os dois num só módulo:

IMG_2527-2

Crónicas do Engenheiro Maluco por Tartes de Framboesa e Lego: Introdução

Objectivo:

Disponibilizar uma plataforma para que crianças de todas as idades se divertam enquanto desenvolvem aptidões nas áreas da Ciência e Engenharia (sobretudo Robótica).

Os blocos Lego não são apenas um brinquedo, são excelentes ferramentas pedagógicas. E além dos blocos básicos, com os quais já se pode construir quase tudo que vier à imaginação, os conjuntos Technic, Power Functions e Mindstorms permitem-nos acrescentar movimento e autonomia às nossas criações.

Nos Estados Unidos (e não só) existem várias organizações que pretendem incutir nas crianças e adolescentes o gosto pelas ciências (STEM – science, technology, engineering and mathematics). Muitas delas fazem-no justamente com Lego:

Dentro do mesmo espírito mas limitado apenas ao ramo das ciências da computação, dois projectos captaram muito recentemente a minha atenção:

A Raspberry Pi Foundation surgiu da preocupação de quatro docentes do Computer Laboratory na University of Cambridge com a falta de preparação dos candidatos a cursos de ciências da computação no Reino Unido. Decidiram por isso difundir entre o público juvenil a versão moderna dos micro-computadores baratos e fáceis de programar que abundaram nos anos 80/90 (a ideia parece-me pertinente já que eu tive um ZX Spectrum 128 aos 14 anos e vejam no que deu).

Tal como no Spectrum havia uma ligação muito directa à linguagem Basic, a Raspberry Pi Foundation decidiu apostar na linguagem Python (daí o Pi que surge no nome) e ainda na linguagem Scratch desenvolvida no Lifelong Kindergarten Group do Media Lab (MIT, Massachussets Institute of Technology) especificamente para estudantes dos 8 aos 16. Esta última é uma linguagem visual que permite desenvolver programas ou animações sem ser necessário escrever código, bastando apenas juntar blocos (como no Lego) e ajustá-los às nossas necessidades.

Como o Media Lab autoriza e até incentiva o desenvolvimento de extensões ao Scratch surgiram muitos outros projectos dele derivados, incluindo alguns que permitem interagir com blocos Lego Mindstorms como o Enchanting do Southern Alberta Robotics Enthusiasts e o Snap! (anteriormente chamado BYOB – Bring Your Own Blocks) da University of California em Berkeley.

Juntando tudo (Snap! + Raspberry Pi + algumas peças Lego Technic e Mindstorms) podemos criar pequenos robots relativamente fáceis de programar, sem o preço nem o peso de um computador portátil nem a complexidade de um microcontrolador dedicado (como um PIC ou um ARM, apesar de neste campo projectos como o Arduíno terem permitido diminuir significativamente a componente complexidade).

Depois é só dar asas à criativade e ao engenho dos engenheiros e cientistas de todas as idades que possam pegar nisto.

Missa digital

Nesta paróquia da Diocese de Leiria onde viemos passar o fim de semana a igreja tem 2 televisores LCD que na missa vespertina passam as letras dos cânticos em formato karaoke. Além disso os próprios cânticos são em playback e em vez do regente do coro há um segundo ambão com mesa de som.

Aos Domingos as leituras passam também nos ecrans.

Dizem-me que este software litúrgico está à venda, com algum sucesso. Imagino que daqui a uns anos saia um upgrade com um pregador a assegurar as homílias. Se houver a opção «10 minutos, sem devaneios nem fugas ao tema» e a opção de download de vários avatares 3D à escolha então sim, as vendas serão colossais!

Grandiosa Engenhoca de Berlindes 0.3

This post is part 3 of 3 of  Grandiosa Engenhoca de Berlindes 1

Já que tive de desmontar a Engenhoca para melhorar alguns dos pontos identificados na versão anterior aproveito para documentar melhor o projecto.

Numa nora verdadeira, a água é levada por uns recipientes (alcatruzes) montados nas extremidades dos braços da nora. Apesar de existirem versões Lego muito engenhosas que mantêm a ideia dos alcatruzes, não tenho experiência nem variedade de peças à disposição para me aventurar por aí, preferi empurrar os berlindes ao longo de uma superfície.

O trajecto dos alcatruzes forma uma circunferência mas em Lego há poucas peças grandes e curvas que possam ser usadas (há umas secções de rampa de skate mas não tenho nenhuma) e não consegui aproximações suficientemente boas com as peças-rampa (telhas) tradicionais (o berlinde ou ficava encravado entre a rampa e o braço da nora ou escorregava por entre ambos).

Optei então por uma superficie ajustável, à custa de uma corrente:

GBC1-corrente
Os berlindes deslizam ao longo desta corrente, disposta como um quarto de circunferência.

A corrente tem 33 unidades de comprimento, à custa de 11 «elos» cinzentos interligados com outros10 elos brancos, todos eles «vigas» (beams) de comprimento 3, do tipo 32523. A ideia é suspender a corrente de modo a formar um quarto de uma circunferência (não muito exacta mas se for flexível o suficiente acaba por autoajustar-se com o próprio deslizar do berlinde).

Os pontos de fixação dos extremos da corrente podem ser calculados sabendo o raio da circunferência:

quart-circ

Como a corrente tem o comprimento de apenas um quarto de circunferência,  o perímetro total será 33×4=132 a que corresponde um raio de 21 unidades:

P=2πR

Na verdade a nora tem um raio ligeiramente menor, cerca de 20 unidades (é difícil obter-se exactamente o comprimento pretendido com a combinação de peças utilizada) mas como o percurso da corrente também não segue uma circunferência perfeita acaba tudo por se ajustar.

GBC1-v03-nora
A nora utiliza uma roda com 8 braços com pequenos alcatruzes nas extermidades.

Finalmente um pormenor da corrente depois de montada:

GBC1-corrente-montada
Consegue-se ver os extremos dos braços a roçarem a corrente: após 1 ou 2 rotações completas da nora a corrente ficou ajustada.

Deus está nos detalhes

No sistema de ensino português valoriza-se tanto a componente teórica que muitas vezes temos dificuldades em distinguir uma licenciatura em Engenharia de uma licenciatura semelhante noutra universidade (por exemplo em Lisboa Engenharia Química no IST versus Química na UL). A meu ver o que distingue o Engenheiro é a sua experiência prática, quando a excelência da teoria se confronta com a dura realidade: atrito, perdas, ruído, interferência, vibrações, margens de tolerância…

É por isso que Engenhocas feitas em Lego, sejam para mover berlindes ou outro propósito estrambólico qualquer, podem tornar-se case studies. A aparente facilidade de levar um berlinde de um lado para o outro desfaz-se quando o tentamos fazer várias vezes: o  berlinde ressalta, entala-se, escorrega; as peças estremecem, oscilam, separam-se, gastam-se e por vezes partem-se; ao usarmos vários berlindes o mecanismo encrava ou entope. Mais cedo ou mais tarde temos o chão cheio de berlindes ou a nossa engenhoca desfeita. Às vezes, infelizmente, ambos.

As normas GBC requerem que cada Engenhoca consiga mover em média um berlinde por segundo. Parece pouco mas em circuito continuo, mesmo que com um único berlinde, são 3600 passagens ao fim de uma hora. Como nada é perfeito, é inevitável que no nosso mecanismo ocorram «fugas» pelo que algumas dessas passagens não terão sucesso: berlindes que saltam para fora do circuito ou ficam encravados em sítios reconditos do próprio mecanismo e nunca mais de lá saem.

Poderíamos então aceitar como razoável uma precisão de 99% ou seja perder-se apenas, em média, um berlinde a cada 100 passagens. Parece bom, não parece?

Bem, a 1 berlinde por segundo, 1% de fugas correspondem a 36 berlindes ao fim de uma hora. Num evento com 10 módulos em exibição durante 5 horas seriam 1800 berlindes extraviados, a maioria espalhada pelo chão da sala. Posto assim já não parece tão razoável…

Pondo a questão de outra maneira: as mesmas normas GBC determinam que cada módulo tenha a capacidade de receber até 30 berlindes de uma vez só (o que na prática resulta em ter uma caixa ou cesta à entrada com essa capacidade). Numa exibição seria portanto razoável, ao ligar os motores, começar-se com 30 berlindes. Com uma eficiência de 99% os 30 berlindes seriam «consumidos» em apenas 49 minutos e meio. Menos de uma hora de exibição! Já para uma eficiência de 99,9% teríamos 8h19m30s, mais ou menos um dia de exibição contínua.

Portanto ao desenhar um módulo GBC acabamos por nos sujeitar a uma norma adicional: cada módulo deve ter uma precisão mínima de 99,9%. Na gíria de Administração de Sistemas chamamos a isso «Três noves»: ao comprometermo-nos com um nível de serviço (SLA) dizemos que o nosso «sistema» apenas está indisponível 10 minutos por semana, menos de 9 horas por ano (não é de certeza o caso do meu banco online que todas as noites, depois das 23h, fica impossível de utilizar).

 

Grandiosa Engenhoca de Berlindes 0.2

This post is part 2 of 3 of  Grandiosa Engenhoca de Berlindes 1

Após umas micro-férias para terminar em grande os 4 meses da licença parental, pequenas alterações à versão anterior:

  • velocidade maior
  • um pequeno elevador para assegurar que apenas um berlinde entra na nora
  • um «funil» para evitar que os berlindes bloqueiem o caminho para o elevador
  • extremidades dos 8 braços da nora alteradas para os berlindes não escorregarem por baixo (por sugestão  da cara-metade)

As alterações na velocidade e nas extremidades dos 8 braços fizeram com que os berlindes tendam agora a seguir o braço em vez de deslizar para o «poço» de saída, terei de corrigir as extremidades dos 8 braços.
Além disso o elevador está sincronizado com a rotação da nora por isso apenas 1 dos 8 braços está efectivamente a uso, é necessário aumentar o ritmo do elevador.

Finalmente o funil é um paliativo fraco para o congestionamento dos berlindes à entrada do elevador. A partir dos 7 berlindes em jogo estes começam a bloquear-se mutuamente e o elevador deixa de ser alimentado. É necessário refazer a «cesta» de entrada.

Todas estas alterações forçam-me a recostruir quase de raiz toda a Engenhoca, será uma oportunidade para corrigir alguns outros defeitos menores e tirar fotografias a alguns pormenores ocultos.

 

Grandiosa Engenhoca de Berlindes 0.1

This post is part 1 of 3 of  Grandiosa Engenhoca de Berlindes 1

A minha primeira incursão em Lego GBC (Great Ball Contraption, Grandiosa Engenhoca de Berlindes ou muito provavelmente Raio de Traquitana Pá!) atingiu as funcionalidades mínimas no mesmo dia em que o correio entregou os livros Lego.

Cada módulo GBC recebe bolas Lego e entrega-as ao módulo seguinte, em circuito fechado. Neste caso, por sugestão do meu #1 (o segundo maior fã de Lego cá de casa) entrega a si mesmo. As normas são praticamente minimalistas mas ainda assim suficientes para assegurar que vários participantes num evento possam trazer os seus módulos e juntá-los sem preparação prévia.

Além do efeito hipnótico sobre quem assiste permite também exemplificar alguns conceitos de engenharia (sobretudo mecânica mas também da minha área de formação que é a Electrónica de Controlo e Automação / Robótica).

Falta ainda controlar o fluxo (de modo a evitar encravamentos) e afinar a zona mais crítica (quando cada braço da azenha atinge a posição horizontal) onde a bola por vezes ressalta para trás em vez de seguir o caminho previsto. E depois passar de controlo manual para automático com um Mindstorms NXT.

Apesar das normas requererem bolas Lego (cujo diâmetro vim a descobrir ser de 9/16″ = 14.2 mm) usei «missangas» redondas, mais ou menos do mesmo tamanho e peso e muito mais baratas. Também é possível usar berlindes de vidro (em Portugal parecem ser todos de 16 mm) mas são bastante mais pesados e rijos pelo que se a engenhoca encravar pode sair algum projectado e partir alguma coisa (o Murphy assegura que VÃO sair vários projectados e partir PELO MENOS uma coisa importante).