Detección de códigos QR

Introducción

 

Robobo puede detectar y leer códigos QR mediante la cámara y un algoritmo de procesado.

Elementos de programación

1. Clase QRCode

Este objeto representa un código QR detectado por el robot Robobo, definido por tres puntos clave. Proporciona información tanto de su localización en la imagen como de su proximidad relativa al robot. Este tipo de objeto se utiliza habitualmente en tareas de visión artificial para identificar, localizar y seguir códigos QR en el entorno.

El objeto cuenta con los siguientes atributos:

        • x (float): Coordenada X del centro del código QR, medida en píxeles desde el borde izquierdo de la pantalla. Siempre tiene un valor positivo.
        • y (float): Coordenada Y del centro del código QR, medida en píxeles desde el borde superior de la pantalla. Siempre tiene un valor positivo.
        • distance (int): Valor cualitativo que representa la proximidad del código QR al robot. Aumenta cuando Robobo se encuentra cerca del código y disminuye cuando está lejos.
        • p1 (dict): Diccionario con las claves ‘x’ e ‘y’ que indica las coordenadas del primer punto de interés del código QR. Estas coordenadas se miden en píxeles desde los bordes izquierdo y superior de la pantalla. Los valores son siempre positivos.
        • p2 (dict): Diccionario con las claves ‘x’ e ‘y’ que indica las coordenadas del segundo punto de interés del código QR. Estas coordenadas se miden en píxeles desde los bordes izquierdo y superior de la pantalla. Los valores son siempre positivos.
        • p3 (dict): Diccionario con las claves ‘x’ e ‘y’ que indica las coordenadas del tercer punto de interés del código QR. Estas coordenadas se miden en píxeles desde los bordes izquierdo y superior de la pantalla. Los valores son siempre positivos.
        • id (int): Identificador único del código QR detectado.
        • timestamp (int): Marca temporal que indica el momento exacto en que se detectó el código QR.

2. Método startQrTracking

startQrTracking()
Habilita la detección de códigos QR.

La detección de códigos QR está habilitada por defecto.

Este cambio es persistente.

Ejemplo de Uso

El siguiente programa hace que Robobo habilite la detección de códigos QR

from robobopy.Robobo import Robobo

rob = Robobo('localhost')
rob.connect()

rob.startQrTracking()

3. Método stopQrTracking

stopQrTracking()

Deshabilita la detección de códigos QR.

 

La detección de códigos QR está habilitada por defecto.

Este cambio es persistente.

Ejemplo de Uso

El siguiente programa hace que Robobo deshabilite la detección de códigos QR.

from robobopy.Robobo import Robobo

rob = Robobo('localhost')
rob.connect()

rob.stopQrTracking()

4. Método readQR

readQr()
Lee el último código QR detectado por el sistema de visión.

Devuelve:
• El código QR (Qr). Ver Clase Qr.

Ejemplo de Uso

El siguiente programa permite que Robobo gire sobre sí mismo continuamente mientras escanea su entorno en busca de códigos QR. Cuando detecta un código QR (es decir, cuando el atributo distance es mayor que 0), el robot anuncia verbalmente el identificador asociado a dicho código.

from robobopy.Robobo import Robobo

rob = Robobo('localhost')
rob.connect()

rob.moveTiltTo(90,30)
rob.moveWheels(5,-5)

while not (rob.readQR().distance > 0):
    rob.wait(0.1)

rob.stopMotors()
rob.sayText('Veo el QR, pone')
rob.sayText(rob.readQR().id)

5. Método whenAQRCodeIsDetected

whenAQrCodeIsDetected(callback)
Establece la función callback que se llama cuando se detecta un código QR.

Parámetros:
callback (fun): La función callback que será llamada.

Ejemplo de Uso

El siguiente programa hace que Robobo avance en línea recta mientras escanea el entorno en busca de un código QR. Cuando detecta uno (es decir, cuando el atributo distance es mayor que 0), detiene los motores de las ruedas y anuncia verbalmente el identificador del código QR que ha encontrado.

from robobopy.Robobo import Robobo

def fun():
    rob.stopMotors()
    rob.sayText('Codigo')
    rob.sayText(rob.readQR().id)
    rob.sayText('detectado')

rob = Robobo('localhost')
rob.connect()

rob.moveWheels(20,20)
rob.whenAQRCodeIsDetected(fun)

# El programa se mantiene en ejecución continuamente
while True:
    rob.wait(1)

6. Método whenANewQRCodeIsDetected

whenANewQrCodeIsDetected(callback)
Establece la función callback que se llama cuando se detecta un nuevo código QR. Un QR se considera nuevo si es distinto del detectado la última vez.

Parámetros:
callback (fun): La función callback que será llamada.

Ejemplo de Uso

El siguiente programa hace que Robobo diga el código del QR que detecta cada vez que un nuevo QR
distinto es detectado.

from robobopy.Robobo import Robobo

def fun():
    rob.sayText('Un nuevo código QR detectado')
    rob.wait(1)
    rob.sayText('Codigo')
    rob.sayText(rob.readQR().id)
    rob.sayText('detectado')

rob = Robobo('localhost')
rob.connect()

rob.startQrTracking()
rob.moveWheels(20,20)
rob.whenANewQRCodeIsDetected(fun)

# el programa se mantiene en ejecución continuamente
while True:
    rob.wait(0.5)

7. Método whenAQRCodeIsLost

whenAQrCodeIsLost(callback)
Establece la función callback que se llama cuando se pierde un código QR.

Parámetros:
callback (fun): La función callback que será llamada.

Ejemplo de Uso

El siguiente programa hace que Robobo muestre en pantalla el identificador del código QR que detecta. Además, cuando el código QR deja de estar visible, el robot anuncia verbalmente que dicho código ha sido perdido. Para ello, se utiliza el método WhenAQRCodeIsLost, que permite detectar la pérdida del código QR previamente identificado.

from robobopy.Robobo import Robobo

def fun():
    rob.sayText('Se ha perdido el codigo QR')

rob = Robobo('localhost')
rob.connect()

rob.moveWheels(20,20)
rob.whenAQRCodeIsLost(fun)

while True:
    rob.wait(0.1)
    print(rob.readQR().id)
Robobo
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.