自主机器

将 Nav2 堆栈与 NVIDIA ISAAC ROS GEMs 集成

 

NVIDIA GPU ROS GEMs 是一个 ROS 软件包,用于优化基于人工智能的机器人应用程序,使其在 NVIDIA ISAAC 和 Jetson 平台上运行。人们越来越有兴趣将这些软件包与 Nav2 项目集成,以帮助自主机器人在动态环境中成功导航。

这项工作完全是在仿真中完成的,可以作为将机器人能力从仿真转移到现实世界的起点( Sim2Real )。

在这篇文章中,我将关注一个现实世界中的问题,即机器人因与仓库中的叉车叉齿发生碰撞而受损。叉车是一种用于短距离搬运重物的工业卡车。它有一个被称为尖头(或叉子)的延伸部分,可以在物体下方滑动并提升物体。

Two photos of standard forklifts, one with packages on the tines.
图 1 。叉车

主要使用的机器人传感器( lidar )可以检测叉车的车身,但不能检测靠近地面的叉齿。在这种情况下,还需要其他传感器来检测这些弹齿。在本项目中,您将在模拟中的机器人上使用两个 RGB 摄像头。来自这些相机的图像用于使用 Isaac ROS stereo GEM .

根据视差,立体宝石生成一个点云,其中包含有关相机视野中的所有对象在环境中的位置的信息。该信息用于更新导航节点,以便在可能发生碰撞时更改机器人的路径。

GIF of robot running into forklift tines.

图 2 。在 NVIDIA ISAAC Sim 中再现真实世界的问题:机器人与叉车叉齿相撞

图 3 显示了该项目的基本工作流程。

Diagram starting with NVIDIA Isaac Sim using sensor info for the ROS stereo GEM and using disparity and pointcloud to create the voxel_layer in Nav2.
图 3 。工作流程图

有关更多信息,请参阅 NVIDIA-AI-IOT/Nav2-with-Isaac-ROS-GEMs GitHub 回购协议。

NVIDIA ISAAC 是的设置

在 NVIDIA ISAAC Sim 卡中使用仓库环境,其中包括 Carter robot 和叉车。按照 ROS2 导航示例 生成占用地图,供 Nav2 堆栈使用,以避免货架等静态障碍物。创建占用地图后,动态或移动障碍物(包括叉车和手推车)将添加到环境中。这是为了模拟现实世界,在没有机器人知识的情况下,物体在环境中发生变化。

重要的是要注意卡特机器人的左、右立体摄像机在NVIDIA ISAAC SIM 之间的偏移,以 NVIDIA ISAAC ROS 立体声宝石来正确地产生视差。在开始模拟之前,确保 NVIDIA ISAAC Sim 卡中的 ROS2 bridge 已启用,以便可以在 NVIDIA ISAAC Sim 卡之外传输 ROS2 消息。

NVIDIA ISAAC ROS 立体声宝石和导航 2

Nav2 堆栈使用 全球和本地成本图 引导机器人避开障碍物。本地成本图根据环境中新的移动障碍物进行更新,并可以将激光扫描和点云作为机器人传感器的输入。

由于激光雷达的激光扫描无法在真实场景中拾取叉齿,所以可以通过使用立体图像中的点云来解决这个问题,这些点云会被传递到 Nav2 。这些点云是使用 NVIDIA ISAAC ROS 立体声宝石产生的。

Image of a forklift facing forward and a point cloud scattered in and around the tines.
图 4 。当机器人在叉车前面时,使用NVIDIA ISAAC ROS 立体声宝石产生点云

在图 4 的右侧,弹齿下方的浅蓝色区域显示, Nav2 本地成本地图已经更新,以表示那里的障碍物,机器人现在可以避开。 NVIDIA ISAAC Sim 卡的图像平均速率为 20 FPS ,而 stereo GEM 的点云图像平均速率为 16 FPS 。

stereo GEM 生成一个视差图像,然后为机器人相机的左右图像中看到的所有对象生成一个点云。使用 ISAAC ROS 分割 GEM ,可以过滤此差异以生成仅包含属于感兴趣对象(例如叉车叉齿)的点的点云。

下一节将更详细地解释这种过滤。

使用NVIDIA ISAAC ROS 分割 GEM 的视差滤波

下面介绍了如何将基于合成生成数据训练的深度学习模型与 NVIDIA ISAAC ROS 推理机结合使用。您可以实现同样的目标:使用 GEMs 和 Nav2 堆栈,帮助机器人在模拟中避免叉车叉齿。

但是,您没有为机器人相机视野中的所有对象生成点云,而是只为叉车尖头过滤并生成聚焦点云。

Diagram now includes the segmentation GEM that creates a segmentation mask for disparity filtering.
图 5 。使用 NVIDIA ISAAC ROS 分割和立体宝石执行视差过滤的工作流程

我使用了一个在叉车叉齿图像上训练的分割模型。 NVIDIA ISAAC ROS 分割 GEM 在模拟中从机器人获取 RGB 图像,并使用给定模型生成相应的分割图像。

任何模型都可以与此管道一起使用,以根据用例过滤特定对象。只需在感兴趣的数据上生成( Replicator Composer )和训练( TAO )即可!

Real-world camera view and segmentation mask combine to create a point cloud for collision avoidance

图 6 。训练模型根据机器人摄像头的图像以 39 FPS 的速度生成彩色分割图像。 ( top left ) 机器人的左摄像头视图。 ( top right ) 分割掩模; ( bottom ) 叉车齿的过滤点云。

原始分割图像中的每个像素代表图像中该位置的对象的类别标签。例如,知道感兴趣的标签,如果 2 代表叉齿,则在立体宝石生成的相应视差图像中将非感兴趣点设置为 invalid 。结果生成的点云不包括这些点。这有助于减少点云中的噪波。

Image of a forklift facing forward and a point cloud centered on the tines.
图 7 。视差滤波后生成的点云

与图 4 中的点云不同,它只包含属于叉车叉齿的点。

ROS 域 ID

随着NVIDIA ISAAC ROS GEMS 在容器内运行, NVIDIA ISAAC SIM 在主机上运行,必须确保 ROS 主题可以在主机和容器之间传递。

为此,请将所有进程的 ROS 域 ID 设置为相同的编号。使用相同域 ID 的所有 ROS2 节点都可以通信;那些使用不同域 ID 的人不能。有关更多信息,请参阅 The ROS_DOMAIN_ID

笔记

本项目中介绍的工作流程避免了激光雷达和摄像头可以检测到的障碍物。对于太小或被遮挡的障碍物,探索其他传感器。

该方法对视差计算和由此产生的点云质量非常敏感。由于计算视差是一项具有挑战性的任务,因此可能会得到噪声点云,从而导致 Nav2 错误地更新成本图。

视差滤波取决于分割模型的性能。无法生成精确分割遮罩的模型会导致视差和点云过滤效果不佳。

 

Tags