机器人

使用 BenchBot 和 NVIDIA ISAAC Sim 简化机器人技术

 

机器人学的研究充满了令人兴奋和有趣的问题,但也有一些令人沮丧的问题,如传感器校准、构建转换树、管理分布式系统以及调试脆弱系统中的奇异故障。

我们在 QUT’s Centre for Robotics (QCR) 构建了 BenchBot 平台 ,使机器人学家能够将时间集中在研究机器人学中令人兴奋和有趣的问题上。

我们最近还升级到了 由 NVIDIA Omniverse 助力的 NVIDIA ISAAC Sim ,该公司对 BenchBot 平台进行了大量重大改进。无论机器人是你的爱好、学术追求还是工作, BenchBot 和 NVIDIA ISAAC Sim 功能都能让你只需几行 Python 就可以跳入机器人的奇妙世界。在这篇文章中,我们分享了我们是如何创建 BenchBot 的,它的功能,我们计划在未来在哪里使用它,以及您可以在自己的工作中使用它。我们的目标是通过介绍如何使用 BenchBot ,为您提供开始从事自己的机器人项目和研究的工具。我们还分享了与新的 NVIDIA ISAAC Sim 集成时所学到的知识。

A 5x5 collage of the starting locations BenchBot’s 25 available environments.
图 1 :。 BenchBot 为用户提供了 25 个现成的照片级真实感环境,并提供了不同的照明和对象(请参见 BEAR dataset )

这篇文章还为我们的 机器人视觉场景理解( RVSU )挑战 提供了上下文,目前它正在进行第三次迭代。RVSU挑战是一个动手解决家用机器人一个基本问题的机会:他们如何理解自己的环境中有什么,在哪里。通过竞争,您可以获得包括 NVIDIA A6000 GPU 和2500美元现金在内的奖品份额。

BenchBot 背后的故事

BenchBot 解决了我们语义场景理解研究中的一个需求。我们主持了一个 目标检测挑战 并制作了 新的评估指标 ,但需要将这项工作扩展到机器人领域:

  • 什么是理解场景?
  • 如何评估理解水平?
  • 代理在理解场景中扮演什么角色?
  • 模拟中的理解能转移到真实世界吗?
  • 为了理解如何转移到现实世界,模拟需要什么?

我们制作了 BenchBot 平台,使您能够专注于这些重大问题,而不会迷失在机器人系统通常带来的挑战的海洋中。 BenchBot 由许多活动部件组成,这些部件将这些操作复杂性抽象出来(图 2 )。

Complex workflow diagram with phases denoting the user submission, evaluation, and backend HTTP calls.
图 2 :。 BenchBot 平台系统概述

以下是 BenchBot 架构的一些关键组件和功能:

  • 您可以通过编写一个调用 BenchBot API 的 Python 脚本来创建机器人问题的解决方案。
  • 您可以使用 可定制的评估工具 轻松了解您的解决方案执行给定机器人任务的情况。
  • supervisor 代理了典型机器人系统的高级API和低级接口之间的通信。
  • 主管是后端不可知的。机器人可以是真实的,也可以是模拟的,它只需要运行 ROS 。
  • 所有配置都存在于 模块化附加系统 中,允许您使用自己的任务、机器人、环境、评估方法、示例等轻松扩展系统。

我们所有的代码都是 MIT 许可下的开源代码。有关更多信息,请参阅 BenchBot :评估真实感 3D 仿真和真实机器人的机器人学研究 ( PDF )。

如果移动部件使用户体验复杂化,那么很多移动部件不一定是件好事,因此设计用户体验也是开发 BenchBot 的一个中心重点。

控制系统有三个基本命令:

benchbot_install --help
benchbot_run --help
benchbot_submit --help

以下命令有助于跨多个环境构建强大的评估工作流:

benchbot_batch --help

下面是一个简单的 Python 命令,用于与机器人的感觉运动能力交互:

python
from benchbot_api import Agent, BenchBot class MyAgent(Agent): def is_done(self, action_result): … def pick_action(self, observations, action_list): … def save_result(self, filename, empty_results, results_format_fns): … BenchBot(agent=MyAgent()).run()

有了一个简单的 Python API ,世界级的真实感模拟,以及管理整个系统所需的少量命令,我们已经准备好将 BenchBot 应用到我们的第一个大输出: RVSU 挑战。

RVSU 挑战

RVSU 挑战 促使研究人员开发出能够理解周围环境的语义和几何方面的机器人视觉系统。挑战包括六项任务,具有基于对象、语义、同步定位和映射( SLAM )和场景变化检测( SCD )的多个难度级别。

挑战还集中在家用机器人的一个核心要求上:它们需要了解其环境中的物体以及它们在哪里。这个问题本身就是语义 SLAM 任务中遇到的第一个挑战,机器人必须探索环境,找到所有感兴趣的对象,并将它们添加到 3D 地图中。

SCD 任务更进一步,要求机器人在不同的时间点报告环境中对象的变化。我的同事 David Hall 在下面的视频中出色地概述了这一挑战。

 
视频 1 。场景理解挑战

使用 NVIDIA ISAAC Sim 将 RVSU 挑战带入生活

最近,我们将 BenchBot 从使用旧的基于虚幻引擎的 NVIDIA ISAAC Sim 升级为新的 Omniverse-powered NVIDIA ISAAC Sim 。这给 BenchBot 带来了许多关键好处,让我们对未来 Omniverse 仿真的发展感到兴奋。我们看到显著好处的领域包括:

  • 质量:NVIDIA RTX 渲染生成了美丽的真实照片级模拟,所有这些都与我们之前使用的资产相同。
  • 性能:我们获得了强大的动态照明效果,以及复杂的映射反射,所有这些都是实时生成的,用于真实物理的实时模拟。
  • 可定制化:在 Python API 对于 Omniverse 和 NVIDIA ISAAC , Sim 可以完全控制模拟器,允许我们重新启动模拟、交换环境和以编程方式移动机器人。
  • 简约 :我们将 整个 C ++接口库 替换为 单个 Python 文件 .

qcr/benchbot_sim_omni 存储库收集了我们在向新的 NVIDIA ISAAC Sim 过渡过程中的经验教训,还可以作为 BenchBot 生态系统之外的独立软件包使用。该软件包是一个可定制的 HTTP API ,用于加载环境、放置机器人和控制仿真。它是使用 NVIDIA ISAAC Sim 以编程方式运行仿真的一个很好的起点。

我们欢迎关于如何扩展此包功能的请求和建议。我们还希望它能为您使用 NVIDIA ISAAC Sim 启动自己的项目提供一些有用的示例,例如以下示例。

NVIDIA ISAAC Sim 中的开放环境

开放环境首先需要一个正在运行的模拟器实例。通过实例化SimulationApp类创建一个新实例,使用open_usd选项可以选择初始打开的环境:

python
from omni.isaac.kit import SimulationApp inst = SimulationApp({ "renderer": "RayTracedLighting", "headless": False, “open_usd”: MAP_USD_PATH, })

值得注意的是,每个 Python 脚本只能运行一个仿真实例,初始化实例后必须导入 NVIDIA ISAAC Sim 组件。

使用 NVIDIA ISAAC Sim API 中的帮助程序在运行时选择不同的阶段:

python
from omni.isaac.core.utils.stage import open_stage, update_stage open_stage(usd_path=MAP_USD_PATH)
update_stage()

在环境中放置机器人

在开始模拟之前,在环境中加载并放置机器人。使用Robot类和以下代码行执行此操作:

python
from omni.isaac.core.robots import Robot
from omni.isaac.core.utils.stage import add_reference_to_stage, update_stage add_reference_to_stage(usd_path=ROBOT_USD_PATH, prim_path=ROBOT_PRIM_PATH)
robot = Robot(prim_path=ROBOT_PRIM_PATH, name=ROBOT_NAME)
robot.set_world_pose(position=NP_XYZ * 100, orientation=NP_QUATERNION)
update_stage()

控制模拟

NVIDIA ISAAC Sim 中的仿真由 SimulationContext 类控制:

python
from omni.isaac.core import SimulationContext
sim = SimulationContext()
sim.play()

然后, step 方法对以 60Hz 运行的模拟进行细粒度控制。我们使用此控件来管理传感器发布、转换树和状态检测逻辑。

我们偶然发现的另一个有用的代码示例是使用dynamic_control模块在模拟过程中获取机器人的地面真实姿势:

python
from omni.isaac.dynamic_control import _dynamic_control
dc = _dynamic_control.acquire_dynamic_control_interface()
robot_dc = dc.get_articulation_root_body(dc.get_object(ROBOT_PRIM_PATH))
gt_pose = dc.get_rigid_body_pose(robot_dc)

结果

希望这些代码示例对您开始使用 NVIDIA ISAAC Sim 有所帮助。除此之外,我们还取得了一些令人印象深刻的成果:

  • 我们的照片级真实感模拟的显著改进
  • 强大的实时照明效果
  • 通过基本 Python 代码完全定制

图 3 、 4 和 5 显示了从 Omniverse 过渡到 Omniverse 的一些我们最喜欢的视觉改进。

A collage of improved surface reflections in the new Omniverse-powered NVIDIA Isaac Sim.
图 3 :。在新的 NVIDIA ISAAC Sim (底行)中,曲面的反射比以前的版本(顶行)更真实
A collage of improved shadows and texture rendering in the new Omniverse-powered NVIDIA Isaac Sim.
图 4 :。阴影和纹理渲染在新的 NVIDIA ISAAC Sim (底行)中感觉比以前更逼真(顶行)
A visual comparison of the overall impro
图 5 :。新的 NVIDIA ISAAC Sim 使环境更具沉浸感(右),相比之下,以前的环境(左)感觉“平坦”

更进一步:其他领域的 BenchBot

虽然语义场景理解是我们研究的重点,也是我们在研究中使用语义场景的起源,但 BenchBot 的应用并不局限于这一领域。 BenchBot 使用丰富的 add-on architecture 构建,允许对系统进行模块化添加和调整,以适应不同的问题领域。

QCR 的 视觉学习和理解研究计划 已经开始利用这种灵活性将 BenchBot 及其全方位模拟应用于一系列有趣的问题。图 6 显示了我们正在考虑使用 BenchBot 的几个领域:

Four applications of BenchBot: QuadricSLAM, data gathering, object-level NeRFs, and scene-level NeRFs
图 6 :。 BenchBot 的未来用途,从右上角顺时针方向:二次曲面的语义映射,具有对象级分割的合成数据集,来自噪声数据的对象级 NeRFs ,以及使用 NeRFs 理解场景

我们制作了 BenchBot ,重点是使其适合您的研究问题。虽然我们很喜欢将其应用于我们的研究问题,但我们很高兴看到其他人将其应用于何处。 add-ons repository 中记录了创建您自己的加载项,我们希望在 官方附加组件组织 中添加一些第三方加载项。

结论

我们希望这篇深入的评论具有深刻的见解,并帮助您进入机器人领域,解决令我们机器人专家兴奋不已的问题。

我们欢迎参加 RVSU 挑战赛,无论您对语义场景理解的兴趣是随意的还是正式的、学术的还是工业的、竞争的还是迭代的。我们认为,您会发现与 BenchBot 系统竞争是一种丰富的体验。您可以 注册挑战 ,并通过 EvalAI 挑战页面 提交条目。

如果您正在寻找 BenchBot 和 Omniverse 的下一步发展方向,以下是一些建议:

在QCR,我们很高兴看到机器人技术的发展方向。有了 BenchBot 和新的 Omniverse-powered NVIDIA ISSAC Sim等工具,现在是加入并开始玩机器人的最佳时机。

 

Tags