機器人技術(shù)正在采用深度學習技術(shù)來精確導航室內(nèi)環(huán)境,檢測并跟蹤感興趣的物體,以及在沒有碰撞的情況下進行移動。然而,深度學習的復雜性日益增加,使得在嵌入式系統(tǒng)上適應(yīng)這些工作負載具有挑戰(zhàn)性。雖然您可以在精度和深度學習模型大小之間進行權(quán)衡,但在大多數(shù)機器人應(yīng)用程序中,為了滿足實時需求而犧牲精度通常會適得其反。
易于使用和部署使得 NVIDIA Jetson 平臺 成為開發(fā)人員、研究人員和制造商制造和部署機器人(如 JetBot 、 MuSHR 和 MITRaceCar )的合理選擇。在這篇文章中,我們在 Jetson 上提出了用于分類、目標檢測和人體姿勢估計的深度學習模型。我們還提供了一個 ROS2 節(jié)點,用于在部署中監(jiān)控 Jetson 的各種資源和操作參數(shù)。 ros2 提供了輕量級實現(xiàn),因為它消除了網(wǎng)橋節(jié)點的依賴性,并在嵌入式系統(tǒng)中提供了各種優(yōu)勢。
我們利用現(xiàn)有的 NVIDIA 框架進行深度學習模型部署,如 TensorRT ,以提高模型推理性能。我們還集成了 NVIDIA DeepStream SDK 和 ROS 2 ,以便您可以執(zhí)行流聚合和批處理,并部署各種 AI 模型用于分類和對象檢測,包括 ResNet18 、 MobileNetV1 / V2 、 SSD 、 YOLO 、 FasterRCNN 。此外,我們還為世界各地的開發(fā)者基于 Jetson 的流行項目(如 trt_pose 和 jetson_stats )實現(xiàn) ros2 節(jié)點。最后,我們?yōu)樯厦嫣岬降拿總€應(yīng)用程序提供了一個 GitHub 存儲庫,包括 ros2 節(jié)點和 Docker 文件 ,這樣您就可以輕松地在 Jetson 平臺上部署節(jié)點。有關(guān)每個項目的詳細信息,請參閱以下部分。
用于人體姿態(tài)估計的 ROS2 節(jié)點
ros2_trt_pose 包是基于 trt_pose 實現(xiàn)的,它可以在 Jetson 平臺上進行姿態(tài)估計。存儲庫使用 resnet18 和 densenet121 為姿勢估計提供了兩個經(jīng)過訓練的模型。為了了解人體姿勢,預(yù)訓練模型根據(jù) COCO 數(shù)據(jù)集的類別推斷出 17 個身體部位。

圖 1 ros2 \ u trt _ pose 軟件包的描述和輸出。
以下是 ros2_trt_pose package 的主要功能:
發(fā)布 pose_msgs ,如 count of person 和 person_id 。對于每個 person_id ,它發(fā)布 17 個身體部位。
提供啟動文件以便于 Rviz2 上的使用和可視化:
圖像消息
視覺標記: body_joints , body_skeleton
包含基于 Jetson 的 Docker 映像,便于安裝和使用。
PyTorch 和 TensorRT 的 ROS 2 包

圖 2 。 ros2 trt _分類和 trt _檢測節(jié)點的包描述。
使用 PyTorch 有兩個用于分類和檢測的包,每個包都實現(xiàn)了相應(yīng)的 TRT 版本。這四個軟件包是使用 ros2 的機器人專家開始使用 PyTorch 進行深度學習的良好起點。
TensorRT 已經(jīng)在 torch2trt 的幫助下集成到包中,以加速推斷。它生成一個運行時引擎,該引擎根據(jù)網(wǎng)絡(luò)架構(gòu)和部署設(shè)備進行優(yōu)化。
這些軟件包的主要特點如下:
對于分類,您可以從各種 ImageNet 預(yù)訓練模型中進行選擇,包括 Resnet18 、 AlexNet 、 squezenet 和 Resnet50 。
對于檢測,目前支持基于 MobileNetV1 的 SSD ,在 COCO 數(shù)據(jù)集上進行訓練。
相對于直接在 GPU 上執(zhí)行推理的 PyTorch 模型, TRT 包在執(zhí)行推理方面提供了顯著的加速。
推理結(jié)果以視覺圖形的形式公布。
在運行該節(jié)點時,還將顯示一個窗口,其中可視化了推理結(jié)果。
提供了基于 Jetson 的 Docker 映像和啟動文件,以便于使用。
用于 DeepStream SDK 的 ROS 2 節(jié)點

圖 3 ROS 2 DeepStream 發(fā)布服務(wù)器節(jié)點的包說明。
DeepStream SDK 提供了一個完整的流分析工具包,用于使用多傳感器處理、視頻和圖像理解構(gòu)建端到端基于人工智能的解決方案。它支持流行的對象檢測和分割模型,如最先進的 SSD 、 YOLO 、 FasterRCNN 和 MaskRCNN 。
NVIDIA 根據(jù) DeepStream Python Apps 項目提供執(zhí)行兩個推理任務(wù)的 ROS 2 節(jié)點,如下所示:
目標檢測: 檢測到四類對象: Vehicle 、 Person 、 RoadSign 和 TwoWheeler 。
屬性分類: 車輛類的對象有三種類型的屬性: Color 、 Make 和 Type 。
這些發(fā)布服務(wù)器節(jié)點從攝像機或文件接收單個或多個視頻流作為輸入。它們執(zhí)行推理,并將檢測和分類的結(jié)果發(fā)布到不同的主題。我們還提供了訂閱這些主題并以 vision_msgs 格式顯示結(jié)果的 ros2 訂戶節(jié)點示例。每個推理任務(wù)還生成一個可視化窗口,在檢測到的對象周圍有邊界框和標簽。附加的推理任務(wù)和定制模型可以與本項目中提供的 DeepStream 軟件架構(gòu)集成。
在視頻中,底部的控制臺顯示了多流發(fā)布節(jié)點發(fā)布分類輸出的平均速率(以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 統(tǒng)計
ros2_jetson_stats 包是一個社區(qū)構(gòu)建包,用于監(jiān)視和控制您的 Jetson 設(shè)備。它可以在您的終端上運行,并提供一個 Python 包,以便于在 Python 腳本中集成。利用 ros2_jetson_stats 庫,構(gòu)建 ROS 2 診斷消息和服務(wù)。
ros2_jetson_stats 軟件包具有以下 ROS 2 診斷消息:
GPU / CPU 使用百分比
EMC /交換/內(nèi)存狀態(tài)(使用率 % )
SoC 的功率和溫度
現(xiàn)在您可以通過 ROS 2 命令行控制以下內(nèi)容:
( EZX29 和 Speed :
電源型號( nvpmodel )
jetson_clocks
您還可以提供一個參數(shù)來設(shè)置讀取診斷消息的頻率。
有關(guān)詳細信息,請參閱 NVIDIA-AI-IOT/ros2_jetson_stats GitHub repo 。
用于 Jetson 的 ROS 2 容器
為了在 Jetson 上輕松運行 ROS 2 的不同版本, NVIDIA 發(fā)布了各種 dockerfile ,并為 ROS 2 Eloquent和 Foxy 構(gòu)建了腳本,此外還有 ROS Melodic 和 Noetic 。這些容器提供了在 Jetson 上安裝 ROS 或 ROS 2 并構(gòu)建自己的基于 ROS 的應(yīng)用程序的自動化和可靠的方法。
因為 Elocquent 和 Melodic 已經(jīng)為 Ubuntu18 。 04 提供了預(yù)構(gòu)建的包,所以這些版本的 ROS 被 Dockerfiles 安裝到容器中。另一方面, Foxy 和 Noetic 是從容器內(nèi)部的源代碼構(gòu)建的,因為這些版本都是為 ubuntu20 。 04 預(yù)構(gòu)建的。對于容器,使用這些版本的 ROS 或 ROS 2 是相同的,不管底層的 OS 發(fā)行版如何。
要構(gòu)建容器,請在運行 Jetpack4 。 4 或更新版本的 Jetson 設(shè)備上克隆 repo ,然后啟動 ROS 構(gòu)建腳本 :
$ 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
此命令創(chuàng)建具有以下標記的容器:
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 設(shè)備上的其他硬件加速器(如視頻編碼器和解碼器),使用 –runtime nvidia 標志會自動啟用容器中的 GPU 直通。要在容器中傳輸 MIPI CSI 攝影機,請包含以下標志:
–volume /tmp/argus_socket:/tmp/argus_socket
要在容器中傳輸 V4L2 USB 攝像頭,請在啟動容器時安裝所需的 /dev/video* 設(shè)備:
–device /dev/video0
NVIDIA Omniverse ISAAC 面向 ROS 開發(fā)者的仿真平臺
在 Omniverse NVIDIA 平臺上構(gòu)建的 NVIDIA ISAAC 模擬仿真工具包 比現(xiàn)有的機器人工作流程帶來了一些有用的改進:
它利用了 Omniverse 高度精確的物理模擬和逼真的光線跟蹤圖形,直接與業(yè)界領(lǐng)先的物理框架集成,如用于剛體動力學的 NVIDIA PhysX SDK 。
它重新關(guān)注互操作性、與 NVIDIA ISAAC SDK 的深度集成以及 ROS 的擴展。
它很容易擴展。通過其基于 Python 的腳本接口,它允許您適應(yīng)自己獨特的用例。
它是為可部署而構(gòu)建的,其體系結(jié)構(gòu)支持本地工作站上的工作流,并通過云與 NVIDIA NGC 一起工作。
關(guān)于作者
Amey Kulkarni 是 NVIDIA 的開發(fā)技術(shù)工程師,專注于將深度學習解決方案有效地部署到邊緣。在 2019 年加入 NVIDIA 之前,他完成了馬里蘭大學計算機工程博士學位。他的研究興趣是在嵌入式平臺上部署數(shù)字信號處理、計算機視覺和深度學習系統(tǒng)。
Rishabh Chadha 是 NVIDIA 的嵌入式工程實習生—— AI ,他專注于為 NVIDIA Jetson 平臺集成深度學習和機器人技術(shù)框架。他將于 2021 年畢業(yè)于伍斯特理工學院,獲得機器人學碩士學位。他的興趣主要包括深度學習、醫(yī)學成像和機器人感知。
Asawaree Bhide 是 NVIDIA 的 AI 嵌入式工程實習生,致力于優(yōu)化和部署邊緣設(shè)備上的深度學習模型。她目前正在喬治亞理工學院攻讀計算機科學碩士學位,她對解決由具體代理自主導航的復雜感知任務(wù)感興趣。Tomasz Lewicki 是 NVIDIA 的嵌入式工程實習生。他擁有圣何塞州立大學計算機工程碩士學位,華沙工業(yè)大學華沙工業(yè)大學機器人工程學學士學位。他的興趣集中在計算機視覺和機器人應(yīng)用的深度學習上。
審核編輯:郭婷
-
機器人
+關(guān)注
關(guān)注
213文章
30617瀏覽量
219682 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5496瀏覽量
109116 -
深度學習
+關(guān)注
關(guān)注
73文章
5591瀏覽量
123921
發(fā)布評論請先 登錄
名單公布!【書籍評測活動NO.58】ROS 2智能機器人開發(fā)實踐
【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+內(nèi)容初識
【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+ROS2應(yīng)用案例
【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】視覺實現(xiàn)的基礎(chǔ)算法的應(yīng)用
【ROS RIKIBOT基礎(chǔ)--使用系列 第一章節(jié)】ROS機器人硬件系統(tǒng) 精選資料分享
NVIDIA Jetson的相關(guān)資料分享
如何搭建實體機器人ros底盤
怎樣將微型ROS移植到機器人的RA MCU中呢
NVIDIA Isaac SDK現(xiàn)已可用,即刻下載開啟您的機器人開發(fā)之旅吧!
如何通過NVIDIA ISAAC ROS GEMs
研討會預(yù)告 | 在 Jetson 上使用 vSLAM 進行 ROS 2 精準定位
基于 NVIDIA Jetson 使用硬件在環(huán)設(shè)計機器人
NVIDIA Isaac 平臺先進的仿真和感知工具助力 AI 機器人技術(shù)加速發(fā)展
使用 NVIDIA Isaac 仿真并定位 Husky 機器人

在NVIDIA Jetson上使用ROS 2構(gòu)建機器人應(yīng)用程序
評論