自主机器

为 ROS 设计具有 NVIDIA ISAAC 宝石的机器人

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 克。

Image of the NVIDIA Jetson-based nanosaur robot
图 1 。 nanosaur 是一种基于 NVIDIA Jetson 的全 3D 可打印机器人

nanosaur 的硬件与 NVIDIA JetBot类似,使用两个 I2C OLED 显示器并共享相同的 I2C 电机驱动器。然而, nanosaur 的软件是直接在 ROS2 上开发的,完全是 GPU 加速的,基于 Docker 。

nanosaur 有许多节点来驱动和显示机器人的状态。所有节点均按包排列。

  • nanosaur_base
    • nanosaur_base启用电机控制器和显示器。
    • joy2eyes将操纵杆信息转换为眼睛的主题。当您想要测试眼睛的主题时,此节点起作用。
  • nanosaur_camera
    • nanosaur_camera将相机拖缆从 MIPI 相机运行到 ROS2 主题。
  • ros2_jetson_stats
    • ros2_jetson_statsjetson-statspackage的包装,用于监视和控制您的 NVIDIA Jetson Xavier NX 、 Jetson AGX Xavier 、 Nano 、 TX1 或 TX2]。

有关更多信息,请参阅主nanosaur GitHub 存储库。

这是启动 nanosaur 时常见的 ROS2 图表。

A ROS2 graph of nanosaur divided by repository and package
图 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 一起编译和使用,以加快摄像头访问速度。

Overview of the nanosaur docker
图 3 。 Docker 概述。纳米龙是根据dusty-nv/jetson-containers指南建造的.

当 nanosaur 运行时,有一组可用的主题,例如image_raw topic、移动显示器上绘制的眼睛的眼睛主题以及驱动机器人的导航命令。

NVIDIA ISAAC 玫瑰宝石

简化 GPU 加速算法的部署是这些新 ROS2 软件包的核心目的。这些软件包是机器人社区的开源软件包,可以利用 CPU 并直接在 GPU 上使用 AI 和机器人感知来提高机器人的能力。所有这些 gem 都是为 rosfoxy 部署的,并与 NVIDIA 引擎配合使用。

Block diagram of Isaac GEMs for ROS
图 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 玫瑰宝石包括:

AprilTag

AprilTag 是一种独特的 QR 码,经过优化,可用于摄像机快速解码和远距离读取。这些标记是基准点,用于驱动机器人或操纵器从特定点开始动作或完成作业。它们还用于增强现实中,以校准遮阳板的里程计。这些标签在许多家庭中都有,但都很容易用台式打印机打印。

Image showing the various AprilTags, such as Tag36h11 and TagStandard41h12.
图 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 项目中定义和配置它。

Example pipeline for Isaac ROS, starting with image rectification to AprilTag detection
图 6 . NVIDIA ISAAC ROS 示例管道,从摄像机流开始,到图像校正,最后是 AprilTag 检测

通常,从相机或立体相机输出的流开始定义管道,其中发布了两个主题:第一个主题,其中输出为原始相机流;以及camera_info,其中所有校准和配置都定义了流。

完成此步骤后,您可以使用ros_image_proc来加速 ROS2 应用程序,以校正图像以及可能的标签和角的姿势估计。

Side-by-side picture comparison of raw image and rectified version
图 7 。原始图像与其校正版本之间的比较

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节点驱动机器人。

A diagram of AprilTag closed loop navigation and detection
图 8 。 AprilTag 闭环导航和检测

在这种情况下,单轮机器人,纳米龙运动学模型的第一个近似值,可以使用解耦 PID 控制器跟踪标签。在图 9 中,第一个控制器( A )将从中心 AprilTag 角到中心垂直线的误差减小为零。此错误驱动 ROS2 twist 消息。同时,来自摄像机距离的第二个错误驱动机器人速度( B )。

Two images of the nanosaur and how the AprilTag corner placement drives the twist output and the AprilTag camera distance drives the speed.
图 9 。在 AprilTag 检测后, nanosaur 产生一个扭曲输出来驱动电机

实时 web 界面

nanosaur 提供了第二张 Docker 图像,其中所有主题和相机流都可以实时查看,并且您可以实时看到机器人移动时发生的情况。图 10 显示了一个用户界面示例。

Screenshot of interface with image and running code.
图 10 。机器人运行时的 ROS2 web 界面示例

概括

在这篇文章中,我讨论了如何使用 NVIDIA ISAAC ROS GEMs 加速机器人部署。解决方案的重点是使用nanosaur检测 AprilTags ,这是一种基于 NVIDIA Jetson 平台的简单开源机器人。

有关更多信息,请从 GitHub 下载 ISAAC ROS 纳米金集成

 

Tags