PROGRAMACIÓN DE ROBOTS LEGO MINDSTORMS

Pablo Iván Romero De La Rosa
Leodegario G. Aguilera Hernández
Orlando Meza Zaleta

¿PASO ADELANTE O PASO ATRÁS?


Esta unidad le enseñará cómo utilizar la memoria de bucle, investigando el uso de registros de desplazamiento. Los registros de desplazamiento se unen a los bucles. Almacenan o "recuerdan" los datos de una iteración y los ponen a disposición en la siguiente iteración. Es algo así como una variable en lenguajes basados ​​en texto.
Para crear un registro de desplazamiento, haga clic derecho en el borde del ciclo While.
Si hace clic en Agregar registro de desplazamiento, se verá que va a añadir dos cajas con triángulos en los lados: izquierdo y derecho del ciclo While.
La razón de que son de color negro se debe a que no han dicho qué tipo de datos almacenará. Una vez que le diga el tipo de datos que almacenará los registros de desplazamiento cambiará de color para que coincida con el tipo de datos.
Lo principal que tiene que recordar acerca de los registros de desplazamiento es que el lado izquierdo es una salida, es decir, el lado izquierdo da datos sobre la última vez por el ciclo. El lado derecho es un insumo, por lo que almacena la información aquí lo que quiere recordar en la siguiente iteración del ciclo.
Si hacemos clic sobre el registro de desplazamiento, nos damos cuenta de que al tratar de mover un lado de arriba a abajo, el otro se mueve con él. Los registros de desplazamiento siempre trabajan en parejas. Como se ha mencionado antes, los registros de desplazamiento son de color negro porque no hay ningún tipo de datos que se les asigne.
Ahora que sabe lo que hacen los registros de desplazamiento, puede crear un programa que muestre los números al azar a partir de la iteración actual y la anterior iteración de un ciclo While. Es importante señalar que este programa se creará en la instancia principal de la aplicación porque no va a estar en contacto con el controlador NXT.
Va a usar el ciclo While, con un registro de desplazamiento. También va a utilizar un generador de números aleatorios que pueden encontrar en la paleta de funciones de la instancia principal de la aplicación en la sub-paleta numérica, como se muestra en la Figura 107.
Va a colocar el generador de números aleatorios dentro del ciclo While y lo cableará a la parte derecha del registro de desplazamiento, como se muestra en la figura 108.
Como puede ver, los registros de desplazamiento se han vuelto de color naranja debido a que el cable que ha conectado es de tipo de datos double.
En la Figura 108, el número al azar se da en el lado derecho del registro de desplazamiento. Esto significa que el lado izquierdo del registro de desplazamiento contendrá el valor de la última vez que pasa por el ciclo. Si crea un indicador del lado izquierdo del registro de desplazamiento, como se muestra en la Figura 109 podrá observar los valores de la última iteración.
También debe cambiar la etiqueta del indicador que acaba de agregar "Último número al azar".
También va a crear un indicador en el cable que sale de la terminal de salida del generador de números aleatorios con el fin de comparar los dos valores. Debe cambiar el nombre del  indicador a "Actual número al azar".
Lo único que queda por considerar es el valor inicial. ¿Cuál es el primer valor que entra en el lado izquierdo del registro de desplazamiento? Para el resto de las iteraciones, tiene el número al azar de la iteración anterior, pero la primera vez que entra en el ciclo, no hay ningún valor en el lado izquierdo del registro de desplazamiento. Es por eso que hay que inicializar el registro de desplazamiento.
Para iniciar el registro de desplazamiento, puede crear una constante numérica y cablear en el lado izquierdo del registro de desplazamiento, como se muestra en la Figura 111. Puede dejar la constante numérica en cero.
El único propósito de cablear la constante de afuera del circuito en la parte izquierda del registro de desplazamiento es que lo inicie. Esto significa que solo se utiliza la primera vez que se ejecute el ciclo, el valor en el indicador denominado "Último número al azar" será 0. En cualquier otro momento, el valor de entrada en el indicador denominado "Último número al azar" será el del generador de números aleatorios a partir de la iteración anterior.
Para completar el ejemplo que está trabajando, tiene que añadir unas cuantas cosas más. Sólo entonces será capaz de ver exactamente cómo trabajan los registros de desplazamiento. En lugar de crear un ciclo infinito, hará un botón de parada, que terminará el ciclo y detendrá el programa cuando haga clic. Para crear un botón de paro, es necesario hacer clic derecho en el panel frontal, seleccione la paleta Buttons & Switches y haga clic en Stop Button.
Un botón de paro también aparecerá en el diagrama de bloques.
Ahora tiene que cablear este botón de paro a la terminal condicional. Cuando se pulse el botón en el panel frontal, mostrará un valor verdadero y finalizará el ciclo While.
Para ejecutar este programa, tiene que asegurarse de que está en la instancia principal de la aplicación ya que este código no utiliza el NXT. Si ejecuta este programa, se dará cuenta de que la muestra en el panel frontal cambia muy rápido, más rápido de lo que pueda notar. Para corregir esto hay que añadir un retraso de tiempo. Esto se puede encontrar haciendo clic derecho sobre el diagrama de bloques en la instancia principal de la aplicación y la selección de sincronización, y haciendo clic en Espera. Esta función espera puede ser colocada en cualquier parte del ciclo While, y puede crear una constante de la cantidad que quiera que la demora en milisegundos. Si quiere esperar dos segundos, por ejemplo, la constante será de 2.000 milisegundos.
Los números aleatorios serán diferentes, pero este programa es una buena manera de ver cómo funciona la acción de los registros de desplazamiento, y ver su utilidad.
Ahora se hablará de algunas funciones booleanas útiles que nos ayudarán a completar el ejercicio.
 La primera de ellas es la función Not. La función no sólo tiene un valor booleano y luego la da. Si el valor de entrada es cierto, el valor de salida de la función no será falso. Si el valor de entrada es falso, el valor de salida de la función no será verdadero.
 Esta función se puede encontrar haciendo clic derecho sobre el diagrama de bloques, seleccionar el operador booleano en la sub-paleta y haga clic en la función Not.
La siguiente función es llamada Select. Esta función permite seleccionar uno de dos valores posibles sobre la base de un valor booleano.
Hay tres terminales en el lado izquierdo: un valor booleano que va en el medio, un valor que va en la parte superior y un valor que va en la parte inferior. Si el valor booleano es cierto, el valor de la parte superior "t" llega a la salida. Si el valor booleano ingresado a la función Select es falso, el valor de la parte inferior "f" se emite.
 La función Select es en realidad una versión simplificada de una estructura de casos, ya que tiene dos valores y todo lo que quiere hacer es seleccionar uno de ellos.
 La función Select se puede encontrar haciendo clic derecho sobre el diagrama de bloques, la selección de la comparación de sub-paleta y haciendo clic en Selección.
Puede crear un programa sencillo como el mostrado en la Figura 121, para ver el uso de las dos funciones booleanas.
En este programa, va a visualizar el número 0 ó 255 en función del valor booleano que se introduzca en la función Select. Este programa comienza por introducir una constante verdadera en el registro de desplazamiento del ciclo While. Entonces esta constante verdadera se introduce en la función de selección. Ya que un valor booleano “verdadero” se introduce en la función Select, se selecciona el valor de  la parte superior "t". Ha designado que este sea  una constante numérica con valor 0. El número 0 es entonces mostrado en un indicador. A continuación, se genera el valor booleano opuesto al registro de desplazamiento a la derecha. Esto significa que la segunda vez que se ejecuta en el ciclo, será falso. Esto significa que la función de Selección elegirá el valor "f", que ha designado para ser una constante numérica con valor 255. Este número se muestra en el indicador. Cada vez que este programa se ejecuta, obtendrá salidas alternativas entre 0 y 255, pero a partir de 0, ya que se ha inicializado el registro de desplazamiento en “verdadero”. Este ciclo, mientras que también contiene un retardo de diez segundos, observará que una vez pasado este, el valor en el indicador cambiará. También es importante señalar que este programa se debe ejecutar en la instancia de la aplicación principal.
Taller: Hacer que el robot NXT avance cuando el sensor ultrasónico es disparado. Después de eso, cada vez que se activa el sensor ultrasónico, el robot debe ir en la dirección opuesta de su último movimiento. El programa debe detenerse cuando el sensor de contacto es presionado.

Volver al índice

Enciclopedia Virtual
Tienda
Libros Recomendados


1647 - Investigaciones socioambientales, educativas y humanísticas para el medio rural
Por: Miguel Ángel Sámano Rentería y Ramón Rivera Espinosa. (Coordinadores)

Este libro es producto del trabajo desarrollado por un grupo interdisciplinario de investigadores integrantes del Instituto de Investigaciones Socioambientales, Educativas y Humanísticas para el Medio Rural (IISEHMER).
Libro gratis
Congresos

4 al 15 de diciembre
V Congreso Virtual Internacional sobre

Transformación e innovación en las organizaciones

11 al 22 de diciembre
I Congreso Virtual Internacional sobre

Economía Social y Desarrollo Local Sostenible

Enlaces Rápidos

Fundación Inca Garcilaso
Enciclopedia y Biblioteca virtual sobre economía
Universidad de Málaga