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 픽셀).