Sesión 02 ~ ¡Soy uno de los pocos robots que expresa emociones!

Sesión 02 ~ ¡Soy uno de los pocos robots que expresa emociones!

Qué aprenderemos hoy

En la sesión de hoy aprenderemos a decirle a Aisoy cómo expresar su estado anímico: contento, triste, etc. Utilizaremos comunicación verbal que ya conocemos y también comunicación no verbal utilizando su cara y los colores de su corazón.

Bloque de Emociones

Lo primero es conectarse desde el entorno Scratchx a Aisoy como aprendimos en la sesión anterior. Una vez hecho eso, ya estamos listos para la sesión de hoy.

Pon el bloque de comienzo de programa. El de la banderita verde.

Hemos construido un bloque en Scratch con X emociones preconfiguradas:

Las emociones son:

  • Normal (Normal)
  • Tristeza (Sad)
  • Alegría (Happy)
  • Indiferencia (Indifferent)
  • Sorpresa (Surprise)
  • Disgusto (Disgust)
  • Alivio (Relief)
  • Reproche (Reproach)
  • Orgulloso (Pride)
  • Admiración (Admiration)
  • Miedo (Scared)
  • Dormido (Sleep)
  • Sin emoción (NoEmotion)

 

Vamos a comenzar con tristeza. Añade este bloque al de inicio de programa y haz clic en la banderita verde para ejecutarlo.

Habrás observado cómo Aisoy ha movido sus párpados y cejas, su boca y ha cambiado el color de su corazón.

Prueba ahora con otras opciones y repite hasta que te familiarices con ellas.

Hagámoslo un poco más chulo

Ya sabemos cómo utilizar el bloque say y el bloque emotions. Ahora vamos a combinarlos.

Selecciona en el bloque emotions la opción Surprise.

Añade el bloque say e introduce el texto: “estoy muy sorprendido”

Hagamos esto otra vez.

Añade un bloque emotions y selecciona la opción happy.

Añade otro bloque say e introduce el texto: “estoy muy contento”

Haz clic en la bandera verde y observa el comportamiento de tu Aisoy.

Truco: si haces clic en el botón derecho de un bloque puedes duplicarlo. Si haces clic en el botón derecho de varios bloques, los duplicas todos. ¡Practica!

Repite el programa utilizando diferentes combinaciones de emociones.

Ejercicio 1: Realiza un programa donde Aisoy te salude y te comunique cómo se encuentra.

Ejercicio 2: Cambia el orden. Realiza el mismo programa pero primero haz que te diga la emoción y luego que la muestre. Observa el efecto que produce. Recuérdalo para futuros programas. ¡El orden de ejecución importa!

Truco: para eliminar un bloque o varios, tienes que seleccionarlos y llevarlos a la columna central (donde está la paleta de bloques).

Nos vemos en la próxima sesión: aprenderás a gestionar las caricias y algunas instrucciones de control que harán más divertidas tus creaciones.

Sesión 01 ~ Hola, me llamo Aisoy

Sesión 01 ~ Hola, me llamo Aisoy

Qué aprenderemos hoy

En la sesión de hoy aprenderemos a conectarnos al entorno de programación Scratchx y a programar un diálogo con Aisoy.

Conectarnos con ScratchX

El entorno de programación ScratchX es un entorno visual que se ejecuta en un navegador Chrome. 

El primer paso es abrir el navegador Chrome, cargar el entorno y la extensión Aisoy Scratch para poder programar al robot Aisoy. Para descargarla se requiere acceso a Internet. La última versión se encuentra en la  siguiente dirección:

https://aisoy.es/pages/scratchx

El siguiente paso es establecer la comunicación entre este entorno y nuestro robot. Ambos deben estar en la misma red para que pueda establecerse dicha comunicación.

  • Opción 1. Ya tienes configurada tu Wi-Fi en tu Aisoy.

¡Genial! Solo tienes que asegurarte que tu Aisoy y tu ordenador están conectados a ella. Para saber si tu Aisoy está en una red puedes verlo en la app AisoyLab.

  • Opción 2. No tienes configurada tu Wi-Fi.

¡No te preocupes! Solo tienes que conectar tu ordenador a la red  Wi-Fi que Aisoy crea para estos casos. Busca una red que se llame Aisoyxxxx. La contraseña es *emotions*. Y eso es todo.

Ahora que ya tenemos a nuestro robot y nuestro ordenador en la misma red, hay que autorizar esa comunicación. Normal, estás accediendo a la posibilidad de programar el comportamiento del robot. Eso requiere una autorización explícita.

No te preocupes, es muy fácil. Abre una nueva pestaña del navegador y teclea lo siguiente:

https://aisoy1.local:9090

Le estás diciendo al robot que no se preocupe, que vas a utilizar esa canal de comunicación con él y que lo acepte. Te saldrá un mensaje de seguridad como indicando que la conexión no es privada. Haz click en *Opciones Avanzadas* y luego en *Accede a…* Si todo ha ido bien, te saldrá este escueto texto: 

Can “Upgrade” only to “WebSocket”

Lo sabemos. No es muy atractivo, pero Google es así. Y lo más importante es que ya hemos acabado con los preparativos. ¡Vamos a programar a nuestro Aisoy!

Mi primer programa

¡Qué nervios! Vamos allá.

Recordad que en el paso anterior nos habíamos,quedado en autorizar la comunicación. Vale, ya la tenemos. Ahora hay que establecerla. Veis que en la sección central hay un icono amarillo. Eso significa que aún no está establecida la conexión.

Para establecerla usamos el siguiente comando:

Para ejecutarlo haz doble click en el bloque.

Si todo va bien os saldrá una ventana emergente avisando que la conexión se ha establecido. Haced click en Aceptar y veréis que el icono ha cambiado a color verde. Ahora sí estamos listos para  dar instrucciones a nuestro Aisoy.

El objetivo de hoy es programar mi primer diálogo con Aisoy. Para ello, primero aprenderemos a decirle a Aisoy qué queremos que diga. Esto se hace con el comando

Primero ponemos el bloque de inicio de programa. A continuación añadimos el bloque say y tecleamos Hola, me llamo Aisoy en la cajita de texto que pone “text to say”. Y hacemos clic en la bandera verde.

Enhorabuena. Acabas de crear el primer programa para tu Aisoy. ¡Te espero en la siguiente sesión!

Curso de programación básico Aisoy Scratch

Curso de programación básico Aisoy Scratch

¿Qué es Aisoy Scratch?

Aisoy Scratch es un lenguaje de programación por bloques enfocado a programar proyectos con el robot Aisoy, aunque su verdadera función es mejorar la forma en la que pensamos a la hora de programar, resolver problemas y estimular la creatividad.

Con este curso aprenderás a usar Aisoy Scratch, será emocionante pero lo realmente bueno viene después. Cuando aprendas cómo pensar a la hora de programar ¡podrás realizar alucinantes proyectos con tecnologías robóticas, lenguaje natural y visión artificial! Intenta poner en práctica tus propias ideas y proyectos. No te preocupes, no necesitas conocimientos previos.

Aisoy Scratch está recomendado a partir de 8 años. Para aprender a programar con Aisoy Scratch no debes tener miedo a probar cosas y equivocarte. ¡Al contrario! experimenta y equivócate, aprende, ¡disfruta del camino!

Cada semana publicaremos un nuevo capítulo de este curso. Verás cómo rápidamente alcanzas tus objetivos. Con cada capítulo aprenderás cosas nuevas para experimentar dándote nuevos recursos que podrás utilizar en tus proyectos. Tu imaginación es el límite.

Apúntate a nuestra newsletter y te recordaremos los nuevos contenidos que iremos publicando para que le saques todo el partido a tu robot social Aisoy.

¿Por qué programar?

Con Aisoy Scratch, los niños pueden ser creadores de tecnología en lugar de consumidores, empoderándolos con conocimiento y herramienas para construir, crear y desarrollar sus propias ideas ayudándoles a su vez a desarrollar competencias clave como la resolución de problemas, el pensamiento computacional y la creatividad.

Cuando los niños desarrollen las actividades propuestas en este curso estarán aprendiendo a pensar creativamente poniendo en práctica sus propias ideas, sus propias soluciones y validar si funcionan o no, analizarlas e iterar este proceso. Al fin y al cabo, equivocarse forma parte del aprendizaje. Y si es de forma divertida, mucho mejor.

Proyecto de Programación – Campos Semánticos

Proyecto de Programación – Campos Semánticos

En esta actividad, vamos a aprender a programar, un juego muy sencillo en el que relacionar campos semánticos de algunas palabras.

¿Qué harás?

Aisoy, dirá un campo semántico y a continuación varias opciones de palabras con las que relacionarlo. El usuario tendrá que responder la opción correcta. Al final del juego este sumará las respuestas acertadas por el niño y comentará los resultados.

¿Qué aprenderás?

  1. Mientras programas con Python, vas a aprender a:
    • Utilizar diversas herramientas de python con Aisoy
    • Crear diálogos coherentes con el juego haciendo dinámica cada partida
    • Cómo estructurar el código de una Botapp sencilla
    • Uso de diccionarios para almacenar preguntas y respuestas correctas

Desarrollo

En este documento te damos los pasos para programar cada una de las partes necesarias para que Aisoy pueda ejecutar esta Botapp, y pasemos un rato agradable jugando con el.

1.- Crear el proyecto

Para crear vuestro primer proyecto os adjuntamos guía muy completa, sobre los métodos de crear un proyecto, para visualizarla click aquí.

2.- ¿Qué librerías vamos a usar?

 

 

Estos van a ser los módulos necesarios para desarrollar esta pequeña aplicación, conforme vayamos leyendo la documentación, veremos para qué van ser usados. Aun así esbozaremos lo que hace cada uno de estos import:

  • random: Se utilizará para generar números aleatorios.
  • time: Se usa para generar tiempos de espera en la ejecución.
  • threading: Se utiliza para ejecutar tareas de manera simultánea de una misma aplicación.
  • AirosHelper y Aisoy: Son librerías de Aisoy para las usar diferentes utilidades del robot.

 

3.- Rutina inicial: Movements

Cuando iniciamos una botapp, el robot inicia el juego con una serie de movimientos, sea de párpados, cejas o cabeza, que perduran durante toda la partida. Esto se realiza a través de la clase Movements, la cual a través de su método run.

Primero, hay que crear una clase init, para iniciar el hilo de ejecución de los movimientos e inicializar los parámetros.

 

Además, necesitamos un método run que será el que contemple toda la funcionalidad de clase y que se ejecutará en el Thread.

 

 

El método run ejecutará de forma aleatoria alternando movimientos de cabeza, ojos y párpados constantemente hasta que finalice el juego.

4.- Funcionalidades del robot Aisoy.

Crearemos la clase Botapp con un objeto estático Aisoy, para poder trabajar con nuestro robot. En esta clase todos sus métodos son estáticos, por ello, no es necesaria la instanciación de esta para su uso.

 

Para repetir el juego

Dentro de la clase Botapp, utilizamos este sencillo código, para preguntarle al niño si quiere seguir jugando o no. Este devuelve un 1 si quiere seguir jugando y un -1 si no quiere.

 

Comprobar los resultados obtenidos

En este método estático de la clase Botapp, comprobaremos el porcentaje de respuestas acertadas por el niño y según este porcentaje, se le dirá que necesita o no mejorar dentro de este juego.

 

Resultado incorrecto: oops

Tendremos que realizar un método que de feedback sobre un resultado incorrecto por parte del jugador, que le indique que ha fallado la pregunta. Además, cambiaremos la emoción del Aisoy, mostrándose triste por el fallo.

 

Dar la enhorabuena por un resultado acertado

Realizamos un método para dar la enhorabuena por acertar una de las cuestiones realizadas por Aisoy. Éste lo manifestará tanto por el habla  como por la emoción que expresa.

Presentación inicial del juego

Al iniciar la Botapp, Aisoy hará una breve presentación propia, indicando quién es él y su intención de querer jugar. Asimismo, para que Aisoy sepa que queremos jugar con él, tendremos que tocarle la cabeza, por lo que tenemos que utilizar which_touched() para recoger los datos del sensor de la cabeza.

 

Explicación del juego

 Este método estático explicará el juego si así lo desea el niño, según toque la parte izquierda o derecha de su cuerpo.

Despedida tras finalizar el juego

Cuando el juego finaliza, y no se quiere repetir, entonces Aisoy realiza una breve despedida, dando sus impresiones sobre el juego y cambiando sus emociones.

 

Recoger la respuesta del usuario

Esta función obtiene primero un campo semántico aleatorio, junto a las opciones posibles y a la opción correcta (llamando a get_options()), después llama a tts.say() para que Aisoy diga la pregunta, a continuación se llama a say_options() donde Aisoy dice las opciones posibles y devuelve la respuesta del usuario, que se asigna a respuesta. Entonces compara la respuesta correcta con la dada por el usuario. Por último devuelve si se ha acertado o no (CORRECT o INCORRECT). En caso de acertar elimina el campo semántico acertado del diccionario temporal.

 

Decir las posibles opciones de resultado

Este método estático, dirá las posibles opciones de resultado. Tras ello, para poder recoger la respuesta obtenida tras decir las opciones, necesitamos un método que llame a las funcionalidades del micrófono y recoja en una variable la respuesta, lo cual se hace empleando ASR y llamando a la función listen. La función devuelve la respuesta.

5.- Manejar las respuestas del usuario

Botapp_Struct es una clase que contiene métodos necesarios para establecer la estructura de las preguntas, más inclinados a la funcionalidad del juego que a la representación.

Tiene tres variables estáticas, que hacen referencia a los números que representan en el juego una respuesta correcta y una incorrecta, y al diccionario de campos semánticos que vamos a utilizar.

Además, también tiene varios métodos estáticos, que como hemos dicho atañen a la funcionalidad.

 

Obtener un campo aleatorio

Primero necesitamos elegir aleatoriamente un campo semántico del diccionario, por lo que primero tenemos que crear en el inicializador de la clase (_init_) una instancia del diccionario para esta partida. Desde esta instancia podremos eliminar y obtener campos aleatoriamente, junto a sus respectivas palabras. El método get_options() es el que se ocupa de la elección aleatoria, devolviendo el campo semántico, la respuesta correcta y las opciones posibles.

 

Eliminar campo del diccionario

Este método elimina un campo pasado por parámetro del diccionario de campos auxiliar de la partida, para que cuando se responda correctamente una pregunta no vuelva a salir después el mismo campo.

6.- Secuencia normal del Botapp

La clase Game, tiene como objetivo establecer la secuencia del juego, llamando a los métodos de las demás clases.

Tenemos que inicializar algunas variables globales de clase, que representan la opción de salir, repetir el juego y continuar. Además, se define la explicación y el título del juego.

 

 

Inicializador de la clase

Cuando se crea una instancia de esta clase, se llama automáticamente a este método, el cual inicializa algunas variables que se usarán en el transcurso del juego, como playing que indica que el juego se está ejecutando, por lo que cuando se quiere finalizar, pasa a valer False. Las demás son el número de cuestiones total en el juego, las preguntas acertadas hasta ahora, la opción de repetir el juego

Secuencia normal del juego

Es un trozo de código que a priori puede parecer más complicado que el resto de la Botapp, pero realmente tiene un procedimiento muy sencillo.

Primero presenta y explica en qué va consistir el juego, posteriormente inicializa siempre las respuestas acertadas a 0, y una vez hecho eso entra en un bucle for, donde por cada pregunta produce una emoción normal en Aisoy, llama a ask_input() pasando al estructura como parámetro y recoge el resultado del usuario. Si el resultado es CORRECT le da la enhorabuena y le suma un punto a las respuestas correctas, y si es INCORRECT, simplemente avisa de que la respuesta ha sido errónea llamando a oops(). Este bucle lo hace un cierto número de veces establecidas en el constructor de la clase. Por último llama a results() para comentar los resultados obtenidos.

Una vez terminado el juego pregunta si quieres repetir llamando a want_to_repeat(), si es así, vuelve a entrar en el bucle, sino, llama a bye_bye() y termina el main_loop().

7.- ¿Dónde ejecutamos todo el código que hemos escrito?

Lógicamente, debe existir un método main, el Thread principal, desde el cual crearemos una instancia del juego y lanzaremos main_loop() para que lleve a cabo la ejecución.

Desde este main se crea también el Thread de Movements y se inicia. Al acabar el juego (main_loop) entonces se debe unir este Thread al principal para que ambos terminen.