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

(versió 4.5)

 

ANNEX 1. Catàleg resum d’estructures informàtiques “equivalents”.

 

El catàleg resum d’estructures informàtiques “equivalents” és un compendi de petits programes equivalents que permet comparar diferents formes de realitzar mateixes funcionalitats amb característiques diferents, i que resulta molt útil per recordar com realitzar aquestes diferents funcionalitats i per fer un repàs dels temes fonamentals apresos durant el curs. Aquest compendi no pretén ser exhaustiu, només il·lustra diferents tècniques de programació.

 

 

1. Estructures equivalents de control dels motors en un moviment recte

 

Les següents estructures “equivalents” utilitzen blocs “Motor” o blocs “Move” amb diferents estratègies de control dels mateixos per generar un moviment recte del robot.

 

Moviment recte del robot amb un bloc “Move”

 

Moviment recte del robot amb blocs “Motor”

 

És important observar que el motor “B” té una durada il·limitada per posar de manifest que és el motor “C” el que controla la distància recorreguda. Aquest mateix codi també funciona amb una durada no il·limitada en el motor “B” i desactivant l’atribut d’esperar a acabar o “Wait for Completion”, però l’opció anterior és més explícita.

 

Moviment recte del robot amb blocs “Motor” i desdoblant la biga de seqüència

 

El desdoblament de la biga de seqüència permet generar dos processos en paral·lel, però si es pot, és millor evitar-ho, per un problema de rendiment i de control de la interfície gràfica del programa.

 

Moviment recte del robot amb un bloc “Move” i sensor de rotacions intern

 

Moviment recte del robot amb blocs “Motor” i sensor de rotacions intern

 

Aquests dos casos anteriors expliciten el control de la distància recorreguda pel sensor de rotacions intern associat al motor “C” mitjançant un bloc “Wait” d’espera associat a aquest sensor. A més, cal utilitzar un bloc inicial per reinicialitzar el sensor de rotacions i assegurar que es realitza el desplaçament correcte especificat en l’atribut del bloc “Until” o “fins que”. Aquesta precaució és especialment necessària quan aquest codi s’integra dins un programa més llarg que hagi pogut utilitzar prèviament el motor associat al port “C”.

 

Suggeriment: En aquests exemples anteriors és interessant observar que el gir sobre l’eix del robot es pot realitzar només canviant el sentit de gir d’un dels motors. Però això no es pot realitzar mitjançant el bloc “Move”. Si desplacem l’atribut de direcció o “Steering” del bloc “Move” cap a un dels motors, aleshores el robot farà un gir sobre un punt, és a dir, girarà sobre la roda aturada.

Finalment, el control del gir del robot resulta molt més precís utilitzant blocs “Motor” que utilitzant blocs “Move”. Per replicar el gir del robot amb un bloc “Move” mitjançant blocs “Motor” només cal fer que la potència d’ambdós motors sigui diferent. En aquest sentit, el bloc “Move” només ofereix 10 possibilitats cap a cada costat de la barra lliscadora de l’atribut de direcció fins aturar una de les rodes.

 

 

2. Estructures equivalents de control dels motors en un moviment recte mitjançant sensors i estructures lògiques

 

Les següents estructures “equivalents” poden utilitzar blocs “Motor” o blocs “Move” indistintament amb diferents estratègies de control dels mateixos per generar un moviment recte del robot, però mitjançant sensors, estructures lògiques i variables. Els exemples utilitzen el sensor de llum, però es podrien utilitzar altres sensors (tacte, ultrasònic, so, etc).

 

Moviment recte del robot amb un bloc “Move” controlat pel sensor de llum

 

Moviment recte del robot amb blocs “Motor” controlat pel sensor de llum

 

Les dues estructures anteriors són equivalents a les estructures finals del punt anterior. Utilitzen un bloc “Wait” d’espera associat al sensor de llum. Al utilitzar diferents tipus de sensors, cal establir amb precisió el llindar entre els valors que ha de diferenciar cada sensor.

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle associat al sensor de llum

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle lògic connectat al sensor de llum

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle lògic connectat a un bloc “comparar” connectat al sensor de llum

 

En els tres exemples anteriors, s’utilitza un bucle o “Loop”. En el primer exemple el bucle està associat al sensor i en la resta veiem que el control de la sortida del bucle es realitza mitjançant un bucle lògic. Aquesta estratègia és molt útil i eficient pels casos avançats de programació. Els dos últims exemples mostren com utilitzar el connector de sortida lògic del bloc del sensor o la lectura numèrica del valor del sensor que cal comparar amb el valor escollit com a llindar mitjançant el bloc de comparació.

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle lògic connectat a una variable connectada al sensor de llum

 

Aquest exemple anterior és molt interessant ja que mostra la utilització d’una variable lògica que estableix el sensor i que podem recuperar en el moment de la sortida del bucle. Cal imaginar que entre l’establiment de la variable i la sortida del bucle podem tenir una gran quantitat de codi.

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle lògic connectat a una variable controlada per una bifurcació associada al sensor de llum

 

Moviment recte del robot amb un bloc “Move” controlat per un bucle lògic connectat a una variable controlada per una bifurcació lògica connectada a un bloc rang connectat al sensor de llum

 

Els dos exemples anteriors mostren la combinació d’un bucle amb una bifurcació. L’últim exemple mostra la gran versatilitat de la combinació entre les estructures lògiques de programació i les variables. Cal imaginar que dins les dues branques de la bifurcació podem incloure més codi, i fins i tot aquest codi pot modificar la variable lògica de sortida del bucle.

 

 

 

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.