tof — controlador de sensor de tiempo de vuelo

El módulo tof controla sensores de medición de distancia por tiempo de vuelo (ToF) conectados a una OpenMV Cam por I2C. Cada fotograma devuelve un valor de profundidad por píxel en milímetros para una cuadrícula de zonas de 8x8 (VL53L5CX / VL53L8CX), que puede representarse como una imagen de profundidad independiente con snapshot() o componerse sobre un fotograma de luz visible del sensor CSI con draw_depth(), normalmente a través de una paleta de colores como image.PALETTE_DEPTH.

Ejemplo de uso:

import csi
import tof

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

tof.init()

while True:
    img = csi0.snapshot()
    depth, depth_min, depth_max = tof.read_depth()
    tof.draw_depth(img, depth)
    print("====================")
    print("Min depth in mm seen: %0.2f" % depth_min)
    print("Max depth in mm seen: %0.2f" % depth_max)

Si desea rotar el array/imagen de profundidad en múltiplos de 90 grados, pase las siguientes combinaciones de hmirror/vflip/transpose a read_depth, draw_depth o snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotación de 0 grados

  • vflip=True,  hmirror=False, transpose=True -> rotación de 90 grados

  • vflip=True,  hmirror=True,  transpose=False -> rotación de 180 grados

  • vflip=False, hmirror=True,  transpose=True -> rotación de 270 grados

Funciones

tof.init(type: int = -1) None

Inicializa un sensor de profundidad integrado.

type indica el tipo de sensor TOF:

De forma predeterminada, type es -1, lo que hace que tof.init() escanee e inicialice automáticamente un sensor TOF conectado según la dirección I2C.

tof.reset() None

Reinicia el estado del sensor de profundidad.

tof.deinit() None

Desinicializa el sensor de profundidad liberando recursos.

tof.width() int

Devuelve el ancho (resolución horizontal) del sensor de profundidad en uso. Lanza un RuntimeError si el sensor no está inicializado.

tof.height() int

Devuelve el alto (resolución vertical) del sensor de profundidad en uso. Lanza un RuntimeError si el sensor no está inicializado.

tof.type() int

Devuelve el tipo del sensor de profundidad en uso:

Lanza un RuntimeError si el sensor no está inicializado.

tof.refresh() int

Devuelve la frecuencia de actualización (en Hz) del sensor de profundidad en uso:

Lanza un RuntimeError si el sensor no está inicializado.

tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]

Devuelve una tupla que contiene la lista de profundidad (width * height valores float en mm), la profundidad mínima observada y la profundidad máxima observada.

hmirror si es True refleja horizontalmente el array de profundidad.

vflip si es True voltea verticalmente el array de profundidad.

transpose si es True transpone el array de profundidad.

timeout cuántos milisegundos esperar el nuevo fotograma antes de lanzar un RuntimeError. Si es 0 espera indefinidamente.

tof.draw_depth(image: image.Image, depth: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None

Dibuja un array depth (tal como lo devuelve read_depth) sobre image, cuya esquina superior izquierda comienza en la ubicación x, y.

x_scale controla cuánto se escala la imagen mostrada en la dirección x (float). Si este valor es negativo, la imagen se voltea horizontalmente. Si no se especifica, coincide con y_scale para mantener la relación de aspecto.

y_scale controla cuánto se escala la imagen mostrada en la dirección y (float). Si este valor es negativo, la imagen se voltea verticalmente. Si no se especifica, coincide con x_scale para mantener la relación de aspecto.

roi es la tupla del rectángulo de la región de interés (x, y, w, h) del array de profundidad de origen que se va a dibujar.

rgb_channel es el canal RGB (0=R, 1=G, 2=B) que se extrae del origen. -1 (predeterminado) usa todos los canales.

alpha controla cuánto se mezcla el origen con la imagen de destino. 255 es opaco, 0 no produce ninguna modificación. Rango: 0-255.

color_palette es un enum de paleta de colores (p. ej. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) o una imagen RGB565 de 256 píxeles usada como tabla de búsqueda de color sobre el valor de profundidad en escala de grises.

alpha_palette si no es None es una imagen GRAYSCALE de 256 píxeles usada como tabla de búsqueda de alfa que modula alpha por píxel.

hint es un OR lógico de:

scale es una tupla de dos valores (min, max) que controla la profundidad mínima y máxima (en mm) usada para escalar la imagen de profundidad. De forma predeterminada usa los valores mínimo y máximo reales del array de profundidad.

Nota

read_depth recuerda si se llamó con transpose=True y draw_depth lo usa internamente para dimensionar el array de origen.

tof.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = 100) image.Image

Lee un fotograma del sensor de profundidad y devuelve un nuevo objeto image.Image que es image.GRAYSCALE o image.RGB565.

hmirror si es True refleja horizontalmente la nueva imagen.

vflip si es True voltea verticalmente la nueva imagen.

transpose si es True transpone la nueva imagen.

x_scale controla cuánto se escala la imagen en la dirección x (float). Los valores negativos voltean horizontalmente. Si no se especifica, coincide con y_scale.

y_scale controla cuánto se escala la imagen en la dirección y (float). Los valores negativos voltean verticalmente. Si no se especifica, coincide con x_scale.

roi es la tupla del rectángulo de la región de interés (x, y, w, h) del origen que se va a extraer.

rgb_channel es el canal RGB (0=R, 1=G, 2=B) que se va a extraer. -1 (predeterminado) usa todos los canales.

alpha controla la mezcla de origen a destino. 255 es opaco, 0 deja el destino sin cambios. Rango: 0-255.

color_palette es un enum de paleta de colores (p. ej. image.PALETTE_DEPTH) o una imagen RGB565 de 256 píxeles usada como tabla de búsqueda de color.

alpha_palette si no es None es una imagen GRAYSCALE de 256 píxeles usada como tabla de búsqueda de alfa.

hint es un OR lógico de:

scale es una tupla de dos valores (min, max) que controla la profundidad mínima y máxima (en mm) usada para escalar la imagen. De forma predeterminada usa los valores mínimo/máximo reales del fotograma.

pixformat controla el formato de píxel final de la imagen. Debe ser image.GRAYSCALE o image.RGB565.

copy_to_fb si es True escribe la nueva imagen en el frame buffer en lugar de asignarla en el montículo de MicroPython.

timeout cuántos milisegundos esperar el nuevo fotograma antes de lanzar un RuntimeError. Si es 0 espera indefinidamente.

Constantes

tof.TOF_VL53LX: int

Sensor TOF VL53L5CX o VL53L8CX (8x8 píxeles).