tof — controlador de sensor time-of-flight

O módulo tof controla sensores de distância time-of-flight (ToF) ligados a uma OpenMV Cam via I2C. Cada fotograma devolve um valor de profundidade por pixel em milímetros para uma grelha de zonas 8x8 (VL53L5CX / VL53L8CX), que pode ser apresentada como imagem de profundidade autónoma com snapshot() ou composta sobre um fotograma de luz visível do sensor CSI com draw_depth(), normalmente através de uma paleta de cores como image.PALETTE_DEPTH.

Exemplo de utilização:

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)

Para rodar o array/imagem de profundidade em múltiplos de 90 graus, passe as seguintes combinações de hmirror/vflip/transpose a 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 predefinição, type é -1, o que faz com que tof.init() procure e inicialize automaticamente um sensor TOF ligado com base no endereço I2C.

tof.reset() None

Reinicia o estado do sensor de profundidade.

tof.deinit() None

Desinicializa o sensor de profundidade libertando recursos.

tof.width() int

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

tof.height() int

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

tof.type() int

Devolve o tipo de sensor de profundidade em uso:

Lança um RuntimeError se o sensor não estiver inicializado.

tof.refresh() int

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

Lança 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]

Devolve uma tupla contendo a lista de profundidades (width * height valores float 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 número de milissegundos a aguardar pelo novo fotograma antes de lançar 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 (tal como devolvido por read_depth) sobre image, com o canto superior esquerdo na localização x, y.

x_scale controla o fator de escala da imagem apresentada na direção x (float). Se o valor for negativo, a imagem será espelhada horizontalmente. Se não for especificado, corresponde a y_scale para manter a proporção.

y_scale controla o fator de escala da imagem apresentada na direção y (float). Se o valor for negativo, a imagem será espelhada verticalmente. Se não for especificado, corresponde a x_scale para manter a proporção.

roi é a tupla de retângulo de 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 (predefinição) utiliza todos os canais.

alpha controla a quantidade de origem misturada na imagem de destino. 255 é opaco; 0 não produz qualquer modificação. Intervalo: 0-255.

color_palette é um enum de paleta de cores (p. ex. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) ou uma imagem RGB565 de 256 pixels utilizada como tabela de consulta de cores sobre o valor de profundidade em escala de cinzentos.

alpha_palette se não for None, é uma imagem GRAYSCALE de 256 pixels utilizada como tabela de consulta de alfa 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) utilizada para escalar a imagem de profundidade. Por predefinição, corresponde ao mínimo e máximo efetivos do array de profundidade.

Nota

read_depth recorda se foi chamado com transpose=True e draw_depth utiliza 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 fotograma do sensor de profundidade e devolve 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 fator de escala da imagem na direção x (float). Valores negativos espelham horizontalmente. Se não for especificado, corresponde a y_scale.

y_scale controla o fator de escala da imagem na direção y (float). Valores negativos espelham verticalmente. Se não for especificado, corresponde a x_scale.

roi é a tupla de retângulo de 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 (predefinição) utiliza todos os canais.

alpha controla a mistura da origem para o destino. 255 é opaco; 0 deixa o destino inalterado. Intervalo: 0-255.

color_palette é um enum de paleta de cores (p. ex. image.PALETTE_DEPTH) ou uma imagem RGB565 de 256 pixels utilizada como tabela de consulta de cores.

alpha_palette se não for None, é uma imagem GRAYSCALE de 256 pixels utilizada como tabela de consulta de alfa.

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) utilizada para escalar a imagem. Por predefinição, corresponde ao mínimo/máximo efetivo do fotograma.

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

copy_to_fb se True escreve a nova imagem no buffer de fotograma em vez de a alocar na heap do MicroPython.

timeout número de milissegundos a aguardar pelo novo fotograma antes de lançar um RuntimeError. Se 0 aguarda indefinidamente.

Constantes

tof.TOF_VL53LX: int

Sensor TOF VL53L5CX ou VL53L8CX (8x8 pixels).