各 Azure Kinect DK デバイスには、複数のデバイスをリンクするために使用できる 3.5 mm の同期ポート (同期入力 と 同期出力) が含まれています。 デバイスを接続した後、ソフトウェアはそれらの間でトリガーのタイミングを調整できます。
この記事では、デバイスを接続して同期する方法について説明します。
複数の Azure Kinect DK デバイスを使用する利点
複数の Azure Kinect DK デバイスを使用するには、次のような多くの理由があります。
- 閉塞を埋める。 Azure Kinect DK データ変換によって 1 つの画像が生成されますが、深度カメラと RGB カメラは実際には少し離れています。 オフセットにより、オクルージョンが可能になります。 オクルージョンは、フォアグラウンド オブジェクトがデバイス上の 2 つのカメラの 1 つの背景オブジェクトの一部のビューをブロックするときに発生します。 結果のカラー イメージでは、前景オブジェクトは背景オブジェクトに影を付けるようです。
たとえば、次の図では、左側のカメラに灰色のピクセル "P2" が表示されています。ただし、白い前景オブジェクトは、右側のカメラ IR ビームをブロックします。 右側のカメラには、"P2" のデータがありません。
同期されたその他のデバイスは、隠されたデータを提供できます。 - 3 次元のオブジェクトをスキャンします。
- 有効なフレーム レートを、1 秒あたり 30 フレーム (FPS) を超える値に増やします。
- 露出の中心から 100 マイクロ秒 (μs) 以内に揃えた、同じシーンの複数の 4K カラー 画像をキャプチャします。
- 空間内でカメラの範囲を増やします。
マルチデバイス構成を計画する
開始する前に、 Azure Kinect DK ハードウェアの仕様 と Azure Kinect DK 深度カメラを確認してください。
注
外側のプラスチックカバーを取り外して、同期入力ジャックと同期出力ジャックを公開します。
デバイス構成を選択する
デバイス構成には、次のいずれかの方法を使用できます。
-
デイジーチェーン構成。 1 つのマスター デバイスと最大 8 つの下位デバイスを同期します。
-
スター構成。 1 つのマスター デバイスと最大 2 つの下位デバイスを同期します。
外部同期トリガーの使用
どちらの構成でも、マスター デバイスは下位デバイスのトリガー信号を提供します。 ただし、同期トリガーにはカスタム外部ソースを使用できます。 たとえば、このオプションを使用して、イメージ キャプチャを他の機器と同期できます。 デイジーチェーン構成またはスター構成のいずれかの場合、外部トリガーソースはマスターデバイスに接続されます。
外部トリガー ソースは、マスター デバイスと同じ方法で機能する必要があります。 次の特性を持つ同期信号を配信する必要があります。
- 高活性
- パルス幅:8μsを超える
- 5V TTL/CMOS
- 最大運転能力:8ミリアンペア(mA)以下
- 周波数サポート: 正確に 30 FPS、15 FPS、5 FPS (カラー カメラ マスター VSYNC 信号の周波数)
トリガーソースは、3.5mmオーディオケーブルを使用して、マスターデバイスのSync inポートに信号を送信する必要があります。 ステレオまたはモノラル ケーブルを使用できます。 Azure Kinect DK は、オーディオ ケーブル コネクタのすべてのスリーブとリングを一緒にショートさせ、それらを取り付けます。 次の図に示すように、デバイスはコネクタ の先端からのみ同期信号を受信します。
外部機器の操作方法の詳細については、「外部同期デバイスで Azure Kinect レコーダーを使用する」を参照してください。
注
Sync Out は RGB カメラの VSync です。 すべてのデバイスのタイムスタンプは 0 に設定され、カウントアップされます。 Microsoft は同期パルスの最小幅と最大幅を特徴付けしていないため、Azure Kinect DK から同期によって生成されたパルスを模倣することをお勧めします。
カメラの設定とソフトウェア構成を計画する
カメラを制御し、画像データを使用するようにソフトウェアを設定する方法については、 Azure Kinect Sensor SDK を参照してください。
このセクションでは、同期されたデバイス (ただし、1 つのデバイスではない) に影響を与えるいくつかの要因について説明します。 ソフトウェアでは、これらの要因を考慮する必要があります。
露出に関する考慮事項
各デバイスの正確なタイミングを制御する場合は、手動の露出設定を使用することをお勧めします。 自動露出設定では、各カラー カメラで実際の露出を動的に変更できます。 露出はタイミングに影響するため、このような変更はすぐにカメラを同期から押し出します。
画像キャプチャ ループでは、同じ露出設定を繰り返し設定しないようにします。 API は、必要なときに 1 回だけ呼び出します。
複数の深度カメラ間の干渉を回避する
複数の深度カメラが重複する視野を撮影している場合、各カメラは独自の関連するレーザーを画像化する必要があります。 レーザーが互いに干渉しないようにするには、カメラキャプチャを互いに160μs以上オフセットする必要があります。
深度カメラのキャプチャごとに、レーザーは 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ですが、160usを指定して余裕を持っています。 NFOV UNBINNEDを例にとると、各125μsパルスの後に1450μsのアイドル状態が続きます。 (9 x 125) + (8 x 1450) を合計すると、12.8 ミリ秒の露出時間が得られます。 2台のデバイスの露出をできる限り近くにインターリーブするには、第1のカメラの最初のアイドル期間に第2のカメラの最初のパルスを合わせることです。 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 転送を処理するために 16 MB のカーネル メモリのみを USB コントローラーに割り当てます。 通常、この量は 1 つの Azure Kinect DK をサポートするのに十分です。 ただし、複数のデバイスをサポートするには、USB コントローラーのメモリを増やす必要があります。 メモリを増やすには、次の手順に従います。
- /etc/default/grub を編集します。
- 次の行を見つけます。
次の行を使用して置き換えます。GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.usbfs_memory_mb=32"注
これらのコマンドは、USB メモリを 32 MB に設定します。 既定値の 2 倍の設定例を次に示します。 ソリューションに応じて、はるかに大きな値を設定できます。
- sudo update-grub を実行します。
- コンピューターを再起動します。
ケーブル
デバイスを相互に接続し、ホスト コンピューターに接続するには、3.5 mm のオスとオスのケーブル (3.5 mm オーディオ ケーブルとも呼ばれます) を使用する必要があります。 ケーブルの長さは 10 メートル未満で、ステレオまたはモノラルにすることができます。
必要なケーブルの数は、使用するデバイスの数と、特定のデバイス構成によっても異なります。 Azure Kinect DK ボックスにはケーブルは含まれません。 個別に購入する必要があります。
スター構成でデバイスを接続する場合は、ヘッドフォンスプリッターも 1 つ必要です。
デバイスの接続
ダイズ チェーン構成で Azure Kinect DK デバイスを接続するには
- 各 Azure Kinect DK を電源に接続します。
- 各デバイスをホスト PC に接続します。
- マスター デバイスにするデバイスを 1 つ選択し、3.5 mm オーディオ ケーブルを 同期出力 ポートに接続します。
- ケーブルのもう一方の端を、最初の下位デバイスの 同期 ポートに差し込みます。
- 別のデバイスを接続するには、別のケーブルを最初の下位デバイスの 同期出力 ポートに接続し、次のデバイスの 同期 ポートに差し込みます。
- すべてのデバイスが接続されるまで、前の手順を繰り返します。 最後のデバイスには、ケーブル接続が 1 つだけ必要です。 その同期出力ポートは空である必要があります。
スター構成で Azure Kinect DK デバイスを接続するには
- 各 Azure Kinect DK を電源に接続します。
- 各デバイスをホスト PC に接続します。
- マスター デバイスにするデバイスを 1 つ選択し、ヘッドフォン スプリッターの単一端を その同期出力 ポートに接続します。
- 3.5 mm オーディオ ケーブルをヘッドフォン スプリッターの "分割" 端に接続します。
- 各ケーブルのもう一方の端を、下位デバイスの1つのSync inポートに接続します。
デバイスが接続され、通信していることを確認する
デバイスが正しく接続されていることを確認するには、 Azure Kinect ビューアーを使用します。 マスター デバイスと組み合わせて各下位デバイスをテストするには、必要に応じてこの手順を繰り返します
重要
この手順では、各 Azure Kinect DK のシリアル番号を知っている必要があります。
- Azure Kinect Viewer の 2 つのインスタンスを開きます。
- [ デバイスを開く] で、テストする下位デバイスのシリアル番号を選択します。
重要
すべてのデバイス間で正確なイメージ キャプチャの配置を取得するには、マスター デバイスを最後に起動する必要があります。
- [ 外部同期] で [サブ] を選択 します。
-
[スタート] を選択します。
注
これは下位デバイスであるため、Azure Kinect Viewer はデバイスの起動後に画像を表示しません。 下位デバイスがマスター デバイスから同期信号を受信するまで、イメージは表示されません。
- 下位デバイスが起動したら、Azure Kinect Viewer の他のインスタンスを使用してマスター デバイスを開きます。
- [ 外部同期] で [マスター] を選択 します。
- [スタート] を選択します。
マスター Azure Kinect デバイスが起動すると、Azure Kinect Viewer の両方のインスタンスに画像が表示されます。
デバイスを同期セットとして調整する
デバイスが正しく通信していることを確認したら、それらを調整して 1 つのドメインで画像を生成する準備が整います。
1 台のデバイスでは、深度カメラと RGB カメラが連携するように工場で調整されています。 ただし、複数のデバイスを連携させる必要がある場合は、画像をキャプチャしたカメラのドメインから、画像の処理に使用するカメラのドメインに変換する方法を決定するために、それらのデバイスを調整する必要があります。
クロスキャリブレーションデバイスには複数のオプションがあります。 Microsoft では、OpenCV メソッドを使用する GitHub のグリーン スクリーン コード サンプルを提供しています。 このコード サンプルの Readme ファイルには、デバイスを調整するための詳細と手順が記載されています。
調整の詳細については、「 Azure Kinect 調整関数を使用する」を参照してください。
次のステップ
同期されたデバイスを設定した後は、使い方を学び始めることもできます。