tof — ovladač time-of-flight senzoru

Modul tof řídí time-of-flight (ToF) senzory měření vzdálenosti připojené k OpenMV Cam přes I2C. Každý snímek vrací hodnotu hloubky pro každý pixel v milimetrech pro mřížku 8x8 zón (VL53L5CX / VL53L8CX), kterou lze vykreslit jako samostatný hloubkový obraz pomocí snapshot(), nebo zkomponovat na snímek viditelného světla z CSI senzoru pomocí draw_depth(), obvykle prostřednictvím barevné palety, jako je image.PALETTE_DEPTH.

Příklad použití:

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)

Chcete-li otočit hloubkové pole/obraz o násobky 90 stupňů, předejte funkcím read_depth, draw_depth nebo snapshot následující kombinace hmirror/vflip/transpose:

  • vflip=False, hmirror=False, transpose=False -> otočení o 0 stupňů

  • vflip=True,  hmirror=False, transpose=True -> otočení o 90 stupňů

  • vflip=True,  hmirror=True,  transpose=False -> otočení o 180 stupňů

  • vflip=False, hmirror=True,  transpose=True -> otočení o 270 stupňů

Funkce

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

Inicializuje vestavěný hloubkový senzor.

type udává typ TOF senzoru:

Ve výchozím nastavení je type -1, což způsobí, že tof.init() automaticky vyhledá a inicializuje připojený TOF senzor na základě jeho I2C adresy.

tof.reset() None

Resetuje stav hloubkového senzoru.

tof.deinit() None

Deinicializuje hloubkový senzor a uvolní prostředky.

tof.width() int

Vrátí šířku (vodorovné rozlišení) používaného hloubkového senzoru. Vyvolá RuntimeError, pokud senzor není inicializován.

tof.height() int

Vrátí výšku (svislé rozlišení) používaného hloubkového senzoru. Vyvolá RuntimeError, pokud senzor není inicializován.

tof.type() int

Vrátí typ používaného hloubkového senzoru:

Vyvolá RuntimeError, pokud senzor není inicializován.

tof.refresh() int

Vrátí obnovovací frekvenci (v Hz) používaného hloubkového senzoru:

Vyvolá RuntimeError, pokud senzor není inicializován.

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

Vrátí n-tici obsahující seznam hloubek (width * height čísel typu float v mm), minimální zaznamenanou hloubku a maximální zaznamenanou hloubku.

hmirror, pokud je True, vodorovně zrcadlí hloubkové pole.

vflip, pokud je True, svisle převrátí hloubkové pole.

transpose, pokud je True, transponuje hloubkové pole.

timeout kolik milisekund čekat na nový snímek, než se vyvolá RuntimeError. Pokud je 0, čeká navždy.

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

Vykreslí hloubkové pole depth (vrácené funkcí read_depth) na obraz image, jehož levý horní roh začíná na pozici x, y.

x_scale řídí, jak moc je zobrazený obraz škálován ve směru osy x (float). Pokud je tato hodnota záporná, obraz bude vodorovně převrácen. Pokud není zadána, odpovídá y_scale pro zachování poměru stran.

y_scale řídí, jak moc je zobrazený obraz škálován ve směru osy y (float). Pokud je tato hodnota záporná, obraz bude svisle převrácen. Pokud není zadána, odpovídá x_scale pro zachování poměru stran.

roi je n-tice obdélníku oblasti zájmu (x, y, w, h) ve zdrojovém hloubkovém poli, který se má vykreslit.

rgb_channel je RGB kanál (0=R, 1=G, 2=B), který se má extrahovat ze zdroje. -1 (výchozí) použije všechny kanály.

alpha řídí, jak moc se zdroj smíchá s cílovým obrazem. 255 je neprůhledné, 0 nezpůsobí žádnou změnu. Rozsah: 0-255.

color_palette je enum barevné palety (např. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) nebo 256pixelový RGB565 obraz použitý jako vyhledávací tabulka barev pro hodnotu hloubky ve stupních šedi.

alpha_palette, pokud není None, je 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfy modulující alpha pro každý pixel.

hint je logický OR z:

scale je dvouhodnotová n-tice (min, max) řídící minimální a maximální hloubku (v mm) použitou pro škálování hloubkového obrazu. Výchozí je skutečné minimum a maximum hloubkového pole.

Poznámka

read_depth si pamatuje, zda byla volána s transpose=True, a draw_depth to interně používá k určení velikosti zdrojového pole.

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

Načte snímek z hloubkového senzoru a vrátí nový objekt image.Image, který je buď image.GRAYSCALE, nebo image.RGB565.

hmirror, pokud je True, vodorovně zrcadlí nový obraz.

vflip, pokud je True, svisle převrátí nový obraz.

transpose, pokud je True, transponuje nový obraz.

x_scale řídí, jak moc je obraz škálován ve směru osy x (float). Záporné hodnoty převrátí vodorovně. Pokud není zadáno, odpovídá y_scale.

y_scale řídí, jak moc je obraz škálován ve směru osy y (float). Záporné hodnoty převrátí svisle. Pokud není zadáno, odpovídá x_scale.

roi je n-tice obdélníku oblasti zájmu (x, y, w, h) ve zdroji, který se má extrahovat.

rgb_channel je RGB kanál (0=R, 1=G, 2=B), který se má extrahovat. -1 (výchozí) použije všechny kanály.

alpha řídí míšení zdroje do cíle. 255 je neprůhledné, 0 ponechá cíl nezměněn. Rozsah: 0-255.

color_palette je enum barevné palety (např. image.PALETTE_DEPTH) nebo 256pixelový RGB565 obraz použitý jako vyhledávací tabulka barev.

alpha_palette, pokud není None, je 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfy.

hint je logický OR z:

scale je dvouhodnotová n-tice (min, max) řídící minimální a maximální hloubku (v mm) použitou pro škálování obrazu. Výchozí je skutečné min/max snímku.

pixformat řídí výsledný formát pixelů obrazu. Musí být image.GRAYSCALE nebo image.RGB565.

copy_to_fb, pokud je True, zapíše nový obraz do snímkového bufferu (frame buffer) namísto jeho alokace na haldě MicroPythonu.

timeout kolik milisekund čekat na nový snímek, než se vyvolá RuntimeError. Pokud je 0, čeká navždy.

Konstanty

tof.TOF_VL53LX: int

TOF senzor VL53L5CX nebo VL53L8CX (8x8 pixelů).