tof — driver per sensore time-of-flight

Il modulo tof pilota i sensori di misurazione della distanza time-of-flight (ToF) collegati a una OpenMV Cam tramite I2C. Ogni frame restituisce un valore di profondità per pixel in millimetri per una griglia di zone 8x8 (VL53L5CX / VL53L8CX), che può essere visualizzata come immagine di profondità autonoma con snapshot() oppure sovrapposta a un frame in luce visibile dal sensore CSI con draw_depth(), normalmente attraverso una palette di colori come image.PALETTE_DEPTH.

Esempio di utilizzo:

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)

Se desideri ruotare l’array/immagine di profondità di multipli di 90 gradi, passa le seguenti combinazioni di hmirror/vflip/transpose a read_depth, draw_depth o snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotazione di 0 gradi

  • vflip=True,  hmirror=False, transpose=True -> rotazione di 90 gradi

  • vflip=True,  hmirror=True,  transpose=False -> rotazione di 180 gradi

  • vflip=False, hmirror=True,  transpose=True -> rotazione di 270 gradi

Funzioni

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

Inizializza un sensore di profondità integrato.

type indica il tipo di sensore TOF:

Per impostazione predefinita type è -1, il che fa sì che tof.init() esegua automaticamente la scansione e inizializzi un sensore TOF collegato in base all’indirizzo I2C.

tof.reset() None

Reimposta lo stato del sensore di profondità.

tof.deinit() None

Deinizializza il sensore di profondità liberando le risorse.

tof.width() int

Restituisce la larghezza (risoluzione orizzontale) del sensore di profondità in uso. Solleva un RuntimeError se il sensore non è inizializzato.

tof.height() int

Restituisce l’altezza (risoluzione verticale) del sensore di profondità in uso. Solleva un RuntimeError se il sensore non è inizializzato.

tof.type() int

Restituisce il tipo del sensore di profondità in uso:

Solleva un RuntimeError se il sensore non è inizializzato.

tof.refresh() int

Restituisce la frequenza di aggiornamento (in Hz) del sensore di profondità in uso:

Solleva un RuntimeError se il sensore non è inizializzato.

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

Restituisce una tupla contenente la lista di profondità (width * height float in mm), la profondità minima rilevata e la profondità massima rilevata.

hmirror se True esegue il mirroring orizzontale dell’array di profondità.

vflip se True capovolge verticalmente l’array di profondità.

transpose se True traspone l’array di profondità.

timeout quanti millisecondi attendere il nuovo frame prima di sollevare un RuntimeError. Se 0 attende all’infinito.

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

Disegna un array depth (come restituito da read_depth) su image il cui angolo in alto a sinistra parte dalla posizione x, y.

x_scale controlla di quanto l’immagine visualizzata viene scalata nella direzione x (float). Se questo valore è negativo l’immagine verrà capovolta orizzontalmente. Se non specificato corrisponde a y_scale per mantenere le proporzioni.

y_scale controlla di quanto l’immagine visualizzata viene scalata nella direzione y (float). Se questo valore è negativo l’immagine verrà capovolta verticalmente. Se non specificato corrisponde a x_scale per mantenere le proporzioni.

roi è la tupla del rettangolo della regione di interesse (x, y, w, h) dell’array di profondità sorgente da disegnare.

rgb_channel è il canale RGB (0=R, 1=G, 2=B) da estrarre dalla sorgente. -1 (predefinito) utilizza tutti i canali.

alpha controlla quanto della sorgente viene fuso nell’immagine di destinazione. 255 è opaco, 0 non produce alcuna modifica. Intervallo: 0-255.

color_palette è un enum di palette di colori (ad es. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) o un’immagine RGB565 di 256 pixel utilizzata come tabella di lookup dei colori sul valore di profondità in scala di grigi.

alpha_palette se non è None è un’immagine GRAYSCALE di 256 pixel utilizzata come tabella di lookup alpha che modula alpha per pixel.

hint è un OR logico di:

scale è una tupla a due valori (min, max) che controlla la profondità minima e massima (in mm) utilizzata per scalare l’immagine di profondità. Per impostazione predefinita corrisponde ai valori minimo e massimo effettivi dell’array di profondità.

Nota

read_depth ricorda se è stato chiamato con transpose=True e draw_depth lo utilizza internamente per dimensionare l’array sorgente.

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

Legge un frame dal sensore di profondità e restituisce un nuovo oggetto image.Image che è image.GRAYSCALE o image.RGB565.

hmirror se True esegue il mirroring orizzontale della nuova immagine.

vflip se True capovolge verticalmente la nuova immagine.

transpose se True traspone la nuova immagine.

x_scale controlla di quanto l’immagine viene scalata nella direzione x (float). I valori negativi capovolgono orizzontalmente. Se non specificato corrisponde a y_scale.

y_scale controlla di quanto l’immagine viene scalata nella direzione y (float). I valori negativi capovolgono verticalmente. Se non specificato corrisponde a x_scale.

roi è la tupla del rettangolo della regione di interesse (x, y, w, h) della sorgente da estrarre.

rgb_channel è il canale RGB (0=R, 1=G, 2=B) da estrarre. -1 (predefinito) utilizza tutti i canali.

alpha controlla la fusione tra sorgente e destinazione. 255 è opaco, 0 lascia la destinazione invariata. Intervallo: 0-255.

color_palette è un enum di palette di colori (ad es. image.PALETTE_DEPTH) o un’immagine RGB565 di 256 pixel utilizzata come tabella di lookup dei colori.

alpha_palette se non è None è un’immagine GRAYSCALE di 256 pixel utilizzata come tabella di lookup alpha.

hint è un OR logico di:

scale è una tupla a due valori (min, max) che controlla la profondità minima e massima (in mm) utilizzata per scalare l’immagine. Per impostazione predefinita corrisponde ai valori minimo/massimo effettivi del frame.

pixformat controlla il formato pixel finale dell’immagine. Deve essere image.GRAYSCALE o image.RGB565.

copy_to_fb se True scrive la nuova immagine nel frame buffer invece di allocarla sull’heap di MicroPython.

timeout quanti millisecondi attendere il nuovo frame prima di sollevare un RuntimeError. Se 0 attende all’infinito.

Costanti

tof.TOF_VL53LX: int

Sensore TOF VL53L5CX o VL53L8CX (8x8 pixel).