機器人技術正在采用深度學習技術來精確導航室內環境,檢測并跟蹤感興趣的物體,以及在沒有碰撞的情況下進行移動。然而,深度學習的復雜性日益增加,使得在嵌入式系統上適應這些工作負載具有挑戰性。雖然您可以在精度和深度學習模型大小之間進行權衡,但在大多數機器人應用程序中,為了滿足實時需求而犧牲精度通常會適得其反。
易于使用和部署使得 NVIDIA Jetson 平臺 成為開發人員、研究人員和制造商制造和部署機器人(如 JetBot 、 MuSHR 和 MITRaceCar )的合理選擇。在這篇文章中,我們在 Jetson 上提出了用于分類、目標檢測和人體姿勢估計的深度學習模型。我們還提供了一個 ROS2 節點,用于在部署中監控 Jetson 的各種資源和操作參數。 ros2 提供了輕量級實現,因為它消除了網橋節點的依賴性,并在嵌入式系統中提供了各種優勢。
我們利用現有的 NVIDIA 框架進行深度學習模型部署,如 TensorRT ,以提高模型推理性能。我們還集成了 NVIDIA DeepStream SDK 和 ROS 2 ,以便您可以執行流聚合和批處理,并部署各種 AI 模型用于分類和對象檢測,包括 ResNet18 、 MobileNetV1 / V2 、 SSD 、 YOLO 、 FasterRCNN 。此外,我們還為世界各地的開發者基于 Jetson 的流行項目(如 trt_pose 和 jetson_stats )實現 ros2 節點。最后,我們為上面提到的每個應用程序提供了一個 GitHub 存儲庫,包括 ros2 節點和 Docker 文件 ,這樣您就可以輕松地在 Jetson 平臺上部署節點。有關每個項目的詳細信息,請參閱以下部分。
用于人體姿態估計的 ROS2 節點
ros2_trt_pose 包是基于 trt_pose 實現的,它可以在 Jetson 平臺上進行姿態估計。存儲庫使用 resnet18 和 densenet121 為姿勢估計提供了兩個經過訓練的模型。為了了解人體姿勢,預訓練模型根據 COCO 數據集的類別推斷出 17 個身體部位。
圖 1 ros2 \ u trt _ pose 軟件包的描述和輸出。
以下是 ros2_trt_pose package 的主要功能:
發布 pose_msgs ,如 count of person 和 person_id 。對于每個 person_id ,它發布 17 個身體部位。
提供啟動文件以便于 Rviz2 上的使用和可視化:
圖像消息
視覺標記: body_joints , body_skeleton
包含基于 Jetson 的 Docker 映像,便于安裝和使用。
PyTorch 和 TensorRT 的 ROS 2 包
圖 2 。 ros2 trt _分類和 trt _檢測節點的包描述。
使用 PyTorch 有兩個用于分類和檢測的包,每個包都實現了相應的 TRT 版本。這四個軟件包是使用 ros2 的機器人專家開始使用 PyTorch 進行深度學習的良好起點。
TensorRT 已經在 torch2trt 的幫助下集成到包中,以加速推斷。它生成一個運行時引擎,該引擎根據網絡架構和部署設備進行優化。
這些軟件包的主要特點如下:
對于分類,您可以從各種 ImageNet 預訓練模型中進行選擇,包括 Resnet18 、 AlexNet 、 squezenet 和 Resnet50 。
對于檢測,目前支持基于 MobileNetV1 的 SSD ,在 COCO 數據集上進行訓練。
相對于直接在 GPU 上執行推理的 PyTorch 模型, TRT 包在執行推理方面提供了顯著的加速。
推理結果以視覺圖形的形式公布。
在運行該節點時,還將顯示一個窗口,其中可視化了推理結果。
提供了基于 Jetson 的 Docker 映像和啟動文件,以便于使用。
用于 DeepStream SDK 的 ROS 2 節點
圖 3 ROS 2 DeepStream 發布服務器節點的包說明。
DeepStream SDK 提供了一個完整的流分析工具包,用于使用多傳感器處理、視頻和圖像理解構建端到端基于人工智能的解決方案。它支持流行的對象檢測和分割模型,如最先進的 SSD 、 YOLO 、 FasterRCNN 和 MaskRCNN 。
NVIDIA 根據 DeepStream Python Apps 項目提供執行兩個推理任務的 ROS 2 節點,如下所示:
目標檢測: 檢測到四類對象: Vehicle 、 Person 、 RoadSign 和 TwoWheeler 。
屬性分類: 車輛類的對象有三種類型的屬性: Color 、 Make 和 Type 。
這些發布服務器節點從攝像機或文件接收單個或多個視頻流作為輸入。它們執行推理,并將檢測和分類的結果發布到不同的主題。我們還提供了訂閱這些主題并以 vision_msgs 格式顯示結果的 ros2 訂戶節點示例。每個推理任務還生成一個可視化窗口,在檢測到的對象周圍有邊界框和標簽。附加的推理任務和定制模型可以與本項目中提供的 DeepStream 軟件架構集成。
在視頻中,底部的控制臺顯示了多流發布節點發布分類輸出的平均速率(以Hz為單位)。
vision_msgs Classification2D 格式的示例分類輸出:
[vision_msgs.msg.ObjectHypothesis(id=’silver’, score=0.7280375957489014), vision_msgs.msg.ObjectHypothesis(id=’toyota’, score=0.7242303490638733), vision_msgs.msg.ObjectHypothesis(id=’sedan’, score=0.6891725063323975)]
ROS 2 Jetson 統計
ros2_jetson_stats 包是一個社區構建包,用于監視和控制您的 Jetson 設備。它可以在您的終端上運行,并提供一個 Python 包,以便于在 Python 腳本中集成。利用 ros2_jetson_stats 庫,構建 ROS 2 診斷消息和服務。
ros2_jetson_stats 軟件包具有以下 ROS 2 診斷消息:
GPU / CPU 使用百分比
EMC /交換/內存狀態(使用率 % )
SoC 的功率和溫度
現在您可以通過 ROS 2 命令行控制以下內容:
( EZX29 和 Speed :
電源型號( nvpmodel )
jetson_clocks
您還可以提供一個參數來設置讀取診斷消息的頻率。
有關詳細信息,請參閱 NVIDIA-AI-IOT/ros2_jetson_stats GitHub repo 。
用于 Jetson 的 ROS 2 容器
為了在 Jetson 上輕松運行 ROS 2 的不同版本, NVIDIA 發布了各種 dockerfile ,并為 ROS 2 Eloquent和 Foxy 構建了腳本,此外還有 ROS Melodic 和 Noetic 。這些容器提供了在 Jetson 上安裝 ROS 或 ROS 2 并構建自己的基于 ROS 的應用程序的自動化和可靠的方法。
因為 Elocquent 和 Melodic 已經為 Ubuntu18 。 04 提供了預構建的包,所以這些版本的 ROS 被 Dockerfiles 安裝到容器中。另一方面, Foxy 和 Noetic 是從容器內部的源代碼構建的,因為這些版本都是為 ubuntu20 。 04 預構建的。對于容器,使用這些版本的 ROS 或 ROS 2 是相同的,不管底層的 OS 發行版如何。
要構建容器,請在運行 Jetpack4 。 4 或更新版本的 Jetson 設備上克隆 repo ,然后啟動 ROS 構建腳本 :
$ git clone https://github.com/dusty-nv/jetson-containers $ cd jetson-containers $ 。/scripts/docker_build_ros.sh all # build all: melodic, noetic, eloquent, foxy $ 。/scripts/docker_build_ros.sh melodic # build only melodic $ 。/scripts/docker_build_ros.sh noetic # build only noetic $ 。/scripts/docker_build_ros.sh eloquent # build only eloquent $ 。/scripts/docker_build_ros.sh foxy # build only foxy
此命令創建具有以下標記的容器:
ros:melodic-ros-base-l4t-r32.4.4
ros:noetic-ros-base-l4t-r32.4.4
ros:eloquent-ros-base-l4t-r32.4.4
ros:foxy-ros-base-l4t-r32.4.4
例如,要啟動 ROS 2 Foxy 容器,請運行以下命令:
$ sudo docker run –runtime nvidia -it –rm –network host ros:foxy-ros-base-l4t-r32.4.4
除了 Jetson 設備上的其他硬件加速器(如視頻編碼器和解碼器),使用 –runtime nvidia 標志會自動啟用容器中的 GPU 直通。要在容器中傳輸 MIPI CSI 攝影機,請包含以下標志:
–volume /tmp/argus_socket:/tmp/argus_socket
要在容器中傳輸 V4L2 USB 攝像頭,請在啟動容器時安裝所需的 /dev/video* 設備:
–device /dev/video0
NVIDIA Omniverse ISAAC 面向 ROS 開發者的仿真平臺
在 Omniverse NVIDIA 平臺上構建的 NVIDIA ISAAC 模擬仿真工具包 比現有的機器人工作流程帶來了一些有用的改進:
它利用了 Omniverse 高度精確的物理模擬和逼真的光線跟蹤圖形,直接與業界領先的物理框架集成,如用于剛體動力學的 NVIDIA PhysX SDK 。
它重新關注互操作性、與 NVIDIA ISAAC SDK 的深度集成以及 ROS 的擴展。
它很容易擴展。通過其基于 Python 的腳本接口,它允許您適應自己獨特的用例。
它是為可部署而構建的,其體系結構支持本地工作站上的工作流,并通過云與 NVIDIA NGC 一起工作。
關于作者
Amey Kulkarni 是 NVIDIA 的開發技術工程師,專注于將深度學習解決方案有效地部署到邊緣。在 2019 年加入 NVIDIA 之前,他完成了馬里蘭大學計算機工程博士學位。他的研究興趣是在嵌入式平臺上部署數字信號處理、計算機視覺和深度學習系統。
Rishabh Chadha 是 NVIDIA 的嵌入式工程實習生—— AI ,他專注于為 NVIDIA Jetson 平臺集成深度學習和機器人技術框架。他將于 2021 年畢業于伍斯特理工學院,獲得機器人學碩士學位。他的興趣主要包括深度學習、醫學成像和機器人感知。
Asawaree Bhide 是 NVIDIA 的 AI 嵌入式工程實習生,致力于優化和部署邊緣設備上的深度學習模型。她目前正在喬治亞理工學院攻讀計算機科學碩士學位,她對解決由具體代理自主導航的復雜感知任務感興趣。Tomasz Lewicki 是 NVIDIA 的嵌入式工程實習生。他擁有圣何塞州立大學計算機工程碩士學位,華沙工業大學華沙工業大學機器人工程學學士學位。他的興趣集中在計算機視覺和機器人應用的深度學習上。
審核編輯:郭婷
-
機器人
+關注
關注
211文章
28632瀏覽量
208002 -
NVIDIA
+關注
關注
14文章
5075瀏覽量
103539 -
深度學習
+關注
關注
73文章
5512瀏覽量
121415
發布評論請先 登錄
相關推薦
評論