0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在NVIDIA Jetson上使用ROS 2构建机器人应用程序

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-27 11:02 次阅读

机器人技术正在采用深度学习技术来精确导航室内环境,检测并跟踪感兴趣的物体,以及在没有碰撞的情况下进行移动。然而,深度学习的复杂性日益增加,使得在嵌入式系统上适应这些工作负载具有挑战性。虽然您可以在精度和深度学习模型大小之间进行权衡,但在大多数机器人应用程序中,为了满足实时需求而牺牲精度通常会适得其反。

易于使用和部署使得 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 个身体部位。

ROS2-TensorRT.png

图 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 包

ROS-2-TensorRT-classification.jpg

图 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 节点

ROS-2-DeepStream-publisher-node.png

图 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 的嵌入式工程实习生。他拥有圣何塞州立大学计算机工程硕士学位,华沙工业大学华沙工业大学机器人工程学学士学位。他的兴趣集中在计算机视觉和机器人应用的深度学习上。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27021

    浏览量

    201365
  • NVIDIA
    +关注

    关注

    14

    文章

    4588

    浏览量

    101694
  • 深度学习
    +关注

    关注

    73

    文章

    5236

    浏览量

    119893
收藏 人收藏

    评论

    相关推荐

    辰汉-如何实现服务机器人的运算与控制

    数据服务器就会发生问题。  ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。  (2)多语言支持  
    发表于 06-09 17:18

    ROS 2 Crystal Clemmys版机器人的操作系统补充说明

    ROS 2 Crystal Clemmys版机器人操作系统补充说明
    发表于 06-10 11:29

    ROS RIKIBOT基础--使用系列 第一章节】ROS机器人硬件系统 精选资料分享

    主控制器ROS控制器采用树莓派4B或者Jetson Nano,运行运行Ubuntu Mate18.04或Ubuntu18.04系统,具体型号有差异。系统安装有ROS机器人操作系统,
    发表于 07-30 06:59

    STM32和ROS机器人的串口通信方案

    全网最实用的STM32和ROS机器人的串口通信方案
    发表于 08-11 07:27

    最实用的STM32和ROS机器人的串口通信方案

    全网最实用的STM32和ROS机器人的串口通信方案小白学移动机器人同名公众号:小白学移动机器人创作声明:内容包含虚构创作内容中的情节存在虚构加工,仅供参考全网最实用的STM32和
    发表于 08-20 06:33

    NVIDIA Jetson的相关资料分享

    Jetson概述爆炸式增长的AI模型的复杂性专为自主机器开发人员设计的AI计算板加快AI处理的SDK“JetPack”概述NVIDIA Jetson
    发表于 11-09 08:26

    【抢鲜体验】--- Tran***ot ROS教育机器人

    本帖最后由 mu0543 于 2021-11-25 20:23 编辑 如果你热衷于编程探索和DIY创作,恰好又在寻找一款可以让你自由发挥,二次开发的ROS平台,那么我们今天体验的这款Tranbot ROS教育机器人将会非常
    发表于 11-25 20:13

    【抢鲜体验】- Tran***ot ROS教育机器人

    Tran***ot ROS教育机器人如果你热衷于编程探索和DIY创作,恰好又在寻找一款可以让你自由发挥,二次开发的ROS平台,那么我们今天体验的这款Tranbot ROS教育
    发表于 11-25 20:33

    如何对ROS机器人的定位导航进行仿真

    怎样去实现ROS机器人的定位导航呢?如何对ROS机器人的定位导航进行仿真?
    发表于 12-23 09:22

    如何搭建实体机器人ros底盘

    目录介绍一、底盘主控板二、嵌入式开发板1. 与上位机pc的关系2. 与STM32主控板的关系介绍自下而上的分析实体机器人(差分轮速机器人)搭建中的关键过程。一、底盘主控板本部分搭建实体机器人
    发表于 01-20 07:36

    小麦机器人底盘使用手册分享

    过程软件环境安装ROS安装机器人底盘调试硬件介绍:电源​36V电池组(充电设备应是42V直流电源适配器)​若充电设备电压低于36V会导致适配器损坏下位机树莓派3B+​适用于Ubuntu16.04 mate环境Jetson nan
    发表于 01-25 07:46

    怎样将微型ROS移植到机器人的RA MCU中呢

    机器人操作系统(ROS2的数据空间。它为嵌入式世界提供了一个基于标准通信中间件的既定应用程序开发框架。将 mic
    发表于 02-11 06:19

    ROS机器人开发更便捷,基于RK3568J+Debian系统发布!

    库的支持,ROS系统提供丰富且功能强大的机器人算法库,如坐标变换、运动控制等。机器人开发者可根据开发需要,简单快捷地调用合适的算法库,以提高开发效率,加快开发进程。 (2) 开源免费,
    发表于 11-30 16:01

    基于 NVIDIA Jetson 使用硬件在环设计机器人

    Isaac 平台 应用于这些领域的。 NVIDIA Isaac 平台由 NVIDIA Isaac Sim 和 NVIDIA Isaac ROS 组成。前者是一个仿真器,为测试
    的头像 发表于 06-14 18:35 389次阅读
    基于 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Jetson</b> 使用硬件在环设计<b class='flag-5'>机器人</b>

    使用 NVIDIA Isaac 仿真并定位 Husky 机器人

    如何使用 ROS 2 Husky 官方软件包将该机器人导入 NVIDIA Isaac Sim 并创建仿真。 本 Demo 中的 Husky 机器人配备了
    的头像 发表于 12-26 18:05 372次阅读
    使用 <b class='flag-5'>NVIDIA</b> Isaac 仿真并定位 Husky <b class='flag-5'>机器人</b>