5. | Métodos de Sensorización

5.13 Detección de carriles

Introducción

Robobo puede detectar los carriles por los que circula utilizando la cámara del smartphone y un algoritmo de detección. Este algoritmo está explicado con detalle en la página siguiente:

Los carriles básicos están formados por dos líneas rectas, mientras que los carriles pro están formados por dos polinomios de segundo grado.

Este módulo no está implementado en el simulador.

Elementos de programación

5.13.1 Clase LaneBasic

Representa un carril básico detectado por Robobo, formado por dos líneas rectas.
Atributos:

  • coeffs1 (dict): Diccionario con ‘a’ y ‘b’ (ax + b), coeficientes de la línea izquierda.
  • coeffs2 (dict): Diccionario con ‘a’ y ‘b’ (ax + b), coeficientes de la línea derecha.
  • id (int): Número de secuencia de frame. Desde que la cámara se inicial, cada frame tiene un número que lo identifica. El valor es siempre positivo.

5.13.2 Clase LanePro

Representa un carril pro detectado por Robobo, formado por dos polinomios de segundo grado.
Atributos:

  • coeffs1 (dict): Diccionario con ‘a’, ‘b’ y ‘c’ (ax² + bx + c), coeficientes de la línea izquierda.
  • coeffs2 (dict): Diccionario con ‘a’, ‘b’ y ‘c’ (ax² + bx + c), coeficientes de la línea derecha.
  • minv (array): Matriz de transformación para obtener la perspectiva original.
  • id (int): Número de secuencia de frame. Desde que la cámara se inicial, cada frame tiene un número que lo identifica. El valor es siempre positivo.

5.13.3 Método startLaneDetection

startLineDetection()
Habilita la detección de carriles.

La detección de carriles está deshabilitada por defecto.

Este cambio es persistente.

5.13.4 Método stopLaneDetection

stopLineDetection()
Deshabilita la detección de carriles.

La detección de carriles está deshabilitada por defecto.

Este cambio es persistente.

5.13.5 Método readLaneBasic

readLineBasic()
Lee el último carril detectado.

Devuelve:
• El carril (LaneBasic). Ver Clase LaneBasic.

El siguiente programa hace que Robobo habilite la detección de carriles. Luego, hace que Robobo se mueva en línea recta de forma indefinida a velocidad 20 y vaya mostrando por pantalla los coeficientes ‘a’ y ‘b’ que forman la recta de uno de los carriles básicos detectados.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.moveWheels(20,20)

while True:
    lane_basic = rob.readLaneBasic()
    print(f"El coeficente a del carril es: {lane_basic.coeffs1['a']}")
    print(f"El coeficente b del carril es: {lane_basic.coeffs1['b']}")
    rob.wait(1)

5.13.6 Método readLanePro

readLinePro()
Lee el último carril pro detectado.

Devuelve:
• El carril pro (LanePro). Ver Clase LanePro.

Ejemplo de Uso

El siguiente programa hace que Robobo habilite la detección de carriles. Luego, hace que se mueva en línea recta de forma indefinida a velocidad 20 y vaya mostrando por pantalla los coeficientes ‘a’, ‘b’ y ‘c’ que forman el polinomio de grado 2 de uno de los carriles detectados.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.moveWheels(20,20)

while True:
    lane_pro = rob.readLanePro()
    print(f"El coeficente a del carril es: {lane_pro.coeffs1['a']}")
    print(f"El coeficente b del carril es: {lane_pro.coeffs1['b']}")
    print(f"El coeficente c del carril es: {lane_pro.coeffs1['c']}")
    rob.wait(1)​

5.13.7 Método whenALaneBasicDetected

whenALaneBasicDetected(callback)
Establece la función callback que se llama cuando se detecta un carril básico.

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

Ejemplo de Uso

En el siguiente programa, cuando Robobo detecta un carril simple se llama a una función que leerá los coeficientes ‘a’ y ‘b’ que forman la recta de una de las líneas detectadas.

from robobopy.Robobo import Robobo

def fun():
    lane_basic = rob.readLaneBasic()
    print(f"El coeficente a del carril es: {lane_basic.coeffs1['a']}")
    print(f"El coeficente b del carril es: {lane_basic.coeffs1['b']}")

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

rob.startLaneDetection()
rob.moveWheels(20,20)
rob.whenALaneBasicDetected(fun)

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

5.13.8 Método whenALaneProDetected

whenALaneProDetected(callback)
Establece la función callback que se llama cuando se detecta un carril pro.

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

Ejemplo de Uso

A continuación, se muestra un programa que cuando el robot detecte un carril simple llame a una función que leerá los coeficientes ‘a’, ‘b’ y ‘c’ que forman el polinomio de grado 2 de uno de los carriles detectados.

from robobopy.Robobo import Robobo

def fun():
    lane_pro = rob.readLanePro()
    print(f"El coeficente a del carril es: {lane_pro.coeffs1['a']}")
    print(f"El coeficente b del carril es: {lane_pro.coeffs1['b']}")
    print(f"El coeficente c del carril es: {lane_pro.coeffs1['c']}")

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

rob.startLaneDetection()
rob.moveWheels(20,20)
rob.whenALaneProDetected(fun)

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

5.13.9 Método setLaneColorInversion

setLaneColorInversion(set_on)

Configura la inversión de color para el módulo de detección de carriles. Por lo general, se detectan carriles claros sobre fondo oscuro, pero también es posible detectar carriles oscuros sobre fondos claros.

 

Este cambio es persistente.

Parámetros:
set_on (bool): Booleano para elegir si se activa la inversión de color o no.

Advertencia: Solo utiliza esta función si sabes lo que estás haciendo. Una mala configuración podría traer consecuencias inesperadas.

Ejemplo de Uso

En el siguiente programa, se activa la inversión de color para leer carriles oscuros sobre fondo claro.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.setLaneColorInversion(True)
rob.sayText('Inversión de color activada')

5. | Métodos de sensorización

5.13 Detección de carriles

Introducción

Robobo puede detectar los carriles por los que circula utilizando la cámara del smartphone y un algoritmo de detección explicado con detalle en esta página:

Los carriles básicos están formados por dos líneas rectas, mientras que los carriles pro están formados por dos polinomios de segundo grado.

Este módulo no está implementado en el simulador.

Elementos de programación

5.13.1 Clase LaneBasic

Representa un carril básico detectado por Robobo, formado por dos líneas rectas.
Atributos:

• coeffs1 (dict): Diccionario con ‘a’ y ‘b’ (ax + b), coeficientes de la línea izquierda.

• coeffs2 (dict): Diccionario con ‘a’ y ‘b’ (ax + b), coeficientes de la línea derecha.

• id (int): Número de secuencia de frame. Desde que la cámara se inicial, cada frame tiene un número que lo identifica. El valor es siempre positivo.

5.13.2 Clase LanePro

Respresenta un carril pro detectado por Robobo, formado por dos polinomios de segundo grado.
Atributos:

• coeffs1 (dict): Diccionario con ‘a’, ‘b’ y ‘c’ (ax2 + bx + c), coeficientes de la línea izquierda.

• coeffs2 (dict): Diccionario con ‘a’, ‘b’ y ‘c’ (ax2 + bx + c), coeficientes de la línea derecha.

• minv (array): Matriz de transformación para obtener la perspectiva original.

• id (int): Número de secuencia de frame. Desde que la cámara se inicial, cada frame tiene un número que lo identifica. El valor es siempre positivo.

5.13.3 Método startLaneDetection

startLineDetection()
Habilita la detección de carriles.

La detección de carriles está deshabilitada por defecto.

Este cambio es persistente.

5.13.4 Método stopLaneDetection

stopLineDetection()

Deshabilita la detección de carriles.

La detección de carriles está deshabilitada por defecto.

Este cambio es persistente.

5.13.5 Método readLaneBasic

readLineBasic()
Lee el último carril detectado.

Devuelve:
• El carril (LaneBasic). Ver Clase LaneBasic.

El siguiente programa hace que Robobo habilite la detección de carriles. Luego, hace que Robobo se mueva en línea recta de forma indefinida a velocidad 20 y vaya mostrando por pantalla los coeficientes ‘a’ y ‘b’ que forman la recta de uno de los carriles básicos detectado.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.moveWheels(20,20)

while True:
lane_basic = rob.readLaneBasic()
print(f"El coeficente a del carril es: {lane_basic.coeffs1['a']}")
print(f"El coeficente b del carril es: {lane_basic.coeffs1['b']}")
rob.wait(1)

5.13.6 Método readLanePro

readLinePro()
Lee el último carril pro detectado.

Devuelve:
• El carril pro (LanePro). Ver Clase LanePro.

Ejemplo de Uso

El siguiente programa hace que Robobo habilite la detección de carriles. Luego, hace que se mueva en línea recta de forma indefinida a velocidad 20 y vaya mostrando por pantalla los coeficientes ‘a’, ‘b’ y ‘c’ que forman el polinomio de grado 2 de uno de los carriles detectado.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.moveWheels(20,20)

while True:
lane_pro = rob.readLanePro()
print(f"El coeficente a del carril es: {lane_pro.coeffs1['a']}")
print(f"El coeficente b del carril es: {lane_pro.coeffs1['b']}")
print(f"El coeficente c del carril es: {lane_pro.coeffs1['c']}")
rob.wait(1)​

5.13.7 Método whenALaneBasicDetected

whenALaneBasicDetected(callback)
Establece la función callback que se llama cuando se detecta un carril básico.

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

Ejemplo de Uso

En el siguiente programa, cuando Robobo detecta un carril simple se llama a una función que leerá los coeficientes ‘a’ y ‘b’ que forman la recta de una de las líneas detectada.

from robobopy.Robobo import Robobo

def fun():
lane_basic = rob.readLaneBasic()
print(f"El coeficente a del carril es: {lane_basic.coeffs1['a']}")
print(f"El coeficente b del carril es: {lane_basic.coeffs1['b']}")

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


rob.startLaneDetection()
rob.moveWheels(20,20)
rob.whenALaneBasicDetected(fun)
# el programa se mantiene en ejecución continua
while True:
rob.wait(1)

5.13.8 Método whenALaneProDetected

whenALaneProDetected(callback)

Establece la función callback que se llama cuando se detecta un carril pro.

 

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

Ejemplo de Uso

A continuación, se muestra un programa que cuando el robot detecte un carril simple llame a una función que leerá los coeficientes ‘a’, ‘b’ y ‘c’ que forman el polinomio de grado 2 de uno de los carriles
detectado.

from robobopy.Robobo import Robobo

def fun():
lane_pro = rob.readLanePro()
print(f"El coeficente a del carril es: {lane_pro.coeffs1['a']}")
print(f"El coeficente b del carril es: {lane_pro.coeffs1['b']}")
print(f"El coeficente c del carril es: {lane_pro.coeffs1['c']}")

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

rob.startLaneDetection()
rob.moveWheels(20,20)
rob.whenALaneProDetected(fun)

# el programa se mantiene en ejecución continua

while True:
rob.wait(1)

5.13.9 Método setLaneColorInversion

setLaneColorInversion(set_on)

Configura la inversión de color para el módulo de detección de carriles. Por lo general, se detectan carriles claros sobre fondo oscuro, pero también es posible detectar carriles oscuros sobre fondos claros.

 

Este cambio es persistente.

Parámetros:
set_on (bool): Booleano para elegir si se activa la inversión de color o no.

Advertencia: Solo utiliza esta función si sabes lo que estás haciendo. Una mala configuración podría traer consecuencias inesperadas.

Ejemplo de Uso

En el siguiente programa, se activa la inversión de color para leer carriles oscuros sobre fondo claro.

from robobopy.Robobo import Robobo

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

rob.startLaneDetection()
rob.setLaneColorInversion(True)
rob.sayText('Inversión de color activada')
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.