tof — מנהל התקן חיישן time-of-flight

המודול tof מניע חיישני טווח time-of-flight (ToF) המחוברים ל-OpenMV Cam דרך I2C. כל פריים מחזיר ערך עומק לכל פיקסל במילימטרים עבור רשת אזורים בגודל 8x8 (VL53L5CX / VL53L8CX), אותו ניתן לעבד כתמונת עומק עצמאית באמצעות snapshot(), או להרכיב על גבי פריים באור נראה מחיישן ה-CSI באמצעות draw_depth(), בדרך כלל דרך לוח צבעים כגון image.PALETTE_DEPTH.

דוגמת שימוש:

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)

אם ברצונך לסובב את מערך/תמונת העומק בכפולות של 90 מעלות, העבר את הצירופים הבאים של hmirror/vflip/transpose אל read_depth, draw_depth או snapshot:

  • vflip=False, hmirror=False, transpose=False -> סיבוב של 0 מעלות

  • vflip=True,  hmirror=False, transpose=True -> סיבוב של 90 מעלות

  • vflip=True,  hmirror=True,  transpose=False -> סיבוב של 180 מעלות

  • vflip=False, hmirror=True,  transpose=True -> סיבוב של 270 מעלות

פונקציות

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

מאתחלת חיישן עומק מובנה.

type מציין את סוג חיישן ה-TOF:

כברירת מחדל type הוא -1, מה שגורם ל-tof.init() לסרוק ולאתחל אוטומטית חיישן TOF מחובר על בסיס כתובת ה-I2C.

tof.reset() None

מאפסת את מצב חיישן העומק.

tof.deinit() None

מבטלת את אתחול חיישן העומק תוך שחרור משאבים.

tof.width() int

מחזירה את הרוחב (רזולוציה אופקית) של חיישן העומק שבשימוש. מעלה RuntimeError אם החיישן אינו מאותחל.

tof.height() int

מחזירה את הגובה (רזולוציה אנכית) של חיישן העומק שבשימוש. מעלה RuntimeError אם החיישן אינו מאותחל.

tof.type() int

מחזירה את סוג חיישן העומק שבשימוש:

מעלה RuntimeError אם החיישן אינו מאותחל.

tof.refresh() int

מחזירה את קצב הרענון (ב-Hz) של חיישן העומק שבשימוש:

מעלה RuntimeError אם החיישן אינו מאותחל.

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

מחזירה טאפל המכיל את רשימת העומק (width * height מספרים ממשיים ב-mm), העומק המינימלי שנצפה, והעומק המקסימלי שנצפה.

hmirror אם True משקף אופקית את מערך העומק.

vflip אם True הופך אנכית את מערך העומק.

transpose אם True משחלף (transposes) את מערך העומק.

timeout כמה מילישניות להמתין לפריים החדש לפני העלאת RuntimeError. אם 0 ממתין לנצח.

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

מצייר מערך depth (כפי שמוחזר על ידי read_depth) על גבי image אשר הפינה השמאלית-עליונה שלו מתחילה במיקום x, y.

x_scale שולט בכמה התמונה המוצגת מוקטנת/מוגדלת בכיוון ה-x (מספר ממשי). אם ערך זה שלילי, התמונה תהפוך אופקית. אם לא צוין, הוא תואם ל-y_scale כדי לשמר את יחס הממדים.

y_scale שולט בכמה התמונה המוצגת מוקטנת/מוגדלת בכיוון ה-y (מספר ממשי). אם ערך זה שלילי, התמונה תהפוך אנכית. אם לא צוין, הוא תואם ל-x_scale כדי לשמר את יחס הממדים.

roi הוא טאפל מלבן אזור העניין (x, y, w, h) של מערך העומק המקורי שיש לצייר.

rgb_channel הוא ערוץ ה-RGB (0=R, 1=G, 2=B) שיש לחלץ מהמקור. -1 (ברירת מחדל) משתמש בכל הערוצים.

alpha שולט בכמה מהמקור ימוזג אל תמונת היעד. 255 הוא אטום, 0 אינו מביא לשינוי כלשהו. טווח: 0-255.

color_palette הוא enum של לוח צבעים (למשל image.PALETTE_DEPTH, image.PALETTE_RAINBOW) או תמונת RGB565 בת 256 פיקסלים המשמשת כטבלת חיפוש צבעים על ערך העומק בגווני אפור.

alpha_palette אם אינו None הוא תמונת GRAYSCALE בת 256 פיקסלים המשמשת כטבלת חיפוש אלפא המווסתת את alpha לכל פיקסל.

hint הוא OR לוגי של:

scale הוא טאפל בן שני ערכים (min, max) השולט בעומק המינימלי והמקסימלי (ב-mm) המשמשים לשינוי קנה המידה של תמונת העומק. ברירת המחדל היא הערכים המינימליים והמקסימליים בפועל של מערך העומק.

הערה

read_depth זוכר אם נקרא עם transpose=True ו-draw_depth משתמש בכך פנימית כדי לקבוע את גודל מערך המקור.

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

קורא פריים מחיישן העומק ומחזיר אובייקט image.Image חדש שהוא image.GRAYSCALE או image.RGB565.

hmirror אם True משקף אופקית את התמונה החדשה.

vflip אם True הופך אנכית את התמונה החדשה.

transpose אם True משחלף את התמונה החדשה.

x_scale שולט בכמה התמונה מוקטנת/מוגדלת בכיוון ה-x (מספר ממשי). ערכים שליליים הופכים אופקית. אם לא צוין, הוא תואם ל-y_scale.

y_scale שולט בכמה התמונה מוקטנת/מוגדלת בכיוון ה-y (מספר ממשי). ערכים שליליים הופכים אנכית. אם לא צוין, הוא תואם ל-x_scale.

roi הוא טאפל מלבן אזור העניין (x, y, w, h) של המקור שיש לחלץ.

rgb_channel הוא ערוץ ה-RGB (0=R, 1=G, 2=B) שיש לחלץ. -1 (ברירת מחדל) משתמש בכל הערוצים.

alpha שולט במיזוג ממקור ליעד. 255 הוא אטום, 0 משאיר את היעד ללא שינוי. טווח: 0-255.

color_palette הוא enum של לוח צבעים (למשל image.PALETTE_DEPTH) או תמונת RGB565 בת 256 פיקסלים המשמשת כטבלת חיפוש צבעים.

alpha_palette אם אינו None הוא תמונת GRAYSCALE בת 256 פיקסלים המשמשת כטבלת חיפוש אלפא.

hint הוא OR לוגי של:

scale הוא טאפל בן שני ערכים (min, max) השולט בעומק המינימלי והמקסימלי (ב-mm) המשמשים לשינוי קנה המידה של התמונה. ברירת המחדל היא הערכים המינימליים/מקסימליים בפועל של הפריים.

pixformat שולט בפורמט הפיקסלים הסופי של התמונה. חייב להיות image.GRAYSCALE או image.RGB565.

copy_to_fb אם True כותב את התמונה החדשה אל חוצץ הפריימים במקום להקצות אותה על ערימת (heap) ה-MicroPython.

timeout כמה מילישניות להמתין לפריים החדש לפני העלאת RuntimeError. אם 0 ממתין לנצח.

קבועים

tof.TOF_VL53LX: int

חיישן TOF מסוג VL53L5CX או VL53L8CX (8x8 פיקסלים).