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.
typeudává typ TOF senzoru:tof.TOF_VL53LX: 8x8 pixelů.
Ve výchozím nastavení je
type-1, což způsobí, žetof.init()automaticky vyhledá a inicializuje připojený TOF senzor na základě jeho I2C adresy.
- 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:
tof.TOF_VL53LX: 15 Hz.
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 jeTrue, vodorovně zrcadlí hloubkové pole.vflip, pokud jeTrue, svisle převrátí hloubkové pole.transpose, pokud jeTrue, transponuje hloubkové pole.timeoutkolik milisekund čekat na nový snímek, než se vyvoláRuntimeError. Pokud je0, č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 obrazimage, jehož levý horní roh začíná na pozicix,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_scalepro 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_scalepro zachování poměru stran.roije n-tice obdélníku oblasti zájmu(x, y, w, h)ve zdrojovém hloubkovém poli, který se má vykreslit.rgb_channelje 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.255je neprůhledné,0nezpůsobí žádnou změnu. Rozsah: 0-255.color_paletteje 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íalphapro každý pixel.hintje logický OR z:image.AREA: Použít plošné škálování při zmenšování.image.BILINEAR: Použít bilineární škálování.image.BICUBIC: Použít bikubické škálování.image.CENTER: Vystředit obraz na cíli.image.HMIRROR: Vodorovně zrcadlit.image.VFLIP: Svisle převrátit.image.TRANSPOSE: Transponovat (zaměnit x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplikovat extrakci rgb_channel před škálováním.image.APPLY_COLOR_PALETTE_FIRST: Aplikovat barevnou paletu před škálováním.image.SCALE_ASPECT_KEEP: Vejít se do cíle se zachováním poměru stran.image.SCALE_ASPECT_EXPAND: Vyplnit cíl se zachováním poměru stran (ořízne).image.SCALE_ASPECT_IGNORE: Vyplnit cíl bez ohledu na poměr stran (roztáhne).image.ROTATE_90: Otočit o 90 stupňů.image.ROTATE_180: Otočit o 180 stupňů.image.ROTATE_270: Otočit o 270 stupňů.
scaleje 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_depthsi pamatuje, zda byla volána stranspose=True, adraw_depthto 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, neboimage.RGB565.hmirror, pokud jeTrue, vodorovně zrcadlí nový obraz.vflip, pokud jeTrue, svisle převrátí nový obraz.transpose, pokud jeTrue, 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.roije n-tice obdélníku oblasti zájmu(x, y, w, h)ve zdroji, který se má extrahovat.rgb_channelje 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.255je neprůhledné,0ponechá cíl nezměněn. Rozsah: 0-255.color_paletteje 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.hintje logický OR z:image.AREA: Použít plošné škálování při zmenšování.image.BILINEAR: Použít bilineární škálování.image.BICUBIC: Použít bikubické škálování.image.CENTER: Vystředit obraz na cíli.image.HMIRROR: Vodorovně zrcadlit.image.VFLIP: Svisle převrátit.image.TRANSPOSE: Transponovat (zaměnit x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplikovat extrakci rgb_channel před škálováním.image.APPLY_COLOR_PALETTE_FIRST: Aplikovat barevnou paletu před škálováním.image.SCALE_ASPECT_KEEP: Vejít se do cíle se zachováním poměru stran.image.SCALE_ASPECT_EXPAND: Vyplnit cíl se zachováním poměru stran (ořízne).image.SCALE_ASPECT_IGNORE: Vyplnit cíl bez ohledu na poměr stran (roztáhne).image.ROTATE_90: Otočit o 90 stupňů.image.ROTATE_180: Otočit o 180 stupňů.image.ROTATE_270: Otočit o 270 stupňů.
scaleje 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ýtimage.GRAYSCALEneboimage.RGB565.copy_to_fb, pokud jeTrue, zapíše nový obraz do snímkového bufferu (frame buffer) namísto jeho alokace na haldě MicroPythonu.timeoutkolik milisekund čekat na nový snímek, než se vyvoláRuntimeError. Pokud je0, čeká navždy.