JPY | USD

3D ToF(Time-of-Flight)アプリケーション開発をすばやくスタート

著者 Stephen Evanczuk

Digi-Keyの北米担当編集者 の提供

3D ToF(time-of-flight)イメージングは、ビデオイメージングを効率的に行う新たな手法を提供し、その活用分野は、産業安全、ロボットナビゲーション、ジェスチャコントロールインターフェースなど、幅広い領域に及びます。しかし、この手法では、光学設計、高精度タイミング回路、信号処理機能を緻密に組み合わせる必要があり、3D ToFプラットフォームを効果的に実装しようとする設計者は苦労を強いられることもよくあります。

この記事では、ToFとはどのような技術かについて説明し、2種類のすぐに入手可能な3D ToFキット、Analog DevicesAD-96TOF1-EBZ開発プラットフォームおよびESPROS PhotonicsEPC660評価キットの利便性を活かしながら、開発者が3D ToFアプリケーションのプロトタイプを迅速に作成し、3D ToF設計を実装して個別の要件を満たすために必要なノウハウを得る方法について解説します。

ToF技術とは何か?

ToF技術は、身近な原理を応用しています。光、超音波、電磁波などのエネルギー発生源から対象物体に向けてエネルギーを照射し、物体に反射して発生源に戻るまでの時間を計測することで、エネルギー発生源と物体との距離を特定できる、というものです(図1)。

システムと外部の対象物間の距離を計算するToFシステムの図図1:ToFシステムでは、システムと対象物との距離を計算するために、エネルギーをその発生源(システム)から照射して対象物に反射させ、エネルギー源に戻るまでにかかる時間を測定します。(画像提供:Analog Devices)

基本的な原理は変わらないものの、ToFソリューションには幅広い種類があり、超音波、光による検出と測距(LiDAR)、カメラ、ミリ波(mmWave)RF信号などの基盤技術に固有の機能と制約があります。

  • 超音波ToFソリューションは低コストだが、対象物の測定範囲と空間分解能には限界がある
  • 光学ToFソリューションは超音波システムに比べて測定範囲と空間分解能の面で優れているが、濃い霧や煙がある場合はその優位性が損なわれる
  • ミリ波技術に基づくソリューションは基本的により複雑で高価だが広範囲で機能し、煙、霧、雨に左右されずに対象物体の速度と方位に関する情報が得られる

メーカーは、特定の要件を満たすために各技術の機能性を必要に即して活用しています。たとえば超音波センサは、ロボットが移動経路を横切ったり、運転手が車を駐車する操作などで障害物を検出するのに適しています。対照的に、ミリ波技術を使うことで、他のセンサでは悪天候下で見通せない状況でも、次第に近づく危険な道路状況の検出に必要な長距離検知機能を車に装備できます。

ToF設計は、トランスミッタ/レシーバのペアを中心に構築できます。たとえば簡単な光学式ToFの場合、概念的には対象領域を照らすLEDとその対象領域内にある物体からの反射光を検出するフォトダイオードさえあれば作製できます。しかし実際には単純な設計に見えるシステムであっても、正確なタイミング回路と同期回路がなければ光が飛翔する所要時間を測定できません。照光信号を背景の光源と区別する場合、またはより複雑な連続波測定法をサポートする場合は、変調回路と復調回路も必要になります。

信号対ノイズ比(SNR)を高めてToFシステムのアーティファクトを解消しようとすると、設計の複雑さは一段と高まります。さらに複雑さが増す高機能な検出ソリューションでは、複数のトランスミッタ/レシーバを使用して複数の対象物を追跡したり、より高度な動作追跡アルゴリズムをサポートする場合もあります。たとえばミリ波システムでは、複数のレシーバを使用して多数の対象物の方位、速度を個別に追跡することもよくあります。(「ミリ波レーダキットの使用による高精度物体検出設計の迅速な開発」を参照。)

3D光学ToFシステム

3D光学ToFシステムは、使用するレシーバの数を増やすという発想の延長上にあり、採用されるイメージングセンサは一般的に電荷結合素子(CCD)アレイをベースにしています。複数のレンズで対象領域を部分的にCCDアレイに集束させると、CCDアレイに含まれるそれぞれの電荷蓄積デバイスが、対象領域の該当箇所から反射して戻る照光によって帯電します。対象物に反射してCCDアレイに届く光は、パルスまたは連続波の照光と同期して、基本的に期間または位相のシーケンスでそれぞれ取得されます。このデータをさらに処理することで、ボクセル(voxel: VOlume piXEL)で構成される3D深度マップが作成されます。ボクセルの値は、対象領域にある該当箇所までの距離を表します。

ビデオフレームのように、個々の深度マップを順次取得することで測定が可能となり、このとき時間分解能は画像キャプチャシステムのフレームレートによってのみ制約され、また空間分解能はCCDアレイおよび光学システムによってのみ制約されます。320 x 240の大型CCD画像センサの登場によって、高解像度の3D光学ToFシステムの活用例は、産業用オートメーション、無人航空機(UAV)、ジェスチャインターフェースなど幅広い領域に及んでいます(図2)。

詳細データによりジェスチャインターフェースシステムを実現する3D光学式ToFの図図2:フレームレートと空間解像度の高い3D光学ToFは、図のようなToFカメラに向かって上げられる手などの詳細データにより、ジェスチャインターフェースシステムを実現しています。(画像提供:ESPROS Photonics)

多くのカメラベースの方式とは異なり、3D ToFシステムでは陰影や変化する光の条件下でも正確な結果が得られます。3D ToFシステムは独自の照光を搭載しており、通常はレーザー光または高出力赤外線LEDが使用されます。たとえばLumiledsLuxeon IR LEDを使用するシステムでは、メガヘルツ(MHz)のスイッチングレートで動作します。立体カメラなどの方式とも異なり、3D ToFシステムでは高分解能の距離情報を生成する小型のソリューションが可能になります。

構成済みソリューション

一方で、3D ToFシステムを実装しようとする開発者は設計上の多くの課題も抱えます。これらのシステムは、上述のタイミング回路に加えて、緻密に設計された信号処理パイプラインにも依存します。この信号処理パイプラインは、期間または位相の測定ごとにCCDアレイから結果をすばやく読み取り、その生データから深度マップへの変換に必要な処理を完了するように最適化されています。高度な3D ToF画像センサ、たとえばESPROS PhotonicsのEPC660-CSP68-007 ToF画像センサは、320 x 240 CCDアレイと、3D ToF測定を実行し、ピクセルあたりの12ビット距離データの生成に必要なタイミング処理および信号処理機能をすべて組み合わせています(図3)。

ESPROS Photonicsのepc660の回路図(クリックして拡大)図3:ESPROS Photonicsのepc660は、320 x 240ピクセル画像センサと、画像センサ生データから深度マップへの変換に必要なタイミング回路とコントローラをすべて統合しています。(画像提供:ESPROS Photonics)

ESPROS PhotonicsのEPC660-007カードエッジコネクタチップキャリアは、epc650画像センサを37.25 x 36.00mmのプリント回路基板(PC基板)に実装し、デカップリングコンデンサとカードエッジコネクタを備えています。このチップキャリアは3D ToFシステム設計に含まれる基本のハードウェアインターフェースに対応しますが、フロントエンドで適切な光学設計を完成させて、バックエンドの処理リソースを実現するタスクについては開発者に委ねられています。ESPROS Photonicsのepc660評価キットでは、組み込み済み3D ToFイメージングシステムおよび連携するソフトウェアを含む完全な3D ToFアプリケーション開発環境を利用することで、これらのタスクが解消されます(図4)。

ESPROS Photonicsのepc660評価キットの図(クリックして拡大)図4:ESPROS Photonicsのepc660評価キットには、深度情報を活用するための組み込み済み3D ToFカメラシステムおよび連携するソフトウェアが含まれています。(画像提供:ESPROS Photonics)

評価およびラピッドプロトタイピング用に設計されたESPROSキットにはアセンブリ済みのカメラシステムが含まれており、epc660 CCチップキャリア、光学レンズアセンブリ、および8個のLED一式を組み合わせて使用します。カメラシステムとともに、512MBのRAMと4GBのフラッシュを搭載したBeagleBone Blackプロセッサボードは、ホストコントローラとして機能し、アプリケーション処理リソースの役割を果たします。

ESPROSには、同社のウェブサイトからダウンロード可能なepc660評価キットサポートソフトウェアも含まれています。このソフトウェアを開くには、国内の営業支社にパスワードを請求してください。ソフトウェアを入手したら、複数ある構成ファイルのいずれかを使用してグラフィカルユーザーインターフェース(GUI)アプリケーションを実行し、カメラシステムの動作を開始できます。GUIアプリケーションには制御ウィンドウおよび表示ウィンドウが含まれており、そこで空間および時間フィルタ設定などのパラメータを必要に応じて設定し、最終的な結果を表示できます。開発者はキットの使用により、最小限の操作で深度マップのリアルタイムでの取得を開始し、それらのマップを各自のアプリケーションソフトウェアへの入力として使用できます。

3D ToFシステムでの解像度向上

ESPROS epc660などの320 x 240画像センサは多くの用途に活用できますが、ジェスチャインターフェースでの細かい動きの検出や、対象範囲を大幅に制限せず、小さなオブジェクトを区別するために必要な解像度には及ばない場合もあります。これらの用途では、640 x 480 ToFセンサをベースにする既製の開発キットを利用して、高解像度アプリケーションのプロトタイプを迅速に開発できます。

Seeed TechnologyDepthEye Turbo深度カメラは、640 x 480 ToFセンサ、4つの850ナノメートル(nm)垂直共振器面発光レーザー(VCSEL)ダイオード、照光およびセンシング動作回路、電源、USBインターフェースを自己完結型キューブ(寸法57 x 57 x 51mm)に統合しています。ソフトウェアは、オープンソースのlibPointCloud SDK githubリポジトリによってサポートされており、対象はLinux、Windows、Mac OS、Androidの各プラットフォームです。

libPointCloud SDKディストリビューションには、C++のドライバ、ライブラリ、サンプルコードの他に、ラピッドプロトタイピング用のPython APIおよび視覚化ツールが含まれています。開発者は、このディストリビューションパッケージをホストの開発プラットフォームにインストールすると、カメラをUSB経由でコンピュータに接続し、視覚化ツールを使用して位相、振幅、またはポイントクラウドマップを表示できます。ポイントクラウドマップは本質的に拡張された深度マップで、質感のあるサーフェスでレンダリングされ、より滑らかな3D画像が可能になります(図5)。

Seeed TechnologyのDepthEye Turbo深度カメラソフトウェアの画像図5:Seeed TechnologyのDepthEye Turbo深度カメラと組み合わせて使用すると、連動するソフトウェアパッケージにより、3D ToFデータをさまざまなレンダリングで簡単に視覚化できます。図はメインウィンドウ内のポイントクラウドによるレンダリングを示しています。(画像提供:Seeed Technology/PointCloud.AI)

Analog DevicesのAD-96TOF1-EBZ 3D ToF評価キットは、よりオープンなハードウェア設計を実現します。基板のペアで構築し、Raspberry PiRaspberry Pi 3モデルB+またはRaspberry Pi 4をホストコントローラおよびローカル処理リソースとして使用する設計が可能です(図6)。

Analog DevicesのAD-96TOF1-EBZ 3D ToF評価キットの画像図6:Analog DevicesのAD-96TOF1-EBZ 3D ToF評価キットは、照光およびデータ収集用の基板2枚から成るアセンブリとローカル処理用のRaspberry Pi基板を組み合わせています。(画像提供:Analog Devices)

キットのアナログフロントエンド(AFE)基板には、光学アセンブリ、CCDアレイおよびバッファ、ファームウェアストレージ、およびプロセッサが含まれています。プロセッサは、総合的なカメラ機能(照光タイミング、センサ同期、深度マップ生成など)を管理します。もう1つの基板は4個の850nm VCSELレーザーダイオードおよびドライバを搭載しており、レーザーダイオードがAFE基板の光学アセンブリを囲むように、AFE基板に接続します(図6)。

Analog Devicesは同社のオープンソース3D ToFソフトウェアスイートによりAD-96TOF1-EBZキットをサポートしており、このソフトウェアスイートには3D ToF SDKに加えてC/C++、Python、Matlab用のサンプルコードおよびラッパーも含まれています。Analog Devicesは、ホストアプリケーションと低水準ハードウェアインタラクションの両方をネットワーク環境でサポートするために、SDKを、USBおよびネットワークコネクティビティ向けに最適化したホストパーティションと、組み込みLinuxで実行してVideo4Linux2(V4L2)ドライバ上に構築した低水準パーティションに分割しています(図7)。

Analog Devicesの3D ToF SDK APIの図図7:Analog Devicesの3D ToF SDK APIは、ローカルのEmbedded Linuxホストで実行するアプリケーション、およびネットワークホストでリモート実行するアプリケーションをサポートします。(画像提供:Analog Devices)

このネットワーク対応SDKにより、ネットワーク接続されたホスト上で実行するアプリケーションがToFハードウェアシステムと連携してリモートで稼働し、カメラにアクセスして深度データを取得できます。ユーザープログラムも組み込みLinuxパーティションで実行し、そのレベルで利用できる高度なオプションを最大限に活用できます。

Analog Devicesは、ソフトウェアディストリビューションの中で主な低水準動作機能を示すサンプルコードを提供しており、カメラの初期化、基本的なフレームキャプチャ、リモートアクセス、およびホストコンピュータ上とローカルの組み込みLinuxとのクロスプラットフォームキャプチャなどが含まれます。その他のサンプルアプリケーションは、これらの基本機能の上に構築され、ポイントクラウド生成など、高水準のアプリケーションでキャプチャデータがどのように使用されるかを表します。実際に、ディープニューラルネットワーク(DNN)推論モデルを使用して、カメラシステムで生成されたデータを分類する方法を示す、サンプルアプリケーションがあります。Pythonで記述されたDNNサンプルアプリケーション(dnn.py)は、データ取得と推論モデルによるデータ分類の準備に必要なプロセスのステップを示します(リスト1)。

コピー
import aditofpython as tof
import numpy as np
import cv2 as cv
...    try: 
        net = cv.dnn.readNetFromCaffe(args.prototxt, args.weights)
    except: 
        print("Error: Please give the correct location of the prototxt and caffemodel")
        sys.exit(1)
    swapRB = False
    classNames = {0: 'background',
                  1: 'aeroplane', 2: 'bicycle', 3: 'bird', 4: 'boat',
                  5: 'bottle', 6: 'bus', 7: 'car', 8: 'cat', 9: 'chair',
                  10: 'cow', 11: 'diningtable', 12: 'dog', 13: 'horse',
                  14: 'motorbike', 15: 'person', 16: 'pottedplant',
                  17: 'sheep', 18: 'sofa', 19: 'train', 20: 'tvmonitor'}
 
    system = tof.System()
    status = system.initialize()
    if not status: 
        print("system.initialize() failed with status: ", status)
 
    cameras = []
    status = system.getCameraList(cameras)
...    while True: 
        # Capture frame-by-frame
        status = cameras[0].requestFrame(frame)
        if not status: 
            print("cameras[0].requestFrame() failed with status: ", status)
 
        depth_map = np.array(frame.getData(tof.FrameDataType.Depth), dtype="uint16", copy=False)
        ir_map = np.array(frame.getData(tof.FrameDataType.IR), dtype="uint16", copy=False)
 
        # Creation of the IR image
        ir_map = ir_map[0: int(ir_map.shape[0] / 2), :]
        ir_map = np.float32(ir_map)
        distance_scale_ir = 255.0 / camera_range
        ir_map = distance_scale_ir * ir_map
        ir_map = np.uint8(ir_map)
        ir_map = cv.cvtColor(ir_map, cv.COLOR_GRAY2RGB)
 
        # Creation of the Depth image
        new_shape = (int(depth_map.shape[0] / 2), depth_map.shape[1])
        depth_map = np.resize(depth_map, new_shape)
        distance_map = depth_map
        depth_map = np.float32(depth_map)
        distance_scale = 255.0 / camera_range
        depth_map = distance_scale * depth_map
        depth_map = np.uint8(depth_map)
        depth_map = cv.applyColorMap(depth_map, cv.COLORMAP_RAINBOW)
 
        # Combine depth and IR for more accurate results
        result = cv.addWeighted(ir_map, 0.4, depth_map, 0.6, 0)
 
        # Start the computations for object detection using DNN
        blob = cv.dnn.blobFromImage(result, inScaleFactor, (inWidth, inHeight), (meanVal, meanVal, meanVal), swapRB)
        net.setInput(blob)
        detections = net.forward()
...        for i in range(detections.shape[2]): 
            confidence = detections[0, 0, i, 2]
            if confidence > thr: 
                class_id = int(detections[0, 0, i, 1])
...                if class_id in classNames: 
                    value_x = int(center[0])
                    value_y = int(center[1])
                    label = classNames[class_id] + ": " + \
                            "{0:.3f}".format(distance_map[value_x, value_y] / 1000.0 * 0.3) + " " + "meters"
...        # Show image with object detection
        cv.namedWindow(WINDOW_NAME, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME, result)
 
        # Show Depth map
        cv.namedWindow(WINDOW_NAME_DEPTH, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME_DEPTH, depth_map)

リスト1:これは、Analog Devices 3D ToF SDKディストリビューションのサンプルアプリケーションのスニペットで、深度およびIR画像の取得と推論モデルによる分類に必要なステップを示しています。(コード提供元:Analog Devices)

ここで、プロセスはOpenCVのDNNメソッド(cv.dnn.readNetFromCaffe)を使用して開始し、既存の推論モデルのネットワークおよび付随する重みを読み取ります。この場合、このモデルはGoogle MobileNet Single Shot Detector(SSD)検出ネットワークのCaffe実装で、比較的小さなモデルサイズで高精度が達成可能と考えられています。サポートされるクラスIDとクラスラベルを持つクラス名を読み込むと、このサンプルアプリケーションは利用可能なカメラを特定し、一連の初期化ルーチンを実行します(リスト1には非表示)。

サンプルコードの大部分で、深度マップ(depth_map)とIRマップ(ir_map)の準備を行い、次にそれらを1つのアレイに結合して(cv.addWeighted)精度を高めます。さらに、コードは別のOpenCV DNNメソッド(cv.dnn.blobFromImage)を呼び出し、結合された画像を推論に必要な4次元のblobデータ型に変換します。コードの次の行で、結果として生成されたblobを推論モデル(net.setInput(blob))に対する入力として設定します。net.forward()をコールして、分類結果を返す推論モデルを呼び出します。サンプルアプリケーションの以降の部分では、プリセット閾値を超える分類結果を特定し、そのラベルと境界ボックスを生成し、キャプチャされた画像データ、推論モデルによって識別されたラベル、およびカメラからの距離を表示します(図8)。

Analog Devicesの3D ToF SDKディストリビューションに含まれるDNNサンプルアプリケーションの画像図8:Analog Devicesの3D ToF SDKディストリビューションに含まれるDNNサンプルアプリケーションは、Pythonコード数行とOpenCVライブラリを使用し、深度画像を取得して分類し、対象物体が何かを示すラベルと距離を表示します。(画像提供:Analog Devices)

Analog DevicesのDNNサンプルアプリケーションに示されるように、開発者は3D ToF深度マップを機械学習の手法と組み合わせて使用し、より高度なアプリケーション機能を作成できます。低遅延の応答を必要とするアプリケーションでは、これらの機能はC/C++で構築される可能性が高いと思われますが、基本的なステップは同じです。

3D ToFデータと高性能な推論モデルを使用することで、産業用ロボットシステムでは、人間とロボットが近づいて共同作業する「コボット」環境で、ロボットの動きと他の装置類や人間の動きをより安全に同期できます。各種の推論モデルを利用すれば、高解像度3D ToFカメラを使用してジェスチャインターフェースの細かい動きを分類するアプリケーションも実現できます。車載活用例では、3D ToFシステムが持つ時間解像度および空間解像度の高さを最大限に利用し、同様の方法で高度運転支援システム(ADAS)の精度を高めることもできます。

結論

ToF技術は、システムと対象物間の距離を正確に測定することでしか機能しない、ほぼすべてのシステムで重要な役割を果たします。ToF技術の中でも、光学3D ToFは空間と時間両方の高解像度を実現できるので、小さな対象物を細部で区別し、それらの相対距離をより正確にモニタリングできます。

一方で、この技術を活用するために、開発者はこれまで光学設計、正確なタイミング、同期信号取得などシステムに付随するさまざまな課題に対処する必要がありました。本記事で述べたように、Analog DevicesのAD-96TOF1-EBZ開発プラットフォームやESPROS PhotonicsのEPC660評価キットなどに代表される、構成済みの3D ToFシステムの登場によって、障壁となるさまざまな課題が取り除かれ、産業システム、ジェスチャインターフェース、車載用安全システムなどの幅広い分野でこの技術が活用できます。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、Digi-Key Electronicsの意見、信念および視点またはDigi-Key Electronicsの公式な方針を必ずしも反映するものではありません。

著者について

Stephen Evanczuk

Stephen Evanczuk氏は、IoTを含むハードウェア、ソフトウェア、システム、アプリケーションなど幅広いトピックについて、20年以上にわたってエレクトロニクス業界および電子業界に関する記事を書いたり経験を積んできました。彼はニューロンネットワークで神経科学のPh.Dを受け、大規模に分散された安全システムとアルゴリズム加速法に関して航空宇宙産業に従事しました。現在、彼は技術や工学に関する記事を書いていないときに、認知と推薦システムへの深い学びの応用に取り組んでいます。

出版者について

Digi-Keyの北米担当編集者