Curs per a professors d’Introducció a LEGO® Mindstorms NXT i EV3

(versió 4.5)

 

UNITAT 2. Motors, desplaçaments i girs: el control precís de la distància recorreguda.

 

En la segona unitat didàctica es realitzarà una introducció més detallada al programari, a la lògica de programació i a la relació amb les parts del robot. Pràcticament tota la unitat es dedicarà als motors. També es farà una introducció al càlcul de rotacions en funció del diàmetre de la roda i al control amb precisió del desplaçament del robot.

 

El primer exercici incremental consisteix en arribar al final de la “gàbia” o recorregut realitzant girs amb una roda parada i girs amb les dues rodes en moviment.

 

Una mica de teoria

 

Abans de començar els exercicis pot ser molt útil il·lustrar els temes a tractar amb exemples reals. Els següents vídeos, sobre les sondes enviades al planeta Mart, il·lustren els objectius i propòsits a l’hora de dissenyar robots exploradors autònoms i com els problemes que sorgeixen (el bloqueig d’una roda o com entrar dins un crater per observar estrats de terreny antics) poden portar a fer descobriments extraordinàriament importants, com ara descobrir l’existència d’aigua en el passat. També és important que els alumnes s’adonin de la importància de l’esforç i la perseverança per resoldre problemes, i de que s’aprèn molt més d’un fracàs, per exemple en resoldre un problema imprevist, que no pas d’un èxit sense problemes.

 

Vídeo Les aventures de Spirit, 29 de mars de 2009

El robot explorador de la NASA, Spirit, ha explorat el Planeta Vermell durant mitja dècada, superant reptes tècnics i realitzant descobertes importants.

 

Vídeo La vida de Opportunity, 29 de gener de 2009

El robot explorador de la NASA, Opportunity, ha caminat per la superfície del Planeta Vermell durant 5 anys. Ha descobert els primers signes de gel antic i ha ajudat a respondre la pregunta: hi ha vida a Mart?

 

Descripción: http://www.technologyreview.com/blog/deltav/files/63587/508359main_image_1835_946-710.jpg

Article Adéu Spirit: un explorador del Planeta Vermell, 25 de maig de 2011

Un projecte de 3 mesos es va convertir en una història de 5 anys, però després d’intentar contactar el rover de Mart durant 3 mesos, la NASA està a punt d’anbandonar.

 

Unitat 2 exercici 1: Entendre el bloc “Motor” en cada roda, utilitzant rotacions.

 

Obrir el programari, salvar un primer programa amb el nom “u2ex1.rbt” i afegir un primer bloc “Motor” a aquest primer programa.

 

El bloc “Motor” s’ha de seleccionar de la barra d’eines i ubicar a sobre de l’anomenada “Sequence Beam” (biga de seqüència). Observar com una barra vertical de color blanc indica el lloc on s’inserirà el bloc en la biga de seqüència. És important esperar sempre a veure aquesta barra vertical per assegurar que el bloc s’ubica al lloc correcte.

 

   

 

 

 

Per defecte, el bloc “Motor” es crea amb una durada il·limitada i pel port A, que cal canviar pel B, la roda de la dreta del robot. Per tant, si no realitzem cap altre canvi, el robot girarà cap a la dreta sobre la roda del motor C, que estarà parada.

 

Abans de realitzar l’exercici amb el robot, és interessant preguntar als alumnes què creuen que farà el robot. Si la durada del motor és il·limitada la primera resposta correcta és que el robot girarà per sempre. Una resposta una mica més precisa és que el robot girarà fins que se li acabin les bateries..., però no és així. De fet, el robot comença activant el motor, però immediatament després no troba res més a fer i atura el programa. Per tant, el robot farà un petit gir cap a la dreta. Més endavant veurem com fer girar el robot il·limitadament fins que se li acabin les bateries.

 

Una segona versió del programa, posant 2 rotacions en comptes de durada il·limitada en el mateix bloc, permet controlar la durada del gir del motor, en aquest cas el motor B. Cal observar que per defecte s’activa el control “Wait for Completion” (esperar finalització) i el control “Next Action” (acció següent). Més endavant veurem la importància del primer control. Respecte a l’acció següent del bloc, és important veure que el bloc pot frenar el motor (opció “Break”) o no frenar-lo (opció “Coast”) en acabar el gir sol·licitat. Per exemple, cal utilitzar l’opció de frenar el motor si volem controlar amb precisió la distància recorreguda. Finalment, a més de rotacions, podem controlar el gir del motor mitjançant graus o temps expressat en segons.

 

 

Per acabar l’exercici podem anar variant els atributs del panell de configuració del bloc i observar l’efecte de cadascun d’ells, en especial la direcció i la potència.

 

Suggeriment: Per realitzar millor els exercicis, és convenient baixar la potència dels motors a 50, la qual cosa evita que el robot rellisqui sobre la superfície, especialment si aquesta és molt llisa.

 

Unitat 2 exercici 2: Desplaçament endavant utilitzant només el bloc “Motor” i rotacions.

 

En primer lloc podem veure l’efecte d’afegir un segon bloc “Motor” pel motor C de l’esquerra. Cal explicar que el programa informàtic sempre s’executa d’esquerra a dreta seguint la biga de seqüència. Abans de seguir, un bon exercici és preguntar als alumnes què creuen que passarà?, com es comportarà el robot?

 

Cal observar què passa si els atributs d’aquest segon bloc són diferents del primer. Finalment, cal anar amb cura i posar la mateixa durada i potència del bloc que l’anterior per a que els comportaments dels motors B i C siguin similars. Perquè el robot no va recte?

 

Per dur a terme un desplaçament correcte del robot en línia recta, a més de que els motors de cadascuna de les rodes B i C tinguin la mateixa potència (75) i girin el mateix número de rotacions (2,4), cal observar que han de funcionar alhora. Donat que això encara no és així, observar que el robot gira cap a l’esquerra, sobre la roda esquerra del motor C que estarà parada, i després cap a la dreta, sobre la roda dreta.

 

Els alumnes de seguida veuen que cal que els dos motors arrenquin alhora i alguns inclús proposen posar el segon bloc a sobre del primer! En aquest punt es pot mencionar la possibilitat que permet el programa de desdoblar la biga de seqüència per arrancar dos o més processos en paral·lel, però això ho veurem més endavant.

 

Per dur a terme aquest desplaçament correcte, cal que l’opció “Wait for Completion” (esperar finalització) del bloc “Motor” associat amb el motor B estigui desactivada. És a dir, amb aquesta opció desactivada, el programa no espera a que acabi de girar el motor B per arrencar el motor C, la qual cosa fa que els dos motors funcionin alhora i que el robot es desplaci en línia recta i endavant, si els paràmetres dels dos blocs són iguals, excepte per l’atribut esmentat.

 

Motor B

 

Perquè el robot no es para correctament? Cal observar que un bloc “Motor” que tingui aquesta opció desactivada no frenarà mai (veure que l’opció “Brake” de l’atribut “Next Action” o acció següent del bloc està inhabilitada). Per tant, caldrà frenar explícitament el motor que tingui l’opció “Wait for Completion” desactivada, si es vol que el motor freni al final del recorregut. En aquest exemple, cal utilitzar un bloc “Motor” per frenar el motor B explícitament, ja que el motor C frena un cop realitzades les seves rotacions. Això permetrà parar el robot en el lloc exacte, és a dir, parar les dues rodes al mateix temps. Altrament, un cop finalitzades les rotacions d’ambdós motors, el robot farà un petit gir a la dreta, equivalent al “Coast” del motor B.

 

 

Motor C

 

Cal observar que no frenar els motors al final del seu recorregut equival a l’opció “Coast”, que pot ser interessant en segons quines condicions, per exemple, per encadenar girs o seqüències de moviment. També cal observar que frenar els motors consumeix més energia que no frenar-los.

 

Finalment, per acabar d’entendre amb detall el funcionament dels blocs motor, podem demanar als alumnes què passarà si posem il·limitada la durada del motor B.

 

 

La primera resposta incorrecta és que el robot anirà recte i després girarà cap a l’esquerra donat que el motor B gira il·limitadament. Aquest és un punt molt important per practicar el primer “debugging” o depuració d’un programa informàtic. Com hem dit anteriorment, el programa informàtic sempre s’executa d’esquerra a dreta seguint la biga de seqüència. Per tant, el programa arrancarà el motor B il·limitadament, immediatament després arrancarà el motor C (observar que l’atribut “Next Action” o acció següent del bloc està inhabilitada), esperarà a que acabi de girar aquest motor C, donat que l’opció d’esperar finalització està activada (mentre tant el motor B segueix girant), i finalment i immediatament després de frenar aquest motor C s’executarà el tercer bloc motor que pararà el motor B. Per tant, el robot anirà recte i pararà en finalitzar les rotacions sol·licitades al motor C, exactament igual que anteriorment.

 

Aquesta estructura informàtica és la primera que cal que els alumnes aprenguin i fa explícit el control del desplaçament del robot endavant mitjançant un sol bloc motor, sempre el segon bloc, en aquest cas associat al port C. Per tal de que els alumnes entenguin el funcionament dels blocs motor, és molt interessant que facin proves amb el robot. A més, aquesta estructura informàtica permet llegir i visualitzar millor el programa informàtic i alhora, facilita la seva modificació, donat que només cal canviar l’atribut d’un sol bloc motor per modificar el desplaçament del robot en línia recta.

 

Un exercici interessant és posar els dos blocs motor amb durada il·limitada per veure que, tal com passa amb un sol motor, el robot es desplaça una mica endavant sincronitzant, però, els dos motors i para, donat que no té cap altra instrucció a realitzar. També és molt interessant posar els dos motors amb durada il·limitada i afegir al final dos blocs per parar els dos motors. Els alumnes comencen a entendre que l’execució del programa és tan ràpida que el robot no es belluga...

 

Coneixements adquirits: Aquest exemple bàsic de funcionament permet aprendre el funcionament bàsic dels motors. És molt útil descobrir aquest funcionament a base d’assajos, per tal d’entendre correctament el significat de cadascun dels atributs del bloc “Motor”, que seran bàsics per controlar amb precisió els desplaçaments i els girs del robot.

 

Unitat 2 exercici 3: Desplaçament endavant i/o enrere per tornar al lloc d’origen utilitzant només el bloc “Motor”.

 

Deixar als alumnes fer algunes proves. La solució més senzilla és copiar els 3 blocs anteriors i només modificar la direcció de gir dels motors B i C per a que el robot vagi endavant, freni i torni enrere, al lloc d’origen.

 

o millor

 

Les dos estructures anteriors són equivalents, però la segona és millor donat que fa explícit el control del robot mitjançant un sol bloc motor, el segon, permet realitzar canvis de durada més fàcilment (només canviant l’atribut del segon bloc motor), i permet visualitzar molt ràpidament el comportament del robot en mirar el programa informàtic, especialment quan aquest és llarg.

 

Suggeriment: Per tal de replicar un bloc, o conjunt de blocs, podem seleccionar-lo i copiar-lo (Ctrl-C), per després enganxar-lo (Ctrl-V) al lloc adient del programa. Alternativament, podem prémer la tecla Ctrl, seleccionar el bloc, o conjunt de blocs, que volem copiar i arrastrar-lo al lloc del programa on volem enganxar-lo. Per evitar problemes de compilació del programa, en el moment d’enganxar els blocs, és aconsellable esperar a veure que la barra o espai vertical blanc, que indica el lloc del programa on s’enganxarà el bloc en la biga de seqüència, està ubicat al lloc desitjat.

 

En una segona versió de l’exercici fer que el robot giri i torni al lloc d’origen, sempre en la mateixa direcció, endavant.

 

o millor

 

Observar que el gir del robot es realitza mitjançant un bloc “Motor” en el port C, per tant, girant cap a la dreta, sobre la roda del motor B i mitjançant un número de graus de gir (720) del motor C. Si el robot gira massa ràpid pot relliscar i és convenient baixar la potència, per exemple a 50. Aquí és important veure què passa si abans d’aquest gir els motors no estan frenats.

 

Motor C

 

En aquesta segona versió del programa, cal observar que el robot no torna exactament al lloc de partida, perquè? El desplaçament del robot correspon a l’amplada del robot, ja que aquest gira sobre una roda. Com es pot corregir aquest desplaçament?

 

El gir que fa el robot s’anomena gir sobre un punt (la roda del motor B, que està parada en el nostre cas). Per tal de fer que el robot no es desplaci i arribi al mateix punt de sortida, cal fer que el robot giri el mateix sobre cadascuna de les seves rodes, un gir sobre la roda C i l’altre en sentit contrari sobre la roda B.

 

o millor

 

Observar que aquests dos girs impliquen reduir el número de rotacions de cada motor respecte al gir anterior.

 

Finalment, com podem fer girar el robot de forma més elegant? Com podem realitzar un gir sobre l’eix del propi robot, i no sobre cadascuna de les seves rodes? Per poder-lo realitzar cal fer els dos girs anteriors simultàniament.

 

o millor

 

Deixar que els alumnes facin proves i descobreixin que, de forma similar al programa inicial anterior, cal que el motor C tingui l’opció “Wait for Completion” desactivada i cal frenar el motor C un cop acabat el gir del robot sobre el seu eix, mitjançant els dos motors.

 

En aquest exercici es veu la conveniència de posar el primer bloc motor de cada grup de 3 motors sempre amb durada il·limitada, la qual cosa facilita enormement la lectura del programa i la seva modificació per donar precisió als desplaçaments.

 

Unitat 2 exercici 4: Desplaçament endavant i/o enrere per tornar al lloc d’origen utilitzant el bloc “Move”.

 

Fer un segon programa nou, per exemple “u2ex4.rbt”, i afegir un bloc “Move”.

 

 

 

A diferència del bloc “Motor”, el bloc “Move” permet controlar els 3 motors alhora. Per defecte es configura pels ports B i C, amb 1 rotació de motor i amb l’opció de frenar per a l’acció següent (en l’exemple, aquest atribut s’ha modificat a 2 rotacions). Podem observar un nou atribut anomenat “Steering” o volant. Aquest atribut permet distribuir la potència entre els 2 motors (està inhabilitat si seleccionem 3 motors). Per defecte el volant es posa centrat, per distribuir la potència de forma idèntica entre els 2 motors. Més endavant veurem com funciona.

 

Per tant, amb el bloc configurat com en la imatge anterior, el robot es desplaçarà linealment 2 rotacions endavant. Si comparem aquest programa amb el del primer exercici, veurem que són equivalents. Per tant, el bloc “Move” és una molt bona opció per controlar el moviment en línia recta del robot, ja que sincronitza els 2 motors automàticament.

 

 és equivalent a

 

Deixar que els alumnes repliquin l’exercici anterior però només amb el bloc “Move”. Això els hi permetrà veure l’efecte de l’atribut de volant.

 

Veurem que per anar endavant i tornar enrere a la posició de partida, només haurem d’afegir un segon bloc “Move” idèntic a l’anterior, i modificar-li només la direcció dels motors.

 

 

Seguidament, podem inserir un tercer bloc “Move” entre mig dels dos blocs existents i jugar amb l’efecte de volant per fer girar el robot i fer-li fer una corba.

 

Quins canvis haurem de fer per tal d’aconseguir l’efecte dels blocs “Motor” de l’exercici anterior? Finalment, veurem que si desplacem la barra de volant cap a l’extrem del port d’un motor, el robot girarà sobre un punt, el motor del port contrari.

 

 

També podem combinar blocs “Move” amb blocs “Motor” per tal d’aconseguir un control més precís del moviment del robot.

 

 

Suggeriment: Cal mencionar que quan utilitzem el bloc Move, encara que seleccionem frenar els motors en l’atribut d’acció següent o “Next Action”, els motors es comportaran com si aquest fos “flotació” o embragatge. Això es degut a un error del programari que malauradament no s’ha corregit mai (al menys fins la versió 2.1). Per tant, si volem frenar els motors per aconseguir un moviment precís cal utilitzar blocs Motor (un bloc per cada motor) i no blocs Move.

 

En l’exemple anterior, si volem que el robot freni en acabar el programa caldrà afegir 2 blocs Motor per parar explícitament els motors, tal com es mostra a continuació.

 

o bé

 

Coneixements adquirits: L’alumne controla amb molta precisió el funcionament dels motors mitjançant els dos blocs bàsics “Motor” i “Move”, amb la capacitat de realitzar les combinacions de blocs més adients per dirigir el robot de forma adequada. Ara només manca aprendre a calcular el número de rotacions de motor per arribar al lloc desitjat, i així anticipar el comportament del robot.

 

Exercici incremental 1: Arribar al final de la gàbia utilitzant només rotacions de motor.

 

 

L’esquema anterior mostra un recorregut que haurà de recórrer el robot per tal de sortir d’un punt i arribar a un altre. Es pot utilitzar cinta adhesiva de color negre per marcar els límits del recorregut i de la gàbia, i es pot utilitzar un cartó-pluma blanc de 1x1,5 metres. Aquest exercici s’anirà fent més complex al llarg de cada unitat didàctica.

 

Una mica de teoria

 

Abans de començar l’exercici pot ser interessant demanar als alumnes que intentin relacionar la distància que ha de recórrer el robot abans de fer el primer gir a l’esquerra (utilitzar un regle) amb el número de rotacions del motor. Aprofundir els conceptes de radi, diàmetre, perímetre, rotacions de roda (expressades en número de rotacions o graus), i descobrir el número PI.

 

 

Mostrar la relació entre perímetre i superfície d’una circumferència, i comparar-la a la d’un quadrat:

 

Perímetre cercle        = 3,14 x diàmetre

Perímetre quadrat     = 4 x diàmetre

Àrea cercle                 = 3,14 x radi x radi = 3,14 x radi2

Àrea quadrat              = 4 x radi x radi      = 4 x radi2

 

Finalment, cal realitzar les operacions per tal de calcular les rotacions de motor per recórrer una distància determinada en línia recta:

 

rotacions = distància / perímetre

graus = rotacions x 360

 

Podem fer el mateix per calcular-ho amb un gir sobre una roda:

Diàmetre (2 x distància rodes)

Perímetre

Graus de gir del robot

 

Graus / 360 = distància / Perímetre  (robot)

distància = perímetre x graus / 360  (roda)

 

Càlcul del gir de la roda:

graus = Graus x Diàmetre / diàmetre

rotacions = Graus x Diàmetre / 360 x diàmetre

 

Per realitzar l’exercici incremental, podem deixar que els alumnes facin proves i tractin de calcular el número de rotacions de motor en funció del diàmetre de la roda.

 

Una solució per realitzar aquest exercici incremental, és combinar blocs “Move”, per desplaçar el robot en línia recta, amb blocs “Motor”, per fer-lo girar sobre el seu propi eix amb precisió, per seguir el recorregut marcat i arribar fins el final.

 

 

El desplaçament dels blocs “Move” es controla mitjançant rotacions i el dels blocs “Motor” mitjançant graus, per obtenir la precisió suficient (donat que una rotació equival a 360 graus de gir del motor). Aquí és important baixar la potència a 50 per evitar que el robot rellisqui.

 

Suggeriment: Per tal d’entendre bé el comportament del robot respecte del codi que executa, és molt recomanable realitzar i executar el programa pas a pas. Per exemple, podem començar per un recorregut recte, assegurar que el robot para al lloc adequat, i després realitzar el gir i combinar-lo al programa anterior, etc. Si cal, podem crear programes parcials i un cop funcionen podem copiar el codi i enganxar-lo al programa definitiu.

 

El sistema informàtic compta amb una eina que permet inserir comentaris anomenada “Comment Tool”, que és molt útil per informar dels diferents passos del programa, tal com es veu en la imatge anterior.

 

Coneixements adquirits: L’alumne, en funció de l’edat, ha de ser capaç de calcular els desplaçaments del robot de forma anticipada, per tal de controlar amb precisió els moviments en línia recta i en els girs.

 

 

 

Creative Commons License

Curs d'introducció a LEGO® Mindstorms NXT i EV3 by Josep Maria Fargas is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España License.

Permissions beyond the scope of this license may be available at www.bogatech.org.