tof --- 飛行時間(ToF)センサードライバ

tof モジュールは、I2C 経由で OpenMV Cam に接続された飛行時間(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 度の倍数で回転させたい場合は、read_depthdraw_depth、または snapshot に次の hmirror/vflip/transpose の組み合わせを渡してください:

  • 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 の場合、深度配列を転置します。

timeoutRuntimeError を発生させる前に新しいフレームを待機するミリ秒数です。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 配列を、左上隅が位置 xy から始まる image に描画します。

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_DEPTHimage.PALETTE_RAINBOW)、またはグレースケールの深度値に対するカラールックアップテーブルとして使用される 256 ピクセルの RGB565 画像です。

alpha_paletteNone でない場合、ピクセルごとに alpha を調整するアルファルックアップテーブルとして使用される 256 ピクセルの GRAYSCALE 画像です。

hint は次の論理 OR です:

scale は深度画像のスケーリングに使用する最小および最大の深度(mm 単位)を制御する 2 値タプル (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 単位)を制御する 2 値タプル (min, max) です。デフォルトはフレームの実際の最小値/最大値です。

pixformat は最終的な画像のピクセルフォーマットを制御します。image.GRAYSCALE または image.RGB565 である必要があります。

copy_to_fbTrue の場合、新しい画像を MicroPython ヒープに割り当てる代わりにフレームバッファに書き込みます。

timeoutRuntimeError を発生させる前に新しいフレームを待機するミリ秒数です。0 の場合は無限に待機します。

定数

tof.TOF_VL53LX: int

VL53L5CX または VL53L8CX TOF センサー(8x8 ピクセル)。