tof — driver de sensor time-of-flight

O módulo tof aciona sensores de medição de distância time-of-flight (ToF) conectados a uma OpenMV Cam via I2C. Cada quadro retorna um valor de profundidade por pixel em milímetros para uma grade de zonas 8x8 (VL53L5CX / VL53L8CX), que pode ser renderizada como uma imagem de profundidade independente com snapshot() ou composta sobre um quadro de luz visível do sensor CSI com draw_depth(), normalmente por meio de uma paleta de cores como image.PALETTE_DEPTH.

Exemplo 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)

Se você quiser rotacionar o array/imagem de profundidade em múltiplos de 90 graus, passe as seguintes combinações de hmirror/vflip/transpose para read_depth, draw_depth ou snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotação de 0 graus

  • vflip=True,  hmirror=False, transpose=True -> rotação de 90 graus

  • vflip=True,  hmirror=True,  transpose=False -> rotação de 180 graus

  • vflip=False, hmirror=True,  transpose=True -> rotação de 270 graus

Funções

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

Inicializa um sensor de profundidade integrado.

type indica o tipo de sensor TOF:

Por padrão, type é -1, o que faz com que tof.init() escaneie e inicialize automaticamente um sensor TOF conectado com base no endereço I2C.

tof.reset() None

Reinicia o estado do sensor de profundidade.

tof.deinit() None

Desinicializa o sensor de profundidade, liberando recursos.

tof.width() int

Retorna a largura (resolução horizontal) do sensor de profundidade em uso. Levanta um RuntimeError se o sensor não estiver inicializado.

tof.height() int

Retorna a altura (resolução vertical) do sensor de profundidade em uso. Levanta um RuntimeError se o sensor não estiver inicializado.

tof.type() int

Retorna o tipo do sensor de profundidade em uso:

Levanta um RuntimeError se o sensor não estiver inicializado.

tof.refresh() int

Retorna a taxa de atualização (em Hz) do sensor de profundidade em uso:

Levanta um RuntimeError se o sensor não estiver inicializado.

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

Retorna uma tupla contendo a lista de profundidade (width * height floats em mm), a profundidade mínima observada e a profundidade máxima observada.

hmirror se True espelha horizontalmente o array de profundidade.

vflip se True inverte verticalmente o array de profundidade.

transpose se True transpõe o array de profundidade.

timeout quantos milissegundos aguardar pelo novo quadro antes de levantar um RuntimeError. Se 0, aguarda 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

Desenha um array depth (como retornado por read_depth) sobre image, cujo canto superior esquerdo começa na localização x, y.

x_scale controla o quanto a imagem exibida é escalada na direção x (float). Se este valor for negativo, a imagem será espelhada horizontalmente. Se não especificado, corresponde a y_scale para manter a proporção.

y_scale controla o quanto a imagem exibida é escalada na direção y (float). Se este valor for negativo, a imagem será espelhada verticalmente. Se não especificado, corresponde a x_scale para manter a proporção.

roi é a tupla de retângulo da região de interesse (x, y, w, h) do array de profundidade de origem a desenhar.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a extrair da origem. -1 (padrão) usa todos os canais.

alpha controla o quanto da origem é mesclado na imagem de destino. 255 é opaco, 0 resulta em nenhuma modificação. Faixa: 0-255.

color_palette é um enum de paleta de cores (por exemplo, image.PALETTE_DEPTH, image.PALETTE_RAINBOW) ou uma imagem RGB565 de 256 pixels usada como tabela de consulta de cores sobre o valor de profundidade em escala de cinza.

alpha_palette se não for None é uma imagem GRAYSCALE de 256 pixels usada como tabela de consulta de alpha que modula alpha por pixel.

hint é um OR lógico de:

scale é uma tupla de dois valores (min, max) que controla a profundidade mínima e máxima (em mm) usada para escalar a imagem de profundidade. O padrão é o mínimo e o máximo reais do array de profundidade.

Nota

read_depth lembra se foi chamado com transpose=True e draw_depth usa isso internamente para dimensionar o array de origem.

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

Lê um quadro do sensor de profundidade e retorna um novo objeto image.Image que é image.GRAYSCALE ou image.RGB565.

hmirror se True espelha horizontalmente a nova imagem.

vflip se True inverte verticalmente a nova imagem.

transpose se True transpõe a nova imagem.

x_scale controla o quanto a imagem é escalada na direção x (float). Valores negativos espelham horizontalmente. Se não especificado, corresponde a y_scale.

y_scale controla o quanto a imagem é escalada na direção y (float). Valores negativos espelham verticalmente. Se não especificado, corresponde a x_scale.

roi é a tupla de retângulo da região de interesse (x, y, w, h) da origem a extrair.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a extrair. -1 (padrão) usa todos os canais.

alpha controla a mesclagem da origem para o destino. 255 é opaco, 0 deixa o destino inalterado. Faixa: 0-255.

color_palette é um enum de paleta de cores (por exemplo, image.PALETTE_DEPTH) ou uma imagem RGB565 de 256 pixels usada como tabela de consulta de cores.

alpha_palette se não for None é uma imagem GRAYSCALE de 256 pixels usada como tabela de consulta de alpha.

hint é um OR lógico de:

scale é uma tupla de dois valores (min, max) que controla a profundidade mínima e máxima (em mm) usada para escalar a imagem. O padrão é o mínimo/máximo reais do quadro.

pixformat controla o formato de pixel final da imagem. Deve ser image.GRAYSCALE ou image.RGB565.

copy_to_fb se True escreve a nova imagem no frame buffer em vez de alocá-la no heap do MicroPython.

timeout quantos milissegundos aguardar pelo novo quadro antes de levantar um RuntimeError. Se 0, aguarda indefinidamente.

Constantes

tof.TOF_VL53LX: int

Sensor TOF VL53L5CX ou VL53L8CX (8x8 pixels).