tof — upravljački program za time-of-flight senzor

Modul tof upravlja time-of-flight (ToF) senzorima za mjerenje udaljenosti spojenim na OpenMV Cam putem I2C-a. Svaka sličica vraća vrijednost dubine po pikselu u milimetrima za mrežu zona 8x8 (VL53L5CX / VL53L8CX), koja se može prikazati kao samostalna slika dubine pomoću snapshot() ili složiti na sličicu vidljivog svjetla s CSI senzora pomoću draw_depth(), obično kroz paletu boja kao što je image.PALETTE_DEPTH.

Primjer upotrebe:

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)

Ako želite zarotirati polje/sliku dubine za višekratnike od 90 stupnjeva, proslijedite sljedeće kombinacije hmirror/vflip/transpose funkcijama read_depth, draw_depth ili snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotacija za 0 stupnjeva

  • vflip=True,  hmirror=False, transpose=True -> rotacija za 90 stupnjeva

  • vflip=True,  hmirror=True,  transpose=False -> rotacija za 180 stupnjeva

  • vflip=False, hmirror=True,  transpose=True -> rotacija za 270 stupnjeva

Funkcije

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

Inicijalizira ugrađeni senzor dubine.

type označava vrstu TOF senzora:

Prema zadanim postavkama type je -1 što uzrokuje da tof.init() automatski pretraži i inicijalizira spojeni TOF senzor na temelju I2C adrese.

tof.reset() None

Resetira stanje senzora dubine.

tof.deinit() None

Deinicijalizira senzor dubine oslobađajući resurse.

tof.width() int

Vraća širinu (vodoravnu razlučivost) senzora dubine koji se koristi. Podiže RuntimeError ako senzor nije inicijaliziran.

tof.height() int

Vraća visinu (okomitu razlučivost) senzora dubine koji se koristi. Podiže RuntimeError ako senzor nije inicijaliziran.

tof.type() int

Vraća vrstu senzora dubine koji se koristi:

Podiže RuntimeError ako senzor nije inicijaliziran.

tof.refresh() int

Vraća brzinu osvježavanja (u Hz) senzora dubine koji se koristi:

Podiže RuntimeError ako senzor nije inicijaliziran.

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

Vraća n-torku koja sadrži listu dubina (width * height brojeva s pomičnim zarezom u mm), najmanju zabilježenu dubinu i najveću zabilježenu dubinu.

hmirror ako je True vodoravno zrcali polje dubine.

vflip ako je True okomito preokreće polje dubine.

transpose ako je True transponira polje dubine.

timeout koliko milisekundi čekati na novu sličicu prije podizanja RuntimeError. Ako je 0 čeka zauvijek.

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

Crta polje depth (kao što ga vraća read_depth) na image čiji gornji lijevi kut počinje na lokaciji x, y.

x_scale kontrolira koliko se prikazana slika skalira u smjeru x (broj s pomičnim zarezom). Ako je ova vrijednost negativna, slika će se vodoravno preokrenuti. Ako nije navedena, podudara se s y_scale radi održavanja omjera prikaza.

y_scale kontrolira koliko se prikazana slika skalira u smjeru y (broj s pomičnim zarezom). Ako je ova vrijednost negativna, slika će se okomito preokrenuti. Ako nije navedena, podudara se s x_scale radi održavanja omjera prikaza.

roi je n-torka pravokutnika područja interesa (x, y, w, h) izvornog polja dubine za crtanje.

rgb_channel je RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz izvora. -1 (zadano) koristi sve kanale.

alpha kontrolira koliko se izvora stapa u odredišnu sliku. 255 je neprozirno, 0 ne rezultira nikakvom izmjenom. Raspon: 0-255.

color_palette je enum palete boja (npr. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) ili slika RGB565 od 256 piksela koja se koristi kao tablica za traženje boja na vrijednosti dubine u sivim tonovima.

alpha_palette ako nije None je slika GRAYSCALE od 256 piksela koja se koristi kao tablica za traženje alfa vrijednosti modulirajući alpha po pikselu.

hint je logičko ILI od:

scale je n-torka s dvije vrijednosti (min, max) koja kontrolira najmanju i najveću dubinu (u mm) koja se koristi za skaliranje slike dubine. Zadano je stvarni min i max polja dubine.

Napomena

read_depth pamti je li pozvan s transpose=True i draw_depth to interno koristi za određivanje veličine izvornog polja.

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

Čita sličicu sa senzora dubine i vraća novi image.Image objekt koji je ili image.GRAYSCALE ili image.RGB565.

hmirror ako je True vodoravno zrcali novu sliku.

vflip ako je True okomito preokreće novu sliku.

transpose ako je True transponira novu sliku.

x_scale kontrolira koliko se slika skalira u smjeru x (broj s pomičnim zarezom). Negativne vrijednosti vodoravno preokreću. Ako nije navedeno, podudara se s y_scale.

y_scale kontrolira koliko se slika skalira u smjeru y (broj s pomičnim zarezom). Negativne vrijednosti okomito preokreću. Ako nije navedeno, podudara se s x_scale.

roi je n-torka pravokutnika područja interesa (x, y, w, h) izvora za izdvajanje.

rgb_channel je RGB kanal (0=R, 1=G, 2=B) za izdvajanje. -1 (zadano) koristi sve kanale.

alpha kontrolira stapanje izvora u odredište. 255 je neprozirno, 0 ostavlja odredište nepromijenjeno. Raspon: 0-255.

color_palette je enum palete boja (npr. image.PALETTE_DEPTH) ili slika RGB565 od 256 piksela koja se koristi kao tablica za traženje boja.

alpha_palette ako nije None je slika GRAYSCALE od 256 piksela koja se koristi kao tablica za traženje alfa vrijednosti.

hint je logičko ILI od:

scale je n-torka s dvije vrijednosti (min, max) koja kontrolira najmanju i najveću dubinu (u mm) koja se koristi za skaliranje slike. Zadano je stvarni min/max sličice.

pixformat kontrolira konačni format piksela slike. Mora biti image.GRAYSCALE ili image.RGB565.

copy_to_fb ako je True zapisuje novu sliku u međuspremnik slike umjesto da je dodjeljuje na MicroPython gomili.

timeout koliko milisekundi čekati na novu sličicu prije podizanja RuntimeError. Ako je 0 čeka zauvijek.

Konstante

tof.TOF_VL53LX: int

VL53L5CX ili VL53L8CX TOF senzor (8x8 piksela).