Comportamientos complejos Quizás la idea más

Anuncio
Introducción a la Programación • Comportamientos
Actividad4
Comportamientos complejos
Ejemplo: Seguir una ruta definida por un laberinto
Estos son comportamientos de alto nivel, como atravesar un laberinto. Aunque
pueden parecer complicados, una propiedad de los comportamientos complejos es que están compuestos de pequeños comportamientos. Siempre un
comportamiento complejo lo puedes dividir en comportamientos más pequeños hasta llegar a comportamientos básicos
task main()
{
motor[leftMotor] = 63;
motor[rightMotor] = 63;
wait1Msec(2000);
motor[leftMotor] = -63;
motor[rightMotor] = 63;
wait1Msec(400);
motor[leftMotor] = 63;
motor[rightMotor] = 63;
wait1Msec(2000);
}
Comportamiento básico:
Este código baja la potencia del motor izquierdo
a la mitad.
Comportamientos simples:
Este código hace que el robot avance durante 2
segundos a la mitad de potencia.
Comportamientos complejos:
Este código hace que el robot gire sobre su propio eje.
Comportamientos
Composición y Análisis
Comportamientos complejos
Quizás la idea más importante en los comportamientos, es que pueden ser descompuestos
en otros comportamientos. Los comportamientos complejos, como atravesar un laberinto,
pueden ser desglosados en comportamientos más pequeños, comportamientos simples.
Se pueden descomponer hasta llegar a comportamientos tan simples o básicos que puedes
reconocer y programar.
Mirando el camino de los comportamientos descompuestos, puedes ver cómo deben ser
programados los comportamientos pequeños para ser combinados nuevamente y obtener
un comportamiento más grande. De este modo, analizando un comportamiento complejo
trazamos un mapa de piezas que tienen que ser programadas, y luego te permite programarlas y juntarlas para desarrollar el producto final.
34
Introducción a la Programación • Comportamientos
Actividad4
Comportamientos
Grandes
Comportamientos
Pequeños
Follow the path
to reach the goal
Go forward for
2 seconds
Go forward 2 seconds
Turn left 90º
Go forward 2 seconds
Turn right 90º
Go forward 2 seconds
Turn right 90º
Go forward 2 seconds
Turn on left motor
Turn on right motor
Wait 2 seconds
Turn off left motor
Turn off right motor
Paso a paso
1. Empieza con un
comportamiento
grande que solucione
el problema.
2. Descómponlo en
pequeñas partes.
Enseguida vuelve a
romper las pequeñas
piezas de nuevo.
3. Repítelo hasta tener
comportamientos
suficientemente
pequeños que
ROBOTC comprenda.
Comportamientos
RobotC
1. Enciende motor izquierdo
2. Enciende motor derecho
3. Espera 2 segundos
4. Apaga motor izquierdo
5. Apaga motor derecho
Turn left 90º
6. Invertir motor izquierdo
7. Encender motor derecho
8. Esperar 0.4 segundo
9. Apagar motor izquierdo
10. Apagar motor derecho
Reverse left motor
Turn on right motor
Wait 0.4 seconds
Turn off left motor
Turn off right motor
Go forward for
2 seconds
11. Encender motor izq.
12. Encender motor der.
13. Esperar 2 segundos
Turn on left motor
Turn on right motor
Wait 2 seconds
A veces resulta difícil decir cuándo un comportamiento es “simple” o “complejo”. Algunos programas
son tan complejos que necesitan múltiples capas de comportamientos simples antes de alcanzar el
nivel básico.
“Básico”, “Simple” y “Complejo” son categorías de comportamientos para ayudarte a pensar en la estructura de los programas. Son puntos de referencia en el mundo de los comportamientos. Usa estas
distinciones a tu favor, pero no te preocupes si de pronto tu comportamiento “complejo” se hace uno
“simple” en tu próximo programa... sólo selecciona la referencia más útil para lo que necesites.
35
Introducción a la Programación • Comportamientos
Actividad4
Comportamientos con lenguaje natural
Programación basada en comportamientos con Lenguaje Natural ROBOTC
El Lenguaje Natural ROBOTC está diseñado para evitar las barreras de entrada en la
sintáxis de programación al combinar múltiples comportamientos básicos en comandos
independientes. En otras palabras, los programadores pueden escribir sus programas al
nivel “comportamiento simple”, sin preocuparse sobre cada comportamiento básico.
Los nombres de estos nuevos comandos también son diseñados para ser más intuitivos
y fáciles de recordar.
El código mostrado debajo, hace al robot comportarse exactamente igual que en el
ejemplo anterior (hacer un giro sobre su propio eje hacia la derecha), pero tiene muchas
menos líneas y se puede entender fácilmente.
task main()
{
robotType(recbot);
forward(63);
wait(2.0);
pointTurn(right, 63);
wait(0.4);
forward(63);
wait(2.0);
}
Más comandos adicionales están disponibles
en Lenguaje Natural que los que aparecen en
este código de muestra. Comportamientos
comunes como un seguidor de línea, avance
en lìnea recta, espera de valores de sensor
especiales, control remoto y otros están disponibles. Para más información, consultar el
documento de Lenguaje Natural ROBOTC o
la ayuda ROBOTC incorporada.
En ROBOTC, el lenguaje natural se puede habilitar al seleccionar el menú Robot > Tipo de Plataforma.
36
Introducción a la Programación • Diagramas de Flujo y Pseudocódigo
Actividad
4
Pseudocódigo
Pseudocódigo es una notación corta conformada por palabras para la programación que usa una
combinación de estructuras de programación informales y descripciones verbales del código. El énfasis está en expresar el comportamiento de cada parte del código más que ser estrictos en la sintáxis
(sin embargo, necesita ser razonable).
En general, el pseudocódigo se usa para dar una idea general de un programa antes de convertirlo a
la sintáxis correcta. Esto ayuda en la planeación inicial de un programa, creando el marco lógico y la
secuencia del código. Un beneficio adicional es que como el pseudocódigo no necesita una sintáxis
específica, puede ser traducido a distintos lenguajes de programación y es por lo tanto universal.
Capta la lógica y el flujo de una solución sin la mayor parte de estrictas reglas de sintáxis.
Debajo hay un pseudocódigo escrito para un programa que hace que un robot se mueva mientras un
sensor de tacto no sea presionado, si su radar detecta un objeto a una distancia menor de 20 pulgadas, el robot se detiene y gira a la derecha.
Sintáxis intacta
task main()
{
while ( touch sensor is not pressed )
{
Robot runs forward
if (sonar detects object < 20in away)
{
Robot stops
Robot turns right
}
}
}
El uso de la función repetitiva “while”
encaja con el pseudocódigo porque la
manera en que se lee un ciclo “while
loop” es similar a la manera en que es
utilizado en programación.
Descripciones
No hay ningún comando de motor en esta
sección del código, pero el pseudocódigo
sugiere qué tipos de comandos son utilizados y la tarea que tienen que lograr.
Este ejemplo de pseudocódigo incluye elementos de ambos lenguajes de programación y del idioma
inglés. Las llaves son usadas como ayuda visual para indicar los lugares donde el código tiene que ser
colocado cuando sea escrito en la sintáxis completa y correcta.
37
Introducción a la Programación • Diagramas de Flujo y Pseudocódigo
Actividad4
Diagramas de Flujo
Los diagramas de flujo son una representación visual del flujo o secuencia de un programa. Un diagrama de flujo combina el uso de bloques y flechas para representar las acciones y secuencias. Los
bloques representan acciones. El orden en la que las acciones ocurren se muestra usando flechas
que van de sentencia en sentencia. Algunas ocasiones un bloque tendrá múltiples flechas entrando y
saliendo, que representan un paso donde debe tomarse una decisión sobre el camino a seguir.
Inicio / Final
Los símbolos que representan Inicio y Final son rectángulos redondeados,
conteniendo el palabra “Inicio” o “Final” generalmente, pero pueden cambiar
a “Apagar el Robot” o “Parar todos los Motores”.
Acción
Las Acciones son representadas como rectángulos y actúan como comandos
básicos. Ejemplos: “wait1Msec(1000)”; “incrementar el contador de línea en
1”; ó “motores funcionando a máxima velocidad hacia el frente”.
Acción
Los bloques de Decisión se representan como diamantes. Estos suelen contener preguntas de Si o No. A los bloques decisivos le salen dos o más flechas,
representando los caminos distintos a seguir, dependiendo de la decisión. Las
flechas deben siempre ser etiquetadas correctamente.
A la derecha está un diagrama de flujo de un programa
que obliga al robot a avanzar de frente mientras su sensor de tacto no sea presionado. Cuando éste sea presionado el motor para y el programa termina.
Para leer el diagrama: de flujo:
* Comenzar por el bloque “Inicio”, y seguir su flecha al
bloque “Decisión”.
* El bloque decisión verifica el estado del sensor de tacto
con los dos posibles resultados: el sensor de tacto está
presionado o no.
* Si el sensor de tacto no está presionado, el programa
sigue la flecha “No” al bloque de acción a la derecha,
que dice a ambos motores que avancen. La flecha regresa al bloque Decisión. Esto forma una Repetición.
* La repetición puede realizarse muchas veces, mientras
el Sensor de Tacto siga sin estar presionado.
* Si el sensor de tacto está presionado, el programa sigue
la flecha “Sí” y para los motores, y el programa termina.
38
Inicio
¿El Sensor
de
Tacto está
presionado?
Parar
motores
Final
Activar
ambos
motores
Introducción a la Programación • Pensando como Programador
Actividad4
Pensado como Programador
Programador y Robot
En esta lección aprenderás sobre los papeles del programador y el robot, y cómo deben los dos trabajar en conjunto para lograr sus objetivos.
Los robots están hechos para llevar a cabo tareas útiles. Cada uno es diseñado para
solucionar un problema específico, de una manera específica.
Problema
Tractor Robot:
Conducirse sin peligro a través
de un campo de obstáculos.
Solución:
Se mueve hacia su destino,
haciendo pequeños desvíos
si cualquier obstáculos es
detectado.
Problema
Laberinto Robot:
Atravesar el laberinto.
Solución:
Se mueve a lo largo de una
ruta predeterminada en
segmentos de tiempo.
39
Introducción a la Programación • Pensando como Programador
Actividad4
Demos un vistazo al Laberinto robot. ¿Cómo logra encontrar la salida?
¿Cómo sabe la manera de hacerlo?
Problema
?????
Objetivo Alcanzado
Crear un robot exitoso requiere del esfuerzo del equipo humano y las máquinas.
2
17.75”
17.75”
El Papel del Robot
El robot sigue las instrucciones
que se le dan, llevando a cabo
el plan.
58.5”
17.75”
26”
1
17”
El Papel del programador
El programador humano
identifica la tarea y planea
una solución, luego le indica
al robot lo que necesita hacer
para llegar al objetivo.
40
Introducción a la Programación • Pensando como Programador
Actividad4
El programador humano y el robot juntos logran la tarea al dividir las responsabilidades. El programador humano debe formular el plan y comunicárselo al robot. El robot debe seguir al plan.
Problema
HUMANO
Crear un plan
ROBOT
Seguir un plan
Objetivo Alcanzado
Porque los humanos y los robots no hablan el mismo lenguaje, un lenguaje especial debe ser
usado para traducir las instrucciones necesarias del humano al robot. Estos se llaman lenguajes de
programación. Las instrucciones escritas en ellos se llaman programas. ROBOTC es sólo uno de
muchos lenguajes de programación que los humanos usan para hablar con las máquinas.
HUMANO
Problema
Crear un plan
ROBOT
Seguir un plan
Objetivo Alcanzado
Hacer un programa
Los humanos y los robots se comunican usando lenguajes de programación como ROBOTC. Un
humano que escribe un programa se llama programador. El trabajo del programador es identificar
el problema que el robot debe solucionar, crear un plan para solucionarlo y convertir ese plan en
un programa que el robot pueda comprender. El robot entonces correrá el programa y seguirá sus
instrucciones para llevar a cabo la tarea.
Un robot sólo puede seguir las instrucciones de un programa. ¡No puede pensar por sí solo! Así
como no puede ser más fuerte que la estructura sobre la que se construyó, el robot no puede ser
más inteligente que el programa que el humano le dió.
Tú, como programador, serás responsable de planear e indicarle al robot exactamente qué tiene
que hacer para lograr su tarea.
41
Introducción a la Programación • Pensando como Programador
Actividad4
Pensado como Programador
Planeación y Comportamientos
En esta lección, aprenderás cómo pensar, en términos de “comportamiento”, puede ayudarte a
ver la lógica detrás de las acciones de tu robot y dividir un gran plan en partes prácticas.
2
2
1
1
Comportamiento Básico o Simple
Comportamiento Complejo
Algunos comportamientos son pequeños,
“avanzar durante 3 segundos”. Los comportamientos grandes están formados por estos
más pequeños.
Algunos comportamientos son grandes,
como “solucionar un laberinto”.
Cuando empiezas a programar, debes empezar a pensar en las acciones
del robot como comportamientos. Recuerda que como programador, tus
principales responsabilidades son:
• Primero, tener un plan para que el robot logre su objetivo.
• Segundo, convertir ese plan en un programa que el robot pueda seguir.
El plan será sólo la secuencia de comportamientos que el robot tiene que
seguir. El programa serán esos comportamientos traducidos al lenguaje de
programación.
42
Introducción a la Programación • Pensando como Programador
Actividad4
2
1. Examina el problema
Para encontrar una solución, empieza examinando el problema.
Aquí, el problema es ir del punto de partida (1) al objetivo (2).
1
2. Solución General
2
Trata de ver lo que el robot tiene que hacer, en
un nivel alto, para lograr el objetivo.
Sigue la ruta para
alcanzar el objetivo.
Hacer que el robot siga la ruta indicada a la
izquierda, por ejemplo, puede solucionar el
problema. Aacabas de identificar el primer comportamiento que necesitas.
1
Escríbelo.
3. Separa la solución en comportamientos pequeños
Sigue la ruta para
alcanzar el objetivo.
2
ndos
3 segu
0º
Avanza
ierda 9
u
q
iz
a
Vuelt
ndos
5 segu
Avanza recha 90º
de
Vuelta
ndos
2 segu
a
z
n
Ava
a 90º
derech dos
Vuelta
n
2 segu
Avanza
1
4. Vuelve a separar en pequeñas piezas
Avanza 3 segundos
2
1
Ahora, empieza a dividir ese comportamiento
en partes más pequeñas.
Seguir este camino implica avanzar, luego girar,
enseguida avanzar otra distancia, luego girar al
otro lado, y así sucesivamente. Cada una de
estas pequeñas acciones son también comportamientos.
Escíbelos y asegúrate mantenerlos en el orden
correcto.
Enc
i
Enc ende
mo
ien
t
d
Esp
era e mot or izq.
Apa
3 se
or d
Apa ga mo gundo er.
ga m tor
s
oto izq.
r de
r.
43
Si vuelves a separar esos comportamientos en
piezas aún más pequeñas, podrás obtener cada
vez comportamientos más pequeños con más
detalle.
Eventualmente, obtendrás comandos que podrás
escribir directamente en el lenguaje de programación.
Por ejemplo, ROBOTC tiene un comando para encender
un sólo motor. Cuando llegues a este comportamiento,
podrás dejar de separarlo porque estará listo para ser
traducido.
Introducción a la Programación • Pensando como Programador
Actividad4
Comportamientos
Grandes
Comportamientos
Pequeños
Comportamientos
RobotC
Sigue la ruta para
alcanzar el objetivo
Avanza 3 segundos
Avanza 3 segundos
Gira izq. 90º
Avanza 5 segundos
Gira der. 90º
Avanza 2 segundos
Gira der. 90º
Avanza 2 segundos
1. Encender motor izq.
2. Encender motor der.
3. Esperar 3 segundos
4. Apagar motor izq.
5. Apagar motor der.
Enciende motor izq.
Enciende motor der.
Espera 3 segundos
Apaga motor izq.
Apaga motor der.
Paso a paso
1. Empieza con un comportamiento grande que
resuelva el problema
2. Sepáralo en pequeñas
piezas. Luego vuélvelo a
separar en más pequeñas
3. Repite lo mismo hasta
obtener comportamientos
lo suficientemente pequeños para que ROBOTC los
entienda.
Gira izq. 90º
Invierte motor izq.
Enciende motor der.
Espera 0.8 segundos
Apaga motor izq.
Apaga motor der.
6. Invertir motor izq.
7. Encender motor der.
8. Esperar 0.8 segundos
9. Apagar motor izq.
10. Apagar motor der.
Avanza 5 segundos
Enciende motor izq.
Enciende motor der.
Espera 5 segundos
44
11. Encender motor izq.
12. Encender motor der.
13. Esperar 5 segundos
Introducción a la Programación • Pensando como Programador
Actividad4
Cuando todas las piezas hayan alcanzado un nivel
de detalle con las que ROBOTC pueda trabajar –
como las del listado de la derecha – da un vistazo
a la lista que hiciste. Estos comportamientos, en
el orden que especificaste, son el plan que el robot debe seguir para llegar al objetivo.
Como estos pasos están escritos en inglés, deben de tener un mínimo de dificultad para el programador para entenderlo.
Al obtener experiencia el programador, la organización de comportamientos comenzará a incluir
importantes técnicas del propio lenguaje de programación, como sentencias si entonces y repeticiones.
Este lenguaje híbrido, se llama pseudocódigo.
Es una herramienta importante para permitir la
comprensión de programas largos.
1. Encender motor izquierdo
2. Encender motor derecho
3. Esperar 3 segundos
4. Apagar motor izquierdo
5. Apagar motor derecho
Pseudocódigo Simple
Tu lista de comportamientos en un
orden específico son una forma
simple de pseudocódigo.
if (the light sensor sees light)
{
turn on left motor
hold right motor still
}
Pseudocódigo Compuesto
Al aumentar tus habilidades en programación tu pseudocódigo incluirá
lógica compleja, que servirá para el
mismo propósito: ayudar a encontrar y expresar los comportamientos
necesarios para el robot en simple
inglés.
Empieza la solución con un comportamiento largo y divídelo en pequeños sub-comportamientos. Esto
te lleva de manera lógica a definir lo que necesita el robot hacer para completar su tarea.
Registrar los comportamientos del robot en inglés es el primer paso para escribir pseudocódigo. Te
permite revisar fácilmente estos comportamientos y organizarlos mientras los traduces al código de
programación.
El único paso que falta es la traducción de tus comportamientos del pseudocódigo a lenguaje de programación ROBOTC.
45
Descargar