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 센서의 유형을 나타냅니다:tof.TOF_VL53LX: 8x8 픽셀.
기본적으로
type은-1이며, 이는tof.init()이 I2C 주소를 기준으로 연결된 TOF 센서를 자동으로 스캔하고 초기화하도록 합니다.
- tof.refresh() int¶
사용 중인 깊이 센서의 새로 고침 빈도(Hz 단위)를 반환합니다:
tof.TOF_VL53LX: 15 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이면 깊이 배열을 전치합니다.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배열을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는 색상 팔레트 열거형(예:image.PALETTE_DEPTH,image.PALETTE_RAINBOW)이거나, 그레이스케일 깊이 값에 대한 색상 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.alpha_palette는None이 아니면 픽셀별로alpha를 변조하는 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.hint는 다음 값들의 논리 OR입니다:image.AREA: 축소 시 영역 스케일링을 사용합니다.image.BILINEAR: 쌍선형(bilinear) 스케일링을 사용합니다.image.BICUBIC: 쌍삼차(bicubic) 스케일링을 사용합니다.image.CENTER: 이미지를 대상의 중앙에 배치합니다.image.HMIRROR: 수평으로 미러링합니다.image.VFLIP: 수직으로 뒤집습니다.image.TRANSPOSE: 전치합니다(x/y 교환).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에 rgb_channel 추출을 적용합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에 색상 팔레트를 적용합니다.image.SCALE_ASPECT_KEEP: 종횡비를 유지하며 대상 안에 맞춥니다.image.SCALE_ASPECT_EXPAND: 종횡비를 유지하며 대상을 채웁니다(잘림 발생).image.SCALE_ASPECT_IGNORE: 종횡비를 무시하고 대상을 채웁니다(늘어남).image.ROTATE_90: 90도 회전합니다.image.ROTATE_180: 180도 회전합니다.image.ROTATE_270: 270도 회전합니다.
scale은 깊이 이미지를 스케일링하는 데 사용되는 최소 및 최대 깊이(mm 단위)를 제어하는 두 값 튜플(min, max)입니다. 기본값은 깊이 배열의 실제 최솟값과 최댓값입니다.참고
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.GRAYSCALE또는image.RGB565형식의 새image.Image객체를 반환합니다.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는 색상 팔레트 열거형(예:image.PALETTE_DEPTH)이거나, 색상 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.alpha_palette는None이 아니면 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.hint는 다음 값들의 논리 OR입니다:image.AREA: 축소 시 영역 스케일링을 사용합니다.image.BILINEAR: 쌍선형(bilinear) 스케일링을 사용합니다.image.BICUBIC: 쌍삼차(bicubic) 스케일링을 사용합니다.image.CENTER: 이미지를 대상의 중앙에 배치합니다.image.HMIRROR: 수평으로 미러링합니다.image.VFLIP: 수직으로 뒤집습니다.image.TRANSPOSE: 전치합니다(x/y 교환).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에 rgb_channel 추출을 적용합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에 색상 팔레트를 적용합니다.image.SCALE_ASPECT_KEEP: 종횡비를 유지하며 대상 안에 맞춥니다.image.SCALE_ASPECT_EXPAND: 종횡비를 유지하며 대상을 채웁니다(잘림 발생).image.SCALE_ASPECT_IGNORE: 종횡비를 무시하고 대상을 채웁니다(늘어남).image.ROTATE_90: 90도 회전합니다.image.ROTATE_180: 180도 회전합니다.image.ROTATE_270: 270도 회전합니다.
scale은 이미지를 스케일링하는 데 사용되는 최소 및 최대 깊이(mm 단위)를 제어하는 두 값 튜플(min, max)입니다. 기본값은 프레임의 실제 최솟값/최댓값입니다.pixformat은 최종 이미지 픽셀 형식을 제어합니다.image.GRAYSCALE또는image.RGB565여야 합니다.copy_to_fb가True이면 새 이미지를 MicroPython 힙에 할당하는 대신 프레임 버퍼에 기록합니다.timeout은 새 프레임을 기다리는 시간(밀리초 단위)으로, 이 시간이 지나면RuntimeError를 발생시킵니다.0이면 무한정 대기합니다.