跳至主要内容

基於 Qualcomm AI Hub 模型在 ASR-D501 上實現避障功能

本範例將示範如何在 ASR-D501 上建立障礙物避障流程。


概述​

  • 模型最佳化與 NPU 加速:使用 Qualcomm AI Hub 匯出專門針對 QCS6490 晶片組量身打造的 YOLO 物件偵測模型。此無縫部署讓裝置能夠直接在其 NPU 上執行高速的硬體加速推論。
  • 可擴展的 ROS 2 架構:使用 OrbbecSDK ROS 2 從 3D 相機發布即時 RGB Topic 與深度影像 Topic。此發布-訂閱機制確保了模組化且低延遲的感測器通訊,能輕鬆與無人機控制系統整合。
  • 分析與決策: 本範例結合偵測邊界框與深度資料來估算障礙物距離,最終提供給飛行控制器障礙物方向(左、中或右)。

什麼是 Qualcomm AI Hub?​

Qualcomm AI Hub 是一個集中式模型儲存庫與最佳化服務,旨在簡化將 AI 模型部署到 Qualcomm 邊緣裝置的流程。

  • 預先優化 AI 模型:可存取專為 Qualcomm 架構特別調校的豐富模型庫(例如 YOLO、MobileNet 和 ResNet)。
  • 硬體加速 (NPU/GPU/CPU):輕鬆將模型編譯並量化為 ONNX、TFLite 或 Qualcomm AI Runtime 等格式,充分發揮晶片上 AI 加速器的效能。
  • 縮短上市時間:降低嵌入式開發人員手動進行模型量化與硬體特定核心調整的複雜度。

系統需求與元件​

元件規格
平台ASR-D501 (Qualcomm QCS6490)
作業系統映像檔ASRD501A1-Ubuntu24.04-x07_v1.0.0
3D 相機Orbbec Gemini 335Lg (USB)
飛行控制器Pixhawk® 6C
模型YOLOv8-Detection (從 Qualcomm AI Hub Models 取得)

工作流程​

下載 Qualcomm AI Hub 上之模型:

  • 步驟 1:從 Qualcomm AI Hub 選擇相容於 QCS6490 的模型
  • 步驟 2:準備獨立的 Python 環境
  • 步驟 3:虛擬環境設定(安裝模型套件)
  • 步驟 4:Qualcomm AI Hub Workbench 驗證
  • 步驟 5:匯出相容於 QCS6490 的模型

障礙物偵測展示:

  • 步驟 1:連接並識別 USB 相機
  • 步驟 2:環境設定(安裝 OrbbecSDK 與 OrbbecSDK ROS 2)
  • 步驟 3:下載 Python 檔案並執行即時推論
  • 步驟 4:連接至飛行控制器

下載 Qualcomm AI Hub 上之模型​

步驟 1:從 Qualcomm AI Hub 選擇相容於 QCS6490 的模型​

開啟 Qualcomm AI Hub 模型頁面,選擇 Qualcomm Dragonwing™ QCS6490 進行篩選。

QAIhubmodel_chipset_choose_qcs6490

選擇您要在裝置上執行的模型。在此範例中,我們選擇 YOLOv8-Detection。

QAIhubmodel_yolov8-det

如需匯出的詳細操作資訊,請參閱 YOLOv8-Detection 原始程式碼與說明文件 (GitHub).

步驟 2:準備獨立的 Python 環境​

首先,先確認您的 Python 版本受到所選 qai-hub-models 發行版本的支援。
您可以在 GitHub 頁面上檢查支援的 Python 版本。

yolov8-det_github


建立並啟用 Python 虛擬環境,使相依性與系統 Python 保持隔離。
將 <venv_name> 替換為您想要的環境名稱:

sudo apt update
sudo apt install python3-venv
python3 -m venv <venv_name>
source <venv_name>/bin/activate

步驟 3:虛擬環境設定(安裝模型套件)​

安裝 Qualcomm AI Hub Models 和 YOLOv8-Detection 模型:

pip install qai-hub-models==0.61.0
qai-hub-models install yolov8_det

在匯出之前,使用 W8A8 量化執行展示結果:

python3 -m qai_hub_models.models.yolov8_det.demo --quantize w8a8

展示結果如下所示。

yolov8_det_official_demo

成功的展示可確認在匯出之前,模型及其相依性皆已正確安裝。

步驟 4:Qualcomm AI Hub Workbench 驗證​

建立 Qualcomm AI Hub Workbench 帳戶,並從 Account → Settings → API Token 取得您的 API 金鑰。

設定從 Qualcomm AI Hub Workbench 帳戶中取得的 <API_TOKEN>:

qai-hub configure --api_token <API_TOKEN>

注意:請將 <API_TOKEN> 視為機密資訊。切勿公開分享、張貼至網路或包含在任何截圖中。

步驟 5:匯出相容於 QCS6490 的模型​

在匯出模型之前,您可以使用以下指令列出所選模型支援的選項:

qai-hub-models export yolov8_det --help

匯出 W8A8 量化後的 TensorFlow Lite (TFLite) 模型:

qai-hub-models export yolov8_det \
--target-runtime tflite \
--quantize w8a8 \
--chipset qcs6490

在此範例中,匯出流程為:

步驟階段動作與格式說明
01初始編譯PyTorch (.pt) → ONNX將原始的 PyTorch 模型轉換為 ONNX 格式。
02量化W8A8套用 W8A8 量化以壓縮模型權重與活化值。
03目標編譯量化的 ONNX → TFLite將量化後的模型編譯為目標執行階段格式 (.tflite)。
04效能分析設備基準測試在實體裝置上測量延遲與記憶體消耗。
05推論範例驗證使用範例輸入執行測試推論。


匯出作業及其個別階段可在 Qualcomm AI Hub Workbench 中檢視。
Qualcomm AI Hub Workbench 畫面可用來檢查提交的模型匯出作業與階段結果。

QAIhubmodel_export_pipeline

當所有流程完成後, 輸出結果將存於 ./export_assets/yolov8_det-tflite-w8a8 資料夾中。

模型匯出完成後,您可以安全地離開虛擬環境:

deactivate

障礙物偵測展示​

步驟 1:連接並識別 USB 相機​

將 Orbbec Gemini 335Lg 連接到 ASR-D501 的 USB Type-C 連接埠。
您可以執行以下指令來確認系統已偵測到相機硬體:

lsusb

在輸出列表中尋找 Orbbec 裝置以確認實體連接成功。

lsusb_command

步驟 2:環境設定(安裝 OrbbecSDK 與 OrbbecSDK ROS 2)​

由於本專案使用 Orbbec 相機與 ROS 2, 我們需要安裝官方的 OrbbecSDK 與 OrbbecSDK ROS 2 以取得相機的資料。

  1. OrbbecSDK v2 - v2.9.3 [官方 GitHub 倉庫]

請參考 GitHub 倉庫,並依指示先設定您的工作區。

成功安裝 Orbbec SDK v2 後, 你可以啟動 OrbbecViewer。 這圖形介面提供一系列功能,包括資料串流預覽、相機設定及後製處理。
OrbbecViewer 介面如下所示。

OrbbecViewer_Gemini335Lg
  1. OrbbecSDK ROS 2 - v2.9.3 [官方 GitHub 倉庫]

請參考 GitHub 倉庫的說明,將程式碼複製到 ROS 2 工作空間的目錄(~/ros2_ws/src)中。

在建置套件之前,您必須先修改 gemini_330_series.launch.py 檔案 (位於 ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/launch 資料夾中) 來設定 RGB 與深度的解析度及畫面更新率:

  • Width: 640, Height: 480
  • FPS: 30

請參考下圖以了解需修改的確切參數:

gemini_330_series_launch_filechange_1gemini_330_series_launch_filechange_2

在儲存 launch 檔案中的變更後, 建置工作區使設定生效:

cd ~/ros2_ws
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release

成功建置套件後, 您已準備好可以啟動相機發布 topics 並監控即時串流。

  • 在終端機 1 - 啟動相機節點
source ~/ros2_ws/install/setup.bash
ros2 run orbbec_camera list_devices_node # Check if the camera is connected
ros2 launch orbbec_camera gemini_330_series.launch.py
  • 在終端機 2 - 透過 RViz2 來視覺化相機輸出
source ~/ros2_ws/install/setup.bash
rviz2

當 RViz2 開啟,你可以新增 Image display 來查看即時的 RGB 和深度 topics。
你可以跟著下面的圖片來加入 topics:

rviz_interface
  • 在終端機 3 - 列出啟動中的 ROS 2 topics
source ~/ros2_ws/install/setup.bash
ros2 topic list

請確保您的相機成功發布 RGB 與深度 topics,如下所示。

ros2_topic_list

步驟 3:下載 Python 檔案並執行即時推論​

下載 obstacle_det.py 檔案, 並將其放在與您匯出的模型相同的資料夾中。
此指令碼會處理即時的 ROS 2 影像串流, 用來偵測鳥類(障礙物)與人類,並使用深度資料計算畫面中障礙物的位置(左、中或右)。

執行推論程式碼:

source ~/ros2_ws/install/setup.bash
python3 obstacle_det.py

您現在會看到一個視窗,顯示即時的物件偵測與距離估算!

Obstacle_detected_demo

步驟 4:連接至飛行控制器​

在我們完整的無人機系統中, 一旦 obstacle_det.py 程式碼識別出障礙物的位置(左、中或右), 它就會傳送訊息給飛行控制器。 接著,飛行控制器會觸發相對應的馬達來移動無人機以避開障礙物。

以下是簡單的工作流程說明:

obstacle_detection_pipeline

展示影片​

觀看下方我們的實際測試影片,親眼見證避障功能的運作!