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

(versió 4.5)

 

UNITAT 5. Bifurcacions i bucles avançats: lògica de desplaçament i presa de decisions en funció d’una combinació de sensors.

 

En aquesta quarta unitat didàctica s’abordaran programes una mica més complexes amb combinació de sensors, bucles i bifurcacions, que permeten que el robot prengui decisions més complexes i realitzi tasques diferents segons es compleixen les diferents condicions. Per poder realitzar aquestes tasques més complexes, s’estudiaran els conceptes de lògica i la seva aplicació en el control del flux d’un programa, estudiarem els diferents operadors lògics i les operacions que es poden realitzar amb ells, i veurem com es poden combinar diferents portes lògiques en cascada, etc. Finalment, farem ús de la capacitat dels blocs en passar-se informació o valors els uns als altres i construirem el primer rastrejador.

 

Una mica de teoria

 

Tal com hem vist en la unitat didàctica 3 anterior, un bucle i una bifurcació es poden associar als sensors per tal d’interrompre o bifurcar un programa, respectivament. Però, un control que dóna una gran potència al sistema és la possibilitat d’associar-los a un control lògic. És a dir, per exemple, el bucle pot seguir repetint-se o pot finalitzar en funció de si rep el valor “veritat” o “fals” per part d’un altre bloc. De la mateixa manera, una bifurcació o una altra poden executar-se segons el valor lògic que reben. Al llarg del curs veurem la gran utilitat d’aquesta possibilitat.

 

Per tal de poder tenir la interacció necessària, els blocs poden passar-se valors els uns als altres, la qual cosa permet interaccions més complexes i interessants al llarg d’un programa. Els blocs emmagatzemen les dades en el “Data Hub” o concentrador de dades, i la forma en que es passen valors és mitjançant els “Data Wires” o cables de dades. Els cables de dades tenen colors diferents segons el tipus de dades que es transporten. Per exemple, els que transporten dades numèriques són grocs, els lògics verds, i els de text taronges. Si un cable de dades es trenca, aleshores apareix en color gris, i cal corregir el problema. Finalment, el concentrador de dades d’un bloc té connexions de cables d’entrada de dades per davant o a l’esquerra i connexions de cables de sortida de dades per darrera o a la dreta. L’ajut d’usuari explica en detall el funcionament del concentrador de dades i dels seus cables, com afegir-los o esborrar-los, etc.

 

Ara podem repetir els exercicis anteriors, utilitzant el mateix bucle, però amb control lògic en comptes d’associar-lo a un sensor. Per això hem d’afegir un bloc amb el sensor de llum dins el bucle i connectar la sortida lògica (“sí” o “no”) del sensor a l’entrada lògica del bucle, mitjançant un cable de dades.

 

Suggeriment: De vegades el “Data Hub” o concentrador de dades no s’obre del tot al afegir un bloc a la biga de seqüència. Tal com es mostra a continuació, aquest és el cas de l’exemple anterior, on al afegir el sensor de llum, el concentrador de dades mostra només l’atribut d’intensitat i per a realitzar l’exercici volem connectar el valor lògic de sortida al d’entrada del bucle. Per obrir totalment el concentrador de dades, cal fer clic a la part inferior del bloc (aquest procés s’explica en detall en l’ajut del programari). Un cop el concentrador de dades està totalment obert, podem triar l’atribut amb el valor que volem connectar. Finalment, per optimitzar la visualització del bloc amb només els connectors utilitzats, i fer que el bloc no ocupi tant d’espai, un cop hem realitzat les connexions de cables de dades desitjades, podem tornar a fer clic a la part inferior del bloc per tal de col·lapsar el concentrador de dades a la seva mínima expressió.

 

Primer pas, inserció del bloc al lloc correcte:

 

Segon pas, expandir el concentrador de dades del bloc i connectar adequadament

l’entrada i la sortida de dades de cada bloc amb el cable de dades:

 

Tercer i últim pas, col·lapsar el concentrador de dades

per ocupar menys espai i facilitar la lectura:

que és equivalent a

 

Suggeriment: Recordar que si volem frenar els motors d’un robot per aconseguir un moviment precís cal utilitzar blocs Motor. No utilitzar mai blocs Move per frenar els motors, ja que no són capaços de fer-ho encara que l’atribut “frenar” o “brake” estigui seleccionat en “Acció Següent” o “Next Action” del bloc Move.

 

 

El gran avantatge del bucle amb control lògic és que, per exemple, podem controlar la sortida del bucle en funció de varis sensors alhora. Per exemple, podem fer que el robot pari si arriba a la línia negra o si abans el sensor de contacte detecta un obstacle al xocar contra ell. Per això ens hem de basar en la lògica.

 

Una mica de teoria

 

Suposem que tenim els dos sensors anteriors (llum i contacte) que ens indiquen “veritat” o “fals” segons si s’activen o no respectivament. Si això és així, el robot haurà de sortir del bucle i parar quan el un dels dos sensors s’activi i passi el valor “veritat” al bucle. Per realitzar aquesta operació comptem amb el bloc “Logic”. El concentrador de dades del bloc lògic té dues entrades, A i B, que poden tenir els valors “veritat” (“True” o T) o “fals” (“False” o F), i tres sortides, els mateixos valors de A i B, i el resultat de l’operació lògica entre A i B. Els operadors lògics poden ser “And”, “Or”, “XOr” o “Not”. En el nostre cas hem de tornar el valor “veritat” si un, l’altre o tots dos sensors tornen “veritat”, sinó hem de tornar “fals”. Per tant, l’operació lògica que hem d’efectuar amb els valors dels dos sensors és un “Or”. La taula de valors lògics de l’operador “Or” és la següent:

 

T Or T = T

T Or F = T

F Or T = T

F Or F = F

 

Podem comprovar que l’operador lògic “Or” tornarà el valor “fals” només quan els dos sensors tornin “fals”, altrament tornarà el valor “veritat”.

 

És també interessant confeccionar la taula de valors lògics de la resta d’operadors, per altres exercicis posteriors:

 

T And T = T

T And F = F

F And T = F

F And F = F

T XOr T = F

T XOr F = T

F XOr T = T

F XOr F = F

Not T = F

Not F = T

(L’operador “Not” s’aplica només a un sol valor)

 

Contràriament a l’operador “Or”, podem veure que l’operador “And” torna “veritat” només quan els dos valors són “veritat”. Per tant, podem dir que:

Not (A Or B) = Not A And Not B

Not (A And B) = Not A Or Not B

L’operador “XOr” torna “veritat” quan els dos valors són diferents i ”fals” quan són iguals.

 

Unitat 5 exercici 1: El bloc “Loop” o bucle amb control lògic: desplaçaments repetitius endavant i/o enrere per tornar al lloc d’origen utilitzant varis sensors alhora i el bloc “Motor” o “Move” amb durada il·limitada.

 

Crear un nou programa, per exemple “u5ex1.rbt”. Deixarem que els alumnes intentin resoldre el següent repte sols. El robot ha d’anar endavant i parar quan topi amb un obstacle o arribi a la línia negra. Caldrà utilitzar un bloc lògic per combinar el resultat dels dos sensors mitjançant l’operador “Or”. Què passa si utilitzem un “And” en comptes d’un “Or”?

 

 

Donat que el bloc lògic només té dues entrades, com podem fer que el robot tingui en compte més de dos sensors alhora? Deixar que els alumnes esbrinin com fer que el robot pari en funció de si un dels quatre sensors s’activa. La solució és combinar el resultat de dos blocs lògics amb un tercer bloc.

 

 

Unitat 5 exercici 2: Combinació dels blocs bifurcació i bucle amb control lògic: desplaçaments repetitius endavant i/o enrere utilitzant varis sensors alhora i el bloc “Motor” o “Move” amb durada il·limitada.

 

Crear un nou programa, per exemple “u5ex2.rbt”. Com podem fer que el robot, “per sempre”, vagi endavant fins arribar a una línia negra i giri sobre el seu eix i torni enrere, fins trobar la línia negra de sortida? A més, com podem aturar tot el procés si el robot xoca amb un obstacle? La solució és posar una bifurcació dins d’un bucle.

 

 

Finalment, ja tenim els coneixements necessaris per poder realitzar un primer rastrejador. Aquesta és una altra ocasió per tal de fer pensar als alumnes de forma discursiva, i fer-los trobar vàries solucions. Utilitzarem només un sensor de llum, però podem també comparar les possibles solucions amb dos sensors de llum.

 

Un rastrejador és un robot que segueix una línia. Si el rastrejador té un sensor, aleshores aquest, pot seguir un costat o l’altre de la línia, donat que la línia té un gruix. Per exemple, si la línia és negra sobre un fondo blanc i decidim seguir la línia per la dreta, aleshores, si el sensor detecta blanc haurà de girar cap a l’esquerra i si detecta negre cap a la dreta. Aquest algoritme senzill demostra com la combinació de petits moviments locals, aparentment sense sentit (girs a dreta i a esquerra), impliquen un moviment global amb un sentit molt especial, que en aquest cas és seguir o rastrejar una línia.

 

 

 

Si tenim varis robots rastrejant, aleshores, per evitar col·lisions, podem controlar la sortida del bucle mitjançant el sensor de contacte, per exemple. Recordar frenar els motors a la sortida del bucle. Què passarà si no ho fem? Podem deixar que els alumnes facin les seves teories... Després poden fer la prova i descobriran que el robot fa un petit gir cap a un dels costats, segons surti d’una branca o de l’altre de la bifurcació. Això és conseqüència de que el motor que realitza el gir té una durada il·limitada i quan surt del bucle el motor segueix girant fins que la sortida del programa el desconnecta. Aquest procés triga molt poc temps, però el suficient per fer girar el robot a la sortida del bucle.

 

 

Una altra alternativa de rastreig és fer que una roda giri a una velocitat fixa (per exemple el motor B) i reduir o accelerar la roda oposada del robot (per exemple el motor C) segons hagi de girar cap a un costat o cap a l’altre. És interessant construir aquests dos rastrejadors i comparar el seu funcionament. El primer és més lent  que el segon, però si les corbes són tancades, aleshores és més precís i funciona millor (no perd la línia).

 

 

Exercici incremental 5: Arribar al final de la gàbia rastrejant les línies negres i controlant la sortida del bucle en funció del temps.

 

Per realitzar aquest exercici, en comptes de copiar i modificar l’exercici incremental 4 anterior, demanar als alumnes que el construeixin per parts i observin amb atenció com es comporta el rastrejador. De seguida se’n adonaran que com el robot pot rastrejar les línies per la dreta o per l’esquerra, en l’exemple que tenim, donat que el robot surt per la dreta del tauler i el primer gir és cap a l’esquerra, la solució més eficient és rastrejar per l’esquerra. Així, el robot farà el primer gir cap a l’esquerra tot seguint la línia negra intermèdia que interseca les línies límits del tauler. Amb aquesta estratègia, el programa podrà ser molt més compacte, com es podrà comprovar.

 

 

En primer lloc, podem observar que el rastrejador es va repetint en els llocs on el robot ha de seguir els límits del tauler o les línies intermèdies, i és idèntic, excepte pel que fa el temps de rastreig (control de sortida del bucle), que depèn de la longitud de cada línia fins arribar a una intersecció que ha de sobrepassar.

 

Per una altra banda, podem veure que entre el primer bucle rastrejador i el segon, s’insereix un petit gir sobre eix que té la missió de fer girar el robot cap a l’esquerra en arribar a la primera línia intermèdia del tauler. Això mateix succeeix al final del segon bucle, per fer girar el robot cap a la dreta en arribar al final de la línia intermèdia del tauler. A partir d’aquest punt, el robot segueix rastrejant fins el final del recorregut sense cap problema fent el gir a la dreta i arribant al final del recorregut. El robot no tindrà cap problema per sobrepassar la línia negra intermèdia vertical final, donat que rastreja per l’esquerra i no hi ha cap interrupció de la mateixa, en aquest costat, donat que estem al límit del tauler.

 

Pot ser interessant comparar les diferents alternatives de cada grup d’alumnes, rastrejant per la dreta o per l’esquerra, i fins i tot intentant canviar el costat o el sistema de rastreig.

 

En la següent unitat didàctica veurem la possibilitat de refinar més l’algoritme de rastreig observant que al rastrejar, el robot va fent petits moviments a dreta i esquerra, però quan aquest troba una intersecció, aleshores, per tal de seguir el gir de la línia, una de les rodes fa més rotacions que al seguir la línia recta, mentre l’altra roman parada. Per tal de controlar el moviment global del robot, podem detectar quan es produeix aquest increment de rotacions de la roda adequada i detectar així quan arriba a la intersecció, mitjançant el sensor de rotacions intern d’un motor.

 

Coneixements adquirits: En la unitat didàctica 3 anterior hem vist com el bloc bucle permet repetir accions i si s’associa a un sensor, podem controlar l’execució del seu contingut fins que aquest s’activa o desactiva. Finalment, en aquesta unitat didàctica hem vist que quan el bucle utilitza el control lògic, tenim moltes altres possibilitats de controlar el flux del programa, amb diferents combinacions de sensors, etc. A més, si combinem el bucle amb bifurcacions, tenim un joc de possibilitats infinit, que permet començar a pensar en el concepte d’algoritme, o conjunt de processos ben definits que permeten realitzar tasques molt concretes i específiques, més o menys complexes, com per exemple un rastrejador.

 

 

 

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.