tof — time-of-flight 센서 드라이버

tof 모듈은 I2C를 통해 OpenMV Cam에 연결된 time-of-flight(ToF) 거리 측정 센서를 구동합니다. 각 프레임은 8x8 영역 격자(VL53L5CX / VL53L8CX)에 대해 밀리미터 단위의 픽셀별 깊이 값을 반환하며, 이는 snapshot()으로 독립적인 깊이 이미지로 렌더링하거나, draw_depth()로 CSI 센서의 가시광 프레임 위에 합성할 수 있습니다. 보통 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()이 I2C 주소를 기준으로 연결된 TOF 센서를 자동으로 스캔하고 초기화하도록 합니다.

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 단위 부동소수점 값), 관측된 최소 깊이, 관측된 최대 깊이를 담은 튜플을 반환합니다.

hmirrorTrue이면 깊이 배열을 수평으로 미러링합니다.

vflipTrue이면 깊이 배열을 수직으로 뒤집습니다.

transposeTrue이면 깊이 배열을 전치합니다.

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

(read_depth가 반환하는) depth 배열을 imagex, 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는 색상 팔레트 열거형(예: image.PALETTE_DEPTH, image.PALETTE_RAINBOW)이거나, 그레이스케일 깊이 값에 대한 색상 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.

alpha_paletteNone이 아니면 픽셀별로 alpha를 변조하는 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.

hint는 다음 값들의 논리 OR입니다:

scale은 깊이 이미지를 스케일링하는 데 사용되는 최소 및 최대 깊이(mm 단위)를 제어하는 두 값 튜플 (min, max)입니다. 기본값은 깊이 배열의 실제 최솟값과 최댓값입니다.

참고

read_depthtranspose=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.GRAYSCALE 또는 image.RGB565 형식의 새 image.Image 객체를 반환합니다.

hmirrorTrue이면 새 이미지를 수평으로 미러링합니다.

vflipTrue이면 새 이미지를 수직으로 뒤집습니다.

transposeTrue이면 새 이미지를 전치합니다.

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는 색상 팔레트 열거형(예: image.PALETTE_DEPTH)이거나, 색상 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.

alpha_paletteNone이 아니면 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.

hint는 다음 값들의 논리 OR입니다:

scale은 이미지를 스케일링하는 데 사용되는 최소 및 최대 깊이(mm 단위)를 제어하는 두 값 튜플 (min, max)입니다. 기본값은 프레임의 실제 최솟값/최댓값입니다.

pixformat은 최종 이미지 픽셀 형식을 제어합니다. image.GRAYSCALE 또는 image.RGB565여야 합니다.

copy_to_fbTrue이면 새 이미지를 MicroPython 힙에 할당하는 대신 프레임 버퍼에 기록합니다.

timeout은 새 프레임을 기다리는 시간(밀리초 단위)으로, 이 시간이 지나면 RuntimeError를 발생시킵니다. 0이면 무한정 대기합니다.

상수

tof.TOF_VL53LX: int

VL53L5CX 또는 VL53L8CX TOF 센서(8x8 픽셀).