• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    人工智能/深度學習

    在NVIDIA Jetson 上使用 ROS 2 構建機器人應用程序

    機器人技術正在采用深度學習技術來精確導航室內環境,檢測并跟蹤感興趣的物體,以及在沒有碰撞的情況下進行移動。然而,深度學習的復雜性日益增加,使得在嵌入式系統上適應這些工作負載具有挑戰性。雖然您可以在精度和深度學習模型大小之間進行權衡,但在大多數機器人應用程序中,為了滿足實時需求而犧牲精度通常會適得其反。

    易于使用和部署使得?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 映像,便于安裝和使用。

    視頻 1 。從 ros2 _ trt _ pose 包輸出;視頻顯示帶有身體關節和骨骼的實時圖像,而 pose _ msgs 記錄在屏幕上,在 Jetson NX 上執行人體姿勢估計任務的平均每秒 42

    有關詳細信息,請參閱?NVIDIA-AI-IOT/ros2_trt_pose?GitHub repo 。

    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 映像和啟動文件,以便于使用。

    視頻 2 。基于 NVIDIA TensorRT 的目標檢測任務的 ros2 _ torch _ trt 包的輸出

    有關詳細信息,請參閱?NVIDIA-AI-IOT/ros2_torch_trt?GitHub repo 。

    用于 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 軟件架構集成。

    視頻 3 。使用 NVIDIA deepstream SDK ros2 deepstream 包輸出多流,用于對象檢測任務。日志屏幕上的平均速率顯示, ros2 _ deepstream 節點可以在 Jetson Xavier 上以 164 FPS 的速度運行

    在視頻中,底部的控制臺顯示了多流發布節點發布分類輸出的平均速率(以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)]

    有關詳細信息,請參閱?NVIDIA-AI-IOT/ros2_deepstream?GitHub repo 。

    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

    有關詳細信息,請參閱?dusty-nv/jetson-containers?GitHub repo 。

    NVIDIA Omniverse ISAAC 面向 ROS 開發者的仿真平臺

    在 Omniverse NVIDIA 平臺上構建的?NVIDIA ISAAC 模擬仿真工具包?比現有的機器人工作流程帶來了一些有用的改進:

    • 它利用了 Omniverse 高度精確的物理模擬和逼真的光線跟蹤圖形,直接與業界領先的物理框架集成,如用于剛體動力學的 NVIDIA PhysX SDK 。
    • 它重新關注互操作性、與 NVIDIA ISAAC SDK 的深度集成以及 ROS 的擴展。
    • 它很容易擴展。通過其基于 Python 的腳本接口,它允許您適應自己獨特的用例。
    • 它是為可部署而構建的,其體系結構支持本地工作站上的工作流,并通過云與 NVIDIA NGC 一起工作。

    下一步行動

    作為 ROS 開發人員,您現在可以利用?ISAAC 軟件開發工具包?的功能,同時保留您的軟件投資。使用?ISAAC -ROS bridge,您可以在 ROS 實現中使用 ISAAC GEMS 。

    我們在 NVIDIA Jetson 平臺上為 ROS 2 提供易于使用的軟件包,以構建和部署機器人領域的關鍵應用程序。對于更多人工智能物聯網和機器人技術項目,您可以利用以下資源:

    ?

    0

    標簽

    人人超碰97caoporen国产