同步多個 Azure Kinect DK 裝置
每個 Azure Kinect DK 裝置都包含 3.5 公釐的同步處理埠 (同步輸入和同步輸出),可用來將多個裝置連結在一起。 裝置連線之後,您的軟體可以協調兩者之間的觸發時間。
本文說明如何連線和同步處理裝置。
使用多個 Azure Kinect DK 裝置的優點
使用多個 Azure Kinect DK 裝置的原因眾多,包括:
- 填入遮蔽。 雖然 Azure Kinect DK 資料轉換會產生單一影像,但兩部相機 (深度和 RGB) 之間實際上有一小段距離。 因此位移可能造成遮蔽。 當裝置中的兩部相機,其中一部視野中的前景物體遮擋了部分的背景物體時,就會產生遮蔽。 在產生的彩色影像中,前景物體似乎在背景物體上投射陰影。
例如,在下圖中,左側相機會看到灰色像素「P2」。不過,白色前景物件會封鎖右側相機 IR 光束。 因此右側相機沒有「P2」的資料。
其他同步處理裝置可以提供遮蔽的資料。 - 掃描三個維度中的物體。
- 將有效的畫面播放速率增加到每秒大於 30 個畫面 (FPS) 的值。
- 擷取多個相同場景的 4K 彩色影像,全都在 100 微秒 (μs) 內對齊曝光中心。
- 增加空間內的相機涵蓋範圍。
規劃多裝置設定
開始之前,請務必檢閱 Azure Kinect DK 硬體規格和 Azure Kinect DK 深度相機。
注意
移除外部塑膠蓋,以開啟同步輸入和同步輸出插孔。
選取裝置設定
您可以使用下列方法進行裝置設定:
- 菊輪鍊設定。 同步處理一個主要裝置和最多八個從屬裝置。
- 星型設定。 同步處理一個主要裝置和最多兩個從屬裝置。
使用外部同步觸發程序
在這兩種設定中,主要裝置會提供從屬裝置的觸發訊號。 不過,您可以針對同步處理觸發程序使用自訂的外部來源。 例如,您可以使用此選項來與其他設備同步處理影像擷取。 在菊輪鍊設定或星型網中,外部觸發程序來源會連接到主要裝置。
您的外部觸發程序來源必須與主要裝置的運作方式相同。 它必須提供具有下列特性的同步訊號:
- 高電性
- 脈衝寬度:大於 8μs
- 5V TTL/CMOS
- 最大驅動容量:不超過 8 毫安 (mA)
- 頻率支援:正好 30 FPS、15 FPS 和 5 FPS (彩色相機主要 VSYNC 訊號的頻率)
觸發程序來源必須使用 3.5 公釐音源線,將訊號傳遞給主要裝置同步輸入埠。 您可以使用立體或單聲道音源線。 Azure Kinect DK 會同時使音源線連接器的所有套和環短路,並加以接地。 如下圖所示,裝置只會從連接器接收同步訊號。
如需深入了解如何使用外部設備,請參閱搭配外部同步裝置使用 Azure Kinect 錄製器
注意
同步輸出是 RGB 相機的 VSync。 所有裝置的時間戳記都會設定為零,並計算總數。 Microsoft 尚未確定同步脈衝的最小和最大寬度,因此建議模擬同步輸出 Azure Kinect DK 所產生的脈衝。
規劃相機設定和軟體設定
如需深入了解如何設定軟體以控制相機及使用影像資料,請參閱 Azure Kinect 感應器 SDK。
本節討論會影響同步裝置 (但不會影響單一裝置) 的幾個因素。 您應為軟體考慮這些因素。
曝光考量
如果您想要控制每個裝置的精確計時,建議您使用手動曝光設定。 在自動曝光設定下,每個彩色相機都可以動態變更實際曝光。 由於曝光會影響時間,因此這類變更會快速將相機移出同步範圍。
在影像擷取迴圈中,避免重複設定相同的曝光設定。 需要時只要呼叫 API 一次。
避免多部深度相機之間的干擾
當多部深度相機在處理重疊的視野時,每部相機都必須處理與自己相關的雷射。 若要防止雷射彼此干擾,相機擷取應該彼此位移 160μs 以上。
每次深度相機擷取時,雷射會開啟九次,且每次只開啟 125μs。 然後,雷射會視作業模式而定,閒置 1450μs 或 2390μs。 此行為表示位移計算的起點為 125μs。
此外,相機時鐘與裝置韌體時鐘之間的差異會將最小位移增加到 160μs。 若要為您的設定計算出更精確的位移,請注意您使用的深度模式,並參考深度感應器原始計時表。 藉由使用此資料表的資料,您可以使用下列方程式,計算 (每部相機曝光時間) 的最小位移:
曝光時間 = (IR 脈衝 × 脈衝寬度) + (閒置期間 × 閒置時間)
當您使用 160μs 的位移時,最多可以設定九部額外的深度相機,讓每個雷射在其他雷射閒置時開啟。
在您的軟體中,使用 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 部裝置曝光時間的方式是讓第二部相機的第一個脈衝落在第一個相機的第一個閒置期間。 第一部和第二部相機之間的延遲可能小到 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 感應器 SDK。 如需如何安裝感應器 SDK 的詳細資訊,請移至快速入門:設定您的 Azure Kinect DK。
Linux 電腦:Ubuntu 上的 USB 記憶體
根據預設,以 Linux 為基礎的主機電腦只會配置 16 MB 的核心記憶體來處理 USB 傳輸。 此數量通常足以支援單一 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。 這是預設值兩倍的範例設定。 您可以針對您的解決方案設定較大的值。
- 執行 sudo update-grub。
- 重新啟動電腦。
纜線
若要將裝置彼此連接至主機電腦,您必須使用 3.5 公釐的公對公音源線 (也稱為 3.5 公釐音源線)。 音源線長度應小於 10 公尺,而且可以是立體或單聲道。
您必須擁有的音源線數目取決於您使用的裝置數目,以及特定的裝置設定。 Azure Kinect DK 盒不包含音源線。 您必須另外購買音源線。
若要在星型網中連接裝置,您必須要有一個耳機分配線。
將您的裝置連線
在菊輪鍊設定中連接 Azure Kinect DK 裝置
- 將每個 Azure Kinect DK 連接到電源。
- 將每部裝置連接到其主機電腦。
- 選取一個裝置作為主要裝置,然後將 3.5 公釐音源線插入其同步輸出埠。
- 將音源線的另一端插入第一個從屬裝置的同步輸入埠。
- 若要連接另一部裝置,請將另一個音源線插入第一個從屬裝置的同步輸出埠,並插入下一個裝置的同步輸入埠。
- 重複上一個步驟,直到連接所有裝置為止。 最後一個裝置應該只有連接一個音源線。 其同步輸出埠應該是空的。
在星型網中連接 Azure Kinect DK 裝置
- 將每個 Azure Kinect DK 連接到電源。
- 將每部裝置連接到其主機電腦。
- 選取一個裝置做為主要裝置,然後將耳機分配線的單一端插入其同步輸出埠。
- 將 3.5 公釐音源線連接到耳機分配線的「分割」端。
- 將每個音源線的另一端插入其中一個從屬裝置的同步輸入埠。
確認裝置已連接並且可進行通訊
若要確認裝置已正確連接,請使用 Azure Kinect 檢視器。 視需要重複此流程,以搭配主要裝置測試每個從屬裝置
重要
若要進行此流程,您必須知道每個 Azure Kinect DK 的序號。
- 開啟兩個 Azure Kinect 檢視器執行個體。
- 在 [開啟裝置] 底下,選取您要測試的從屬裝置的序號。
重要
若要精準對齊所有裝置之間的影像擷取,您必須最後啟動主要裝置。
- 在 [外部同步] 底下,選取 [從屬]。
- 選取 [開始]。
注意
因為這是從屬裝置,所以 Azure Kinect 檢視器在裝置啟動時不會顯示影像。 在從屬裝置收到來自主要裝置的同步訊號之前,不會顯示任何影像。
- 從屬裝置啟動之後,請使用 Azure Kinect 檢視器的其他執行個體來開啟主要裝置。
- 在 [外部同步] 底下,選取 [主要]。
- 選取 [開始]。
當主要 Azure Kinect 裝置啟動時,Azure Kinect 檢視器的兩個執行個體都應顯示影像。
將裝置校正為同步集
確認裝置可正確進行通訊之後,即可進行校正,以在單一網域中產生影像。
在單一裝置中,深度和 RGB 相機會經過原廠校正,以利協同運作。 不過,當多個裝置必須一起運作時,則必須進行校正,才能判斷如何從擷取影像的相機網域中,將該影像轉換成您想要用來處理影像的相機網域。
有多個交叉校正裝置的選項。 Microsoft 提供使用 OpenCV 方法的 GitHub 綠畫面程式碼範例。 此程式碼範例的讀我檔案提供更多有關校正裝置的詳細資料和指示。
如需校正的詳細資訊,請參閱使用 Azure Kinect 校正函式。
下一步
設定同步裝置之後,您也可以了解如何使用