Universidad Centroccidental Lisandro Alvarado

Robótica
Decanato de Ciencias y Tecnología
Departamento de Sistemas
Prof. Maritza Bracho de Rodríguez
Área Académica Laboratorios

Unidad : Robots Móviles

PROGRAMACIÓN NXT
Para programar los robots de Lego usamos un entorno de programación gráfico
llamado NXT, y basado en la inserción de bloques configurables, a continuación
vamos a ver los más básicos. Esta es la interfaz del programa:

Dentro de la paleta de herramientas común tenemos estos bloques

BLOQUE MOVER.

Permite mover el robot hacia delante, atrás o describiendo una curva. En Puerto
selecciono los motores conectados a las ruedas, después selecciona la dirección y
si quiero aplicar giro, puedo controlar la potencia y la duración (número de
rotaciones. tiempo en segundos, ilimitado o grados), recomendamos poner la
duración en rotaciones.

La última opción del bloque es la opción de Siguiente acción: si ponemos freno al
finalizar los motores se detendrán de golpe, mientras que si ponemos flotación, se
detendrán con un poco de inercia y la parada será más suave. En la imagen

1

En el ejemplo de la imagen el robot avanza y gira a la derecha indefinidamente. BLOQUE LOOP (BUCLE) La herramienta LOOP la utilizaremos siempre que necesitemos repetir muchas veces o indefinidamente órdenes. indefinidamente. En el control del bucle marcaremos Siempre.adjunta se aprecia claramente todas las opciones de programación del bloque mover. En el siguiente ejemplo el robot avanza y gira a la derecha hasta que el sensor de tacto es presionado. un tiempo determinado (segundos) o dependiendo del valor de un sensor. un número determinado de veces (contador). Podemos repetir las órdenes encerradas dentro del bucle. 2 .

debemos repetir indefinidamente la rutina en la que el sensor de luz perciba el piso para no caernos (el piso siempre da un reflejo de luz superior al vacio). BLOQUE BIFURCACIÓN (SWTICH) 3 . continúa avanzado pero girando a la derecha hasta que el sensor de contacto es presionado momento en que detenemos el robot. BLOQUE ESPERA Usamos este bloque para ejecutar una acción hasta que alguno de los sensores envié una determinada señal.En el control seleccionaremos Sensor y el puerto al que lo selecciono. Otro ejemplo podría ser que nuestro robot debiera evitar caer al vacío arriba de una mesa. o simplemente detenemos la ejecución durante un tiempo determinado. el robot avanza. y sólo se podría mover cuando encuentre determinado reflejo en el piso. En el ejemplo de la imagen. después esperamos un segundo.

debemos ubicar qué órdenes queremos que se cumplan cuando estamos próximos al obstáculo y qué órdenes queremos que el robot cumpla cuando el sensor no detecta los objetos. luz. y contacto). Si por ejemplo utilizamos el sensor de ultrasonidos para detectar obstáculos. De la misma manera estaremos tomando siempre diferentes decisiones para los demás sensores (sonidos. gira a la derecha y vuelve a avanzar.Este permite bloque definir dos acciones según se cumpla o no una determinada condición (que un sensor envíe una señal. De esta forma estaremos tomando una decisión cuando se detectan objetos próximos y otra decisión cuando existe vía libre. por ejemplo). En la imagen de arriba si estamos a más de 10 cm de cualquier obstáculo el robot avanza si detecta algún obstáculo a menos de 10 cm retrocede. (Ver abajo configuración del bloque bifurcación para el ejemplo de arriba) 4 .

La dirección. los puertos y el tiempo se indican en el panel de abajo Debemos tildar los puertos en los que están los dos motores. (Atención: para hacer dar media vuelta al robot. En el bloque de la derecha le cambiamos la dirección y el tiempo 3) Se mueva hacia delante durante 4 segundos. La otra forma de dar medio giro es hacer girar los dos motores en sentido contrario durante un tiempo determinado) 5 . indicar la dirección y el tiempo 2) Se mueva hacia delante durante 2 segundos y luego dé marcha atrás durante 4 segundos y se detenga. Debemos hacer mover los motores conectados en los puertos A y B y pasados los dos segundos hacer que se detengan. de media vuelta y avance otros 6 segundos y se detenga.EJEMPLOS DE PROGRAMAS EN EL MINDSTORMS NXT Construir un Programa en el cual el robot: 1) Se mueva hacia delante durante 2 segundos y luego se detenga. debes hacer girar a un solo motor en dirección contraria y estimar cuanto tardaría en completar el medio giro.

retroceda un segundo y luego de media vuelta Como último paso se mueve el motor “A” hacia atrás durante 1 segundo para dar medio giro.EJERCICIOS DE PROGRAMACIÓN DE ROBOTS CON SENSORES PARA REACCIONAR AL AMBIENTE 4) Se mueva hacia delante a velocidad media y cuándo el sensor de contacto sea presionado. 6 .

debemos repetir indefinidamente la rutina en la que el sensor de luz percibe el piso para no caernos (el piso siempre da un reflejo de luz superior al vacio). El camino de 7 . y sólo se podría mover cuando encuentre determinado reflejo en el piso. Si por ejemplo utilizamos el sensor de luz para saber si es de día o de noche. EJEMPLO DE LA HERRAMIENTA LOOP Y SWITCH En el ejercicio siguiente el robot debe responder al sensor de sonido. ultrasonido y contacto) La herramienta LOOP la utilizaremos siempre que necesitemos repetir muchas veces o indefinidamente órdenes. La primera herramienta que envuelve a todo el programa es la herramienta LOOP.USO DE LA HERRAMIENTA LOOP Y SWITCH La herramienta Switch se utiliza para tomar decisiones en base a los resultados de los sensores que pusimos. De la misma manera estaremos tomando siempre diferentes decisiones para los demás sensores (sonidos. Si no percibe ningún ruido debe seguir avanzando con los motores A y C. De esta forma estaremos tomando una decisión cuando se percibe oscuridad y otra decisión cuando se percibe luz. el cual toma dos caminos diferentes de acuerdo al sonido que percibe del ambiente. nuestro robot debiera evitar caer al vacío arriba de una mesa. Si el sensor de sonido percibe algún ruido este debe retroceder con 1/4 de giro con el motor C. debemos ubicar qué órdenes queremos que se cumplan cuando es de día y qué órdenes queremos que el robot cumpla cuando es de noche. Si por ejemplo. En este caso este programa se repetirá indefinidamente (como lo indica el símbolo infinito) Luego se utiliza la herramienta SWITCH con el sensor de sonido.

haciendo girar hacia atrás un cuarto de giro al motor C.arriba es el que se toma si percibe ruido (un grito o aplauso). da un cuarto de giro con el motor A y abre las pinzas para soltar el objeto. avanza. En el ejercicio siguiente debemos hacer que el robot no caiga de la mesa utilizando en sensor de luz. Si percibe luz (estamos dentro de la mesa ya que hay rebote de luz) seguimos los pasos de arriba: avanzamos y si percibe ruido detenemos los motores A y C. y hacer cerrar las pinzas para agarrar objetos cuando el sensor de sonido percibe ruido. Como todo está envuelto en un LOOP infinito. Primero se percibe el rebote de luz que produce la lámpara del sensor para saber si estamos saliendo de la mesa. al terminar cualquiera de los dos caminos el programa vuelve a empezar. 8 . Si no percibe ruido. El camino hacia abajo es el que se toma cuando el sensor de sonido no percibe ningún ruido ambiente. Si percibe oscuridad (el sensor está fuera de la mesa y no recibe rebote de luz) seguimos los pasos de abajo: retrocedemos con los dos motores y hacemos un giro con un solo motor para desviarnos. continúa el camino. luego cierra la pinza con el motor B para agarrar el objeto. En definitiva este ROBOT hace lo siguiente: si percibe ruido retrocede desviándose un poco y si no percibe ruido. haciendo que en este caso el robot avance hacia adelante con los motores A y C.

Puede repetirse desde unas pocas veces hasta que se cumpla una determinada condición o infinitas veces. este es el más habitual y sencillo. Iremos viendo los distintos casos con ejemplos. Repite infinitamente un conjunto de tareas. NOTA: para comprobar los programas de los ejemplos. usaremos con frecuencia el icono de sonido configurado de la siguiente forma: BUCLE FOREVER Bueno. No se parará hasta que cancelemos el programa 9 .CICLOS BUCLES LOOPs ¿QUE SON? El icono "Ciclo" o "Bucle" o "Loop" repite la ejecución una determinada parte del programa.

momento en el cual el programa avanza saliendo del bucle. Repetir una cosa "infinitamente" puede ser engañoso y hay que entenderlo desde el punto de vista de la programación. En el ejemplo. úsalo. aparece en el bucle una pestañita desde la cual podemos sacar un cable para visualizar en pantalla las repeticiones. Cualquiera de los bucles que explicaremos ahora se repiten infinitamente hasta que se produce una determinada condición. las veces que se ha repetido el ciclo. pulsa el botón naranja repetidamente para que suene un "bip". ya que el programa sería infinitamente largo. del que no sale nunca. BUCLE FOREVER CON UN "COUNTER" El mismo programa anterior nos puede permitir visualizar en pantalla las veces que hemos pulsado el botón o. dicho de otra forma.Es decir. el programa "se queda atrapado" dentro de ese bucle. Un primer detalle: sería imposible programar esto de otra forma. Con esta pestaña activada. piensa de esa forma para saber si este es el icono adecuado. Si lo que necesitas es repetir algunos iconos infinitamente hasta que pase tal cosa. Esta función está disponible para cualquier otra configuración de los Ciclos. Hay que hacer una aclaración a esto. 10 . cuando programes algo. Por eso. BUCLES "HASTA QUE" El anterior bucle se repetía infinitamente.

Si lo que quieres es esperar "hasta que" encuentre una pared PERO DURANTE ESA ESPERA QUIERES QUE HAGA TAREAS ADICIONALES. Para el NXT es repetir infinitamente la lectura del sensor "hasta que" encuentre el rojo. ¿BUCLE "HASTA QUE" O BLOQUE DE ESPERA? ¿Cuál usar? Si NO necesitas repetir una serie de tareas. podemos interpretar este icono como "repite esto hasta que el sensor X cumpla esta condición". basta un icono de espera de ultrasonido.Cuando pensamos el programa. Tareas adicionales pueden ser que simultáneamente compruebe si has pulsado un sensor de contacto para parar el robot manualmente. el programa se comporta como si estuviera en un bucle a la espera de que se cumpla la condición del ultrasonido. Podría ser el caso de un robot que avanza "hasta que" el sensor de ultrasonido encuentra una pared. En este caso. esperar a que un sensor de color lea "rojo" para nosotros es una única tarea: esperar. O puede ser el caso del siguiente programa. BUCLE "SENSOR" Con todo lo explicado. en el que 11 . BASTA con usar un bloque de espera. Por ejemplo. si quieres que el robot avance "hasta que" encuentre una pared usando un ultrasonido. tendrás que usar un BUCLE "hasta que" llegue a la pared y encerrar todas esas tareas adicionales en el bucle. y solo estará realizando esa tarea.

Esto también es común al resto de bucles: el programa sale del bucle cuando se cumple la condición. sensor. El programa queda a la espera de pulsar el cursor izquierdo del NXT para avanzar y. o con bucles dentro de bucles. el programa avanza tan deprisa que vuelve al mismo punto sin que nos dé tiempo a pulsarlo de nuevo para salir del bucle. Un ejemplo de mala programación sería este: Aquí. Parece que el programa siempre queda detenido justo en el icono de espera de la flecha izquierda. En caso contrario. el programa sigue encerrado en el bucle. como antes. hasta que pulsamos el botón naranja. cuando es el momento.esperamos indefinidamente a que se pulse el botón naranja para salir del bucle. o con iconos de espera. El NXT almacena la pulsación y. acaba el programa y no antes. En ese momento. etc. En caso contrario. el programa NO acaba inmediatamente cuando pulsas el botón 12 . Es decir. sea temporal. aunque el programa esté "detenido" en ese punto. Otros casos de mala programación o de fuente de problemas tiene que ver con la longitud de los programas. si no se da la condición. el ciclo se repite de nuevo. no hay tiempo entre medias de pulsar el botón naranja para finalizar el programa. AVISO: este bucle puede ser fuente de problemas y de mal funcionamiento de algunos programas. prueba a pulsar el botón naranja antes de pulsar la flecha. PERO. El siguiente programa es muy interesante para aprender cómo funciona el NXT. el programa se detiene en el icono de espera. Lo explico a continuación.

ya sabes. Simplemente repite todas las tareas encerradas en el bucle "hasta que" pasa un determinado tiempo... Estos problemas son comunes al resto de bucles del tipo "hasta que. Eso es porque está detenido justo en el bloque de espera. Pulsa 2 o 3 veces rápidamente al inicio del programa para ver cómo avanza y luego para a la espera de que se cumplan los 5 segundos. hasta que la pared esté cerca. El programa no se para. Los tipos de condiciones que puedes añadir a un bucle de este tipo son tantas como sensores tengas a disposición. Todo ello te aparece en el panel de configuración del bucle cuando está seleccionado "Sensor". el programa avanzará hasta el final del bucle y. Si simplemente quieres esperar a que pase un tiempo. un simple bloque de espera. Veamos un ejemplo: El tiempo está a 5 segundos.. Hago aquí la misma precaución que hice antes para que el programa no nos de comportamientos inesperados. hasta que se pulse un botón. acabará. Cuando lo pulses una vez más y ya haya vencido el tiempo. sino después de pulsar la flecha. ¿Qué ocurre? Nada.naranja como era nuestra intención. BUCLE "TIME" Este bucle es mucho más sencillo. lo que le permite entonces llegar al final del bucle y salir. ahora sí.. 13 ." que estamos viendo. Puedes esperar hasta que el sensor detecte rojo. TIPOS. hasta que recibas una señal BT de otro NXT.

según lo configures en la ventanita correspondiente. Programa el siguiente bucle. El programa sale del bucle cuando ha repetido el ciclo n veces. que lo vemos con un ejemplo. El "problema" reside en lo siguiente.BUCLE "COUNT" Este bucle también es muy sencillo. pero tiene un detalle que lo hace puñetero en un aspecto. con 4 repeticiones y un icono de espera de 1 segundo: 14 .

Es decir. pero como esto es un ejemplo. voy a programar exactamente lo mismo con un bucle lógico: 15 . Esta sería la forma correcta de programarlo. Para finalizar el programa. Anda con cuidado con esto porque a veces es un lío y programa según las necesidades. así: Pero resulta que sigue "sin funcionar bien": le hemos dicho que repita 4 veces y solo cuenta hasta 3. recuerda pulsar el botón naranja. no cuenta 1. Recuerda que los bloques lógicos solo pueden tomar 2 valores: verdadero o falso. Empezamos con un programa muy sencillo: esperar hasta que el sensor de color detecte amarillo. Pero bueno. ¿No notas algo raro? Lo primero que se nos puede ocurrir es cambiar el icono "Sound" de sitio. BUCLE "LOGIC" Este bucle sí que puede llegar a ser un auténtico "cacao". para resolver el problema y que podamos contar hasta 4 como era nuestra intención. Principalmente porque los bloques y variables lógicas tienen su propio "idioma".El icono final sirve simplemente para que se mantenga el resultado en pantalla sin que el programa finalice. Por tanto. el 5. Ejecútalo en el NXT. en la primera pasada el contador marca cero. ¿Por qué? El problema reside en la numeración del "counter": hasta que no ha completado el ciclo. haremos algunos ejemplos sencillos sin intentar meternos es cuestiones complejas. basta poner en el "Count" de la configuración del bucle un número más.

Se quedará encerrado en el bucle "hasta que" deje de detectar amarillo. se cumple con lo que dice el panel del bucle (True=Verdadero) y el programa acaba. Cuando lo detecta. la condición es "Falso". fuera del amarillo. Es decir. Si en el bucle pones "False". el siguiente programa hace EXACTAMENTE lo mismo que el anterior: 16 . el ciclo esperará hasta que se cumpla esa condición. avanzará cuando detecte cualquier otro color que no sea amarillo. es decir.Cuando se cumple la condición impuesta en el bloque del sensor de color (detectar amarillo). Cuando no detecta amarillo. Sería equivalente a poner en el panel del sensor "Outside Range". O sea. la condición que sale del sensor es "Verdadero". sale del ciclo y el programa finaliza.

en el apartado "Bucle "Count"" (esto sería un ejemplo de "comillas anidadas"). Como ejemplo tomaremos el programa que escribimos antes. El programa que pusimos allí era este: 17 . pero no le puse yo el nombre.BUCLES ANIDADOS Un bucle anidado no es más que un bucle dentro de otro bucle. Personalmente me gustaría más que se llamaran "bucles anillados".

Para avanzar sin que el programa se líe como ya vimos más arriba. hay que volver a ejecutar el programa. 18 .Pero de esta forma el programa acaba tras los ciclos correspondientes y si queremos repetir. Para solucionarlo. metemos todo en un bucle infinito: O bien combinamos el bucle exterior para que acabe al pulsar el botón naranja del NXT. seleccionamos la tecla izquierda del NXT.

Videotutorial bloque mover Videotutorial Bloque Espera Videotutorial Bucles (Loops) – Ver pantalla Completa Videotutorial bloque visualización VideoTutorial sensor de luz VideoTutorial Sensores para ver Videotutorial mis bloques VideoTutorial mis bloques avanzado 19 . A continuación les suministramos la dirección en la cual se pueden observar unos video tutoriales muy interesantes (Dirección (URL). Espero les resulte de utilidad.