tof — driver pentru senzor time-of-flight

Modulul tof acționează senzorii de distanță time-of-flight (ToF) atașați la o OpenMV Cam prin I2C. Fiecare cadru returnează o valoare de adâncime per pixel în milimetri pentru o grilă de zone 8x8 (VL53L5CX / VL53L8CX), care poate fi redată ca imagine de adâncime de sine stătătoare cu snapshot() sau compusă peste un cadru în lumină vizibilă de la senzorul CSI cu draw_depth(), în mod normal printr-o paletă de culori precum image.PALETTE_DEPTH.

Exemplu de utilizare:

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)

Dacă doriți să rotiți matricea/imaginea de adâncime cu multipli de 90 de grade, transmiteți următoarele combinații hmirror/vflip/transpose către read_depth, draw_depth sau snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotație de 0 grade

  • vflip=True,  hmirror=False, transpose=True -> rotație de 90 de grade

  • vflip=True,  hmirror=True,  transpose=False -> rotație de 180 de grade

  • vflip=False, hmirror=True,  transpose=True -> rotație de 270 de grade

Funcții

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

Inițializează un senzor de adâncime de pe placă.

type indică tipul senzorului TOF:

În mod implicit type este -1, ceea ce face ca tof.init() să scaneze și să inițializeze automat un senzor TOF atașat pe baza adresei I2C.

tof.reset() None

Resetează starea senzorului de adâncime.

tof.deinit() None

Dezinițializează senzorul de adâncime, eliberând resursele.

tof.width() int

Returnează lățimea (rezoluția orizontală) a senzorului de adâncime utilizat. Generează o eroare RuntimeError dacă senzorul nu este inițializat.

tof.height() int

Returnează înălțimea (rezoluția verticală) a senzorului de adâncime utilizat. Generează o eroare RuntimeError dacă senzorul nu este inițializat.

tof.type() int

Returnează tipul senzorului de adâncime utilizat:

Generează o eroare RuntimeError dacă senzorul nu este inițializat.

tof.refresh() int

Returnează rata de reîmprospătare (în Hz) a senzorului de adâncime utilizat:

Generează o eroare RuntimeError dacă senzorul nu este inițializat.

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

Returnează un tuplu care conține lista de adâncimi (width * height numere zecimale în mm), adâncimea minimă observată și adâncimea maximă observată.

hmirror dacă este True oglindește orizontal matricea de adâncime.

vflip dacă este True întoarce vertical matricea de adâncime.

transpose dacă este True transpune matricea de adâncime.

timeout câte milisecunde să aștepte noul cadru înainte de a genera o eroare RuntimeError. Dacă este 0 așteaptă la nesfârșit.

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

Desenează o matrice depth (așa cum este returnată de read_depth) pe image, al cărei colț din stânga sus începe la locația x, y.

x_scale controlează cât de mult este scalată imaginea afișată pe direcția x (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă orizontal. Dacă nu este specificată, se potrivește cu y_scale pentru a menține raportul de aspect.

y_scale controlează cât de mult este scalată imaginea afișată pe direcția y (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă vertical. Dacă nu este specificată, se potrivește cu x_scale pentru a menține raportul de aspect.

roi este tuplul dreptunghiular al regiunii de interes (x, y, w, h) din matricea de adâncime sursă de desenat.

rgb_channel este canalul RGB (0=R, 1=G, 2=B) de extras din sursă. -1 (implicit) utilizează toate canalele.

alpha controlează cât de mult din sursă este amestecat în imaginea de destinație. 255 este opac, 0 nu produce nicio modificare. Interval: 0-255.

color_palette este o enumerare de paletă de culori (de ex. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) sau o imagine RGB565 de 256 de pixeli utilizată ca tabel de căutare a culorilor pe valoarea de adâncime în tonuri de gri.

alpha_palette dacă nu este None este o imagine GRAYSCALE de 256 de pixeli utilizată ca tabel de căutare alfa care modulează alpha la nivel de pixel.

hint este un SAU logic între:

scale este un tuplu cu două valori (min, max) care controlează adâncimea minimă și maximă (în mm) utilizată pentru a scala imaginea de adâncime. Implicit este min și max real al matricei de adâncime.

Notă

read_depth reține dacă a fost apelată cu transpose=True, iar draw_depth utilizează acest lucru intern pentru a dimensiona matricea sursă.

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

Citește un cadru de la senzorul de adâncime și returnează un nou obiect image.Image care este fie image.GRAYSCALE, fie image.RGB565.

hmirror dacă este True oglindește orizontal noua imagine.

vflip dacă este True întoarce vertical noua imagine.

transpose dacă este True transpune noua imagine.

x_scale controlează cât de mult este scalată imaginea pe direcția x (număr zecimal). Valorile negative întorc orizontal. Dacă nu este specificată, se potrivește cu y_scale.

y_scale controlează cât de mult este scalată imaginea pe direcția y (număr zecimal). Valorile negative întorc vertical. Dacă nu este specificată, se potrivește cu x_scale.

roi este tuplul dreptunghiular al regiunii de interes (x, y, w, h) din sursă de extras.

rgb_channel este canalul RGB (0=R, 1=G, 2=B) de extras. -1 (implicit) utilizează toate canalele.

alpha controlează amestecarea de la sursă la destinație. 255 este opac, 0 lasă destinația neschimbată. Interval: 0-255.

color_palette este o enumerare de paletă de culori (de ex. image.PALETTE_DEPTH) sau o imagine RGB565 de 256 de pixeli utilizată ca tabel de căutare a culorilor.

alpha_palette dacă nu este None este o imagine GRAYSCALE de 256 de pixeli utilizată ca tabel de căutare alfa.

hint este un SAU logic între:

scale este un tuplu cu două valori (min, max) care controlează adâncimea minimă și maximă (în mm) utilizată pentru a scala imaginea. Implicit este min/max real al cadrului.

pixformat controlează formatul final al pixelilor imaginii. Trebuie să fie image.GRAYSCALE sau image.RGB565.

copy_to_fb dacă este True scrie noua imagine în tamponul de cadre în loc să o aloce pe heap-ul MicroPython.

timeout câte milisecunde să aștepte noul cadru înainte de a genera o eroare RuntimeError. Dacă este 0 așteaptă la nesfârșit.

Constante

tof.TOF_VL53LX: int

Senzor TOF VL53L5CX sau VL53L8CX (8x8 pixeli).