複数の Azure Kinect DK デバイスの同期

各 Azure Kinect DK デバイスには、複数のデバイスを相互にリンクするために使用する 3.5 mm 同期ポート (Sync in および Sync out) が含まれています。 デバイスを接続すると、ソフトウェアを使用してデバイス間のトリガー タイミングを調整できるようになります。

この記事では、デバイスを接続して同期する方法について説明します。

複数の Azure Kinect DK デバイスを使用する利点

複数の Azure Kinect DK デバイスを使用することには、以下を含め多くの理由があります。

  • オクルージョンの補完。 Azure Kinect DK データ変換では 1 つの画像が生成されますが、実際は、2 つのカメラ (深度と RGB) の間にはわずかな距離があります。 このオフセットにより、オクルージョンが起きます。 オクルージョンは、デバイス上の 2 つのカメラのいずれかにおいて、前景オブジェクトが背景オブジェクトの一部の視界を遮った時に発生します。 生成されたカラー画像では、前景オブジェクトの影が背景オブジェクトに投影されているように見えます。
    たとえば、次の図では、左側のカメラに灰色のピクセル "P2" が表示されています。ただし、白い前景オブジェクトによって、右側のカメラの IR ビームが遮られています。 右側のカメラに "P2" のデータはありません。
    2 つのカメラが同じポイントに向けられ、そのうちの 1 つが遮られていることを示す図。
    オクルージョンされたデータは、同期された追加のデバイスによって提供されます。
  • オブジェクトを 3 つのディメンションでスキャンします。
  • 有効なフレーム レートを 30 フレーム/秒 (FPS) よりも大きい値に増やします。
  • 同じシーンの複数の 4K カラー画像を、露出の中心から 100 マイクロ秒 (μs) 以内に配置してキャプチャします。
  • 領域内のカメラのカバレッジを拡大します。

マルチデバイス構成を計画する

開始する前に、「Azure Kinect DK のハードウェアの仕様」および「Azure Kinect DK 深度カメラ」を確認してください。

注意

外側のプラスチック カバーを取り外して、Sync In と Sync Out のジャックを露出します。

デバイス構成の選択

デバイス構成には、次のいずれかの方法を使用できます。

  • デイジー チェーン構成。 1 つのマスター デバイスと最大 8 台の下位デバイスを同期します。
    デイジー チェーン構成で Azure Kinect DK デバイスを接続する方法を示す図。
  • スター構成。 1 つのマスター デバイスと、最大 2 台の下位デバイスを同期します。
    スター構成で複数の Azure DK デバイスを設定する方法を示す図。

外部同期トリガーの使用

どちらの構成でも、マスター デバイスは下位デバイスのトリガー シグナルを提供します。 しかし、同期トリガーにはカスタム外部ソースを使用できます。 たとえば、このオプションを使用して、イメージ キャプチャを他の機器と同期することができます。 デイジー チェーン構成やスター構成では、外部トリガー ソースはマスター デバイスに接続します。

外部トリガー ソースは、マスター デバイスと同じ方法で機能する必要があります。 これは、次の特性を持つ同期シグナルを配信する必要があります。

  • アクティブ高
  • パルス幅: 8 μs より大きい
  • 5V TTL/CMOS
  • 最大駆動容量:8 ミリアンペア (mA) 以上
  • 周波数サポート:丁度 30 FPS、15 FPS、5 FPS (カラー カメラ マスターの VSYNC の周波数)

トリガー ソースは、3.5 mm オーディオ ケーブルを使用して、マスター デバイスの Sync in ポートに信号を送信する必要があります。 ステレオ ケーブルまたはモノ ケーブルを使用できます。 Azure Kinect DK は、オーディオ ケーブルのコネクタのスリーブとリングをすべて一緒に短絡し、それらを接地します。 次の図に示すように、デバイスはコネクタのチップのみから同期信号を受信します。

外部トリガー シグナルのケーブル構成

外部機器を扱う方法の詳細については、外部同期デバイスでの Azure Kinect レコーダーの使用に関する記事を参照してください

注意

Sync Out は、RGB カメラの VSync です。 すべてのデバイスのタイムスタンプはゼロに設定され、カウントされていきます。 Microsoft では、同期パルスの最小と最大の幅を特定しておらず、Azure Kinect DK の Sync Out によって生成されるパルスにならうことをお勧めしています。

カメラの設定とソフトウェアの構成を計画する

カメラを制御し、画像データを使用するようにソフトウェアを設定する方法の詳細については、「Azure Kinect Sensor SDK」を参照してください。

このセクションでは、同期されたデバイス (ただし、単一のデバイスは除く) に影響するいくつかの要因について説明します。 ソフトウェアでは、これらの要因を考慮する必要があります。

露出に関する考慮事項

各デバイスの正確なタイミングを制御する場合は、手動による露出設定を使用することをお勧めします。 自動露出設定では、各カラー カメラの実際の露出が動的に変更されます。 露出はタイミングに影響するため、このような変更を行うことにより、すぐにカメラが同期されなくなります。

イメージ キャプチャ ループでは、同じ露出設定を繰り返し設定しないようにしてください。 API は、必要なときに 1 回だけ呼び出します。

複数の深度カメラ間の干渉の回避

複数の深度カメラによって重なり合う視野のイメージングが行われている場合、各カメラはそれぞれの関連するレーザーをイメージングする必要があります。 レーザーが相互に干渉しないようにするには、カメラのキャプチャが 160μs 以上で相互にオフセットされている必要があります。

1 回の深度カメラのキャプチャで、レーザーは 9 回点灯し、毎回アクティブになるのはわずか 125 μs です。 レーザーは、操作モードに応じて、1450 μs または 2390 μs の間アイドル状態になります。 この動作は、オフセット計算の開始位置が 125 μs であることを意味します。

さらに、カメラの時計とデバイスのファームウェアの時刻の違いにより、最小オフセットが 160 μs に増加します。 構成のより正確なオフセットを計算するには、使用している深度モードを確認し、深度センサーの生タイミングのテーブルを参照してください。 このテーブルのデータを次の式で使用することで、最小オフセット (各カメラの露出時間) を計算できます。

"露出時間" = ("IR パルス" × "パルス幅") + ("アイドル期間" × "アイドル時間")

160 μs のオフセットを使用する場合は、他のレーザーがアイドル状態のときに各レーザーが有効になるように、追加の深度カメラを最大 9 個構成できます。

ソフトウェアでは、depth_delay_off_color_usec または subordinate_delay_off_master_usec を使用して、各 IR レーザーが独自の 160 μs ウィンドウで発射されるか、異なる視野を持っていることを確認してください。

注意

実際のパルス幅は 125 μs ですが、いくらかの余裕を与えるため 160 μs とします。 NFOV UNBINNED を例にとると、125 μs パルスの後に 1450 μs アイドルが続きます。 (9 x 125) + (8 x 1450) で合計を出すと、露出時間は 12.8 ms になります。 2 つのデバイスの露出をインターリーブするには、2 台目のカメラの最初のパルスが、1 台目のカメラの最初のアイドル期間に入るようにします。 1 台目と 2 台目のカメラ間の遅延は 125 μs (パルス幅) 程度ですが、いくらか余裕を持って 160 μs をお勧めします。 160 μs にすることで、最大 10 台のカメラの露出時間をインターリーブできます。

デバイスとその他のハードウェアを準備する

複数の Azure Kinect DK デバイスに加えて、ビルドする構成をサポートするために、追加のホスト コンピューターとハードウェアを取得することが必要になる場合があります。 セットアップを開始する前に、このセクションの情報を使用して、すべてのデバイスとハードウェアの準備ができていることを確認してください。

Azure Kinect DK デバイス

同期する Azure Kinect DK デバイスごとに、次の手順を実行します。

  • デバイスに最新のファームウェアがインストールされていることを確認します。 デバイスを更新する方法の詳細については、「Azure Kinect DK ファームウェアを更新する」を参照してください。
  • デバイス カバーを削除して、同期ポートを表示します。
  • 各デバイスのシリアル番号をメモしておきます。 この番号は、後でセットアップ プロセスで使用します。

ホスト コンピューター

通常、各 Azure Kinect DK では独自のホスト コンピューターが使用されます。 デバイスの使用方法や USB 接続を介して転送されるデータの量に応じて、専用のホスト コントローラーを使用できます。

各ホスト コンピューターに Azure Kinect Sensor SDK がインストールされていることを確認します。 Sensor SDK のインストール方法の詳細については、「クイックスタート: Azure Kinect DK を設定する」を参照してください。

Linux コンピューター:Ubuntu の USB メモリ

既定では、Linux ベースのホスト コンピューターは、USB 転送を処理するために、USB コントローラーに 16 MB のカーネル メモリしか割り当てません。 通常、この量は単一の Azure Kinect DK をサポートするには十分です。 ただし、複数のデバイスをサポートするには、USB コントローラーのメモリを増やす必要があります。 メモリを増やすには、次の手順を実行します。

  1. /etc/default/grub を編集します。
  2. 次の行を見つけます。
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    
    これを、次の行で置き換えます。
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.usbfs_memory_mb=32"
    

    注意

    これらのコマンドにより、USB メモリが 32 MB に設定されます。 既定値の 2 倍にする設定例を次に示します。 ソリューションに応じて、より大きな値を設定できます。

  3. sudo update-grub を実行します。
  4. コンピューターを再起動します。

ケーブル

デバイスを相互に、およびホスト コンピューターに接続するには、3.5 mm オス - オス ケーブル (3.5 mm オーディオ ケーブルとも呼ばれます) を使用する必要があります。 ケーブルは 10 メートル未満の長さである必要があり、ステレオまたはモノラルを使用できます。

必要なケーブルの数は、使用するデバイスの数と、特定のデバイス構成によって異なります。 Azure Kinect DK ボックスにはケーブルは含まれません。 個別に購入する必要があります。

スター構成でデバイスを接続する場合は、ヘッドホン スプリッターも 1 つ必要です。

デバイスの接続

デイジー チェーン構成で Azure Kinect DK デバイスを接続するには

  1. 各 Azure Kinect DK を電源に接続します。
  2. 各デバイスを、そのホスト PC に接続します。
  3. 1 つのデバイスをマスター デバイスとして選択し、3.5 mm オーディオ ケーブルを、その Sync out ポートに接続します。
  4. ケーブルのもう一端を、最初の下位デバイスの Sync in ポートに接続します。
  5. 別のデバイスを接続するには、最初の下位デバイスの Sync out ポートに別のケーブルを接続し、次のデバイスの Sync in ポートへ繋ぎます。
  6. すべてのデバイスが接続されるまで、前の手順を繰り返します。 最後のデバイスのケーブル接続は、1 本だけにします。 Sync out ポートは空である必要があります。

スター構成で Azure Kinect DK デバイスを接続するには

  1. 各 Azure Kinect DK を電源に接続します。
  2. 各デバイスを、そのホスト PC に接続します。
  3. 1 つのデバイスをマスター デバイスとして選択し、ヘッドホン スプリッターの 1 つの端を Sync out ポートに接続します。
  4. 3\.5 mm オーディオ ケーブルをヘッドホンス プリッターの "分割" された端に接続します。
  5. 各ケーブルのもう一端を、下位デバイスいずれかの Sync in ポートに接続します。

デバイスが接続されていて、通信中であることを確認する

デバイスが正しく接続されていることを確認するには Azure Kinect ビューアーを使用します。 各下位デバイスをマスター デバイスと組み合わせてテストするには、必要に応じてこの手順を繰り返します

重要

この手順では、各 Azure Kinect DK のシリアル番号を把握している必要があります。

  1. Azure Kinect ビューアーの 2 つのインスタンスを開きます。
  2. [Open Device](開いているデバイス) で、テストする下位デバイスのシリアル番号を選択します。
    開いているデバイス

    重要

    すべてのデバイス間で正確なイメージ キャプチャの配置を取得するには、最後にマスター デバイスを起動する必要があります。

  3. [External Sync](外部同期) で、 [Sub](サブ) を選択します。
    下位カメラの開始
  4. [スタート] を選択します。

    注意

    これは下位のデバイスなので、デバイスの起動後、Azure Kinect ビューアーには画像が表示されません。 下位デバイスがマスター デバイスからの同期信号を受信するまで、画像は表示されません。

  5. 下位デバイスが起動したら、Azure Kinect ビューアーのもう 1 つのインスタンスを使用して、マスター デバイスを開きます。
  6. [External Sync](外部同期) で、 [Master](マスター) を選択します。
  7. [スタート] を選択します。

マスター Azure Kinect デバイスが起動すると、Azure Kinect ビューアーの両方のインスタンスに画像が表示されます。

デバイスを同期されたセットとして調整する

デバイスが正しく通信していることを確認したら、それらを調整して 1 つのドメインで画像を作成することができます。

1 台のデバイスの場合、深度カメラと RGB カメラは連携するよう出荷時に調整されています。 ただし、複数のデバイスを連携させる必要がある場合、画像をキャプチャしたカメラのドメインから画像処理に使用したいカメラのドメインにどのように変換するかを判断するため、複数の機器を調整する必要があります。

デバイスのクロス調整には複数のオプションがあります。 Microsoft では、OpenCV メソッドを使用する GitHub グリーン スクリーン コード サンプルを提供しています。 このコード サンプルの Readme ファイルには、デバイスを調整するための詳細と指示が記載されています。

調整の詳細については、Azure Kinect の調整機能の使用に関する記事を参照してください。

次のステップ

同期されたデバイスを設定した後は、以下の使用方法について確認します。