2D Camera Object Depth Estimation
本範例示範多個 QIR ROS SDK 套件如何同時處理相同的 2D 相機影像串流。
本範例整合以下 QIR ROS Pipeline:
sample_depth_estimation:從 RGB 影像產生每像素深度圖。sample_apriltag:偵測 AprilTag,並估算其相對於相機的姿態與距離。
輸入資料使用一份僅包含相機影像與相機校正資訊的 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 平行處理:
sample_depth_estimation從 RGB 影像產生密集深度影像。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 姿態。
使用方式
- 使用提供的指令啟動範例。
- 啟動腳本會啟動 Docker 容器並重播已錄製的 ROS bag。
- 等待深度估測模型與 AprilTag Pipeline 完成初始化。
- 在 RViz 中觀察三個主要結果區域:
- 原始 RGB 影像
- 估測深度影像
- AprilTag 姿態與相對距離
- 隨著錄製影像序列播放,比較兩個 Pipeline 如何對相同的相機影格產生不同結果。
延伸至您的硬體
若要將提供的 ROS bag 替換為您自己的 2D 相機:
- 在 Host 或開發環境中啟動相機 Driver。
- 確認 RGB 影像與 CameraInfo topic。
- 將範例的輸入 topic remap 至您的相機 topic。
- 確認相機有發布有效的校正資訊。
- 依照目標設定 AprilTag family、Tag size 與偵測參數。
- 確認輸入影像格式與解析度皆受兩個 Pipeline 支援。
- 若輸出的 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 元件如何協同運作,而不是針對所有相機與環境提供已校正的距離量測解決方案。