NVIDIA ISAAC GEMs for ROS 为您的 ROS2 应用程序提供了一套 GPU 加速包,提高了图像处理和基于 DNN 的感知模型的吞吐量。这些 ROS2 软件包是由 ROS2 Foxy 构建的,这是机器人社区推出的第一个长稳定版本( LTS )。
这篇文章研究如何通过实现 NVIDIA ISAAC ROS GEMs 来加速机器人的部署。本文的重点是使用nanosaur检测 AprilTags ,这是一种基于 NVIDIA Jetson 平台的简单开源机器人。
在详细介绍此应用程序之前,这里是 ROS 、 NVIDIA ISAAC GEMs 的历史,以及 nanosaur 是如何构建的。
ROS 和 ROS2 的历史
Willow Garage 于 2007 年开发了机器人操作系统( ROS )。 2012 次移交给新的开放机器人基金会是为了维护框架的发展。起初,该框架主要由机器人研究社区使用。最终,它在包括机器人制造商和公司在内的更广泛的开发者群体中赢得了欢迎。
2015 年, ROS 社区注意到生产版本的弱点,缺乏单机器人支持( roscore )安全性、实时支持缓慢以及其他核心问题。在这一点上,社区开始奠定第二代 ROS 的基础,为研究社区和公司重新设计它,着眼于安全性、内部通信和可靠性。
在最后一次 ROS 官方发布( Noetic )后, ROS2 正在成为新的机器人发行版,并且在第一次 LTS 发布后,社区的支持正在增加。
nanosaur
nanosaur 是一款基于NVIDIA Jetson的简单开源机器人。这款机器人完全可以 3D 打印,能够在你的办公桌上自主漫游,使用一个简单的摄像头和两个 OLED ,它们就像一对眼睛。它的尺寸为 10x12x6cm ,重量仅为 500 克。
nanosaur 的硬件与 NVIDIAJetBot类似,使用两个 I2C OLED 显示器并共享相同的 I2C 电机驱动器。然而, nanosaur 的软件是直接在 ROS2 上开发的,完全是 GPU 加速的,基于 Docker 。
nanosaur 有许多节点来驱动和显示机器人的状态。所有节点均按包排列。
nanosaur_base
nanosaur_base启用电机控制器和显示器。
joy2eyes将操纵杆信息转换为眼睛的主题。当您想要测试眼睛的主题时,此节点起作用。
nanosaur_camera
nanosaur_camera将相机拖缆从 MIPI 相机运行到 ROS2 主题。
ros2_jetson_stats
ros2_jetson_stats是jetson-statspackage的包装,用于监视和控制您的 NVIDIA Jetson Xavier NX 、 Jetson AGX Xavier 、 Nano 、 TX1 或 TX2]。
有关更多信息,请参阅主nanosaurGitHub 存储库。
这是启动 nanosaur 时常见的 ROS2 图表。
图 2 。 ROS2 纳米龙图,按存储库和包划分
nanosaur 从 NVIDIA Jetson ROS Foxy Docker 图像开始发布。还支持 ROS2 Galactic 、 ROS2 Elotent 、 ROS Melodic 和 ROS Noetic 以及 PyTorch 、 TensorRT 和 DeepStream SDK 等人工智能框架。
ROS2 Foxy 在nanosaur_camera中与 Jetson -UTIL 一起编译和使用,以加快摄像头访问速度。
图 3 。 Docker 概述。纳米龙是根据dusty-nv/jetson-containers指南建造的.
当 nanosaur 运行时,有一组可用的主题,例如image_raw topic、移动显示器上绘制的眼睛的眼睛主题以及驱动机器人的导航命令。
NVIDIA ISAAC 玫瑰宝石
简化 GPU 加速算法的部署是这些新 ROS2 软件包的核心目的。这些软件包是机器人社区的开源软件包,可以利用 CPU 并直接在 GPU 上使用 AI 和机器人感知来提高机器人的能力。所有这些 gem 都是为 rosfoxy 部署的,并与 NVIDIA 引擎配合使用。
图 4 . ISAAC GEMs for ROS 是一套 GPU – 加速 ROS2 软件包,为机器人社区发布,是 NVIDIA Jetson 平台的一部分
NVIDIA ISAAC GEMs 在 ROS 软件包中提供硬件加速的机器人功能,在其他 ROS 软件包中结合本机节点时,保持 ROS2 中间件的集成。 NVIDIA ISAAC ROS GEMs 用于 x86 _ 64 / d GPU ( Ubuntu 20 . 04 )和 Jetson Xavier NX / AGX Xavier 以及最新的 NVIDIA JetPack 4 . 6 发行版。
新的NVIDIA ISAAC 玫瑰宝石包括:
isaac_ros_common
isaac_ros_image_pipeline
isaac_ros_apriltag
isaac_ros_dnn_inference(新)
isaac_ros_visual_odometry(新)
isaac_ros_argus_camera(新)
AprilTag
AprilTag 是一种独特的 QR 码,经过优化,可用于摄像机快速解码和远距离读取。这些标记是基准点,用于驱动机器人或操纵器从特定点开始动作或完成作业。它们还用于增强现实中,以校准遮阳板的里程计。这些标签在许多家庭中都有,但都很容易用台式打印机打印。
图 5 。不同类型的人名和姓氏
ROS2 AprilTag 软件包使用 NVIDIA GPU 来加速图像中的检测,并发布姿势、 ID 和其他元数据。该软件包与CPU AprilTag 检测的 ROS2 节点相当。
包依赖项包括:
isaac_ros_common
isaac_ros_image_pipeline
image_common
vision_cv
OpenCV 4.5+
熟悉存储库中提供的教程后,您可以在 ROS2 robotics 项目中定义和配置它。
图 6 . NVIDIA ISAAC ROS 示例管道,从摄像机流开始,到图像校正,最后是 AprilTag 检测
通常,从相机或立体相机输出的流开始定义管道,其中发布了两个主题:第一个主题,其中输出为原始相机流;以及camera_info,其中所有校准和配置都定义了流。
完成此步骤后,您可以使用ros_image_proc来加速 ROS2 应用程序,以校正图像以及可能的标签和角的姿势估计。
isaac_ros_apriltag是一个 ROS2 主题,其中包含从流中检测到的 AprilTags 数组。对于列出的每个点,都有许多数据点,例如摄影机世界中的中心、所有角点、 ID 和姿势。默认情况下,主题名为/tag_detections。下面是tag_detections消息的示例。
--- header: stamp: sec: 1631573373 nanosec: 24552192 frame_id: camera_color_optical_frame detections: - family: 36h11 id: 0 center: x: 779.4064331054688 y: 789.7901000976562 z: 0.0 corners: - x: 614.0 y: 592.0 z: 0.0 - x: 971.0 y: 628.0 z: 0.0 - x: 946.0 y: 989.0 z: 0.0 - x: 566.0 y: 970.0 z: 0.0 pose: header: stamp: sec: 0 nanosec: 0 frame_id: '' pose: pose: position: x: -0.08404197543859482 y: 0.11455488204956055 z: 0.6107800006866455 orientation: x: -0.10551299154758453 y: -0.10030339658260345 z: 0.04563025385141373 w: 0.9882935285568237 covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
nanosaur 和 AprilTag 探测
nanosaur_follower节点使用一个配置文件初始化,其中所有选定的参数都是 PID 增益、要遵循的 AprilTag ID 和其他参数。在主循环中,该节点解码来自Isaac_ros_apriltag的消息,当它出现在摄影机流中时,开始跟随它,生成线性速度和扭曲。
在图 8 中,Isaac_ros_apriltag为每一帧生成一个新的标签检测输出,nanosaur_follower节点驱动机器人。
图 8 。 AprilTag 闭环导航和检测
在这种情况下,单轮机器人,纳米龙运动学模型的第一个近似值,可以使用解耦 PID 控制器跟踪标签。在图 9 中,第一个控制器( A )将从中心 AprilTag 角到中心垂直线的误差减小为零。此错误驱动 ROS2 twist 消息。同时,来自摄像机距离的第二个错误驱动机器人速度( B )。
图 9 。在 AprilTag 检测后, nanosaur 产生一个扭曲输出来驱动电机
实时 web 界面
nanosaur 提供了第二张 Docker 图像,其中所有主题和相机流都可以实时查看,并且您可以实时看到机器人移动时发生的情况。图 10 显示了一个用户界面示例。
图 10 。机器人运行时的 ROS2 web 界面示例
概括
在这篇文章中,我讨论了如何使用 NVIDIA ISAAC ROS GEMs 加速机器人部署。解决方案的重点是使用nanosaur检测 AprilTags ,这是一种基于 NVIDIA Jetson 平台的简单开源机器人。
关于作者
Raffaello Bonghi 是 AI & Robotics 的开发者关系经理。自 2015 年以来,他一直是 NVIDIA Jetson 冠军,设计用于户外导航和教育应用的多 ROS / ROS 机器人。此外,他还参与为零售和机器人领域的众多国际客户开发人工智能解决方案。拉斐洛拥有博士学位。在控制理论和工业自动化领域,专注于机器人威廉希尔官方网站 。
审核编辑:郭婷
-
机器人
+关注
关注
211文章
28418浏览量
207101 -
NVIDIA
+关注
关注
14文章
4986浏览量
103062
发布评论请先 登录
相关推荐
评论