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.
typegeeft het type TOF-sensor aan:tof.TOF_VL53LX: 8x8 pixels.
Standaard is
type-1, waardoortof.init()automatisch een aangesloten TOF-sensor scant en initialiseert op basis van het I2C-adres.
- tof.width() int¶
Geeft de breedte (horizontale resolutie) terug van de gebruikte dieptesensor. Veroorzaakt een
RuntimeErrorals de sensor niet is geïnitialiseerd.
- tof.height() int¶
Geeft de hoogte (verticale resolutie) terug van de gebruikte dieptesensor. Veroorzaakt een
RuntimeErrorals de sensor niet is geïnitialiseerd.
- tof.type() int¶
Geeft het type terug van de gebruikte dieptesensor:
Veroorzaakt een
RuntimeErrorals de sensor niet is geïnitialiseerd.
- tof.refresh() int¶
Geeft de verversingssnelheid (in Hz) terug van de gebruikte dieptesensor:
tof.TOF_VL53LX: 15 Hz.
Veroorzaakt een
RuntimeErrorals 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 * heightfloats in mm), de minimale waargenomen diepte en de maximale waargenomen diepte.hmirrorspiegelt de dieptearray horizontaal indienTrue.vflipspiegelt de dieptearray verticaal indienTrue.transposetransponeert de dieptearray indienTrue.timeouthoeveel milliseconden er op het nieuwe frame moet worden gewacht voordat eenRuntimeErrorwordt veroorzaakt. Bij0wordt 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 doorread_depth) opimage, waarvan de linkerbovenhoek begint op locatiex,y.x_scalebepaalt 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 mety_scaleom de beeldverhouding te behouden.y_scalebepaalt 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 metx_scaleom de beeldverhouding te behouden.roiis de tuple(x, y, w, h)van het aandachtsgebied-rechthoek van de bron-dieptearray die getekend moet worden.rgb_channelis het RGB-kanaal (0=R, 1=G, 2=B) dat uit de bron moet worden geëxtraheerd.-1(standaard) gebruikt alle kanalen.alphabepaalt hoeveel van de bron in de doelafbeelding wordt gemengd.255is ondoorzichtig,0resulteert in geen wijziging. Bereik: 0-255.color_paletteis 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_paletteis, indien nietNone, een GRAYSCALE-afbeelding van 256 pixels die als alfa-opzoektabel wordt gebruikt enalphaper pixel moduleert.hintis een logische OR van:image.AREA: Gebruik gebiedsschaling bij het verkleinen.image.BILINEAR: Gebruik bilineaire schaling.image.BICUBIC: Gebruik bicubische schaling.image.CENTER: Centreer de afbeelding op de bestemming.image.HMIRROR: Spiegel horizontaal.image.VFLIP: Spiegel verticaal.image.TRANSPOSE: Transponeer (verwissel x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Pas rgb_channel-extractie toe vóór het schalen.image.APPLY_COLOR_PALETTE_FIRST: Pas het kleurenpalet toe vóór het schalen.image.SCALE_ASPECT_KEEP: Pas binnen de bestemming met behoud van de beeldverhouding.image.SCALE_ASPECT_EXPAND: Vul de bestemming met behoud van de beeldverhouding (snijdt bij).image.SCALE_ASPECT_IGNORE: Vul de bestemming zonder rekening te houden met de beeldverhouding (rekt uit).image.ROTATE_90: Roteer met 90 graden.image.ROTATE_180: Roteer met 180 graden.image.ROTATE_270: Roteer met 270 graden.
scaleis 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_depthonthoudt of het werd aangeroepen mettranspose=Trueendraw_depthgebruikt 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 ofwelimage.GRAYSCALEofimage.RGB565is.hmirrorspiegelt de nieuwe afbeelding horizontaal indienTrue.vflipspiegelt de nieuwe afbeelding verticaal indienTrue.transposetransponeert de nieuwe afbeelding indienTrue.x_scalebepaalt hoeveel de afbeelding in de x-richting wordt geschaald (float). Negatieve waarden spiegelen horizontaal. Indien niet opgegeven, komt deze overeen mety_scale.y_scalebepaalt hoeveel de afbeelding in de y-richting wordt geschaald (float). Negatieve waarden spiegelen verticaal. Indien niet opgegeven, komt deze overeen metx_scale.roiis de tuple(x, y, w, h)van het aandachtsgebied-rechthoek van de bron die geëxtraheerd moet worden.rgb_channelis het RGB-kanaal (0=R, 1=G, 2=B) dat geëxtraheerd moet worden.-1(standaard) gebruikt alle kanalen.alphabepaalt de menging van bron naar bestemming.255is ondoorzichtig,0laat de bestemming ongewijzigd. Bereik: 0-255.color_paletteis een kleurenpalet-enum (bijv.image.PALETTE_DEPTH) of een RGB565-afbeelding van 256 pixels die als kleuropzoektabel wordt gebruikt.alpha_paletteis, indien nietNone, een GRAYSCALE-afbeelding van 256 pixels die als alfa-opzoektabel wordt gebruikt.hintis een logische OR van:image.AREA: Gebruik gebiedsschaling bij het verkleinen.image.BILINEAR: Gebruik bilineaire schaling.image.BICUBIC: Gebruik bicubische schaling.image.CENTER: Centreer de afbeelding op de bestemming.image.HMIRROR: Spiegel horizontaal.image.VFLIP: Spiegel verticaal.image.TRANSPOSE: Transponeer (verwissel x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Pas rgb_channel-extractie toe vóór het schalen.image.APPLY_COLOR_PALETTE_FIRST: Pas het kleurenpalet toe vóór het schalen.image.SCALE_ASPECT_KEEP: Pas binnen de bestemming met behoud van de beeldverhouding.image.SCALE_ASPECT_EXPAND: Vul de bestemming met behoud van de beeldverhouding (snijdt bij).image.SCALE_ASPECT_IGNORE: Vul de bestemming zonder rekening te houden met de beeldverhouding (rekt uit).image.ROTATE_90: Roteer met 90 graden.image.ROTATE_180: Roteer met 180 graden.image.ROTATE_270: Roteer met 270 graden.
scaleis 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.pixformatbepaalt het uiteindelijke pixelformaat van de afbeelding. Moetimage.GRAYSCALEofimage.RGB565zijn.copy_to_fbschrijft de nieuwe afbeelding in de framebuffer in plaats van deze op de MicroPython-heap toe te wijzen, indienTrue.timeouthoeveel milliseconden er op het nieuwe frame moet worden gewacht voordat eenRuntimeErrorwordt veroorzaakt. Bij0wordt er oneindig gewacht.