tof — drivrutin för time-of-flight-sensor

Modulen tof driver time-of-flight-avståndssensorer (ToF) som är anslutna till en OpenMV Cam över I2C. Varje bildruta returnerar ett djupvärde per pixel i millimeter för ett 8x8-zonrutnät (VL53L5CX / VL53L8CX), som kan renderas som en fristående djupbild med snapshot() eller sammanfogas på en synligt ljus-bildruta från CSI-sensorn med draw_depth(), vanligtvis genom en färgpalett som image.PALETTE_DEPTH.

Exempel på användning:

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)

Om du vill rotera djuparrayen/-bilden i multiplar av 90 grader skickar du följande kombinationer av hmirror/vflip/transpose till read_depth, draw_depth eller snapshot:

  • vflip=False, hmirror=False, transpose=False -> 0 graders rotation

  • vflip=True,  hmirror=False, transpose=True -> 90 graders rotation

  • vflip=True,  hmirror=True,  transpose=False -> 180 graders rotation

  • vflip=False, hmirror=True,  transpose=True -> 270 graders rotation

Funktioner

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

Initierar en inbyggd djupsensor.

type anger typen av TOF-sensor:

Som standard är type -1 vilket gör att tof.init() automatiskt söker efter och initierar en ansluten TOF-sensor baserat på I2C-adressen.

tof.reset() None

Återställer djupsensorns tillstånd.

tof.deinit() None

Avinitierar djupsensorn och frigör resurser.

tof.width() int

Returnerar bredden (horisontell upplösning) för den djupsensor som används. Utlöser ett RuntimeError om sensorn inte är initierad.

tof.height() int

Returnerar höjden (vertikal upplösning) för den djupsensor som används. Utlöser ett RuntimeError om sensorn inte är initierad.

tof.type() int

Returnerar typen av den djupsensor som används:

Utlöser ett RuntimeError om sensorn inte är initierad.

tof.refresh() int

Returnerar uppdateringsfrekvensen (i Hz) för den djupsensor som används:

Utlöser ett RuntimeError om sensorn inte är initierad.

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

Returnerar en tupel som innehåller djuplistan (width * height flyttal i mm), det minsta uppmätta djupet och det största uppmätta djupet.

hmirror om True speglar djuparrayen horisontellt.

vflip om True vänder djuparrayen vertikalt.

transpose om True transponerar djuparrayen.

timeout hur många millisekunder som ska väntas på den nya bildrutan innan ett RuntimeError utlöses. Om 0 väntas för alltid.

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

Ritar en depth-array (som returneras av read_depth) på image vars övre vänstra hörn börjar vid platsen x, y.

x_scale styr hur mycket den visade bilden skalas i x-riktningen (flyttal). Om detta värde är negativt vänds bilden horisontellt. Om det inte anges matchar det y_scale för att bibehålla bildförhållandet.

y_scale styr hur mycket den visade bilden skalas i y-riktningen (flyttal). Om detta värde är negativt vänds bilden vertikalt. Om det inte anges matchar det x_scale för att bibehålla bildförhållandet.

roi är intresseområdets rektangeltupel (x, y, w, h) för den käll-djuparray som ska ritas.

rgb_channel är den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras från källan. -1 (standard) använder alla kanaler.

alpha styr hur mycket av källan som blandas in i destinationsbilden. 255 är ogenomskinlig, 0 ger ingen ändring. Intervall: 0-255.

color_palette är en färgpalettenum (t.ex. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) eller en 256-pixlars RGB565-bild som används som en färguppslagstabell på det gråskalade djupvärdet.

alpha_palette om inte None är en 256-pixlars GRAYSCALE-bild som används som en alfauppslagstabell vilken modulerar alpha per pixel.

hint är en logisk OR av:

scale är en tupel med två värden (min, max) som styr det minsta och största djupet (i mm) som används för att skala djupbilden. Standardvärdet är djuparrayens faktiska min och max.

Anteckning

read_depth kommer ihåg om den anropades med transpose=True och draw_depth använder detta internt för att dimensionera källarrayen.

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

Läser en bildruta från djupsensorn och returnerar ett nytt image.Image-objekt som är antingen image.GRAYSCALE eller image.RGB565.

hmirror om True speglar den nya bilden horisontellt.

vflip om True vänder den nya bilden vertikalt.

transpose om True transponerar den nya bilden.

x_scale styr hur mycket bilden skalas i x-riktningen (flyttal). Negativa värden vänder horisontellt. Om det inte anges matchar det y_scale.

y_scale styr hur mycket bilden skalas i y-riktningen (flyttal). Negativa värden vänder vertikalt. Om det inte anges matchar det x_scale.

roi är intresseområdets rektangeltupel (x, y, w, h) för källan som ska extraheras.

rgb_channel är den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras. -1 (standard) använder alla kanaler.

alpha styr blandning från källa till destination. 255 är ogenomskinlig, 0 lämnar destinationen oförändrad. Intervall: 0-255.

color_palette är en färgpalettenum (t.ex. image.PALETTE_DEPTH) eller en 256-pixlars RGB565-bild som används som en färguppslagstabell.

alpha_palette om inte None är en 256-pixlars GRAYSCALE-bild som används som en alfauppslagstabell.

hint är en logisk OR av:

scale är en tupel med två värden (min, max) som styr det minsta och största djupet (i mm) som används för att skala bilden. Standardvärdet är bildrutans faktiska min/max.

pixformat styr den slutliga bildens pixelformat. Måste vara image.GRAYSCALE eller image.RGB565.

copy_to_fb om True skrivs den nya bilden in i bildbufferten istället för att allokeras på MicroPython-heapen.

timeout hur många millisekunder som ska väntas på den nya bildrutan innan ett RuntimeError utlöses. Om 0 väntas för alltid.

Konstanter

tof.TOF_VL53LX: int

VL53L5CX- eller VL53L8CX-TOF-sensor (8x8 pixlar).