tof — time-of-flight-sensorin ohjain

Moduuli tof ohjaa time-of-flight (ToF) -etäisyyssensoreita, jotka on liitetty OpenMV Cam -kameraan I2C:n kautta. Jokainen kehys palauttaa pikselikohtaisen syvyysarvon millimetreinä 8x8-vyöhykeruudukolle (VL53L5CX / VL53L8CX), joka voidaan esittää erillisenä syvyyskuvana funktiolla snapshot() tai yhdistää CSI-sensorin näkyvän valon kehykseen funktiolla draw_depth(), yleensä väripaletin kuten image.PALETTE_DEPTH kautta.

Esimerkkikäyttö:

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)

Jos haluat kiertää syvyystaulukkoa/kuvaa 90 asteen monikertoina, anna seuraavat hmirror/vflip/transpose-yhdistelmät funktiolle read_depth, draw_depth tai snapshot:

  • vflip=False, hmirror=False, transpose=False -> 0 asteen kierto

  • vflip=True,  hmirror=False, transpose=True -> 90 asteen kierto

  • vflip=True,  hmirror=True,  transpose=False -> 180 asteen kierto

  • vflip=False, hmirror=True,  transpose=True -> 270 asteen kierto

Funktiot

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

Alustaa sisäisen syvyyssensorin.

type ilmaisee TOF-sensorin tyypin:

Oletuksena type on -1, mikä saa funktion tof.init() automaattisesti etsimään ja alustamaan liitetyn TOF-sensorin sen I2C-osoitteen perusteella.

tof.reset() None

Nollaa syvyyssensorin tilan.

tof.deinit() None

Poistaa syvyyssensorin käytöstä vapauttaen resurssit.

tof.width() int

Palauttaa käytössä olevan syvyyssensorin leveyden (vaakaresoluution). Nostaa RuntimeError-poikkeuksen, jos sensoria ei ole alustettu.

tof.height() int

Palauttaa käytössä olevan syvyyssensorin korkeuden (pystyresoluution). Nostaa RuntimeError-poikkeuksen, jos sensoria ei ole alustettu.

tof.type() int

Palauttaa käytössä olevan syvyyssensorin tyypin:

Nostaa RuntimeError-poikkeuksen, jos sensoria ei ole alustettu.

tof.refresh() int

Palauttaa käytössä olevan syvyyssensorin päivitystaajuuden (hertseinä):

Nostaa RuntimeError-poikkeuksen, jos sensoria ei ole alustettu.

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

Palauttaa monikon, joka sisältää syvyyslistan (width * height liukulukua millimetreinä), havaitun minimisyvyyden ja havaitun maksimisyvyyden.

hmirror jos True, peilaa syvyystaulukon vaakasuunnassa.

vflip jos True, kääntää syvyystaulukon pystysuunnassa.

transpose jos True, transponoi syvyystaulukon.

timeout kuinka monta millisekuntia odotetaan uutta kehystä ennen RuntimeError-poikkeuksen nostamista. Jos 0, odotetaan ikuisesti.

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

Piirtää depth-taulukon (sellaisena kuin funktio read_depth palauttaa) kuvaan image, jonka vasen yläkulma alkaa sijainnista x, y.

x_scale ohjaa, kuinka paljon näytettävää kuvaa skaalataan x-suunnassa (liukuluku). Jos arvo on negatiivinen, kuva peilataan vaakasuunnassa. Jos arvoa ei ole määritetty, se vastaa y_scale-arvoa kuvasuhteen säilyttämiseksi.

y_scale ohjaa, kuinka paljon näytettävää kuvaa skaalataan y-suunnassa (liukuluku). Jos arvo on negatiivinen, kuva peilataan pystysuunnassa. Jos arvoa ei ole määritetty, se vastaa x_scale-arvoa kuvasuhteen säilyttämiseksi.

roi on lähdesyvyystaulukon piirrettävä kohdealueen suorakulmiomonikko (x, y, w, h).

rgb_channel on RGB-kanava (0=R, 1=G, 2=B), joka poimitaan lähteestä. -1 (oletus) käyttää kaikkia kanavia.

alpha ohjaa, kuinka paljon lähteestä sekoitetaan kohdekuvaan. 255 on läpinäkymätön, 0 ei muuta kuvaa lainkaan. Alue: 0-255.

color_palette on väripaletin enum-arvo (esim. image.PALETTE_DEPTH, image.PALETTE_RAINBOW) tai 256 pikselin RGB565-kuva, jota käytetään värihakutauluna harmaasävyiselle syvyysarvolle.

alpha_palette jos ei None, on 256 pikselin GRAYSCALE-kuva, jota käytetään alfahakutauluna moduloimaan alpha-arvoa pikselikohtaisesti.

hint on looginen TAI seuraavista:

scale on kaksiarvoinen monikko (min, max), joka ohjaa syvyyskuvan skaalaukseen käytettävää minimi- ja maksimisyvyyttä (millimetreinä). Oletuksena syvyystaulukon todellinen minimi ja maksimi.

Muista

read_depth muistaa, kutsuttiinko sitä arvolla transpose=True, ja draw_depth käyttää tätä sisäisesti lähdetaulukon koon määrittämiseen.

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

Lukee kehyksen syvyyssensorilta ja palauttaa uuden image.Image-objektin, joka on joko image.GRAYSCALE tai image.RGB565.

hmirror jos True, peilaa uuden kuvan vaakasuunnassa.

vflip jos True, kääntää uuden kuvan pystysuunnassa.

transpose jos True, transponoi uuden kuvan.

x_scale ohjaa, kuinka paljon kuvaa skaalataan x-suunnassa (liukuluku). Negatiiviset arvot peilaavat vaakasuunnassa. Jos arvoa ei ole määritetty, se vastaa y_scale-arvoa.

y_scale ohjaa, kuinka paljon kuvaa skaalataan y-suunnassa (liukuluku). Negatiiviset arvot peilaavat pystysuunnassa. Jos arvoa ei ole määritetty, se vastaa x_scale-arvoa.

roi on poimittavan lähteen kohdealueen suorakulmiomonikko (x, y, w, h).

rgb_channel on poimittava RGB-kanava (0=R, 1=G, 2=B). -1 (oletus) käyttää kaikkia kanavia.

alpha ohjaa lähteen ja kohteen välistä sekoitusta. 255 on läpinäkymätön, 0 jättää kohteen ennalleen. Alue: 0-255.

color_palette on väripaletin enum-arvo (esim. image.PALETTE_DEPTH) tai 256 pikselin RGB565-kuva, jota käytetään värihakutauluna.

alpha_palette jos ei None, on 256 pikselin GRAYSCALE-kuva, jota käytetään alfahakutauluna.

hint on looginen TAI seuraavista:

scale on kaksiarvoinen monikko (min, max), joka ohjaa kuvan skaalaukseen käytettävää minimi- ja maksimisyvyyttä (millimetreinä). Oletuksena kehyksen todellinen minimi/maksimi.

pixformat ohjaa lopullisen kuvan pikselimuotoa. Oltava image.GRAYSCALE tai image.RGB565.

copy_to_fb jos True, kirjoittaa uuden kuvan kehyspuskuriin sen sijaan, että varaisi sen MicroPython-keosta.

timeout kuinka monta millisekuntia odotetaan uutta kehystä ennen RuntimeError-poikkeuksen nostamista. Jos 0, odotetaan ikuisesti.

Vakiot

tof.TOF_VL53LX: int

VL53L5CX- tai VL53L8CX-TOF-sensori (8x8 pikseliä).