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_depth、draw_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 センサーの種類を示します: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配列を、左上隅が位置x、yから始まる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_DEPTH、image.PALETTE_RAINBOW)、またはグレースケールの深度値に対するカラールックアップテーブルとして使用される 256 ピクセルの RGB565 画像です。alpha_paletteはNoneでない場合、ピクセルごとにalphaを調整するアルファルックアップテーブルとして使用される 256 ピクセルの GRAYSCALE 画像です。hintは次の論理 OR です:image.AREA: 縮小時に面積スケーリングを使用します。image.BILINEAR: バイリニアスケーリングを使用します。image.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 単位)を制御する 2 値タプル(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: バイリニアスケーリングを使用します。image.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 単位)を制御する 2 値タプル(min, max)です。デフォルトはフレームの実際の最小値/最大値です。pixformatは最終的な画像のピクセルフォーマットを制御します。image.GRAYSCALEまたはimage.RGB565である必要があります。copy_to_fbがTrueの場合、新しい画像を MicroPython ヒープに割り当てる代わりにフレームバッファに書き込みます。timeoutはRuntimeErrorを発生させる前に新しいフレームを待機するミリ秒数です。0の場合は無限に待機します。