tof --- Trình điều khiển cảm biến đo khoảng cách bằng thời gian bay

Mô-đun tof điều khiển các cảm biến đo khoảng cách time-of-flight (ToF) được gắn vào OpenMV Cam qua I2C. Mỗi khung hình trả về giá trị độ sâu theo điểm ảnh tính bằng milimet cho lưới 8x8 vùng (VL53L5CX / VL53L8CX), có thể được hiển thị như ảnh độ sâu độc lập với snapshot() hoặc chồng lên khung hình ánh sáng nhìn thấy từ cảm biến CSI với draw_depth(), thường qua bảng màu như image.PALETTE_DEPTH.

Ví dụ sử dụng:

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)

Nếu bạn muốn xoay mảng/ảnh độ sâu theo bội số của 90 độ, hãy truyền các tổ hợp hmirror/vflip/transpose sau cho read_depth, draw_depth, hoặc snapshot:

  • vflip=False, hmirror=False, transpose=False -> Xoay 0 độ

  • vflip=True,  hmirror=False, transpose=True -> Xoay 90 độ

  • vflip=True,  hmirror=True,  transpose=False -> Xoay 180 độ

  • vflip=False, hmirror=True,  transpose=True -> Xoay 270 độ

Hàm

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

Khởi tạo cảm biến độ sâu tích hợp.

type chỉ định loại cảm biến TOF:

Mặc định type-1, khiến tof.init() tự động quét và khởi tạo cảm biến TOF được gắn dựa trên địa chỉ I2C.

tof.reset() None

Đặt lại trạng thái cảm biến độ sâu.

tof.deinit() None

Hủy khởi tạo cảm biến độ sâu, giải phóng tài nguyên.

tof.width() int

Trả về chiều rộng (độ phân giải ngang) của cảm biến độ sâu đang sử dụng. Phát sinh RuntimeError nếu cảm biến chưa được khởi tạo.

tof.height() int

Trả về chiều cao (độ phân giải dọc) của cảm biến độ sâu đang sử dụng. Phát sinh RuntimeError nếu cảm biến chưa được khởi tạo.

tof.type() int

Trả về loại cảm biến độ sâu đang sử dụng:

Phát sinh RuntimeError nếu cảm biến chưa được khởi tạo.

tof.refresh() int

Trả về tốc độ làm mới (tính bằng Hz) của cảm biến độ sâu đang sử dụng:

Phát sinh RuntimeError nếu cảm biến chưa được khởi tạo.

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

Trả về một bộ chứa danh sách độ sâu (width * height số thực tính bằng mm), giá trị độ sâu nhỏ nhất và lớn nhất quan sát được.

hmirror nếu True lật ngang mảng độ sâu.

vflip nếu True lật dọc mảng độ sâu.

transpose nếu True chuyển vị mảng độ sâu.

timeout số mili giây chờ khung hình mới trước khi phát sinh RuntimeError. Nếu bằng 0 thì chờ vô thời hạn.

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

Vẽ mảng depth (như được trả về bởi read_depth) lên image với góc trên bên trái bắt đầu tại vị trí x, y.

x_scale kiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều x (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật ngang. Nếu không chỉ định thì nó khớp với y_scale để duy trì tỷ lệ khung hình.

y_scale kiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều y (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật dọc. Nếu không chỉ định thì nó khớp với x_scale để duy trì tỷ lệ khung hình.

roi là bộ hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của mảng độ sâu nguồn cần vẽ.

rgb_channel là kênh RGB (0=R, 1=G, 2=B) để trích xuất từ nguồn. -1 (mặc định) sử dụng tất cả các kênh.

alpha kiểm soát mức độ pha trộn của nguồn vào ảnh đích. 255 là không trong suốt, 0 không thay đổi gì. Phạm vi: 0-255.

color_palette là enum bảng màu (ví dụ image.PALETTE_DEPTH, image.PALETTE_RAINBOW) hoặc ảnh RGB565 256 điểm ảnh được dùng làm bảng tra cứu màu sắc cho giá trị độ sâu thang xám.

alpha_palette nếu không phải None thì là ảnh GRAYSCALE 256 điểm ảnh dùng làm bảng tra cứu alpha điều biến alpha theo từng điểm ảnh.

hint là phép OR logic của:

scale là bộ hai giá trị (min, max) kiểm soát độ sâu tối thiểu và tối đa (tính bằng mm) dùng để chia tỷ lệ ảnh độ sâu. Mặc định là giá trị min và max thực tế của mảng độ sâu.

Ghi chú

read_depth ghi nhớ nếu nó được gọi với transpose=Truedraw_depth sử dụng điều đó nội bộ để xác định kích thước mảng nguồn.

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

Đọc một khung hình từ cảm biến độ sâu và trả về một đối tượng image.Image mới, có thể là image.GRAYSCALE hoặc image.RGB565.

hmirror nếu True lật ngang ảnh mới.

vflip nếu True lật dọc ảnh mới.

transpose nếu True chuyển vị ảnh mới.

x_scale kiểm soát tỷ lệ phóng to/thu nhỏ của ảnh theo chiều x (số thực). Giá trị âm lật ngang. Nếu không chỉ định thì khớp với y_scale.

y_scale kiểm soát tỷ lệ phóng to/thu nhỏ của ảnh theo chiều y (số thực). Giá trị âm lật dọc. Nếu không chỉ định thì khớp với x_scale.

roi là bộ hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của nguồn cần trích xuất.

rgb_channel là kênh RGB (0=R, 1=G, 2=B) cần trích xuất. -1 (mặc định) sử dụng tất cả các kênh.

alpha kiểm soát pha trộn nguồn-đích. 255 là không trong suốt, 0 giữ nguyên đích. Phạm vi: 0-255.

color_palette là enum bảng màu (ví dụ image.PALETTE_DEPTH) hoặc ảnh RGB565 256 điểm ảnh dùng làm bảng tra cứu màu sắc.

alpha_palette nếu không phải None thì là ảnh GRAYSCALE 256 điểm ảnh dùng làm bảng tra cứu alpha.

hint là phép OR logic của:

scale là bộ hai giá trị (min, max) kiểm soát độ sâu tối thiểu và tối đa (tính bằng mm) dùng để chia tỷ lệ ảnh. Mặc định là giá trị min/max thực tế của khung hình.

pixformat kiểm soát định dạng điểm ảnh của ảnh cuối cùng. Phải là image.GRAYSCALE hoặc image.RGB565.

copy_to_fb nếu True ghi ảnh mới vào bộ đệm khung hình thay vì cấp phát trên heap của MicroPython.

timeout số mili giây chờ khung hình mới trước khi phát sinh RuntimeError. Nếu bằng 0 thì chờ vô thời hạn.

Hằng số

tof.TOF_VL53LX: int

Cảm biến TOF VL53L5CX hoặc VL53L8CX (8x8 điểm ảnh).