tof — time-of-flight-sensorstuurprogramma

De tof-module stuurt time-of-flight (ToF) afstandssensoren aan die via I2C op een OpenMV Cam zijn aangesloten. Elk frame levert een dieptewaarde per pixel in millimeters voor een 8x8-zonenraster (VL53L5CX / VL53L8CX), die kan worden weergegeven als een op zichzelf staande diepte-afbeelding met snapshot() of samengesteld op een zichtbaar-lichtframe van de CSI-sensor met draw_depth(), normaal gesproken via een kleurenpalet zoals image.PALETTE_DEPTH.

Voorbeeldgebruik:

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)

Als je de dieptearray/-afbeelding wilt roteren met veelvouden van 90 graden, geef dan de volgende combinaties van hmirror/vflip/transpose door aan read_depth, draw_depth of snapshot:

  • vflip=False, hmirror=False, transpose=False -> rotatie van 0 graden

  • vflip=True,  hmirror=False, transpose=True -> rotatie van 90 graden

  • vflip=True,  hmirror=True,  transpose=False -> rotatie van 180 graden

  • vflip=False, hmirror=True,  transpose=True -> rotatie van 270 graden

Functies

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

Initialiseert een ingebouwde dieptesensor.

type geeft het type TOF-sensor aan:

Standaard is type -1, waardoor tof.init() automatisch een aangesloten TOF-sensor scant en initialiseert op basis van het I2C-adres.

tof.reset() None

Reset de status van de dieptesensor.

tof.deinit() None

Deïnitialiseert de dieptesensor en maakt resources vrij.

tof.width() int

Geeft de breedte (horizontale resolutie) terug van de gebruikte dieptesensor. Veroorzaakt een RuntimeError als de sensor niet is geïnitialiseerd.

tof.height() int

Geeft de hoogte (verticale resolutie) terug van de gebruikte dieptesensor. Veroorzaakt een RuntimeError als de sensor niet is geïnitialiseerd.

tof.type() int

Geeft het type terug van de gebruikte dieptesensor:

Veroorzaakt een RuntimeError als de sensor niet is geïnitialiseerd.

tof.refresh() int

Geeft de verversingssnelheid (in Hz) terug van de gebruikte dieptesensor:

Veroorzaakt een RuntimeError als de sensor niet is geïnitialiseerd.

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

Geeft een tuple terug met de dieptelijst (width * height floats in mm), de minimale waargenomen diepte en de maximale waargenomen diepte.

hmirror spiegelt de dieptearray horizontaal indien True.

vflip spiegelt de dieptearray verticaal indien True.

transpose transponeert de dieptearray indien True.

timeout hoeveel milliseconden er op het nieuwe frame moet worden gewacht voordat een RuntimeError wordt veroorzaakt. Bij 0 wordt er oneindig gewacht.

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

Tekent een depth-array (zoals teruggegeven door read_depth) op image, waarvan de linkerbovenhoek begint op locatie x, y.

x_scale bepaalt hoeveel de weergegeven afbeelding in de x-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding horizontaal gespiegeld. Indien niet opgegeven, komt deze overeen met y_scale om de beeldverhouding te behouden.

y_scale bepaalt hoeveel de weergegeven afbeelding in de y-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding verticaal gespiegeld. Indien niet opgegeven, komt deze overeen met x_scale om de beeldverhouding te behouden.

roi is de tuple (x, y, w, h) van het aandachtsgebied-rechthoek van de bron-dieptearray die getekend moet worden.

rgb_channel is het RGB-kanaal (0=R, 1=G, 2=B) dat uit de bron moet worden geëxtraheerd. -1 (standaard) gebruikt alle kanalen.

alpha bepaalt hoeveel van de bron in de doelafbeelding wordt gemengd. 255 is ondoorzichtig, 0 resulteert in geen wijziging. Bereik: 0-255.

color_palette is een kleurenpalet-enum (bijv. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) of een RGB565-afbeelding van 256 pixels die als kleuropzoektabel op de dieptewaarde in grijswaarden wordt gebruikt.

alpha_palette is, indien niet None, een GRAYSCALE-afbeelding van 256 pixels die als alfa-opzoektabel wordt gebruikt en alpha per pixel moduleert.

hint is een logische OR van:

scale is een tuple met twee waarden (min, max) die de minimale en maximale diepte (in mm) bepaalt die wordt gebruikt om de diepte-afbeelding te schalen. Standaard de werkelijke min en max van de dieptearray.

Notitie

read_depth onthoudt of het werd aangeroepen met transpose=True en draw_depth gebruikt dat intern om de bronarray te dimensioneren.

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

Leest een frame van de dieptesensor en geeft een nieuw image.Image-object terug dat ofwel image.GRAYSCALE of image.RGB565 is.

hmirror spiegelt de nieuwe afbeelding horizontaal indien True.

vflip spiegelt de nieuwe afbeelding verticaal indien True.

transpose transponeert de nieuwe afbeelding indien True.

x_scale bepaalt hoeveel de afbeelding in de x-richting wordt geschaald (float). Negatieve waarden spiegelen horizontaal. Indien niet opgegeven, komt deze overeen met y_scale.

y_scale bepaalt hoeveel de afbeelding in de y-richting wordt geschaald (float). Negatieve waarden spiegelen verticaal. Indien niet opgegeven, komt deze overeen met x_scale.

roi is de tuple (x, y, w, h) van het aandachtsgebied-rechthoek van de bron die geëxtraheerd moet worden.

rgb_channel is het RGB-kanaal (0=R, 1=G, 2=B) dat geëxtraheerd moet worden. -1 (standaard) gebruikt alle kanalen.

alpha bepaalt de menging van bron naar bestemming. 255 is ondoorzichtig, 0 laat de bestemming ongewijzigd. Bereik: 0-255.

color_palette is een kleurenpalet-enum (bijv. image.PALETTE_DEPTH) of een RGB565-afbeelding van 256 pixels die als kleuropzoektabel wordt gebruikt.

alpha_palette is, indien niet None, een GRAYSCALE-afbeelding van 256 pixels die als alfa-opzoektabel wordt gebruikt.

hint is een logische OR van:

scale is een tuple met twee waarden (min, max) die de minimale en maximale diepte (in mm) bepaalt die wordt gebruikt om de afbeelding te schalen. Standaard de werkelijke min/max van het frame.

pixformat bepaalt het uiteindelijke pixelformaat van de afbeelding. Moet image.GRAYSCALE of image.RGB565 zijn.

copy_to_fb schrijft de nieuwe afbeelding in de framebuffer in plaats van deze op de MicroPython-heap toe te wijzen, indien True.

timeout hoeveel milliseconden er op het nieuwe frame moet worden gewacht voordat een RuntimeError wordt veroorzaakt. Bij 0 wordt er oneindig gewacht.

Constanten

tof.TOF_VL53LX: int

VL53L5CX- of VL53L8CX-TOF-sensor (8x8 pixels).