跳至主要内容

2D Camera Object Depth Estimation

本範例示範多個 QIR ROS SDK 套件如何同時處理相同的 2D 相機影像串流。

本範例整合以下 QIR ROS Pipeline:

輸入資料使用一份僅包含相機影像與相機校正資訊的 ROS bag。如此一來,即使未連接實體相機,使用者仍可同時執行兩個 Pipeline 並觀察其輸出結果。

本範例的目的在於說明 QIR ROS SDK 套件並不限於彼此獨立的單一範例。多個功能可以共享相同的感測器輸入,並作為較大型感知工作流程的一部分同時運作。


安裝

注意

請確認目標系統符合以下條件:

  • 研華平台
  • 至少 4 GB 的可用磁碟空間
  • 需要可正常使用的網路連線
  • Ubuntu OS 請使用英文語系環境

依照安裝程式說明選擇並安裝 2D Object Depth Estimation 後,可在以下位置找到 QIR ROS Kit:

/usr/local/Advantech/ros/container/ros-demokit/qir_ros_kit

進入 QIR ROS Kit 目錄:

cd /usr/local/Advantech/ros/container/ros-demokit/qir_ros_kit

啟動範例:

./launch_qir.sh advanced_examples/2d_object_depth_estimation
提示

第一次執行此範例時,系統可能需要下載或準備所需的模型與相依套件,因此可能需要較長的時間。


設定指南​

概述​

與深度相機不同,本範例使用的輸入裝置為標準 2D RGB 相機。

錄製的 RGB 影像會由兩個 QIR ROS Pipeline 平行處理:

  1. sample_depth_estimation 從 RGB 影像產生密集深度影像。
  2. sample_apriltag 偵測 AprilTag,並估算 Tag 相對於相機的姿態。

兩個 Pipeline 使用相同的錄製相機影像串流,但會產生不同類型的深度相關資訊。

此架構展示以下概念:

一個相機 → 多個 QIR ROS Pipeline → 整合視覺化

此範例會啟動的元件​

啟動範例後,下列元件會同時執行:

  • ROS bag 會重播已錄製的 2D 相機資料。
  • sample_depth_estimation 處理 RGB 影像並產生深度圖。
  • sample_apriltag 在相同的 RGB 影像中偵測 AprilTag。
  • 相機校正資訊會提供給 AprilTag Pipeline。
  • AprilTag 偵測結果會用來視覺化 Tag 姿態,以及其與相機之間的空間關係。
  • RViz 會同時顯示原始影像、估測深度影像與 AprilTag 結果。

ROS bag 輸入​

提供的 ROS bag 僅包含本範例所需的感測器輸入:

錄製資料ROS 2 訊息類型用途
相機影像sensor_msgs/msg/Image作為深度估測與 AprilTag 偵測共用的 RGB 輸入
相機資訊sensor_msgs/msg/CameraInfo提供姿態估測所需的相機校正資訊

ROS bag 中並未包含已錄製的深度影像。深度影像會在執行期間由 sample_depth_estimation 動態產生。

AprilTag 的偵測結果與姿態結果,也會在執行期間根據重播的相機資料產生。


顯示配置​

此範例會顯示三個主要結果:

  • 左上:估測深度影像
    顯示 sample_depth_estimation 從 2D RGB 影像產生的每像素深度圖。

  • 左下:原始相機影像
    顯示 ROS bag 重播的 RGB 影像,其中包含作為偵測目標的 AprilTag。

  • 中央與右側:AprilTag 空間視覺化
    在 RViz 中顯示偵測到的 AprilTag 座標系,以及其與相機座標系之間的空間關係。

此配置讓使用者可以觀察相同的相機影像,如何由兩個不同的 QIR ROS Pipeline 進行處理與解讀。


結果說明​

雖然兩個 Pipeline 都會提供與深度相關的資訊,但其輸出意義並不相同。

深度估測結果​

sample_depth_estimation 會從單張 RGB 影像產生密集的每像素深度表示。

使用者可以藉此觀察整個場景的相對深度結構,包括前景與背景區域。

產生之深度數值的意義與尺度取決於所使用的深度估測模型。除非所選模型與設定明確提供公制深度,否則不應直接將結果視為已校正的實際物理距離。

AprilTag 結果​

sample_apriltag 會偵測已知的視覺標記,並利用相機校正資訊與 AprilTag 設定,估算其相對於相機的姿態。

此結果會提供 Tag 相對於相機座標系的位置與方向之幾何表示。

兩個 Pipeline 之間的關係​

兩個 Pipeline 共享相同的相機輸入並同時執行,但會產生彼此獨立的結果:

  • 深度估測提供完整場景的密集深度影像。
  • AprilTag 偵測提供已知目標的姿態與相對距離。

本範例著重於展示多個 QIR ROS 功能如何同時執行並整合視覺化,而不是假設深度估測輸出會直接用於計算 AprilTag 姿態。


使用方式​

  1. 使用提供的指令啟動範例。
  2. 啟動腳本會啟動 Docker 容器並重播已錄製的 ROS bag。
  3. 等待深度估測模型與 AprilTag Pipeline 完成初始化。
  4. 在 RViz 中觀察三個主要結果區域:
    • 原始 RGB 影像
    • 估測深度影像
    • AprilTag 姿態與相對距離
  5. 隨著錄製影像序列播放,比較兩個 Pipeline 如何對相同的相機影格產生不同結果。

延伸至您的硬體​

若要將提供的 ROS bag 替換為您自己的 2D 相機:

  1. 在 Host 或開發環境中啟動相機 Driver。
  2. 確認 RGB 影像與 CameraInfo topic。
  3. 將範例的輸入 topic remap 至您的相機 topic。
  4. 確認相機有發布有效的校正資訊。
  5. 依照目標設定 AprilTag family、Tag size 與偵測參數。
  6. 確認輸入影像格式與解析度皆受兩個 Pipeline 支援。
  7. 若輸出的 topic 名稱或 frame 名稱不同,請更新 RViz 設定。

由於深度影像是從 RGB 輸入估測而來,因此不需要實體深度相機。

不過,深度估測結果的品質可能受到以下因素影響:

  • 光線條件
  • 場景紋理
  • 相機影像品質
  • 與模型訓練資料差異較大的物件或場景
  • 深度估測模型與執行環境設定

AprilTag 結果也可能受到以下因素影響:

  • 相機校正精度
  • AprilTag 尺寸設定
  • 觀看角度
  • 動態模糊
  • 影像解析度
  • Tag 可見程度

適用情境​

在以下情況下,可以使用 2D Object Depth Estimation:

  • 想了解多個 QIR ROS SDK 套件如何共享相同的相機輸入。
  • 想同時執行深度估測與 AprilTag 偵測。
  • 想僅使用 2D RGB 相機探索深度相關的感知功能。
  • 想比較密集場景深度估測與基於 Marker 的姿態估測。
  • 需要一個不必連接實體相機即可重複執行的 QIR ROS 展示範例。
  • 想將此範例作為使用多個 QIR ROS 元件建立大型感知 Pipeline 的參考。

本範例主要作為教學與整合參考,用於展示多個 QIR ROS 元件如何協同運作,而不是針對所有相機與環境提供已校正的距離量測解決方案。