jugaBot: codi v1.0

Descripció

ev3-educator-gyroA continuació es llista el codi del programa jugaBot (descàrrega del fitxer .ev3) amb el que el robot memoritza les tecles premudes per l’usuari fins que prem la tecla del mig, i aleshores executa les accions corresponents (ex. anar endavant si s’havia premut la tecla que hi ha just sota la pantalla de l’EV3). Podeu veure la pàgina “jugaBot: Lego Mindstorms EV3 per a infants” per a saber més detalls sobre la utilitat d’aquest programa.

El robot per executar aquest programa directament, és el model Educator (el primer que indiquen les instruccions bàsiques del kit de Lego) només amb el sensor giroscopi. En concret el motor esquerra va connectat al port B, el motor dret al port C i el giroscopi al port 2 (en cas de no disposar de giroscopi, també es possible usar el programa).

El programa consta d’un bloc principal (anomenat jugaBot) i varis blocs propis (l’equivalent a funcions/procediments/subprogrames) on es codifiquen parts del programa, bé per claredat (que el programa no sigui massa llarg i difícil d’entendre) o perquè s’usen en més d’una ocasió. A continuació es detallen els següents blocs:

  1. Programa principal: jugaBot
  2. Memoritza les tecles premudes: llegirTecles
  3. Dir la direcció en veu alta: veuDirecció
  4. Executa accions segons les tecles memoritzades: executa
  5. Executa una acció: execTecla
  6. Gira usant el giroscopi: gir
  7. al final hi ha l’enllaç per a descarregar el fitxer amb el codi.

El codi de cada bloc està descrit en una imatge, la qual es pot ampliar fent clic amb el ratolí.

1. Programa principal: jugaBot

jugabot-v1.0-01

  • El programa principals consisteix en un bucle en el que es van llegint les tecles premudes per l’usuari (bloc: llegirTecles) fins que pren la tecla del mig, i aleshores s’executen les accions corresponents (bloc: executa).
  • Per tal de donar informació a l’usuari, entremig hi ha intercalats una serie de sons i cares que es dibuixen en pantalla.

2. Memoritza les tecles premudes: llegirTecles

jugabot-v1.0-03

  • El bloc de llegir les tecles és un bucle en el que llegeix una tecla premuda per l’usuari (variable: tecla)  i s’emmagatzema en un  vector (variable: comandes) fins que es pren la tecla del mig.
  • Per tal de donar informació a l’usuari, entremig hi ha intercalades una serie cares que es dibuixen en pantalla, i es pronuncia el nom de l’acció cada cop que es prem una tecla (bloc: veuDirecció).

3. Dir la direcció en veu alta: veuDirecció

jugabot-v1.0-02

  • Aquest bloc s’ha introduït per a que l’infant vagi sentint repetidament el nom que té cada acció, amb intenció que les acabi aprenent. Especialment les de girar a l’esquerra i a la dreta, que acostumen a ser conceptes que encara no té assimilats. L’entorn de l’EV3 ja incorpora els noms de les direccions en anglès i també es poden gravar en la llengua que vulguem.
  • El bloc consisteix en triar quin fitxer de so s’ha de reproduir (variable: nom-so) en funció de la tecla memoritzada (primer paràmetre del bloc) i en acabat, reproduir-lo al volum indicat (segon paràmetre)
  • En realitat el nom és “veuDireccio” sense accent, ja que l’entorn de Lego .EV3 no suporta accents als noms de blocs propis.

4. Executa accions segons les tecles memoritzades: executa

jugabot-v1.0-04

  • El bloc d’execució de les accions té un bucle que es repeteix tants cops com la longitud del vector en el que estan guardades les tecles (variable: comandes). En cada iteració, es consulta una posició del vector de tecles i es pronuncia el nom de l’acció (bloc: veuDirecció) i s’executa (bloc: execTecla).

5. Executa una acció: execTecla

jugabot-v1.0-05

  • El bloc d’execució d’una acció consisteix en una construcció alternativa en funció de la tecla memoritzada (primer paràmetre) en la que es fan diferents accions. De moment són les de gir a dreta o esquerra (bloc: gir) o avançar (fent una volta sencera d’ambdós motors).
  • Cada acció s’acompanya d’una cara diferent dibuixada en pantalla.
  • La tecla endarrere (la més allunyada de la pantalla de l’EV3) de moment no s’usa. Tan mateix, s’ha pensat en un parell d’alternatives:
    • que servís per obrir/tancar una pinça davantera que s’afegiria al robot.
    • que servís per baixar/pujar un retolador que s’afegiria al robot.

6. Gira usant el giroscopi: gir

jugabot-v1.0-06

  • Aquest bloc de gir ha estat el més delicat, donat els problemes de precisió i deriva del giroscopi que ve amb el kit de Lego. A continuació es descriu primer la implementació que es mostra i després s’indica com s’ha arribat fins a ella.
    • Si no es disposa de giroscopi, és possible reemplaçar aquest bloc propi, per un altre en que s’aconsegueixi que el gir movent una roda endavant i l’altra endarrere un nombre determinat de voltes.
  • La implementació mostrada en essència fa la major part del gir a màxima potència i el darrer tram a menor potència per millorar la precisió. Com que s’ha d’introduir una correcció diferent en funció del sentit de gir, el primer que hi ha és una alternativa per distingir entre gir a l’esquerra o a la dreta (segons el signe del primer paràmetre del bloc). Aleshores, es giren 80º a màxima potència (segon paràmetre) posant un motor amb la potència en positiu i l’altre en negatiu per a que el robot giri sobre si mateix. Finalment, es giren els graus restants fins a 90º (amb alguna petita correcció segons el sentit de gir) i s’aturen els motors.
  • Descripció del problema de precisió i deriva:
    • Originalment es va partir d’una implementació en la que es guardava en una variable l’angle teòric al que hauria d’apuntar el robot en cada moment (sumant o restant 90 graus als girs) i es comprovava que la lectura del giroscopi coincidís, fent correccions quan no era així. Tanmateix, es va observar que la lectura del giroscopi variava en estat de repòs (deriva o drift) o podia ser incorrecta en més de cinc graus en funció del sentit de gir (precisió). Entre altres, es va veure que en engegar el robot, s’inicialitza el giroscopi i és molt important que el robot resti immòbil durant un parell de minuts.
    • Com a segon pas es va intentar posar a zero el giroscopi abans de cada moviment (veure bloc executa alternatiu) i controlar el final del gir amb la lectura d’angle absolut del giroscopi (veure bloc gir alternatiu part 1 i part 2). En aquesta versió, novament els problemes de precisió i deriva comportaven correccions importants (que també s’han observat en altres exemples disponibles a la xarxa: exemple problema precisió minut 8:20). Tot i introduir un tram de frenada de gir per augmentar la precisió, aquests problemes van disminuir molt poc.
    • Finalment, la implementació que es mostra en aquesta pàgina està feta en base a la lectura del canvi d’angle del giroscopi, tal i com aconsella el llibre “Classroom Activities for the Busy Teacher: EV3“. Usant aquesta alternativa, la correcció que s’ha d’introduir és molt menor que en els casos anteriors. Cal observar que malgrat el bloc propi de gir té un primer paràmetre d’angle, en realitat només s’usa per saber el sentit de gir, ja que la correcció canvi segons l’angle total de gir (i en aquesta aplicació només es fan girs d’angles rectes).

Descàrrega

L’enllaç que hi ha a continuació conté el codi descrit:

  • jugaBot-v1-0.canviar-extensio-per-ev3.key: un cop descarregat el fitxer CAL canviar el nom del fitxer a “jugaBot-v1-0.ev3” (fixeu-vos que canvia l’extensió a “.ev3”, ja que actualment no era possible penjar-ho en aquest bloc amb aquesta extensió).
  • Llicència: GPL 3.0
Anuncis

Un pensament sobre “jugaBot: codi v1.0

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s