programación en python con robots - juica 2012

61
Programación en Python con Robots JUICa 2012 Grupo de Desarrollo Lihuen - Fernando López - Sofía Martin Noviembre 2012 Grupo de Desarrollo Lihuen - Fernando López - Sofía Martin Programación en Python con Robots

Upload: trantuyen

Post on 09-Jan-2017

234 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Programación en Python con Robots - JUICa 2012

Programación en Python con RobotsJUICa 2012

Grupo de Desarrollo Lihuen - Fernando López - Sofía Martin

Noviembre 2012

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 2: Programación en Python con Robots - JUICa 2012

Programación en Python con RobotsTemario

El proyecto: Entre Robots, juegos y lenguajes: unaexperiencia de aprendizaje real en las aulasLos RobotsIntroducción a Python

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 3: Programación en Python con Robots - JUICa 2012

Primer curso de programación usando robots y Python

ObjetivosIncentivar el interés de los niños y jóvenes en el uso de latecnología con fines educativosTrabajar en mecanismos de resolución de problemas

Más específicamente ...Difundir y trabajar con Software LibreEnseñar aspectos de programación utilizando Python

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 4: Programación en Python con Robots - JUICa 2012

Primer curso de programación usando robots y Python

ObjetivosIncentivar el interés de los niños y jóvenes en el uso de latecnología con fines educativosTrabajar en mecanismos de resolución de problemas

Más específicamente ...Difundir y trabajar con Software LibreEnseñar aspectos de programación utilizando Python

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 5: Programación en Python con Robots - JUICa 2012

Entre Robots, juegos y lenguajes: una experiencia deaprendizaje real en las aulasEl proyecto

2012: Subsidiado por la Fundación YPFEquipamiento en las escuelas

20 robots1 netbook1 filmadora

Capacitación para docentes y alumnosAcompañamiento para su implementación

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 6: Programación en Python con Robots - JUICa 2012

El proyecto de robotsEn las escuelas

Características10 escuelas.10/15 docentes por escuela.5 alumnos por escuela.Conocimientos previos desiguales.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 7: Programación en Python con Robots - JUICa 2012

El proyecto de robotsEn las escuelas

Características10 escuelas.10/15 docentes por escuela.5 alumnos por escuela.Conocimientos previos desiguales.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 8: Programación en Python con Robots - JUICa 2012

El proyecto de robotsEn las escuelas

Características10 escuelas.10/15 docentes por escuela.5 alumnos por escuela.Conocimientos previos desiguales.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 9: Programación en Python con Robots - JUICa 2012

Programando con Python y RobotsRecursos Necesarios

Plataforma LinuxRobots inalámbricos

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 10: Programación en Python con Robots - JUICa 2012

Programando con Python y RobotsContenidos Mínimos

Conceptos básicos de programación.Paradigma...Introducción al lenguaje Python.Implementación de algoritmos sencillos.Funciones para manipulación del robot.Manual de guía.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 11: Programación en Python con Robots - JUICa 2012

Programando con Python y RobotsContenidos Mínimos

Conceptos básicos de programación.Paradigma...Introducción al lenguaje Python.Implementación de algoritmos sencillos.Funciones para manipulación del robot.Manual de guía.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 12: Programación en Python con Robots - JUICa 2012

Programando con Python y RobotsContenidos Mínimos

Conceptos básicos de programación.Paradigma...Introducción al lenguaje Python.Implementación de algoritmos sencillos.Funciones para manipulación del robot.Manual de guía.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 13: Programación en Python con Robots - JUICa 2012

Programando con Python y RobotsActividades

Se organizan actividades lúdicas (juegos, carreras, obras de teatro,bailes, etc.)

Donde se intenta que los alumnos presenten sus trabajos en unajornada (interna o externa)

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 14: Programación en Python con Robots - JUICa 2012

Vídeo de los chicos practicando

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 15: Programación en Python con Robots - JUICa 2012

El proyecto de software libreEn las escuelas

CaracterísticasAplicaciones educativasConexión con el proyecto Conectar Igualdad.Jornadas en las escuelas.Aplicación del uso de la aplicación al área de estudio.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 16: Programación en Python con Robots - JUICa 2012

El proyecto de software libreEn las escuelas

CaracterísticasAplicaciones educativasConexión con el proyecto Conectar Igualdad.Jornadas en las escuelas.Aplicación del uso de la aplicación al área de estudio.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 17: Programación en Python con Robots - JUICa 2012

El proyecto de software libreEn las escuelas

CaracterísticasAplicaciones educativasConexión con el proyecto Conectar Igualdad.Jornadas en las escuelas.Aplicación del uso de la aplicación al área de estudio.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 18: Programación en Python con Robots - JUICa 2012

El proyecto de software libreEn las escuelas

CaracterísticasAplicaciones educativasConexión con el proyecto Conectar Igualdad.Jornadas en las escuelas.Aplicación del uso de la aplicación al área de estudio.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 19: Programación en Python con Robots - JUICa 2012

Los RobotsCaracterísticas Básicas

Los Robots

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 20: Programación en Python con Robots - JUICa 2012

Los RobotsCaracterísticas Básicas

Basados en hardware y software libreInalámbricos3 Baterías AAVarios SensoresNacionales - Empresa RobotGroup

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 21: Programación en Python con Robots - JUICa 2012

Los RobotsDetalle

Forman parte del sistema constructivo Multiplo de RobotGroup.Pueden programarse en C++ o con bloques (MiniBloq).Las piezas plásticas pueden replicarse con una cortadora láser.El controlador del robot es una placa Arduino con algunasmodificaciones.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 22: Programación en Python con Robots - JUICa 2012

Los RobotsRobots utilizados en el curso

Son versiones modificadas del N6.Cuentan con un módulo XBee para la comunicación.Tienen un firmware basado en Firmata que permite controlarlosde forma remota.API en Python desarrollada en conjunto entre el LINTI yRobotGroup.

Clases de alto nivel → en conjunto.PyFirmata → por terceros, modificada.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 23: Programación en Python con Robots - JUICa 2012

Los RobotsEsquema de conexión

XBee (por USB)

Comandospara el firmware

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 24: Programación en Python con Robots - JUICa 2012

SensoresSensores utilizados en el curso

Sensor ultrasónicoFuncionamientoping()getObstacle()Alternativa más económica...

Sensores de línea / cuenta vueltasFuncionamientogetLine()getWheels()

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 25: Programación en Python con Robots - JUICa 2012

Otros sensores

FotoresistenciasCámara fotográfica → se podría suplir...Un switch para detectar obstáculosMicrófono

Intensidad de ruido ambienteIntensidad en determinada frecuencia

Para algunos sería práctico ampliar la API

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 26: Programación en Python con Robots - JUICa 2012

PythonCaracterísticas Básicas

Introducción a Python

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 27: Programación en Python con Robots - JUICa 2012

PythonCaracterísticas Básicas

Es interactivoMulti plataformaPermite una programación prolija eintuitivaEs posible programar aplicacionescomplejasMuy usadoEs software libre

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 28: Programación en Python con Robots - JUICa 2012

PythonEl Intérprete

Desde el shell de Python Utilizando un IDE: Geany

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 29: Programación en Python con Robots - JUICa 2012

Características Generales del Lenguaje PythonFunciones

Una función agrupa un conjunto de sentencias.Puede tener argumentosSintaxis:

def nombre(parametros):sentencia1sentencia2sentencia3

El cuerpo de la funcióndebe estar indentado!

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 30: Programación en Python con Robots - JUICa 2012

Características Generales del Lenguaje PythonEstructuras de Control

Sentencia if

if expresion:sentencia1sentencia2

Sentencia while

while expresion:sentencia1sentencia2

Sentencia for

for var in lista:sentencia1sentencia2

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 31: Programación en Python con Robots - JUICa 2012

Materiales adicionales

http://robots.linti.unlp.edu.ar/

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 32: Programación en Python con Robots - JUICa 2012

Primeros PasosInstalando

Primeros pasos

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 33: Programación en Python con Robots - JUICa 2012

Primeros PasosConectando el robot y la computadora

Se conecta el módulo decomunicaciones a un puertoUSB de la computadora.Luego se enciende el robotpara que reciba las órdenesde la computadora.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 34: Programación en Python con Robots - JUICa 2012

Primeros PasosConectando el robot y la computadora

Se conecta el módulo decomunicaciones a un puertoUSB de la computadora.Luego se enciende el robotpara que reciba las órdenesde la computadora.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 35: Programación en Python con Robots - JUICa 2012

Primeros PasosConectando el robot y la computadora

Se conecta el módulo decomunicaciones a un puertoUSB de la computadora.Luego se enciende el robotpara que reciba las órdenesde la computadora.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 36: Programación en Python con Robots - JUICa 2012

Primeros PasosConectando el robot y la computadora

Se conecta el módulo decomunicaciones a un puertoUSB de la computadora.Luego se enciende el robotpara que reciba las órdenesde la computadora.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 37: Programación en Python con Robots - JUICa 2012

Primeros PasosConectando el robot y la computadora

Importamos la librería para trabajar con el robot:from duinobot import *Encender el robot

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 38: Programación en Python con Robots - JUICa 2012

Primeros PasosIniciando la actividad

from du inobot import ∗b = Board ( "/dev / ttyUSB0 " )b . r e p o r t ( )mi_robot = Robot (b , 0)mi_robot . s e t I d (3 )

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 39: Programación en Python con Robots - JUICa 2012

Primeros Pasos¿Movemos el robot?

Hacia Adelante

forward(velocidad, tiempo)Ejemplos:forward()forward(1, 0.5)

Hacia Atrás

backward(velocidad, tiempo)Ejemplos:backward()backward(1, 0.5)

Probemos ...backward(-10)forward(-10)

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 40: Programación en Python con Robots - JUICa 2012

Primeros Pasos¿Movemos el robot?

Hacia Adelante

forward(velocidad, tiempo)Ejemplos:forward()forward(1, 0.5)

Hacia Atrás

backward(velocidad, tiempo)Ejemplos:backward()backward(1, 0.5)

Probemos ...backward(-10)forward(-10)

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 41: Programación en Python con Robots - JUICa 2012

Primeros Pasos¿Movemos el robot?

Girando a la Izquierda

turnLeft(velocidad, tiempo)Ejemplos:turnLeft()turnLeft(1, 0.5)

Girando a la Derecha

turnRight(velocidad, tiempo)Ejemplos:turnRight()turnRight(1, 0.5)

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 42: Programación en Python con Robots - JUICa 2012

Primeros PasosUsando los sensores

¿Cómo obtenemos los valores de los sensores?senses()ping()getObstacle()

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 43: Programación en Python con Robots - JUICa 2012

Demo en vivo con sensores

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 44: Programación en Python con Robots - JUICa 2012

Primeros PasosEjemplo con sensores

Evita obstáculos

robot.forward()obstaculos = 0while obstaculos < 10:

if robot.getObstacle(15):robot.backward(40, 1)robot.turnLeft(50, 0.5)robot.forward()obstaculos = obstaculos + 1

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 45: Programación en Python con Robots - JUICa 2012

Ampliando el manejo del robot

MotivaciónIncentivo a la programación usando teléfonos Android.Innovación en nuevas tecnologías.

IntegraciónLos robots ejecutando algún programaJoystickCelulares

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 46: Programación en Python con Robots - JUICa 2012

Ampliando el manejo del robot

MotivaciónIncentivo a la programación usando teléfonos Android.Innovación en nuevas tecnologías.

IntegraciónLos robots ejecutando algún programaJoystickCelulares

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 47: Programación en Python con Robots - JUICa 2012

Programando en Android¿Qué es remotebot?

Aplicación cliente-servidor.Está compuesto de:

Un servidor Python que se ejecuta en una PC con GNU/Linux.Un cliente en Java que se ejecuta en Android.

Permite controlar robots simples desde disposivos Android.Contiene un Wrapper completo de la clase Robot.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 48: Programación en Python con Robots - JUICa 2012

Programando en AndroidEl código

from duinobot import *b=Board("/dev/ttyUSB0")r=Robot(b, 1)

r.forward(50, 2)r.turnLeft(25, 2)r.backward(50, 1)r.forward(100, 1)r.stop()

b.exit()

import ar.edu.unlp.linti.robot.*;import ar.edu.unlp.linti.robot.exceptions

.*;/* ... */try {

Board b = new Board("http://10.0.0.1:8000","/dev/ttyUSB0");

Robot r = new Robot(b, 1);r.forward(50, 2);r.turnLeft(25, 2);r.backward(50, 1);r.forward(100, 1);r.stop();

} catch (CommunicationException e) {System.out.println("Ups...");e.printStackTrace();

}/* ... */

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 49: Programación en Python con Robots - JUICa 2012

Programando en AndroidMétodo de comunicación

Acceso a Internet o a la LAN del servidor.HTTP y JSON.Peticiones del cliente en un HTTP POST.Resultado del comando en la respuesta.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 50: Programación en Python con Robots - JUICa 2012

Programando en Android¿Por qué esos protocolos?

Bluetooth (IEEE 802.15.1) para proyectos similares.El N6 usa ZigBee (basado en IEEE 802.15.4).HTTP tiene mucho overhead pero...

Librerías para hacer clientes en cualquier lenguaje.Servidor en Python BaseHTTPRequestHandler.Mensajes JSON en texto plano.HTTP + JSON → Javascript.Posiblidad a futuro de robots remotos.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 51: Programación en Python con Robots - JUICa 2012

Programando en Android¿Por qué esos protocolos?

Bluetooth (IEEE 802.15.1) para proyectos similares.El N6 usa ZigBee (basado en IEEE 802.15.4).HTTP tiene mucho overhead pero...

Librerías para hacer clientes en cualquier lenguaje.Servidor en Python BaseHTTPRequestHandler.Mensajes JSON en texto plano.HTTP + JSON → Javascript.Posiblidad a futuro de robots remotos.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 52: Programación en Python con Robots - JUICa 2012

Programando en Android¿Por qué esos protocolos?

Bluetooth (IEEE 802.15.1) para proyectos similares.El N6 usa ZigBee (basado en IEEE 802.15.4).HTTP tiene mucho overhead pero...

Librerías para hacer clientes en cualquier lenguaje.Servidor en Python BaseHTTPRequestHandler.Mensajes JSON en texto plano.HTTP + JSON → Javascript.Posiblidad a futuro de robots remotos.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 53: Programación en Python con Robots - JUICa 2012

Programando en Android¿Por qué esos protocolos?

Bluetooth (IEEE 802.15.1) para proyectos similares.El N6 usa ZigBee (basado en IEEE 802.15.4).HTTP tiene mucho overhead pero...

Librerías para hacer clientes en cualquier lenguaje.Servidor en Python BaseHTTPRequestHandler.Mensajes JSON en texto plano.HTTP + JSON → Javascript.Posiblidad a futuro de robots remotos.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 54: Programación en Python con Robots - JUICa 2012

Programando en Android¿Por qué esos protocolos?

Bluetooth (IEEE 802.15.1) para proyectos similares.El N6 usa ZigBee (basado en IEEE 802.15.4).HTTP tiene mucho overhead pero...

Librerías para hacer clientes en cualquier lenguaje.Servidor en Python BaseHTTPRequestHandler.Mensajes JSON en texto plano.HTTP + JSON → Javascript.Posiblidad a futuro de robots remotos.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 55: Programación en Python con Robots - JUICa 2012

Programando en AndroidArquitectura de Remotebot

menu

Router inalámbrico

Peticiones HTTP

App RemoteBotpara Android

Servidor RemoteBotescrito en Python

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 56: Programación en Python con Robots - JUICa 2012

Demo

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 57: Programación en Python con Robots - JUICa 2012

Programando en AndroidProtocolo en JSON

3 entidades agrupan métodos y funciones:robotboardmodule

3 tipos de mensajes:Peticiones del cliente.Valores retornados.Excepciones con stacktrace.

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 58: Programación en Python con Robots - JUICa 2012

Programando en AndroidEjemplo del protocolo

Para instanciar una Board un cliente remotebot envía mensajeJSON:

[{"target": "board","board": {"device": "/dev/ttyUSB0"},"command": "__init__"

}]

Si el dispositivo no existiera se produciría una excepción en Pythony la respuesta del servidor sería:

{"type": "exception","name": "SerialException(u\"could not open port /dev/

ttyUSB0...\"","stacktrace": "Traceback (most recent call last):..."

}

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 59: Programación en Python con Robots - JUICa 2012

Para leer el sensor de distancia “ping” se usa el mensaje:[{"target":"robot","board":{"device":"/dev/ttyUSB0"},"id":1,"command":"ping","args":[]}]

El resultado tiene la forma:{"type": "returnvalues","values": [100]}

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 60: Programación en Python con Robots - JUICa 2012

¡Gracias a la UNCa y a la AESI por lainvitación!

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots

Page 61: Programación en Python con Robots - JUICa 2012

Página proyecto: http://robots.linti.unlp.edu.ar

Repositorio duinobot: http://lihuen.linti.unlp.edu.ar

Blog de software libre: http://sl.linti.unlp.edu.ar

Código remotebot: https://github.com/fernandolopez

Contacto: soportelihuen [AT] linti.unlp.edu.ar

Twitter: @SL_Informatica

Facebook: Lihuen GNU/Linux

Grupo de Desarrollo Lihuen - Fernando López - Sofía MartinProgramación en Python con Robots