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).