tof — Time-of-Flight-Sensortreiber¶
Das tof-Modul steuert Time-of-Flight (ToF)-Entfernungssensoren an, die über I2C an eine OpenMV Cam angeschlossen sind. Jedes Einzelbild gibt einen Tiefenwert pro Pixel in Millimetern für ein 8x8-Zonenraster (VL53L5CX / VL53L8CX) zurück, das als eigenständiges Tiefenbild mit snapshot() gerendert oder mit draw_depth() auf ein Einzelbild im sichtbaren Licht vom CSI-Sensor übergelagert werden kann, normalerweise über eine Farbpalette wie image.PALETTE_DEPTH.
Anwendungsbeispiel:
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)
Wenn Sie das Tiefen-Array/-Bild um Vielfache von 90 Grad drehen möchten, übergeben Sie die folgenden hmirror/vflip/transpose-Kombinationen an read_depth, draw_depth oder snapshot:
vflip=False, hmirror=False, transpose=False-> 0 Grad Drehung
vflip=True, hmirror=False, transpose=True-> 90 Grad Drehung
vflip=True, hmirror=True, transpose=False-> 180 Grad Drehung
vflip=False, hmirror=True, transpose=True-> 270 Grad Drehung
Funktionen¶
- tof.init(type: int = -1) None¶
Initialisiert einen integrierten Tiefensensor.
typegibt den Typ des TOF-Sensors an:tof.TOF_VL53LX: 8x8 Pixel.
Standardmäßig ist
type-1, wodurchtof.init()automatisch einen angeschlossenen TOF-Sensor anhand der I2C-Adresse erkennt und initialisiert.
- tof.width() int¶
Gibt die Breite (horizontale Auflösung) des verwendeten Tiefensensors zurück. Löst einen
RuntimeErroraus, wenn der Sensor nicht initialisiert ist.
- tof.height() int¶
Gibt die Höhe (vertikale Auflösung) des verwendeten Tiefensensors zurück. Löst einen
RuntimeErroraus, wenn der Sensor nicht initialisiert ist.
- tof.type() int¶
Gibt den Typ des verwendeten Tiefensensors zurück:
Löst einen
RuntimeErroraus, wenn der Sensor nicht initialisiert ist.
- tof.refresh() int¶
Gibt die Aktualisierungsrate (in Hz) des verwendeten Tiefensensors zurück:
tof.TOF_VL53LX: 15 Hz.
Löst einen
RuntimeErroraus, wenn der Sensor nicht initialisiert ist.
- tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]¶
Gibt ein Tupel zurück, das die Tiefenliste (
width * heightFloats in mm), die minimal beobachtete Tiefe und die maximal beobachtete Tiefe enthält.hmirrorspiegelt das Tiefen-Array horizontal, wennTrue.vflipspiegelt das Tiefen-Array vertikal, wennTrue.transposetransponiert das Tiefen-Array, wennTrue.timeoutgibt an, wie viele Millisekunden auf das neue Einzelbild gewartet wird, bevor einRuntimeErrorausgelöst wird. Bei0wird unbegrenzt gewartet.
- 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¶
Zeichnet ein
depth-Array (wie vonread_depthzurückgegeben) aufimage, dessen obere linke Ecke an der Positionx,ybeginnt.x_scalesteuert, wie stark das angezeigte Bild in x-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild horizontal gespiegelt. Wenn nicht angegeben, entspricht ery_scale, um das Seitenverhältnis beizubehalten.y_scalesteuert, wie stark das angezeigte Bild in y-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild vertikal gespiegelt. Wenn nicht angegeben, entspricht erx_scale, um das Seitenverhältnis beizubehalten.roiist das Interessensbereich-Rechteck-Tupel(x, y, w, h)des zu zeichnenden Quell-Tiefen-Arrays.rgb_channelist der RGB-Kanal (0=R, 1=G, 2=B), der aus der Quelle extrahiert wird.-1(Standard) verwendet alle Kanäle.alphasteuert, wie stark die Quelle in das Zielbild eingeblendet wird.255ist undurchsichtig,0bewirkt keine Änderung. Bereich: 0-255.color_paletteist ein Farbpaletten-Enum (z. B.image.PALETTE_DEPTH,image.PALETTE_RAINBOW) oder ein 256-Pixel-RGB565-Bild, das als Farb-Lookup-Tabelle auf den Graustufen-Tiefenwert angewendet wird.alpha_paletteist, wenn nichtNone, ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Lookup-Tabelle verwendet wird undalphapro Pixel moduliert.hintist eine logische ODER-Verknüpfung von:image.AREA: Flächenskalierung beim Herunterskalieren verwenden.image.BILINEAR: Bilineare Skalierung verwenden.image.BICUBIC: Bikubische Skalierung verwenden.image.CENTER: Das Bild auf dem Ziel zentrieren.image.HMIRROR: Horizontal spiegeln.image.VFLIP: Vertikal spiegeln.image.TRANSPOSE: Transponieren (x/y vertauschen).image.EXTRACT_RGB_CHANNEL_FIRST: rgb_channel-Extraktion vor der Skalierung anwenden.image.APPLY_COLOR_PALETTE_FIRST: Farbpalette vor der Skalierung anwenden.image.SCALE_ASPECT_KEEP: Unter Beibehaltung des Seitenverhältnisses in das Ziel einpassen.image.SCALE_ASPECT_EXPAND: Das Ziel unter Beibehaltung des Seitenverhältnisses füllen (mit Beschneidung).image.SCALE_ASPECT_IGNORE: Das Ziel unter Missachtung des Seitenverhältnisses füllen (mit Verzerrung).image.ROTATE_90: Um 90 Grad drehen.image.ROTATE_180: Um 180 Grad drehen.image.ROTATE_270: Um 270 Grad drehen.
scaleist ein Tupel mit zwei Werten(min, max), das die minimale und maximale Tiefe (in mm) steuert, die zum Skalieren des Tiefenbilds verwendet wird. Standardmäßig die tatsächliche Minimal- und Maximaltiefe des Tiefen-Arrays.Bemerkung
read_depthmerkt sich, ob es mittranspose=Trueaufgerufen wurde, unddraw_depthverwendet dies intern, um das Quell-Array zu dimensionieren.
- 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¶
Liest ein Einzelbild vom Tiefensensor und gibt ein neues
image.Image-Objekt zurück, das entwederimage.GRAYSCALEoderimage.RGB565ist.hmirrorspiegelt das neue Bild horizontal, wennTrue.vflipspiegelt das neue Bild vertikal, wennTrue.transposetransponiert das neue Bild, wennTrue.x_scalesteuert, wie stark das Bild in x-Richtung skaliert wird (Float). Negative Werte spiegeln horizontal. Wenn nicht angegeben, entspricht ery_scale.y_scalesteuert, wie stark das Bild in y-Richtung skaliert wird (Float). Negative Werte spiegeln vertikal. Wenn nicht angegeben, entspricht erx_scale.roiist das Interessensbereich-Rechteck-Tupel(x, y, w, h)der zu extrahierenden Quelle.rgb_channelist der RGB-Kanal (0=R, 1=G, 2=B), der extrahiert wird.-1(Standard) verwendet alle Kanäle.alphasteuert die Überblendung von Quelle zu Ziel.255ist undurchsichtig,0lässt das Ziel unverändert. Bereich: 0-255.color_paletteist ein Farbpaletten-Enum (z. B.image.PALETTE_DEPTH) oder ein 256-Pixel-RGB565-Bild, das als Farb-Lookup-Tabelle verwendet wird.alpha_paletteist, wenn nichtNone, ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Lookup-Tabelle verwendet wird.hintist eine logische ODER-Verknüpfung von:image.AREA: Flächenskalierung beim Herunterskalieren verwenden.image.BILINEAR: Bilineare Skalierung verwenden.image.BICUBIC: Bikubische Skalierung verwenden.image.CENTER: Das Bild auf dem Ziel zentrieren.image.HMIRROR: Horizontal spiegeln.image.VFLIP: Vertikal spiegeln.image.TRANSPOSE: Transponieren (x/y vertauschen).image.EXTRACT_RGB_CHANNEL_FIRST: rgb_channel-Extraktion vor der Skalierung anwenden.image.APPLY_COLOR_PALETTE_FIRST: Farbpalette vor der Skalierung anwenden.image.SCALE_ASPECT_KEEP: Unter Beibehaltung des Seitenverhältnisses in das Ziel einpassen.image.SCALE_ASPECT_EXPAND: Das Ziel unter Beibehaltung des Seitenverhältnisses füllen (mit Beschneidung).image.SCALE_ASPECT_IGNORE: Das Ziel unter Missachtung des Seitenverhältnisses füllen (mit Verzerrung).image.ROTATE_90: Um 90 Grad drehen.image.ROTATE_180: Um 180 Grad drehen.image.ROTATE_270: Um 270 Grad drehen.
scaleist ein Tupel mit zwei Werten(min, max), das die minimale und maximale Tiefe (in mm) steuert, die zum Skalieren des Bilds verwendet wird. Standardmäßig die tatsächliche Min/Max des Einzelbilds.pixformatsteuert das endgültige Pixelformat des Bilds. Mussimage.GRAYSCALEoderimage.RGB565sein.copy_to_fbschreibt, wennTrue, das neue Bild in den Framebuffer, anstatt es auf dem MicroPython-Heap zu allokieren.timeoutgibt an, wie viele Millisekunden auf das neue Einzelbild gewartet wird, bevor einRuntimeErrorausgelöst wird. Bei0wird unbegrenzt gewartet.