將 Nav2 堆疊與 NVIDIA Isaac ROS GEM 進行整合

作者 NVIDIA

NVIDIA Isaac ROS GEM 是 ROS 軟體包,可以優化以 AI 為基礎的機器人應用,以在 NVIDIA GPU 和 Jetson 平台上執行。有越來越多人希望將這些套件與 Nav2 專案進行整合,以協助自主機器人在動態環境中成功行進。

此工作是完全在模擬中完成,可以做為將機器人能力從模擬轉移至真實世界(Sim2Real)的起點。

本文著重於真實世界問題:機器人因為與倉庫中的堆高機牙叉碰撞而損壞。堆高機是短距離移動重物的工業貨車。它具有稱為牙叉(或貨叉)的延伸部分,可以滑至物體下方抬起物體。

Two photos of standard forklifts, one with packages on the tines.
1:堆高機

主要使用的機器人感測器(光達)可以偵測堆高機的車身,但是無法偵測靠近地面的牙叉。在此情況下,同時需要其他可以偵測牙叉的感測器。於此專案中,是模擬在機器人上使用兩部 RGB 攝影機。使用 Isaac ROS 立體 GEM,利用來自於這些攝影機的影像計算視差。

立體 GEM 根據視差產生點雲,包含攝影機視野中之所有物件在環境中的位置資訊。這些資訊適用於更新導航節點,以便在可能會發生碰撞的情況下,改變機器人的路徑。

GIF of robot running into forklift tines.
2:在 NVIDIA Isaac Sim 中重現真實世界問題:機器人與堆高機牙叉碰撞

圖 3 所示為專案的基本工作流程。

Diagram starting with NVIDIA Isaac Sim using sensor info for the ROS stereo GEM and using disparity and pointcloud to create the voxel_layer in Nav2.
3:工作流程圖

若需要更多資訊,請參閱 NVIDIA-AI-IOT/Nav2-with-Isaac-ROS-GEMs GitHub repo。

NVIDIA Isaac Sim 設定

在 NVIDIA Isaac Sim 中使用倉庫環境,包含 Carter 機器人和堆高機。依據 ROS2 導航範例,產生 Nav2 堆疊使用的佔據地圖,以避開貨架等靜態障礙物。在建立佔據地圖之後,將動態或移動障礙物加入環境中,包括堆高機和手推車。這是為了模擬真實世界中,物體在機器人不知情的情況下於環境中變動。

重要的是在 NVIDIA Isaac Sim 中,注意 Carter 機器人的左右立體攝影機之間的偏移,讓 NVIDIA Isaac ROS 立體 GEM 正確產生視差。確保先在 NVIDIA Isaac Sim 中啟用 ROS2 橋接器,再開始模擬,以便在 NVIDIA Isaac Sim 以外傳遞 ROS2 訊息。

NVIDIA Isaac ROS 立體 GEM 和 Nav2

Nav2 堆疊是使用全域和局部代價地圖(costmap),引導機器人避開障礙物。局部代價地圖是根據環境中新的移動障礙物進行更新,並可以將雷射掃描和點雲做為來自機器人感測器的輸入。

由於光達的雷射掃描無法在真實場景中辨識堆高機牙叉,您可以使用傳遞至 Nav2 的立體影像中的點雲解決此問題。這些點雲是使用 NVIDIA Isaac ROS 立體 GEM 產生。

Image of a forklift facing forward and a point cloud scattered in and around the tines.
4:當機器人在堆高機前方時,使用 NVIDIA Isaac ROS 立體 GEM 產生的點雲

在圖 4 右側,牙叉下方的淺藍色區域顯示 Nav2 局部代價地圖已更新,以表示該處的障礙物,現在機器人可以避開障礙物。來自 NVIDIA Isaac Sim 的影像平均速率為 20 FPS,來自立體 GEM 的點雲平均速率為 16 FPS。

立體 GEM 產生視差影像,之後會針對在機器人攝影機左右影像中看到的所有物體產生點雲。使用 Isaac ROS 分割 GEM,可以過濾視差以產生僅包含屬於關注物件(例如堆高機牙叉)之點的點雲。

下一節將會更詳細地解說此過濾。

使用 NVIDIA Isaac ROS 分割 GEM 進行視差過濾

以下說明如何將在使用合成方式產生的資料上,訓練將深度學習模型與 NVIDIA Isaac ROS 推論 GEM 搭配使用。達成相同的目標:使用 GEM 以及 Nav2 堆疊,協助機器人在模擬中避開堆高機牙叉。

但是,不是針對機器人攝影機視野中的所有物體產生點雲,僅針對堆高機牙叉進行過濾及產生聚焦點雲。

Diagram now includes the segmentation GEM that creates a segmentation mask for disparity filtering.
5:使用 NVIDIA Isaac ROS 分割和立體 GEM 進行視差過濾的工作流程

我使用在堆高機牙叉影像上訓練的分割模型。在模擬中,NVIDIA Isaac ROS 分割 GEM從機器人取得 RGB 影像,並使用該模型產生對應的分割影像。

任何模型皆可與此管道搭配使用,以根據使用案例過濾特定物件。僅根據關注資料產生(Replicator Composer)及訓練(TAO)即可!

Real-world camera view and segmentation mask combine to create a point cloud for collision avoidance
6:經過訓練的模型根據來自於機器人攝影機的影像,以 39 FPS 產生的彩色分割影像。(左上)機器人的左側攝影機影像。(右上)分割遮罩,(下方)過濾後的堆高機牙叉點雲。

在原始分割影像中,每一個像素代表影像中位於該位置之物件的類別標籤。在知道關注的標籤之後(例如 2 代表堆高機牙叉),於立體 GEM 產生的對應視差影像中,將非關注點設為 invalid。之後產生的點雲不會包含這些點。將有助於減少點雲中的雜訊。

Image of a forklift facing forward and a point cloud centered on the tines.
7:視差過濾後產生的點雲

不同於圖 4 中的點雲,僅有屬於堆高機牙叉的點。

ROS 領域 ID

由於 NVIDIA Isaac ROS GEM 是在容器中執行,而 NVIDIA Isaac Sim 是在主機上執行,必須確保可以在主機與容器之間傳遞 ROS 主題。

因此,請將所有程序之 ROS 領域 ID 設為相同的數字。所有使用相同領域 ID 的 ROS2 節點皆可進行通訊,而使用不同領域 ID 的節點則無法通訊。若需要更多資訊,請參閱 The ROS_DOMAIN_ID

附註

此專案中說明的工作流程可以避開光達和攝影機可偵測到的障礙物。針對太小或被遮擋的障礙物,請探索其他感測器。

此方法對於視差計算和產生的點雲品質很敏感。由於計算視差是一項具有挑戰性的任務,因此可能會取得雜訊點雲,導致 Nav2 錯誤更新代價地圖。

視差過濾是取決於分割模型的效能。如果模型無法產生準確的分割遮罩,則會導致視差和點雲過濾不良。