Vous êtes sur la page 1sur 19

Universidad Centroccidental Lisandro Alvarado

Robtica
Decanato de Ciencias y Tecnologa
Departamento de Sistemas
Prof. Maritza Bracho de Rodrguez
rea Acadmica Laboratorios

Unidad : Robots Mviles

PROGRAMACIN NXT
Para programar los robots de Lego usamos un entorno de programacin grfico
llamado NXT, y basado en la insercin de bloques configurables, a continuacin
vamos a ver los ms bsicos. Esta es la interfaz del programa:

Dentro de la paleta de herramientas comn tenemos estos bloques

BLOQUE MOVER.

Permite mover el robot hacia delante, atrs o describiendo una curva. En Puerto
selecciono los motores conectados a las ruedas, despus selecciona la direccin y
si quiero aplicar giro, puedo controlar la potencia y la duracin (nmero de
rotaciones. tiempo en segundos, ilimitado o grados), recomendamos poner la
duracin en rotaciones.

La ltima opcin del bloque es la opcin de Siguiente accin: si ponemos freno al


finalizar los motores se detendrn de golpe, mientras que si ponemos flotacin, se
detendrn con un poco de inercia y la parada ser ms suave. En la imagen

1
adjunta se aprecia claramente todas las opciones de programacin del bloque
mover.

BLOQUE LOOP (BUCLE)

La herramienta LOOP la utilizaremos siempre que necesitemos repetir muchas


veces o indefinidamente rdenes. Podemos repetir las rdenes encerradas dentro
del bucle, un nmero determinado de veces (contador), indefinidamente, un
tiempo determinado (segundos) o dependiendo del valor de un sensor. En el
ejemplo de la imagen el robot avanza y gira a la derecha indefinidamente.

En el control del bucle marcaremos Siempre.

En el siguiente ejemplo el robot avanza y gira a la derecha hasta que el sensor de


tacto es presionado.

2
En el control seleccionaremos Sensor y el puerto al que lo selecciono.
Otro ejemplo podra ser que nuestro robot debiera evitar caer al vaco arriba de
una mesa, 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), y slo se podra mover cuando encuentre determinado reflejo en el piso.

BLOQUE ESPERA

Usamos este bloque para ejecutar una accin hasta que alguno de los sensores
envi una determinada seal, o simplemente detenemos la ejecucin durante un
tiempo determinado. En el ejemplo de la imagen, el robot avanza, despus
esperamos un segundo, contina avanzado pero girando a la derecha hasta que el
sensor de contacto es presionado momento en que detenemos el robot.

BLOQUE BIFURCACIN (SWTICH)

3
Este permite bloque definir dos acciones segn se cumpla o no una determinada
condicin (que un sensor enve una seal, por ejemplo).

Si por ejemplo utilizamos el sensor de ultrasonidos para detectar obstculos,


debemos ubicar qu rdenes queremos que se cumplan cuando estamos
prximos al obstculo y qu rdenes queremos que el robot cumpla cuando el
sensor no detecta los objetos. De esta forma estaremos tomando una decisin
cuando se detectan objetos prximos y otra decisin cuando existe va libre. De la
misma manera estaremos tomando siempre diferentes decisiones para los dems
sensores (sonidos, luz, y contacto). En la imagen de arriba si estamos a ms de
10 cm de cualquier obstculo el robot avanza si detecta algn obstculo a menos
de 10 cm retrocede, gira a la derecha y vuelve a avanzar. (Ver abajo configuracin
del bloque bifurcacin para el ejemplo de arriba)

4
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.

Debemos hacer mover los motores conectados en los puertos A y B y pasados los
dos segundos hacer que se detengan.

La direccin, los puertos y el tiempo se indican en el panel de abajo

Debemos tildar los puertos en los que estn los dos motores, indicar la direccin y
el tiempo

2) Se mueva hacia delante durante 2 segundos y luego d marcha atrs durante 4


segundos y se detenga.

En el bloque de la derecha le cambiamos la direccin y el tiempo

3) Se mueva hacia delante durante 4 segundos, de media vuelta y avance otros 6


segundos y se detenga. (Atencin: para hacer dar media vuelta al robot, debes
hacer girar a un solo motor en direccin contraria y estimar cuanto tardara en
completar el medio giro. La otra forma de dar medio giro es hacer girar los dos
motores en sentido contrario durante un tiempo determinado)

5
EJERCICIOS DE PROGRAMACIN DE ROBOTS CON SENSORES
PARA REACCIONAR AL AMBIENTE

4) Se mueva hacia delante a velocidad media y cundo el sensor de contacto sea


presionado, retroceda un segundo y luego de media vuelta

Como ltimo paso se mueve el motor A hacia atrs durante 1 segundo para dar
medio giro.

6
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. Si por ejemplo utilizamos el sensor de luz para saber si
es de da o de noche, debemos ubicar qu rdenes queremos que se cumplan
cuando es de da y qu rdenes queremos que el robot cumpla cuando es de
noche. De esta forma estaremos tomando una decisin cuando se percibe
oscuridad y otra decisin cuando se percibe luz. De la misma manera estaremos
tomando siempre diferentes decisiones para los dems sensores (sonidos,
ultrasonido y contacto)

La herramienta LOOP la utilizaremos siempre que necesitemos repetir muchas


veces o indefinidamente rdenes. Si por ejemplo, nuestro robot debiera evitar caer
al vaco arriba de una mesa, 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), y slo se podra mover cuando encuentre determinado reflejo en
el piso.

EJEMPLO DE LA HERRAMIENTA LOOP Y SWITCH


En el ejercicio siguiente el robot debe responder al sensor de sonido. Si el sensor
de sonido percibe algn ruido este debe retroceder con 1/4 de giro con el motor C.
Si no percibe ningn ruido debe seguir avanzando con los motores A y C.

La primera herramienta que envuelve a todo el programa es la herramienta LOOP.


En este caso este programa se repetir indefinidamente (como lo indica el smbolo
infinito)

Luego se utiliza la herramienta SWITCH con el sensor de sonido, el cual toma dos
caminos diferentes de acuerdo al sonido que percibe del ambiente. El camino de

7
arriba es el que se toma si percibe ruido (un grito o aplauso), haciendo girar hacia
atrs un cuarto de giro al motor C.

El camino hacia abajo es el que se toma cuando el sensor de sonido no percibe


ningn ruido ambiente; haciendo que en este caso el robot avance hacia adelante
con los motores A y C.

En definitiva este ROBOT hace lo siguiente: si percibe ruido retrocede


desvindose un poco y si no percibe ruido, avanza.

En el ejercicio siguiente debemos hacer que el robot no caiga de la mesa


utilizando en sensor de luz, y hacer cerrar las pinzas para agarrar objetos cuando
el sensor de sonido percibe ruido.

Primero se percibe el rebote de luz que produce la lmpara del sensor para saber
si estamos saliendo de la mesa.

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.

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, luego
cierra la pinza con el motor B para agarrar el objeto, da un cuarto de giro con el
motor A y abre las pinzas para soltar el objeto. Si no percibe ruido, contina el
camino.

Como todo est envuelto en un LOOP infinito, al terminar cualquiera de los dos
caminos el programa vuelve a empezar.

8
CICLOS BUCLES LOOPs

QUE SON?

El icono "Ciclo" o "Bucle" o "Loop" repite la ejecucin una determinada parte del
programa. Puede repetirse desde unas pocas veces hasta que se cumpla una
determinada condicin o infinitas veces. Iremos viendo los distintos casos con
ejemplos.

NOTA: para comprobar los programas de los ejemplos, usaremos con frecuencia
el icono de sonido configurado de la siguiente forma:

BUCLE FOREVER

Bueno, este es el ms habitual y sencillo. Repite infinitamente un conjunto de


tareas. No se parar hasta que cancelemos el programa

9
Es decir, el programa "se queda atrapado" dentro de ese bucle, del que no sale
nunca. En el ejemplo, pulsa el botn naranja repetidamente para que suene un
"bip".

Un primer detalle: sera imposible programar esto de otra forma, ya que el


programa sera infinitamente largo.

BUCLE FOREVER CON UN "COUNTER"

El mismo programa anterior nos puede permitir visualizar en pantalla las veces
que hemos pulsado el botn o, dicho de otra forma, las veces que se ha repetido
el ciclo. Esta funcin est disponible para cualquier otra configuracin de los
Ciclos.

Con esta pestaa activada, aparece en el bucle una pestaita desde la cual
podemos sacar un cable para visualizar en pantalla las repeticiones.

BUCLES "HASTA QUE"

El anterior bucle se repeta infinitamente. Cualquiera de los bucles que


explicaremos ahora se repiten infinitamente hasta que se produce una
determinada condicin, momento en el cual el programa avanza saliendo del
bucle. Por eso, cuando programes algo, 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, salo.

Hay que hacer una aclaracin a esto. Repetir una cosa "infinitamente" puede ser
engaoso y hay que entenderlo desde el punto de vista de la programacin.
10
Cuando pensamos el programa, esperar a que un sensor de color lea "rojo" para
nosotros es una nica tarea: esperar. Para el NXT es repetir infinitamente la
lectura del sensor "hasta que" encuentre el rojo.

BUCLE "HASTA QUE" O BLOQUE DE ESPERA?

Cul usar? Si NO necesitas repetir una serie de tareas, BASTA con usar un
bloque de espera. Por ejemplo, si quieres que el robot avance "hasta que"
encuentre una pared usando un ultrasonido, basta un icono de espera de
ultrasonido. En este caso, el programa se comporta como si estuviera en un bucle
a la espera de que se cumpla la condicin del ultrasonido, y solo estar realizando
esa tarea.

Si lo que quieres es esperar "hasta que" encuentre una pared PERO DURANTE
ESA ESPERA QUIERES QUE HAGA TAREAS ADICIONALES, tendrs que usar
un BUCLE "hasta que" llegue a la pared y encerrar todas esas tareas adicionales
en el bucle. Tareas adicionales pueden ser que simultneamente compruebe si
has pulsado un sensor de contacto para parar el robot manualmente.

BUCLE "SENSOR"

Con todo lo explicado, podemos interpretar este icono como "repite esto hasta que
el sensor X cumpla esta condicin".

Podra ser el caso de un robot que avanza "hasta que" el sensor de ultrasonido
encuentra una pared. O puede ser el caso del siguiente programa, en el que

11
esperamos indefinidamente a que se pulse el botn naranja para salir del bucle.
En caso contrario, si no se da la condicin, el ciclo se repite de nuevo.

Esto tambin es comn al resto de bucles: el programa sale del bucle cuando se
cumple la condicin, sea temporal, sensor, etc. En caso contrario, el programa
sigue encerrado en el bucle.

AVISO: este bucle puede ser fuente de problemas y de mal funcionamiento de


algunos programas. Un ejemplo de mala programacin sera este:

Aqu, el programa se detiene en el icono de espera, hasta que pulsamos el botn


naranja. En ese momento, el programa avanza tan deprisa que vuelve al mismo
punto sin que nos d tiempo a pulsarlo de nuevo para salir del bucle.

Otros casos de mala programacin o de fuente de problemas tiene que ver con la
longitud de los programas; o con iconos de espera; o con bucles dentro de bucles.
El siguiente programa es muy interesante para aprender cmo funciona el NXT. Lo
explico a continuacin.

El programa queda a la espera de pulsar el cursor izquierdo del NXT para avanzar
y, como antes, no hay tiempo entre medias de pulsar el botn naranja para
finalizar el programa. Parece que el programa siempre queda detenido justo en el
icono de espera de la flecha izquierda. PERO, aunque el programa est "detenido"
en ese punto, prueba a pulsar el botn naranja antes de pulsar la flecha.

El NXT almacena la pulsacin y, cuando es el momento, acaba el programa y no


antes. Es decir, el programa NO acaba inmediatamente cuando pulsas el botn

12
naranja como era nuestra intencin, sino despus de pulsar la flecha, lo que le
permite entonces llegar al final del bucle y salir.

Estos problemas son comunes al resto de bucles del tipo "hasta que..." que
estamos viendo.

TIPOS. Los tipos de condiciones que puedes aadir a un bucle de este tipo son
tantas como sensores tengas a disposicin. Puedes esperar hasta que el sensor
detecte rojo, hasta que la pared est cerca, hasta que recibas una seal BT de
otro NXT, hasta que se pulse un botn... Todo ello te aparece en el panel de
configuracin del bucle cuando est seleccionado "Sensor".

BUCLE "TIME"

Este bucle es mucho ms sencillo. Simplemente repite todas las tareas


encerradas en el bucle "hasta que" pasa un determinado tiempo. Si simplemente
quieres esperar a que pase un tiempo, ya sabes, un simple bloque de espera.
Hago aqu la misma precaucin que hice antes para que el programa no nos de
comportamientos inesperados. Veamos un ejemplo:

El tiempo est a 5 segundos. Pulsa 2 o 3 veces rpidamente al inicio del programa


para ver cmo avanza y luego para a la espera de que se cumplan los 5
segundos. Qu ocurre? Nada. El programa no se para. Eso es porque est
detenido justo en el bloque de espera. Cuando lo pulses una vez ms y ya haya
vencido el tiempo, el programa avanzar hasta el final del bucle y, ahora s,
acabar.

13
BUCLE "COUNT"

Este bucle tambin es muy sencillo, pero tiene un detalle que lo hace puetero en
un aspecto. El programa sale del bucle cuando ha repetido el ciclo n veces, segn
lo configures en la ventanita correspondiente. El "problema" reside en lo siguiente,
que lo vemos con un ejemplo. Programa el siguiente bucle, con 4 repeticiones y un
icono de espera de 1 segundo:

14
El icono final sirve simplemente para que se mantenga el resultado en pantalla sin
que el programa finalice. Ejectalo en el NXT. Para finalizar el programa, recuerda
pulsar el botn naranja. No notas algo raro?

Lo primero que se nos puede ocurrir es cambiar el icono "Sound" de sitio, as:

Pero resulta que sigue "sin funcionar bien": le hemos dicho que repita 4 veces y
solo cuenta hasta 3. Por qu? El problema reside en la numeracin del "counter":
hasta que no ha completado el ciclo, no cuenta 1. Es decir, en la primera pasada
el contador marca cero. Por tanto, para resolver el problema y que podamos
contar hasta 4 como era nuestra intencin, basta poner en el "Count" de la
configuracin del bucle un nmero ms, el 5.

Anda con cuidado con esto porque a veces es un lo y programa segn las
necesidades.

BUCLE "LOGIC"

Este bucle s que puede llegar a ser un autntico "cacao". Principalmente porque
los bloques y variables lgicas tienen su propio "idioma". Pero bueno, haremos
algunos ejemplos sencillos sin intentar meternos es cuestiones complejas.
Recuerda que los bloques lgicos solo pueden tomar 2 valores: verdadero o falso.
Empezamos con un programa muy sencillo: esperar hasta que el sensor de color
detecte amarillo.

Esta sera la forma correcta de programarlo, pero como esto es un ejemplo, voy a
programar exactamente lo mismo con un bucle lgico:

15
Cuando se cumple la condicin impuesta en el bloque del sensor de color
(detectar amarillo), sale del ciclo y el programa finaliza. Cuando no detecta
amarillo, la condicin es "Falso". Cuando lo detecta, la condicin que sale del
sensor es "Verdadero", se cumple con lo que dice el panel del bucle
(True=Verdadero) y el programa acaba.

Si en el bucle pones "False", el ciclo esperar hasta que se cumpla esa condicin.
Es decir, avanzar cuando detecte cualquier otro color que no sea amarillo. Se
quedar encerrado en el bucle "hasta que" deje de detectar amarillo. Sera
equivalente a poner en el panel del sensor "Outside Range", es decir, fuera del
amarillo. O sea, el siguiente programa hace EXACTAMENTE lo mismo que el
anterior:

16
BUCLES ANIDADOS

Un bucle anidado no es ms que un bucle dentro de otro bucle. Personalmente me


gustara ms que se llamaran "bucles anillados", pero no le puse yo el nombre.
Como ejemplo tomaremos el programa que escribimos antes, en el apartado
"Bucle "Count"" (esto sera un ejemplo de "comillas anidadas"). El programa que
pusimos all era este:

17
Pero de esta forma el programa acaba tras los ciclos correspondientes y si
queremos repetir, hay que volver a ejecutar el programa. Para solucionarlo,
metemos todo en un bucle infinito:

O bien combinamos el bucle exterior para que acabe al pulsar el botn naranja del
NXT. Para avanzar sin que el programa se le como ya vimos ms arriba,
seleccionamos la tecla izquierda del NXT.

18
A continuacin les suministramos la direccin en la cual se pueden observar
unos video tutoriales muy interesantes (Direccin (URL).

Espero les resulte de utilidad.

Videotutorial bloque mover


Videotutorial Bloque Espera
Videotutorial Bucles (Loops) Ver pantalla Completa
Videotutorial bloque visualizacin
VideoTutorial sensor de luz
VideoTutorial Sensores para ver
Videotutorial mis bloques
VideoTutorial mis bloques avanzado

19

Vous aimerez peut-être aussi