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.
typeindica il tipo di sensore TOF:tof.TOF_VL53LX: 8x8 pixel.
Per impostazione predefinita
typeè-1, il che fa sì chetof.init()esegua automaticamente la scansione e inizializzi un sensore TOF collegato in base all’indirizzo I2C.
- tof.width() int¶
Restituisce la larghezza (risoluzione orizzontale) del sensore di profondità in uso. Solleva un
RuntimeErrorse il sensore non è inizializzato.
- tof.height() int¶
Restituisce l’altezza (risoluzione verticale) del sensore di profondità in uso. Solleva un
RuntimeErrorse il sensore non è inizializzato.
- tof.type() int¶
Restituisce il tipo del sensore di profondità in uso:
Solleva un
RuntimeErrorse il sensore non è inizializzato.
- tof.refresh() int¶
Restituisce la frequenza di aggiornamento (in Hz) del sensore di profondità in uso:
tof.TOF_VL53LX: 15 Hz.
Solleva un
RuntimeErrorse 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 * heightfloat in mm), la profondità minima rilevata e la profondità massima rilevata.hmirrorseTrueesegue il mirroring orizzontale dell’array di profondità.vflipseTruecapovolge verticalmente l’array di profondità.transposeseTruetraspone l’array di profondità.timeoutquanti millisecondi attendere il nuovo frame prima di sollevare unRuntimeError. Se0attende 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 daread_depth) suimageil cui angolo in alto a sinistra parte dalla posizionex,y.x_scalecontrolla di quanto l’immagine visualizzata viene scalata nella direzione x (float). Se questo valore è negativo l’immagine verrà capovolta orizzontalmente. Se non specificato corrisponde ay_scaleper mantenere le proporzioni.y_scalecontrolla di quanto l’immagine visualizzata viene scalata nella direzione y (float). Se questo valore è negativo l’immagine verrà capovolta verticalmente. Se non specificato corrisponde ax_scaleper 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.alphacontrolla quanto della sorgente viene fuso nell’immagine di destinazione.255è opaco,0non 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_palettese non èNoneè un’immagine GRAYSCALE di 256 pixel utilizzata come tabella di lookup alpha che modulaalphaper pixel.hintè un OR logico di:image.AREA: Utilizza lo scaling per area durante la riduzione.image.BILINEAR: Utilizza lo scaling bilineare.image.BICUBIC: Utilizza lo scaling bicubico.image.CENTER: Centra l’immagine sulla destinazione.image.HMIRROR: Mirroring orizzontale.image.VFLIP: Capovolgimento verticale.image.TRANSPOSE: Trasposizione (scambio x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applica l’estrazione di rgb_channel prima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applica la palette di colori prima dello scaling.image.SCALE_ASPECT_KEEP: Adatta all’interno della destinazione mantenendo le proporzioni.image.SCALE_ASPECT_EXPAND: Riempie la destinazione mantenendo le proporzioni (ritaglia).image.SCALE_ASPECT_IGNORE: Riempie la destinazione ignorando le proporzioni (allunga).image.ROTATE_90: Ruota di 90 gradi.image.ROTATE_180: Ruota di 180 gradi.image.ROTATE_270: Ruota di 270 gradi.
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_depthricorda se è stato chiamato contranspose=Trueedraw_depthlo 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.Imageche èimage.GRAYSCALEoimage.RGB565.hmirrorseTrueesegue il mirroring orizzontale della nuova immagine.vflipseTruecapovolge verticalmente la nuova immagine.transposeseTruetraspone la nuova immagine.x_scalecontrolla di quanto l’immagine viene scalata nella direzione x (float). I valori negativi capovolgono orizzontalmente. Se non specificato corrisponde ay_scale.y_scalecontrolla di quanto l’immagine viene scalata nella direzione y (float). I valori negativi capovolgono verticalmente. Se non specificato corrisponde ax_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.alphacontrolla la fusione tra sorgente e destinazione.255è opaco,0lascia 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_palettese non èNoneè un’immagine GRAYSCALE di 256 pixel utilizzata come tabella di lookup alpha.hintè un OR logico di:image.AREA: Utilizza lo scaling per area durante la riduzione.image.BILINEAR: Utilizza lo scaling bilineare.image.BICUBIC: Utilizza lo scaling bicubico.image.CENTER: Centra l’immagine sulla destinazione.image.HMIRROR: Mirroring orizzontale.image.VFLIP: Capovolgimento verticale.image.TRANSPOSE: Trasposizione (scambio x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applica l’estrazione di rgb_channel prima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applica la palette di colori prima dello scaling.image.SCALE_ASPECT_KEEP: Adatta all’interno della destinazione mantenendo le proporzioni.image.SCALE_ASPECT_EXPAND: Riempie la destinazione mantenendo le proporzioni (ritaglia).image.SCALE_ASPECT_IGNORE: Riempie la destinazione ignorando le proporzioni (allunga).image.ROTATE_90: Ruota di 90 gradi.image.ROTATE_180: Ruota di 180 gradi.image.ROTATE_270: Ruota di 270 gradi.
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.pixformatcontrolla il formato pixel finale dell’immagine. Deve essereimage.GRAYSCALEoimage.RGB565.copy_to_fbseTruescrive la nuova immagine nel frame buffer invece di allocarla sull’heap di MicroPython.timeoutquanti millisecondi attendere il nuovo frame prima di sollevare unRuntimeError. Se0attende all’infinito.