tof — sterownik sensora time-of-flight

Moduł tof obsługuje sensory pomiaru odległości time-of-flight (ToF) podłączone do OpenMV Cam przez I2C. Każda ramka zwraca wartość głębi dla każdego piksela w milimetrach dla siatki stref 8x8 (VL53L5CX / VL53L8CX), którą można wyrenderować jako samodzielny obraz głębi za pomocą snapshot() lub złożyć z ramką światła widzialnego z sensora CSI za pomocą draw_depth(), zwykle przy użyciu palety kolorów takiej jak image.PALETTE_DEPTH.

Przykładowe użycie:

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)

Jeśli chcesz obrócić tablicę/obraz głębi o wielokrotność 90 stopni, przekaż następujące kombinacje hmirror/vflip/transpose do read_depth, draw_depth lub snapshot:

  • vflip=False, hmirror=False, transpose=False -> obrót o 0 stopni

  • vflip=True,  hmirror=False, transpose=True -> obrót o 90 stopni

  • vflip=True,  hmirror=True,  transpose=False -> obrót o 180 stopni

  • vflip=False, hmirror=True,  transpose=True -> obrót o 270 stopni

Funkcje

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

Inicjalizuje wbudowany sensor głębi.

type wskazuje typ sensora TOF:

Domyślnie type wynosi -1, co powoduje, że tof.init() automatycznie skanuje i inicjalizuje podłączony sensor TOF na podstawie adresu I2C.

tof.reset() None

Resetuje stan sensora głębi.

tof.deinit() None

Deinicjalizuje sensor głębi, zwalniając zasoby.

tof.width() int

Zwraca szerokość (rozdzielczość poziomą) używanego sensora głębi. Zgłasza RuntimeError, jeśli sensor nie jest zainicjalizowany.

tof.height() int

Zwraca wysokość (rozdzielczość pionową) używanego sensora głębi. Zgłasza RuntimeError, jeśli sensor nie jest zainicjalizowany.

tof.type() int

Zwraca typ używanego sensora głębi:

Zgłasza RuntimeError, jeśli sensor nie jest zainicjalizowany.

tof.refresh() int

Zwraca częstotliwość odświeżania (w Hz) używanego sensora głębi:

Zgłasza RuntimeError, jeśli sensor nie jest zainicjalizowany.

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

Zwraca krotkę zawierającą listę głębi (width * height liczb zmiennoprzecinkowych w mm), minimalną zaobserwowaną głębię oraz maksymalną zaobserwowaną głębię.

hmirror jeśli True, odbija tablicę głębi w poziomie.

vflip jeśli True, odwraca tablicę głębi w pionie.

transpose jeśli True, transponuje tablicę głębi.

timeout ile milisekund czekać na nową ramkę przed zgłoszeniem RuntimeError. Jeśli 0, czeka w nieskończoność.

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

Rysuje tablicę depth (zwróconą przez read_depth) na obrazie image, którego lewy górny róg zaczyna się w pozycji x, y.

x_scale kontroluje, o ile wyświetlany obraz jest skalowany w kierunku x (liczba zmiennoprzecinkowa). Jeśli wartość jest ujemna, obraz zostanie odbity w poziomie. Jeśli nie zostanie określona, dopasowuje się do y_scale, aby zachować proporcje.

y_scale kontroluje, o ile wyświetlany obraz jest skalowany w kierunku y (liczba zmiennoprzecinkowa). Jeśli wartość jest ujemna, obraz zostanie odbity w pionie. Jeśli nie zostanie określona, dopasowuje się do x_scale, aby zachować proporcje.

roi to krotka prostokąta obszaru zainteresowania (x, y, w, h) źródłowej tablicy głębi do narysowania.

rgb_channel to kanał RGB (0=R, 1=G, 2=B) wyodrębniany ze źródła. -1 (domyślnie) używa wszystkich kanałów.

alpha kontroluje, jak duża część źródła jest mieszana z obrazem docelowym. 255 oznacza nieprzezroczystość, 0 skutkuje brakiem modyfikacji. Zakres: 0-255.

color_palette to wyliczenie palety kolorów (np. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) lub obraz RGB565 o 256 pikselach używany jako tablica przeglądowa kolorów dla wartości głębi w skali szarości.

alpha_palette jeśli nie jest None, to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa modulująca alpha dla każdego piksela.

hint to logiczne LUB z:

scale to dwuwartościowa krotka (min, max) kontrolująca minimalną i maksymalną głębię (w mm) używaną do skalowania obrazu głębi. Domyślnie odpowiada rzeczywistym wartościom min i max tablicy głębi.

Informacja

read_depth pamięta, czy zostało wywołane z transpose=True, a draw_depth używa tego wewnętrznie do określenia rozmiaru tablicy źródłowej.

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

Odczytuje ramkę z sensora głębi i zwraca nowy obiekt image.Image, który jest typu image.GRAYSCALE lub image.RGB565.

hmirror jeśli True, odbija nowy obraz w poziomie.

vflip jeśli True, odwraca nowy obraz w pionie.

transpose jeśli True, transponuje nowy obraz.

x_scale kontroluje, o ile obraz jest skalowany w kierunku x (liczba zmiennoprzecinkowa). Wartości ujemne odbijają w poziomie. Jeśli nie zostanie określona, dopasowuje się do y_scale.

y_scale kontroluje, o ile obraz jest skalowany w kierunku y (liczba zmiennoprzecinkowa). Wartości ujemne odbijają w pionie. Jeśli nie zostanie określona, dopasowuje się do x_scale.

roi to krotka prostokąta obszaru zainteresowania (x, y, w, h) źródła do wyodrębnienia.

rgb_channel to kanał RGB (0=R, 1=G, 2=B) do wyodrębnienia. -1 (domyślnie) używa wszystkich kanałów.

alpha kontroluje mieszanie źródła z obrazem docelowym. 255 oznacza nieprzezroczystość, 0 pozostawia obraz docelowy niezmieniony. Zakres: 0-255.

color_palette to wyliczenie palety kolorów (np. image.PALETTE_DEPTH) lub obraz RGB565 o 256 pikselach używany jako tablica przeglądowa kolorów.

alpha_palette jeśli nie jest None, to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa.

hint to logiczne LUB z:

scale to dwuwartościowa krotka (min, max) kontrolująca minimalną i maksymalną głębię (w mm) używaną do skalowania obrazu. Domyślnie odpowiada rzeczywistym wartościom min/max ramki.

pixformat kontroluje końcowy format pikseli obrazu. Musi być image.GRAYSCALE lub image.RGB565.

copy_to_fb jeśli True, zapisuje nowy obraz do bufora ramki zamiast alokować go na stercie MicroPython.

timeout ile milisekund czekać na nową ramkę przed zgłoszeniem RuntimeError. Jeśli 0, czeka w nieskończoność.

Stałe

tof.TOF_VL53LX: int

Sensor TOF VL53L5CX lub VL53L8CX (8x8 pikseli).