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.
typewskazuje typ sensora TOF:tof.TOF_VL53LX: 8x8 pikseli.
Domyślnie
typewynosi-1, co powoduje, żetof.init()automatycznie skanuje i inicjalizuje podłączony sensor TOF na podstawie adresu I2C.
- 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:
tof.TOF_VL53LX: 15 Hz.
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 * heightliczb zmiennoprzecinkowych w mm), minimalną zaobserwowaną głębię oraz maksymalną zaobserwowaną głębię.hmirrorjeśliTrue, odbija tablicę głębi w poziomie.vflipjeśliTrue, odwraca tablicę głębi w pionie.transposejeśliTrue, transponuje tablicę głębi.timeoutile milisekund czekać na nową ramkę przed zgłoszeniemRuntimeError. Jeśli0, 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ą przezread_depth) na obrazieimage, którego lewy górny róg zaczyna się w pozycjix,y.x_scalekontroluje, 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ę doy_scale, aby zachować proporcje.y_scalekontroluje, 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ę dox_scale, aby zachować proporcje.roito krotka prostokąta obszaru zainteresowania(x, y, w, h)źródłowej tablicy głębi do narysowania.rgb_channelto kanał RGB (0=R, 1=G, 2=B) wyodrębniany ze źródła.-1(domyślnie) używa wszystkich kanałów.alphakontroluje, jak duża część źródła jest mieszana z obrazem docelowym.255oznacza nieprzezroczystość,0skutkuje brakiem modyfikacji. Zakres: 0-255.color_paletteto 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_palettejeśli nie jestNone, to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa modulującaalphadla każdego piksela.hintto logiczne LUB z:image.AREA: Użyj skalowania obszarowego przy zmniejszaniu.image.BILINEAR: Użyj skalowania dwuliniowego.image.BICUBIC: Użyj skalowania dwusześciennego.image.CENTER: Wyśrodkuj obraz na obrazie docelowym.image.HMIRROR: Odbij w poziomie.image.VFLIP: Odwróć w pionie.image.TRANSPOSE: Transponuj (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Zastosuj wyodrębnienie rgb_channel przed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosuj paletę kolorów przed skalowaniem.image.SCALE_ASPECT_KEEP: Dopasuj do obrazu docelowego z zachowaniem proporcji.image.SCALE_ASPECT_EXPAND: Wypełnij obraz docelowy z zachowaniem proporcji (przycina).image.SCALE_ASPECT_IGNORE: Wypełnij obraz docelowy ignorując proporcje (rozciąga).image.ROTATE_90: Obróć o 90 stopni.image.ROTATE_180: Obróć o 180 stopni.image.ROTATE_270: Obróć o 270 stopni.
scaleto 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_depthpamięta, czy zostało wywołane ztranspose=True, adraw_depthuż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 typuimage.GRAYSCALElubimage.RGB565.hmirrorjeśliTrue, odbija nowy obraz w poziomie.vflipjeśliTrue, odwraca nowy obraz w pionie.transposejeśliTrue, transponuje nowy obraz.x_scalekontroluje, o ile obraz jest skalowany w kierunku x (liczba zmiennoprzecinkowa). Wartości ujemne odbijają w poziomie. Jeśli nie zostanie określona, dopasowuje się doy_scale.y_scalekontroluje, o ile obraz jest skalowany w kierunku y (liczba zmiennoprzecinkowa). Wartości ujemne odbijają w pionie. Jeśli nie zostanie określona, dopasowuje się dox_scale.roito krotka prostokąta obszaru zainteresowania(x, y, w, h)źródła do wyodrębnienia.rgb_channelto kanał RGB (0=R, 1=G, 2=B) do wyodrębnienia.-1(domyślnie) używa wszystkich kanałów.alphakontroluje mieszanie źródła z obrazem docelowym.255oznacza nieprzezroczystość,0pozostawia obraz docelowy niezmieniony. Zakres: 0-255.color_paletteto wyliczenie palety kolorów (np.image.PALETTE_DEPTH) lub obraz RGB565 o 256 pikselach używany jako tablica przeglądowa kolorów.alpha_palettejeśli nie jestNone, to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa.hintto logiczne LUB z:image.AREA: Użyj skalowania obszarowego przy zmniejszaniu.image.BILINEAR: Użyj skalowania dwuliniowego.image.BICUBIC: Użyj skalowania dwusześciennego.image.CENTER: Wyśrodkuj obraz na obrazie docelowym.image.HMIRROR: Odbij w poziomie.image.VFLIP: Odwróć w pionie.image.TRANSPOSE: Transponuj (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Zastosuj wyodrębnienie rgb_channel przed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosuj paletę kolorów przed skalowaniem.image.SCALE_ASPECT_KEEP: Dopasuj do obrazu docelowego z zachowaniem proporcji.image.SCALE_ASPECT_EXPAND: Wypełnij obraz docelowy z zachowaniem proporcji (przycina).image.SCALE_ASPECT_IGNORE: Wypełnij obraz docelowy ignorując proporcje (rozciąga).image.ROTATE_90: Obróć o 90 stopni.image.ROTATE_180: Obróć o 180 stopni.image.ROTATE_270: Obróć o 270 stopni.
scaleto 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.pixformatkontroluje końcowy format pikseli obrazu. Musi byćimage.GRAYSCALElubimage.RGB565.copy_to_fbjeśliTrue, zapisuje nowy obraz do bufora ramki zamiast alokować go na stercie MicroPython.timeoutile milisekund czekać na nową ramkę przed zgłoszeniemRuntimeError. Jeśli0, czeka w nieskończoność.