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.

type gibt den Typ des TOF-Sensors an:

Standardmäßig ist type -1, wodurch tof.init() automatisch einen angeschlossenen TOF-Sensor anhand der I2C-Adresse erkennt und initialisiert.

tof.reset() None

Setzt den Zustand des Tiefensensors zurück.

tof.deinit() None

Deinitialisiert den Tiefensensor und gibt Ressourcen frei.

tof.width() int

Gibt die Breite (horizontale Auflösung) des verwendeten Tiefensensors zurück. Löst einen RuntimeError aus, wenn der Sensor nicht initialisiert ist.

tof.height() int

Gibt die Höhe (vertikale Auflösung) des verwendeten Tiefensensors zurück. Löst einen RuntimeError aus, wenn der Sensor nicht initialisiert ist.

tof.type() int

Gibt den Typ des verwendeten Tiefensensors zurück:

Löst einen RuntimeError aus, wenn der Sensor nicht initialisiert ist.

tof.refresh() int

Gibt die Aktualisierungsrate (in Hz) des verwendeten Tiefensensors zurück:

Löst einen RuntimeError aus, 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 * height Floats in mm), die minimal beobachtete Tiefe und die maximal beobachtete Tiefe enthält.

hmirror spiegelt das Tiefen-Array horizontal, wenn True.

vflip spiegelt das Tiefen-Array vertikal, wenn True.

transpose transponiert das Tiefen-Array, wenn True.

timeout gibt an, wie viele Millisekunden auf das neue Einzelbild gewartet wird, bevor ein RuntimeError ausgelöst wird. Bei 0 wird 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 von read_depth zurückgegeben) auf image, dessen obere linke Ecke an der Position x, y beginnt.

x_scale steuert, wie stark das angezeigte Bild in x-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild horizontal gespiegelt. Wenn nicht angegeben, entspricht er y_scale, um das Seitenverhältnis beizubehalten.

y_scale steuert, wie stark das angezeigte Bild in y-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild vertikal gespiegelt. Wenn nicht angegeben, entspricht er x_scale, um das Seitenverhältnis beizubehalten.

roi ist das Interessensbereich-Rechteck-Tupel (x, y, w, h) des zu zeichnenden Quell-Tiefen-Arrays.

rgb_channel ist der RGB-Kanal (0=R, 1=G, 2=B), der aus der Quelle extrahiert wird. -1 (Standard) verwendet alle Kanäle.

alpha steuert, wie stark die Quelle in das Zielbild eingeblendet wird. 255 ist undurchsichtig, 0 bewirkt keine Änderung. Bereich: 0-255.

color_palette ist 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_palette ist, wenn nicht None, ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Lookup-Tabelle verwendet wird und alpha pro Pixel moduliert.

hint ist eine logische ODER-Verknüpfung von:

scale ist 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_depth merkt sich, ob es mit transpose=True aufgerufen wurde, und draw_depth verwendet 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 entweder image.GRAYSCALE oder image.RGB565 ist.

hmirror spiegelt das neue Bild horizontal, wenn True.

vflip spiegelt das neue Bild vertikal, wenn True.

transpose transponiert das neue Bild, wenn True.

x_scale steuert, wie stark das Bild in x-Richtung skaliert wird (Float). Negative Werte spiegeln horizontal. Wenn nicht angegeben, entspricht er y_scale.

y_scale steuert, wie stark das Bild in y-Richtung skaliert wird (Float). Negative Werte spiegeln vertikal. Wenn nicht angegeben, entspricht er x_scale.

roi ist das Interessensbereich-Rechteck-Tupel (x, y, w, h) der zu extrahierenden Quelle.

rgb_channel ist der RGB-Kanal (0=R, 1=G, 2=B), der extrahiert wird. -1 (Standard) verwendet alle Kanäle.

alpha steuert die Überblendung von Quelle zu Ziel. 255 ist undurchsichtig, 0 lässt das Ziel unverändert. Bereich: 0-255.

color_palette ist ein Farbpaletten-Enum (z. B. image.PALETTE_DEPTH) oder ein 256-Pixel-RGB565-Bild, das als Farb-Lookup-Tabelle verwendet wird.

alpha_palette ist, wenn nicht None, ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Lookup-Tabelle verwendet wird.

hint ist eine logische ODER-Verknüpfung von:

scale ist 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.

pixformat steuert das endgültige Pixelformat des Bilds. Muss image.GRAYSCALE oder image.RGB565 sein.

copy_to_fb schreibt, wenn True, das neue Bild in den Framebuffer, anstatt es auf dem MicroPython-Heap zu allokieren.

timeout gibt an, wie viele Millisekunden auf das neue Einzelbild gewartet wird, bevor ein RuntimeError ausgelöst wird. Bei 0 wird unbegrenzt gewartet.

Konstanten

tof.TOF_VL53LX: int

VL53L5CX- oder VL53L8CX-TOF-Sensor (8x8 Pixel).