Professional Documents
Culture Documents
Introduccin
Los estudiantes no tienen una idea clara de lo que son las Ciencias Computacionales. Los lenguajes iniciales son complejos (sintaxis) El contexto de la Computacin actual es diferente (robots, celulares, consolas de videojuegos) Los estudiantes estn acostumbrados a usar dispositivos con los que interactan (iPod, celular, controles de juego) y obtiene un resultado inmediato.
Propuesta
Usar el robot Scribbler para introducir a los estudiantes en la lgica de programacin. Usar Python como lenguaje para programar los robots. Usar un simulador del robot Scribbler. Usar los robots reales.
Instalando el software en XP
Esta gua es para el sistema operativo Windows XP 1. Abrir el CD y entrar a la carpeta Windows.
Instalando el software en XP
3. Ejecuta el archivo "install.bat" dando doble click sobre el cono correspondiente. 4. Iniciar la instalacin de varias aplicaciones, deja que stas se instalen en los folders por default (normalmente c:\Python24) 5. Si hay otra versin de python diferente a la 2.4, debes indicar a cada aplicacin que se instale sobre la versin 2.4
Instalando el software en XP
6. Crea un acceso directo en el escritorio del archivo "c:\Python24\Lib\site-packages\myro\simulator.py", renombra este acceso directo a "Simulador Myro". En tu escritorio debes tener los conos de abajo. Si no tienes el segundo, "Start Python.pyw", copia el que est en el CD.
robot = SimScribbler()
robot.getName()
Si el comando anterior funciona correctamente, significa que hemos logrado la comunicacin exitosa con el robot. 6. Cambia el nombre de tu robot con el siguiente comando
robot.setName("R2D2")
Consulta nuevamente el nombre del robot y verifica que haya sido modificado.
robot.beep(1,880)
Prueba otras frecuencias y duracin, por ejemplo:
robot.beep(2,440) robot.beep(0.5,1200)
Funciones en python
Para definir una funcin, se usa la sintaxis def nombre(parmetros) : instrucciones Por ejemplo: def alarma(robot) : robot.beep(1,440) robot.beep(0.5,880) robot.beep(1,440) robot.beep(0.5,880)
Funciones en python
Carga el intrprete de python. Ejecuta el simulador. Conctate al robot del simulador. En el men File del intrprete, selecciona New Window. En la nueva ventana teclea el cdigo de la derecha (cuidado con la indentacin!)
10
Funciones en python
Guarda tu archivo con el nombre sonidos.py en la carpeta correspondiente. En el men de Run, selecciona la opcin Run Module o usa la tecla F5. Si no hay errores, el control regresa al intrprete de python. Si hay errores, debes corregirlos antes de ejecutar nuevamente el mdulo. Ahora puedes ejecutar la funcin escribiendo su nombre y enviando el parmetro correspondiente. alarma(robot)
Cambia el valor del tiempo y/o la frecuencia y experimenta con la funcin. Recuerda ejecutar el mdulo despus de cada cambio.
Tocando msica
Reproduciendo sonidos con el robot.
beep(duracin, frecuencia)
Nota Do Re Mi
Octavas y frecuencia Oc. 4 Oc. 5 Oc. 6 261.63 523.25 1046.50 293.66 587.33 1174.66 329.63 659.26 1318.51
11
La funcin tocarMelodia
# Secuencia def tocarMelodia(robot) : negra = 0.3 blanca = 2*negra mi = 659.26 re = 587.33 do = 523.25 robot.beep(negra,mi) robot.beep(negra,re) robot.beep(negra,do) robot.beep(negra,re) robot.beep(negra,mi) robot.beep(negra,mi) robot.beep(blanca,mi) robot.beep(negra,mi) robot.beep(negra,mi) robot.beep(blanca,mi) robot.beep(negra,re) robot.beep(negra,re) robot.beep(blanca,re)
Otro ejemplo
12
13
14
Tomando decisiones
Leyendo el estado de los sensores.
getIR getObstacle getLine getLight
A cada funcin le podemos indicar cul sensor estamos leyendo. Por ejemplo,
getIR("left"), getIR("right") getObstacle("left"), getObstacle("center"), getObstacle("right")
Tomando decisiones
Leyendo el estado de los sensores.
getIR. 0 si hay un objeto enfrente, 1 en otro caso. getObstacle. 0 no hay objeto, (0, 6400] hay objeto. getLine. 1 lnea negra, 0 lnea blanca. getLight. 0 luz intensa, aumenta hasta1024 con menor luz.
15
Tomando decisiones
La sintaxis para la instruccin de seleccin es:
if condicin :
instrucciones
if condicin :
instrucciones
else :
instrucciones
Operadores relacionales
Los operadores relacionales son los siguientes
Operador > < >= <= == != Significado Mayor que Menor que Mayor o igual que Menor o igual que Igual a Diferente de Ejemplo luz > 500 luz < 100 luz >=700 luz <= 50 piso == 1 objetoIzquierda != 0
16
Operadores lgicos
Los operadores lgicos son:
Operador and or not Significado Y, conjuncin O, disyuncin No, negacin Ejemplo luz > 500 and luz < 900 luz < 100 or luz > 1000 not luz < 0
Ejercicio
Escribe las expresiones lgicas en python que representan las siguientes condiciones del robot:
a) "Estoy sobre la lnea" ambos sensores detectan la lnea. b) "Estoy en la orilla de la lnea" slo uno de los sensores detecta la lnea. c) "Estoy fuera de la lnea" ninguno de los sensores detectan la lnea.
17
Detectando objetos
# Seleccin def detectar(robot) : izq = robot.getIR("left") der = robot.getIR("right")
if izq==0 or der==0 :
print "No puedo caminar, hay un objeto frente a mi" speak("No puedo caminar, hay un objeto frente a mi")
else :
print "El camino esta libre, estoy listo para caminar" speak("El camino esta libre, estoy listo para caminar")
Saludando
# Seleccin def saludar(robot) : if robot.getLight("center")>200 : print "Alarma! No hay luz!" speak("Alarma! No hay luz!") else : print "Las condiciones de luz son normales" speak(" Las condiciones de luz son normales ")
18
19
Moviendo el Robot
Podemos mover el robot con los siguientes comandos. Comandos forward(velocidad) backward(velocidad) turnLeft(velocidad) turnRight(velocidad) stop() Segunda versin forward(velocidad, tiempo) backward(velocidad, tiempo) turnLeft(velocidad, tiempo) turnRight(velocidad, tiempo)
El valor de velocidad est en el rango [-1,1]. El parmetro tiempo indica el nmero de segundos que dura el movimiento.
Cuidado!
20
Iteraciones en python
En python existe la estructura for para hacer ciclos.
Haciendo Ciclos/Iteraciones
Dibujando un cuadrado.
Dibujamos una lnea y giramos 90. Repetimos lo anterior 4 veces.
#Ciclos def dibujarCuadrado(robot) :
for i in range(4) :
robot.forward(1, 1.5) robot.turnLeft(1, 0.35)
21
Haciendo Ciclos/Iteraciones
Tambin existe la estructura while para hacer ciclos.
while condicin :
instrucciones
Ejemplo: valor = 1 while valor<=10 : print valor valor = valor+1
Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : while robot.getObstacle("center") < 3000 : robot.forward(0.8,0.5) print "Termina"
22
Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : robot.forward(0.8) while robot.getObstacle("center") < 3000 : pass robot.stop() print "Termina"
Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : while True : robot.forward(0.8,0.5) if robot.getObstacle("center") > 3000 : break print "Termina"
23
Evadiendo obstculos
Haga que el robot camine y, cuando detecta un obstculo, gira a la derecha y contina caminando. Simular esto por 15 segundos.
def evadir(robot) : for i in timer(15) : robot.forward(1) if robot.getObstacle("center") > 3000 : robot.turnRight(0.8,1) robot.stop()
Moviendo el Robot
Otros comandos para mover el robot. Comandos translate(velocidad) rotate(velocidad) move(vel_translate, vel_rotate) motors(vel_izq, vel_der);
- rotate +
24
Escribe un mdulo para leer dos valores e imprimir la suma y el cociente. Para imprimir informacin en el monitor, usa la instruccin print print "El resultado es: ", resultado print "La suma de ", a, "+", b, "=", resultado
Ejercicios
1. Escribe un mdulo llamado resolverSistema que pida los valores de un sistema de dos ecuaciones con dos incgnitas y que imprima las races. 2. Escribe un mdulo llamado convertir que lea desde el teclado una cantidad en grados Fahrenheit y la imprima en grados Celsius.
25
Ejercicios
1. Escribe una funcin que haga que el robot gire mientras no "vea" un objeto frente a l. Cuando detecta el objeto, camina hacia adelante para "pegarle". 2. Escribe una funcin que haga que el robot "siga" a un objeto frente a l.
26
Gracias!
Roberto Martnez Romn
rmroman@itesm.mx http://homepage.cem.itesm.mx/rmroman/
IPRE http://wiki.roboteducation.org
27