5. | Métodos de Sensorización
5.10 Sensor táctil
Introducción
Robobo puede detectar gestos en la pantalla (fling y tap) gracias al sensor táctil de la pantalla del Smartphone. En el simulador se realizan sobre la ventana emergente inferior derecha (ver documentación del simulador).
Los flings son deslizamientos del dedo sobre la pantalla en una dirección determinada.
Los taps son pequeños golpes que no tienen una dirección definida.
Elementos de programación
5.10.1 Clase Tap
Representa un tap detectado en la pantalla del smartphone.
Atributos:
- x (int): La coordenada X del tap. Toma valores de entre 0 y 100.
- y (int): La coordenada Y del tap. Toma valores de entre 0 y 100.
- zone (string): Devuelve el área de la pantalla del smartphone, que puede ser uno de los siguientes valores: ‘forehead’, ‘eye’, ‘right’, ‘left’, ‘mouth’ o ‘chin’. Estos valores están representados en la imagen siguiente:
5.10.2 Método readFlingAngle
| readFlingAngle() |
|
Lee el último ángulo de fling detectado. Este ángulo está formado por una línea horizontal y el primer y último punto donde el dedo tocó la pantalla.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_angle = rob.readFlingAngle()
print(fling_angle)
rob.wait(1)5.10.3 Método readFlingDistance
| readFlingDistance() |
|
Lee la longitud del último fling detectado por Robobo.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_distance = rob.readFlingDistance()
print(fling_distance)
rob.wait(1)5.10.4 Método readFlingTime
| readFlingTime() |
|
Lee la duración del último fling detectado por Robobo.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_time = rob.readFlingTime()
print(fling_time)
rob.wait(1)5.10.5 Método resetFlingSensor()
| resetFlingSensor() |
| Reinicia el estado del sensor Fling. |
Ejemplo de Uso
En el siguiente programa, cuando el valor del ángulo del último fling supera los 50 grados, se reinicia el valor del sensor de flings.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_angle = rob.readFlingAngle()
print(fling_angle)
if fling_angle > 50:
rob.resetFlingSensor()
print("Reset Fling!")
rob.wait(1)5.10.6 Método whenAFlingIsDetected
| whenAFlingIsDetected(callback) |
|
Establece la función callback que se llama cuando se detecta un nuevo fling.
Parámetros: |
Ejemplo de Uso
El siguiente programa hace que Robobo diga el nivel de batería de la base al detectar un fling en la pantalla.
from robobopy.Robobo import Robobo
def say_batery_level():
rob.sayText('La base tiene una bateria de' + str(rob.readBatteryLevel('base')))
rob = Robobo('localhost')
rob.connect()
rob.whenAFlingIsDetected(say_batery_level)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)5.10.7 Método readTapSensor
| readTapSensor() |
|
Lee los datos del último tap detectado.
Devuelve: |
5.10.8 Método resetTapSensor
| resetTapSensor() |
| Reinicia el estado del sensor tap. |
Ejemplo de Uso
El siguiente programa hace que Robobo diga «no tengo bigote» al pulsar brevemente sobre la zona de la pantalla entre la boca y el ojo. Es necesario reiniciar el valor del sensor tap en cada iteración del bucle porque este sensor mantiene el último valor medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
if rob.readTapSensor().x > 30 and rob.readTapSensor().x < 70:
if rob.readTapSensor().y > 50 and rob.readTapSensor().y < 60:
rob.sayText('No tengo bigote')
rob.resetTapSensor()
rob.wait(1)5.10.9 Método whenATapIsDetected
| whenATapIsDetected(callback) |
|
Establece la función callback que se llama cuando se detecta un nuevo tap.
Parámetros: |
Ejemplo de Uso
A continuación, se muestra un programa que hace que el robot pare todos los motores al realizar un tap sobre la pantalla.
from robobopy.Robobo import Robobo
def fun():
rob.stopMotors()
rob = Robobo('localhost')
rob.connect()
rob.moveWheels(30,30)
rob.whenATapIsDetected(fun)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)5. | Métodos de sensorización
5.10 Sensor táctil
Introducción
Robobo puede detectar gestos en la pantalla (fling y tap) gracias al sensor táctil de la pantalla del Smartphone. En el simulador se realizan sobre la ventana emergente inferior derecha (ver documentación del simulador).
Los flings son deslizamientos del dedo sobre la pantalla en una dirección determinada. Los taps son pequeños golpes que no tienen una dirección definida.
Elementos de programación
5.10.1 Clase Tap
Representa un tap detectado en la pantalla del smartphone.
Atributos:
• x (int): La coordenada X del tap. Toma valores de entre 0 y 100.
• y (int): La coordenada Y del tap. Toma valores de entre 0 y 100.
• zone (string): Devuelve el área de la pantalla del smartphone, que puede ser uno de los siguientes valores: ‘forehead’, ‘eye’, ‘right’, ‘left’, ‘mouth’ o ‘chin’. Estos valores están representados en la imagen siguiente:
5.10.2 Método readFlingAngle
| readFlingAngle() |
|
Lee el último ángulo de fling detectado. Este ángulo está formado por una línea horizontal y el primer y último punto donde el dedo tocó la pantalla.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_angle = rob.readFlingAngle()
print(fling_angle)
rob.wait(1)5.10.3 Método readFlingDistance
| readFlingDistance() |
|
Lee la longitud del último fling detectado por Robobo.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_distance = rob.readFlingDistance()
print(fling_distance)
rob.wait(1)5.10.4 Método readFlingTime
| readFlingTime() |
|
Lee la duración del último fling detectado por Robobo.
Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo muestre de forma continuada el ángulo del último fling medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_time = rob.readFlingTime()
print(fling_time)
rob.wait(1)5.10.5 Método resetFlingSensor()
| resetFlingSensor() |
| Reinicia el estado del sensor Fling. |
Ejemplo de Uso
En el siguiente programa, cuando el valor del ángulo del último fling supera los 50 grados, se reinicia el valor del sensor de flings.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
fling_angle = rob.readFlingAngle()
print(fling_angle)
if fling_angle > 50:
rob.resetFlingSensor()
print("Reset Fling!")
rob.wait(1)5.10.6 Método whenAFlingIsDetected
| whenAFlingIsDetected(callback) |
|
Establece la función callback que se llama cuando se detecta un nuevo fling.
Parámetros: |
Ejemplo de Uso
El siguiente programa hace que Robobo diga el nivel de batería de la base al detectar un fling en la pantalla.
from robobopy.Robobo import Robobo
def say_batery_level():
rob.sayText('La base tiene una bateria de' + str(rob.readBatteryLevel('base')))
rob = Robobo('localhost')
rob.connect()
rob.whenAFlingIsDetected(say_batery_level)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)5.10.7 Método readTapSensor
| readTapSensor() |
|
Lee los datos del último tap detectado.
Devuelve: |
5.10.8 Método resetTapSensor
| resetTapSensor() |
| Reinicia el estado del sensor tap. |
Ejemplo de Uso
El siguiente programa hace que Robobo diga «no tengo bigote» al pulsar brevemente sobre la zona de la pantalla entre la boca y el ojo. Es necesario reiniciar el valor del sensor tap en cada iteración del
bucle porque este sensor mantiene el último valor medido.
from robobopy.Robobo import Robobo
rob = Robobo('localhost')
rob.connect()
while True:
if rob.readTapSensor().x > 30 and rob.readTapSensor().x < 70:
if rob.readTapSensor().y > 50 and rob.readTapSensor().y < 60:
rob.sayText('No tengo bigote')
rob.resetTapSensor()
rob.wait(1)5.10.9 Método whenATapIsDetected
| whenATapIsDetected(callback) |
|
Establece la función callback que se llama cuando se detecta un nuevo tap.
Parámetros: |
Ejemplo de Uso
A continuación, se muestra un programa que hace que el robot pare todos los motores al realizar un tap sobre la pantalla.
from robobopy.Robobo import Robobo
def fun():
rob.stopMotors()
rob = Robobo('localhost')
rob.connect()
rob.moveWheels(30,30)
rob.whenATapIsDetected(fun)
# el programa se mantiene en ejecución continua
while True:
rob.wait(0.1)