No description has been provided for this image No description has been provided for this image

Robobo: Audio, LEDs y Emociones

Contenidos

  • Introducción
  • Audio
    • playSound(sound, wait=True)
    • sayText (speech, wait=True)
    • playNote (note, duration, wait=True)
  • Luces LED
    • setLedColorTo(led,color)
  • Emociones
    • setEmotionTo(emotion)
  • Ejercicios

Introducción

Los métodos que veremos en este cuaderno están relacionados con las capacidades de Robobo para realizar una interacción natural con el usuario. Esto significa que se basa en sonidos e imágenes, como hacemos los humanos.

En concreto, vamos a ver métodos que permiten que Robobo emita audio, que encienda las luces que tiene en su cuerpo y que muestre emociones en la pantalla del smartphone.

Audio

Robobo tiene la capacidad de emitir 3 tipos de audio a través del altavoz del smartphone: Sonidos, Habla y Notas Musicales.

playSound(sound, wait=True)

Robobo posee un registro de sonidos predefinidos que son de utilidad para que muestre expresividad y "estado de ánimo", algo básico en la interacción natural de los robots.

Función: Utiliza los altavoces del smartphone para reproducir un sonido.

Parámetros:

  • sound (Sounds): El sonido que se reproduce.
  • wait (boolean): Indica si este método se ejecuta en modo bloqueante o no (True: modo bloqueante, False: modo no bloqueante).

Entre los sonidos disponibles están:

  • PURR: Ronroneo.
  • MOAN: Queja.
  • ANGRY: Enfado.
  • APPROVE: Aprobación.
  • DISAPPROVE: Desaprobación.
  • DISCOMFORT: Incomodidad.
  • DOUBTFUL: Duda.
  • LAUGH: Risa.
  • LIKES: Gustar.
  • MUMBLE: Mascullar.
  • OUCH: Ay.
  • THINK: Pensar.
  • VARIOUS: Varios.

Te recomendamos probar diferentes sonidos para comprender que se podrían aplicar a diferentes situaciones en función del estado de ánimo que se quiera mostrar. Para ello, abrimos RoboboSim y cargamos un mundo cualquier.

A continuación, cargamos las librerías necesarias, nos conectamos al robot y probamos un sonido:

In [ ]:
from robobopy.Robobo import Robobo
from robobopy.utils.Sounds import Sounds
rob = Robobo("localhost")
rob.connect()


opcion=input("¿Quiere un sonido (alegre ) o un sonido (triste)?")

if opcion=="alegre":
    rob.playSound(Sounds.LIKES)
else:
    rob.playSound(Sounds.DISCOMFORT)

sayText (speech, wait=True)

El siguiente comando es especialmente interesante en la interacción natural, ya que permite que Robobo pronuncie cualquier texto escrito, utilizando para ello las capacidades de generación de habla de los smartphone actuales.

Función: Utiliza los altavoces del smartphone para reproducir un texto

Parámetros:

  • speech (string): Es el texto que Robobo reproducirá a través del smarthphone.
  • wait (boolean): Indica si este método se ejecuta en modo bloqueante o no (True: modo bloqueante, False: modo no bloqueante).

Prueba ahora este programa que lee dos frases con una pausa de 1 segundo entre ellas:

In [ ]:
rob.sayText('Hola, soy Robobo')
rob.wait(1)
rob.sayText('¿Qué tal si le das un poco al cerebro y me programas para hacer algo útil?')

Si deseas cambiar el estilo de la voz que habla en RoboboSim puedes hacerlo desde el menú principal, entrando en Opciones y luego en Voz de generación de habla

Ojo a la hora de usar este comando en modo no bloqueante, ya que, si por ejemplo pones dos líneas sayText() entre ellas y la primera tarda tanto al punto que dura más que el wait, se podría solapar el texto que reproduce Robobo con el de la segunda línea.

playNote (note, duration, wait=True)

Función: Hace que Robobo toque una nota musical.

  • note (int): Nota a reproducir siguiendo la notación anglosajona. Se permiten 133 posibles notas. El siguiente esquema muestra la equivalencia en el rango de 48 a 59:
No description has been provided for this image
  • duration (float): Duración de la nota en segundos. Toma valores positivos.
  • wait (boolean): Indica si este método se ejecuta en modo bloqueante o no (True: modo bloqueante, False: modo no bloqueante).

Partiendo del ejemplo anterior, ejecutad este código:

El programa os pedirá una nota entre 48 al 59. Una vez seleccionada, tocará esa nota durante 2 segundos.

In [ ]:
nota=int(input("¿Que nota quieres que toque Robobo?"))

if nota>=48 and nota<=59:
    rob.playNote(nota,2)
else:
    print("Nota no válida")

Luces LED

Robobo tiene un conjunto de luces LED en la base que se pueden iluminar de distintos colores para mostrar información visual simple. La siguiente imagen muestra un esquema de su posición en el cuerpo del robot.

No description has been provided for this image

El método que permite encender los LED en diferentes colores es el siguiente:

setLedColorTo(led,color)

Función: Enciende o apaga el LED que recibe como parámetro.

Parámetros:

  • led (LED): Indica el led o leds sobre el que se aplicará la acción. Este parámetro es de tipo enumerado LED.
  • color (Color): Color que se aplicará al led seleccionado. Este parámetro es de tipo enumerado Color.

Enumerado LED

  • BackR: Trasero derecho medio.
  • FrontR: Frontal derecho.
  • FrontRR: Frontal derecho extremo.
  • FrontC: Frontal central.
  • FrontL: Frontal izquierdo medio.
  • FrontLL: Frontal izquierdo extremo.
  • BackL: Trasero izquierdo.
  • All: Todos.

Enumerado Color

  • OFF: Apagado.
  • WHITE: Blanco.
  • RED: Rojo.
  • BLUE: Azul.
  • CYAN: Cyan.
  • MAGENTA: Magenta.
  • YELLOW: Amarillo.
  • GREEN: Verde.
  • ORANGE: Naranja.

Para utilizar los leds, debemos importar otras dos librerías:

In [ ]:
from robobopy.utils.LED import LED
from robobopy.utils.Color import Color

Partiendo desde el programa del apartado anterior, se van a encender los 5 LEDs delanteros,cada uno con un color distinto:

In [ ]:
rob.setLedColorTo(LED.FrontC, Color.BLUE)
rob.setLedColorTo(LED.FrontL, Color.WHITE)
rob.setLedColorTo(LED.FrontLL, Color.RED)
rob.setLedColorTo(LED.FrontR, Color.CYAN)
rob.setLedColorTo(LED.FrontRR, Color.MAGENTA)

A continuación, se encenderán los LEDs traseros:

In [ ]:
rob.setLedColorTo(LED.BackL, Color.YELLOW)
rob.setLedColorTo(LED.BackR, Color.GREEN)

Y por último, se van a apagar todos:

In [ ]:
rob.setLedColorTo(LED.All, Color.OFF)

Emociones

Robobo puede mostrar un conjunto de expresiones predeterminadas utilizando para ello la pantalla del Smartphone. También se pueden ver en RoboboSim, si pinchas en el botón superior derecho que tienes en cualquier mundo, como se señala en esta imagen. La expresión de Robobo cambia en la parte inferior izquierda de la pantalla.

No description has been provided for this image

setEmotionTo(emotion)

Función: Cambia la expresión de la cara de Robobo con el objetivo de indicar una emoción determinada.

Parámetros:

  • emotion (Emotions): Emoción que se muestra en la cara (ver Enumerado Emotions).

Enumerado Emotions

Hay un total de 9 emociones:

  • HAPPY: Feliz.
  • LAUGHING: Riendo.
  • SURPRISED: Sorprendido.
  • SAD: Triste.
  • ANGRY: Enfadado.
  • NORMAL: Normal.
  • SLEEPING: Durmiendo.
  • TIRED: Cansado.
  • AFRAID: Asustado.
No description has been provided for this image

Prueba ahora este programa que hace Robobo hable, emita sonidos y muestre expresiones de una forma natural y realista:

In [ ]:
from robobopy.utils.Emotions import Emotions 

rob.connect()

rob.sayText('Hola, soy Robobo')
rob.playSound(Sounds.LAUGH)
rob.wait(1)
rob.sayText('Mira, puedo estar triste')
rob.setEmotionTo(Emotions.SAD) 
rob.wait(1)
rob.sayText('Y soprendido')
rob.setEmotionTo(Emotions.SURPRISED) 

rob.disconnect()

Ejercicios

EJERCICIO 1

En un mundo cualquiera, crea un algoritmo que haga que cada segundo encienda uno de los 5 leds delanteros, y que una vez los encienda todos, los apague.

In [ ]:
#INSERTAR CÓDIGO AQUÍ

EJERCICIO 2

En el mundo FOUR WALLS ,escribe un programa que haga que Robobo:

  • Gire hacia la izquierda o hacia la derecha en función de lo que le pida al usuario durante 5 segundos.
  • Si la respuesta no tiene que ver con ninguno de los giros, Robob dirá "No entiendo lo que me acabas de decir" y el programa finalizará.
  • El robot tiene que decir "GIRO A LA IZQUIERDA" o "GIRO A LA DERECHA", y después encienda el led BACK-L y FRONT-LL o el BACK-R y FRONT-RR dependiendo del giro.
  • Una vez deje de girar, debe apagar los leds correspondientes.
In [ ]:
#INSERTAR CÓDIGO AQUÍ

EJERCICIO 3

En el mundo TEST PLANE, hay que ejecutar un programa en el que Robobo:

  • Emita dos notas en tono ascendente (por ejemplo, primero 56 y luego 57) de un cuarto de segundo cada una al poco de conectarse.

  • Durante 5 segundos, tiene que avanzar a una velocidad de 80. En ese momento, usad el método SetEmotionTo() para que ponga cara de sorpresa y emita un sonido de agrado.

  • Una vez termine de avanzar, el robot dará vuelta sobre sí mismo a una velocidad de 50 durante 3 segundos.

  • Al poco de terminar, Robobo tiene que poner una cara de cansancio y decir "ME MAREO".

  • Antes de desconectarse, tiene que emitir dos notas en tono descendente (por ejemplo, primero 55 y luego 54) de un cuarto segundo cada una.

In [ ]:
#INSERTAR CÓDIGO AQUÍ