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.
typeindica el tipo de sensor TOF:tof.TOF_VL53LX: 8x8 píxeles.
De forma predeterminada,
typees-1, lo que hace quetof.init()escanee e inicialice automáticamente un sensor TOF conectado según la dirección I2C.
- tof.width() int¶
Devuelve el ancho (resolución horizontal) del sensor de profundidad en uso. Lanza un
RuntimeErrorsi el sensor no está inicializado.
- tof.height() int¶
Devuelve el alto (resolución vertical) del sensor de profundidad en uso. Lanza un
RuntimeErrorsi el sensor no está inicializado.
- tof.type() int¶
Devuelve el tipo del sensor de profundidad en uso:
Lanza un
RuntimeErrorsi el sensor no está inicializado.
- tof.refresh() int¶
Devuelve la frecuencia de actualización (en Hz) del sensor de profundidad en uso:
tof.TOF_VL53LX: 15 Hz.
Lanza un
RuntimeErrorsi 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 * heightvalores float en mm), la profundidad mínima observada y la profundidad máxima observada.hmirrorsi esTruerefleja horizontalmente el array de profundidad.vflipsi esTruevoltea verticalmente el array de profundidad.transposesi esTruetranspone el array de profundidad.timeoutcuántos milisegundos esperar el nuevo fotograma antes de lanzar unRuntimeError. Si es0espera 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 devuelveread_depth) sobreimage, cuya esquina superior izquierda comienza en la ubicaciónx,y.x_scalecontrola 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 cony_scalepara mantener la relación de aspecto.y_scalecontrola 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 conx_scalepara mantener la relación de aspecto.roies 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_channeles el canal RGB (0=R, 1=G, 2=B) que se extrae del origen.-1(predeterminado) usa todos los canales.alphacontrola cuánto se mezcla el origen con la imagen de destino.255es opaco,0no produce ninguna modificación. Rango: 0-255.color_palettees 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_palettesi no esNonees una imagen GRAYSCALE de 256 píxeles usada como tabla de búsqueda de alfa que modulaalphapor píxel.hintes un OR lógico de:image.AREA: Usa escalado por área al reducir el tamaño.image.BILINEAR: Usa escalado bilineal.image.BICUBIC: Usa escalado bicúbico.image.CENTER: Centra la imagen en el destino.image.HMIRROR: Refleja horizontalmente.image.VFLIP: Voltea verticalmente.image.TRANSPOSE: Transpone (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica la extracción de rgb_channel antes del escalado.image.APPLY_COLOR_PALETTE_FIRST: Aplica la paleta de colores antes del escalado.image.SCALE_ASPECT_KEEP: Ajusta dentro del destino manteniendo la relación de aspecto.image.SCALE_ASPECT_EXPAND: Rellena el destino manteniendo la relación de aspecto (recorta).image.SCALE_ASPECT_IGNORE: Rellena el destino ignorando la relación de aspecto (estira).image.ROTATE_90: Rota 90 grados.image.ROTATE_180: Rota 180 grados.image.ROTATE_270: Rota 270 grados.
scalees 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_depthrecuerda si se llamó contranspose=Trueydraw_depthlo 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.Imageque esimage.GRAYSCALEoimage.RGB565.hmirrorsi esTruerefleja horizontalmente la nueva imagen.vflipsi esTruevoltea verticalmente la nueva imagen.transposesi esTruetranspone la nueva imagen.x_scalecontrola cuánto se escala la imagen en la dirección x (float). Los valores negativos voltean horizontalmente. Si no se especifica, coincide cony_scale.y_scalecontrola cuánto se escala la imagen en la dirección y (float). Los valores negativos voltean verticalmente. Si no se especifica, coincide conx_scale.roies la tupla del rectángulo de la región de interés(x, y, w, h)del origen que se va a extraer.rgb_channeles el canal RGB (0=R, 1=G, 2=B) que se va a extraer.-1(predeterminado) usa todos los canales.alphacontrola la mezcla de origen a destino.255es opaco,0deja el destino sin cambios. Rango: 0-255.color_palettees 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_palettesi no esNonees una imagen GRAYSCALE de 256 píxeles usada como tabla de búsqueda de alfa.hintes un OR lógico de:image.AREA: Usa escalado por área al reducir el tamaño.image.BILINEAR: Usa escalado bilineal.image.BICUBIC: Usa escalado bicúbico.image.CENTER: Centra la imagen en el destino.image.HMIRROR: Refleja horizontalmente.image.VFLIP: Voltea verticalmente.image.TRANSPOSE: Transpone (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica la extracción de rgb_channel antes del escalado.image.APPLY_COLOR_PALETTE_FIRST: Aplica la paleta de colores antes del escalado.image.SCALE_ASPECT_KEEP: Ajusta dentro del destino manteniendo la relación de aspecto.image.SCALE_ASPECT_EXPAND: Rellena el destino manteniendo la relación de aspecto (recorta).image.SCALE_ASPECT_IGNORE: Rellena el destino ignorando la relación de aspecto (estira).image.ROTATE_90: Rota 90 grados.image.ROTATE_180: Rota 180 grados.image.ROTATE_270: Rota 270 grados.
scalees 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.pixformatcontrola el formato de píxel final de la imagen. Debe serimage.GRAYSCALEoimage.RGB565.copy_to_fbsi esTrueescribe la nueva imagen en el frame buffer en lugar de asignarla en el montículo de MicroPython.timeoutcuántos milisegundos esperar el nuevo fotograma antes de lanzar unRuntimeError. Si es0espera indefinidamente.