3D光飛行時間センシング設計を迅速に開始する方法

著者 Stephen Evanczuk

DigiKeyの北米担当編集者の提供

光飛行時間(ToF)距離測定は、産業用センシングからジェスチャベースのユーザーインターフェースまで、さまざまなアプリケーションで基本的な役割を担っています。高精度で高速のマルチピクセルToFセンサが利用可能になったことで、開発者はこれらのアプリケーションで必要とされる、より高度な3次元(3D)センシングアルゴリズムを実装できるようになりました。しかし、マルチピクセルの光センシングサブシステムは複雑なため、開発期間が長くなります。

この記事では、ToFの基本原理について説明します。その後、開発者が正確な1Dおよび3D距離測定アプリケーションを迅速に試作し、カスタム光ToFセンシングソリューションを迅速に実装するために使用できる、Broadcomの光ToF評価キットを紹介します。

光ToF技術の基礎知識

光ToF技術は、さまざまなアプリケーションで必要とされる正確な距離を得るために利用され、光が空気中を伝わる時間に基づいた測定を可能にします。これらの測定に使用される特定の計算は、一般的に2つの異なるアプローチ(直接ToFと間接ToF)に依存します。パルスレンジングとも呼ばれる直接ToFでは、ToFセンサが特定の光パルスを送信してから受信するまでの時間を、式1を使用してデバイスが測定します。

式1 式1

式の要素の意味は、次のとおりです。

c0 = 真空中の光の速度

∆T = 送信から受信までの経過時間

概念的にはシンプルですが、十分な性能のトランスミッタおよびレシーバ、信号対ノイズ比の向上、正確なパルスエッジの検出など、この方法で正確な測定を実行するには多くの課題があります。

一方、間接ToF方式では、変調された連続波を使用し、式2に従って送信信号と受信信号の位相差を測定します。

d = c0 / 2fmod x ∆φ/2π 式2

式の要素の意味は、次のとおりです。

c0 = 真空中の光の速度

fmod = レーザー変調周波数

∆φ = 確定した位相差

間接ToF方式により、トランスミッタとレシーバの電力要件を低減するだけでなく、パルス整形の要件を緩和し、3Dレンジングとモーション検出を実行するための複雑な設計を簡素化することもできます。

直接方式、間接方式ともに、光フロントエンドの入念な設計および、トランスミッタとレシーバの信号の精密な制御が必要になります。開発者は長年にわたり、送信デバイスと受信センサを1つのパッケージにまとめた統合型光ToFセンサを活用してきました。しかし、前世代までのデバイスでは、消費電力、距離、精度、速度など、性能や動作特性のトレードオフが設計者に要求されるのが一般的でした。このような妥協は、最大10mの中距離で動作させる必要のある産業用センシングアプリケーションの主な障害となっています。

BroadcomのAFBR-S50MV85Gのような高度な間接ToFセンサモジュールは、パッケージサイズと消費電力を最小限に抑えながら、中距離で高速かつ正確な結果を得るというニーズの高まりに対応するために特別設計されています。このセンサをベースにしたBroadcomのAFBR-S50MV85G-EK評価キットと関連ソフトウェア開発キット(SDK)は、開発者が3D ToFセンシングアプリケーションを迅速に実装できるようにするためのマルチピクセルToFセンサ開発プラットフォームを提供します。

統合型モジュールでToF距離測定を簡素化する方法

産業用センシングアプリケーション向けに開発されたAFBR-S50MV85Gモジュールは、単一パッケージで完全な光ToFセンシングソリューションを提供します。その内蔵部品には、赤外線(IR)照明用の850nm垂直共振器面発光レーザー(VCSEL)、六角形の32ピクセルセンサマトリクス、VCSELおよびセンサ光学系用の統合レンズ、特定アプリケーション向け集積回路(ASIC)などが含まれます。

トランスミッタは、センシングマトリクスに対して一定の位置に配置され、対象物に光を当てることで、センシングマトリクス内のいくつかのピクセルが反射された赤外線信号を検出します。基本的な動作では、内蔵の周囲光抑制機能により、直射日光の下でも白色、黒色、有色、金属、再帰反射面からの正確な距離測定に対応できます。

物体までの距離が短くなると、視差誤差の自動補正により、距離の下限がほとんどない測定が可能になります。同時に、IR照明とセンシングマトリクスの組み合わせにより、対象物の動き、速度、傾斜角度、横方向の位置関係などの追加情報を取得できます。その結果、モジュールは通過または接近する対象物の方向と速度を特定するために必要なデータを提供することができます(図1)。

BroadcomのAFBR-S50MV85Gモジュールの8 x 4ピクセルセンシングマトリクスから取得したデータの図(クリックして拡大)図1:AFBR-S50MV85Gモジュールの8×4ピクセルセンシングマトリクスから取得したデータを使用して、物体の移動特性を測定する3Dアプリケーションを実装できます。(画像提供:Broadcom)

モジュールの内蔵ASICは、VCSELとセンシングマトリクスの正確な動作を調整することで、VCSELの駆動、センシングマトリクスからのアナログ信号キャプチャおよび、デジタル信号処理に必要なすべての回路を提供します(図2)。

BroadcomのAFBR-S50MV85Gモジュールに内蔵されたASICの図図2:AFBR-S50MV85Gモジュールに内蔵されたASICには、モジュールのVCSEL光源の駆動、センシングマトリクスからの受信信号の取得および、SPIバスで転送するデジタルデータの生成に必要なすべての回路が含まれます。(画像提供:Broadcom)

ASICに内蔵された電源回路により、モジュールは5Vの単一電源で動作できます。また、工場出荷時に較正された温度補償型の抵抗器-コンデンサ(RC)発振器とデジタル位相ロックループ(PLL)から、必要なすべてのクロック信号が供給されます。この統合により、開発者はマイクロコントローラユニット(MCU)といくつかの追加外部部品を使用して、簡単にモジュールを設計に組み込むことができます。MCUとのインターフェースに必要なのは、モジュールからのデータレディ信号用の汎用入出力(GPIO)ピンと、モジュールのデジタルシリアルペリフェラルインターフェース(SPI)による接続のみです(図3)。

BroadcomのAFBR-S50MV85Gモジュールの図(クリックして拡大)図3:BroadcomのAFBR-S50MV85Gモジュールに必要なのは、完全なToFセンシングシステムを実装するためのMCUといくつかの追加部品だけです。(画像提供:Broadcom)

この単純なハードウェア設計を補完するために、距離測定の実装に必要な関連ソフトウェア機能が、BroadcomのToFドライバソフトウェアですべて提供されています。モジュールは距離測定アプリケーションの光学データ収集を処理しますが、同社提供のAFBR-S50 SDKに含まれるBroadcom ToFドライバソフトウェアが、すべてのハードウェア設定、較正および測定手順を実行します。測定中、ドライバソフトウェアは、ピクセルの距離と振幅の両方の値を抽出します。

距離測定アプリケーションを迅速に開発する方法

BroadcomのAFBR-S50MV85G-EK評価キットは、AFBR-S50 SDKと組み合わせることで、距離測定アプリケーションの迅速な試作と開発のための包括的なプラットフォームとなります。このキットには、AFBR-S50MV85Gモジュールを搭載したアダプタボード、Arm Cortex-M0+ MCUをベースにしたNXPFRDM-KL46Z評価ボードおよび、評価ボードアセンブリをラップトップや他の組み込みシステムに接続するためのミニUSBケーブルが付属しています(図4)。

BroadcomのAFBR-S50MV85G-EK評価キットの画像図4:BroadcomのAFBR-S50MV85G-EK評価キットと関連ソフトウェアは、ToF距離測定アプリケーションの評価と試作のための完全なプラットフォームとなります。(画像提供:Broadcom)

評価キットを使用したToF距離測定は、いくつかのステップを踏むだけで開始できます。開発者はAFBR-S50 SDKをダウンロードした後、セットアップウィザードの案内に従って、簡単にインストールできます。SDKパッケージに含まれるBroadcomのAFBR-S50 Explorerソフトウェアアプリケーションを起動すると、ソフトウェアはUSBインタフェースを介してAFBR-S50評価ボードに接続し、NXPボードのMCUで実行されているドライバソフトウェアを介して測定データを受信します。これにより、ユーザーは結果を1Dまたは3Dプロットに表示できます(図5)。

BroadcomのAFBR-S50 Explorerソフトウェアの画像(クリックして拡大)図5:AFBR-S50 Explorerソフトウェアは、ToFセンサマトリクス内の各ピクセルが受信した照明振幅を示す3Dプロットにより、ToF測定の評価を簡素化します。(画像提供:Broadcom)

図5に示すように、3Dプロットビューには各ピクセルの読み取り値が表示されますが、ソフトウェアは測定に有効と考えられるピクセルだけを開発者が確認できるようにするための代替ビューを提供します。この代替ビューでは、定義された基準を満たさないピクセルがプロットから削除されます(図6)。

BroadcomのAFBR-S50 Explorerソフトウェアの画像(クリックして拡大)図6:BroadcomのAFBR-S50 Explorerソフトウェアにより、開発者は事前に定義された基準を満たさないピクセルを排除する合理化された測定3Dプロットを表示できます。(画像提供:Broadcom)

照明、反射率、表面のタイプなど、さまざまなアプリケーションシナリオにおける測定精度と性能を調べるため、開発者はより多くのピクセルを使用して3Dアプリケーションを強化したり、より正確な測定が必要な1Dアプリケーションのためにピクセルを少なくするなど、さまざまなセンシング構成の影響を表示できます。また、試作で測定方法を評価した後、BroadcomのAFBR-S50 SDKに含まれるサンプルソフトウェアに基づいて構築し、カスタムToFセンシングアプリケーションを迅速に実装することもできます。

カスタムToFセンシングソフトウェアアプリケーションの構築

Broadcomは、センサハードウェア固有のコード、アプリケーションプログラミングインターフェース(API)、ハードウェア抽象化レイヤ(HAL)から成るAFBR-S50コアライブラリをベースにした効率的なアーキテクチャを中心に、ToFセンシングアプリケーションのサポートを構築します(図7)。

BroadcomのToF動作環境の図図7:BroadcomのToF動作環境では、ToFドライバAPIがユーザーアプリケーションコードに対し、事前にコンパイルされたToFドライバコアライブラリの較正、測定、評価関数へのアクセスを提供します。(画像提供:Broadcom)

BroadcomはAFBR-S50 SDKパッケージの一部として、AFBR-S50MV85Gハードウェアの実行に必要なすべてのデータとアルゴリズムを埋め込んだ事前コンパイル済みのANSI-Cライブラリファイルとしてコアライブラリを提供しています。距離測定システムのMCU上で動作するコアライブラリは、較正、測定、評価などの機能を提供し、最小限の処理負荷と消費電力で距離測定を実行します。コアライブラリ関数が基礎となる詳細をすべて処理するため、開発者が目にする基本的な測定サイクルは単純明快です(図8)。

BroadcomのAFBR-S50 SDK ToFソフトウェアの画像(クリックして拡大)図8:AFBR-S50 SDK ToFソフトウェアは、割り込みとコールバックを使用してプロセッサのワークロードを最小化します。(画像提供:Broadcom)

各測定サイクルの開始時(定期的なタイマ割り込み(IRQ)によって開始)に、MCUは測定を開始し、すぐにアイドル状態に戻ります(または、いくつかのアプリケーションコードの処理を継続します)。測定が完了すると、AFBR-S50MV85Gモジュールは接続されたGPIOラインを使用して割り込み信号を送り、MCUを起動してSPIバス上でデータ読み出しを開始してから、以前の状態に戻ります。データの読み出しが完了すると(SPI完了のIRQで通知)、MCUは取得したToFセンサデータを評価するためのコードを実行します。

測定データの消失を防ぐため、コアライブラリは評価ルーチンが呼び出されるまでデータバッファをブロックすることにより、新しい測定サイクルの開始を防止します。そのため、開発者は通常、測定と評価のタスクをインターリーブして実行できるように、生データ用のダブルバッファを搭載します。

アプリケーションソフトウェア開発者のために、コアライブラリルーチンが較正、測定、評価の詳細を保護します。実際、開発者は評価キットとAFBR-S50 Explorerアプリケーションを完全なプロトタイピングプラットフォームとして使用し、測定データを高レベルのソフトウェアアプリケーションコードに提供することができます。

AFBR-S50 SDKパッケージは、カスタムアプリケーションソフトウェアを実装する開発者のために、事前にコンパイルされたコアライブラリモジュールと複数のソフトウェアサンプルを組み合わせています。そのため、開発者はSDKで提供されるサンプルアプリケーションをベースに構築して、独自のToFセンシングアプリケーションを迅速に作成できます。AFBR-S50 SDK APIの関数を呼び出し、コアライブラリによってサポートされるさまざまなコールバックのための独自の関数を指定することにより、アプリケーション固有のソフトウェアコードでAFBR-S50MV85GハードウェアとAFBR-S50コアライブラリ機能にアクセスできます(再び図7を参照)。

BroadcomはAPIとサンプルソフトウェアに関する広範なドキュメントを提供しているため、開発者はソフトウェアサンプルをニーズに合わせて迅速に適応させたり、ゼロから開始したりすることができます。実際、測定と評価の基本的なサイクルは単純で、カスタム関数とAPI呼び出しを測定サイクルに合わせるだけです(再び図8を参照)。たとえば、前述した測定サイクルには、ToFデバイスの統合、データの読み出し、評価という3つのフェーズがあります。これら3つのフェーズを開始するために必要なコアライブラリのAPI呼び出しは、以下の通りです。

  • 非同期で1つの測定フレームをトリガするArgus_TriggerMeasurement()
  • 測定の正常な完了時にSTATUS_OKを返すArgus_GetStatus()
  • 生の測定データから有用な情報を評価するArgus_EvaluateData()

Broadcomは、SDKディストリビューションに含まれるサンプルアプリケーションで、この基本的な測定ループを実証します(リスト1を参照)。

コピー
int main(void)
{
   status_t status = STATUS_OK;
   
   /* Initialize the platform hardware including the required peripherals
   * for the API. */
   hardware_init();
   
   /* The API module handle that contains all data definitions that is
   * required within the API module for the corresponding hardware device.
   * Every call to an API function requires the passing of a pointer to this
   * data structure. */
   argus_hnd_t * hnd = Argus_CreateHandle();
   handle_error(hnd ? STATUS_OK : ERROR_FAIL, "Argus_CreateHandle failed!");
   
   /* Initialize the API with default values.
   * This implicitly calls the initialization functions
   * of the underlying API modules.
   *
   * The second parameter is stored and passed to all function calls
   * to the S2PI module. This piece of information can be utilized in
   * order to determine the addressed SPI slave and enabled the usage
   * of multiple devices on a single SPI peripheral. */
   
   status = Argus_Init(hnd, SPI_SLAVE);
   handle_error(status, "Argus_Init failed!");
   
   /* Print some information about current API and connected device. */
   uint32_t value = Argus_GetAPIVersion();
   uint8_t a = (value >> 24) & 0xFFU;
   uint8_t b = (value >> 16) & 0xFFU;
   uint8_t c = value & 0xFFFFU;
   uint32_t id = Argus_GetChipID(hnd);
   argus_module_version_t mv = Argus_GetModuleVersion(hnd);
   print("\n##### AFBR-S50 API - Simple Example ##############\n"
   " API Version: v%d.%d.%d\n"
   " Chip ID: %d\n"
   " Module: %s\n"
   "##################################################\n",
   a, b, c, id,
   mv == AFBR_S50MV85G_V1 ? "AFBR-S50MV85G (v1)" :
   mv == AFBR_S50MV85G_V2 ? "AFBR-S50MV85G (v2)" :
   mv == AFBR_S50MV85G_V3 ? "AFBR-S50MV85G (v3)" :
   mv == AFBR_S50LV85D_V1 ? "AFBR-S50LV85D (v1)" :
   mv == AFBR_S50MV68B_V1 ? "AFBR-S50MV68B (v1)" :
   mv == AFBR_S50MV85I_V1 ? "AFBR-S50MV85I (v1)" :
   mv == AFBR_S50SV85K_V1 ? "AFBR-S50SV85K (v1)" :
   "unknown");
      
/* Adjust some configuration parameters by invoking the dedicated API methods. */
   status = Argus_SetConfigurationFrameTime( hnd, 100000 ); // 0.1 second = 10 Hz
   handle_error(status, "Argus_SetConfigurationFrameTime failed!");
   
   /* The program loop ... */
   for (;;)
   {
      myData = 0;
      /* Triggers a single measurement.
      * Note that due to the laser safety algorithms, the method might refuse
      * to restart a measurement when the appropriate time has not been elapsed
      * right now. The function returns with status #STATUS_ARGUS_POWERLIMIT and
      * the function must be called again later. Use the frame time configuration
      * in order to adjust the timing between two measurement frames. */
      Argus_TriggerMeasurement(hnd, measurement_ready_callback);
      handle_error(status, "Argus_StartMeasurementTimer failed!");
      STATUS_ARGUS_POWERLIMIT)
      {
         /* Not ready (due to laser safety) to restart the measurement yet.
         * Come back later. */
         continue;
      }
      else
      {
         /* Wait until measurement data is ready. */
      do
         {
            status = Argus_GetStatus(hnd);
         }
         while (status == STATUS_BUSY);
         handle_error(status, "Waiting for measurement data ready (Argus_GetStatus) failed!");
         /* The measurement data structure. */
         argus_results_t res;
         
         /* Evaluate the raw measurement results. */
         status = Argus_EvaluateData(hnd, &res, (void*) myData);
         handle_error(status, "Argus_EvaluateData failed!");
         
         /* Use the obtain results, e.g. print via UART. */
         print_results(&res);
         }
      }
}

リスト1:BroadcomのAFBR-S50 SDKディストリビューションのサンプルコードは、AFBR-S50MV85GモジュールからToFデータを取得して評価するための基本設計パターンを示しています。(コード提供:Broadcom)

リストに示すように、前述した3つのAPI関数呼び出しが測定サイクル実行のバックボーンを形成します。開発者はAPIドキュメントやSDKの他のサンプルアプリケーションを学習することで、対象物の速度、方向、傾斜角などの高度な特性を特定するために必要なデータを提供するモジュールの機能を使用して、複雑な3Dアプリケーションを迅速に実装できるのです。

まとめ

光ToFセンシングデバイスにより、精密な距離測定を必要とするさまざまな分野のアプリケーションが可能となりました。しかし、測定範囲、精度、信頼性の制限により、長距離で正確な結果を得られる低電力デバイスを必要とする産業用センシングシステムのようなアプリケーションへの拡大が抑制されています。Broadcomの統合型光ToFサブシステムは、こうした次世代センシングアプリケーションの新たな要件に対応します。このデバイスをベースとした評価キットを使用することで、1D測距アプリケーションにおける精密測定や、3Dアプリケーションにおける複雑な物体移動の追跡を実行するシステムを迅速に実装することが可能となります。

DigiKey logo

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

著者について

Image of Stephen Evanczuk

Stephen Evanczuk

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

出版者について

DigiKeyの北米担当編集者