10

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

Isaac Sim简化机器人技术.jpg
机器人技术领域充满着激动人心而有趣的问题,但有时也会遇到一些令人沮丧的问题,比如传感器校准、构建转换树、管理分布式系统以及调试脆弱系统中的奇怪故障。

我们在昆士兰大学的机器人技术中心(QCR)构建了BenchBot平台,使机器人专家能够集中精力研究机器人技术中的那些激动人心而有趣的问题。

我们最近还升级到由NVIDIA Omniverse驱动的全新NVIDIA Isaac Sim,给BenchBot平台带来了许多重大的改进。无论您是机器人技术的爱好者、研究者还是该领域的工作者,凭借BenchBot和NVIDIA Isaac Sim,您只需要使用几行Python就能进入机器人技术的奇妙世界。

本文将介绍我们如何构建BenchBot、它有什么功能、我们计划在未来如何运用它以及您可以在自己的工作中如何运用它。我们将向您介绍您可以使用BenchBot做什么,并提供让您能够启动自己的机器人项目和研究的工具。我们还将介绍在与新NVIDIA Isaac Sim集成过程中的学习成果。

1.jpg

图1 BenchBot为用户提供了25个开箱即用的逼真环境,每个环境中的照明和物体都有变化(见BEAR数据集)。

这篇文章也为我们的第三届机器人视觉场景理解(RVSU)挑战提供了背景。RVSU挑战赛是一次尝试解决家用机器人基本问题的机会,包括它们如何理解环境中的物体以及物体的位置。您在比赛中可以赢得包括NVIDIA A6000 GPU和2500美元现金在内的丰厚奖品。

BenchBot幕后故事

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

  • 什么是场景理解?
  • 如何评估理解水平?
  • 代理在场景理解中起到什么作用?
  • 模拟中的理解能够迁移到现实世界中吗?
  • 模拟需要满足什么条件才能将理解迁移到现实世界?
  • 我们构建的BenchBot平台使您能够专注于这些重大的问题,而不会把时间浪费在机器人系统所带来的无数普通问题。BenchBot由许多活动部件组成,这些部件可以将这些复杂的操作抽象化(图2)。

2.jpg

图2. BenchBot平台系统概览

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

  • 您可以通过编写一个调用BenchBot API的Python脚本来创建机器人问题的解决方案。
  • 您可以使用自定义评估工具轻松了解您的解决方案在执行特定机器人任务时的表现。
  • 监管器协调高级Python API和普通机器人系统低级接口之间的通信。
  • 监管器对后端保持中立。机器人可以是真实的或模拟的,它只需要运行ROS。
  • 所有配置都位于一个模块化的附加系统中,因此您可以使用您自己的任务、机器人、环境、评估方法、示例等轻松扩展这个系统。
  • 我们所有的代码都在获得MIT许可证的前提下开放源代码。如要了解更多信息,请参见BenchBot:在逼真的三维模拟和真实机器人上评估机器人研究(PDF链接:https://arxiv.org/pdf/2008.00...)。

如果大量活动部件使用户体验变得复杂,那就可能会“好心办坏事”,所以用户体验设计也是BenchBot开发工作的主要重点之一。

可通过三个基本命令控制系统:

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

以下命令帮助您在多个环境中建立强大的评估工作流程:

benchbot_batch --help

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

ython
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挑战赛鼓励研究者开发能够理解周围环境语义和几何方面的机器人视觉系统。该挑战赛由六个任务组成,为基于对象的语义同步定位和建图(SLAM)以及场景变化检测(SCD)设置了多个难度。

挑战赛还侧重于家用机器人的一个核心要求:它们需要理解环境中的物体是什么和在哪里。这个问题本身就是我们语义SLAM任务中的第一个挑战——机器人必须在一个环境中探索,找到所有目标物体并将它们添加到3D地图中。

SCD任务则更进一步,要求机器人报告环境中的物体在不同时间点的变化。我的同事David Hall会在下面的视频中对这项挑战进行精彩的概述。

使用NVIDIA Isaac Sim将RVSU挑战赛变成现实

最近,我们将BenchBot从原来基于虚幻引擎的NVIDIA Isaac Sim升级到Omniverse驱动的全新NVIDIA Isaac Sim,这给BenchBot带来了许多重要的改进,让我们对未来由Omniverse驱动的模拟技术的发展方向充满期待。我们所看到的重大改进包括:

  • 质量:NVIDIA RTX 渲染使用我们之前所使用的相同素材生成了漂亮的逼真模拟。
  • 性能:我们获得了强大的动态照明效果以及复杂的反射映射。所有这些均在实时模拟中产生,具有逼真的物理效果。
  • 自定义能力:用于Omniverse和NVIDIA Isaac Sim的Python API可以完全控制模拟器,这使我们可以重新启动模拟、交换环境并通过编程移动机器人。
  • 简洁性:我们用一个Python文件取代了整个C++接口库。
  • 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()

然后,分步对模拟进行精细的控制,并且模拟以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后,我们欣然看到的一些视觉改进。

3.jpg

图3 在全新NVIDIA Isaac Sim(下排)中,表面反射比以前的版本(上排)更加逼真

4.jpg

图4 在全新NVIDIA Isaac Sim中,阴影和纹理渲染的质感比以前(上排)更加逼真(下排)

5.jpg

图5 全新NVIDIA Isaac Sim生成的环境感觉更加生动(右图)。相比之下,以前的环境(左图)感觉“平淡”

将BenchBot进一步应用于其他领域

虽然语义场景理解是我们的研究重点,也是我们在研究中使用BenchBot的最初原因,但BenchBot的应用并不局限于这个领域。BenchBot采用一个丰富的附加架构构建,因此可以在系统上添加和调整各种模块,以适应不同的问题领域。

QCR的视觉学习和理解研究计划已经开始利用这种灵活性,将BenchBot及其由Omniverse驱动的模拟应用于各种有趣的问题。图6所示的是我们正在考虑使用BenchBot的几个领域。

  • 致力于将最先进的语义SLAM与QuadricSLAM以及我们的开源GTSAM二次曲面扩展结合使用。
  • 在Omniverse的逼真模拟中使用自定义BenchBot附加组件采集合成数据集。
  • 探讨神经辐射场(NeRF)如何帮助增强场景理解并使用有噪声的数据构建更好的物体图。

6.jpg

图6 BenchBot的未来用途。从右上角开始沿顺时针方向依次为:二次曲面语义映射、带有对象级分割的合成数据集、使用噪声数据生成的对象级NeRF以及通过NeRF理解场景

我们在构建BenchBot时尽力让它能够适应您的研究问题。虽然我们很喜欢把它用于我们的研究问题,但我们也很期待别人会把它用在何处。附加组件库会记录您自己创建的附加组件,并且我们希望能在官方附加组件组织中加入一些第三方的附加组件。

总结

我们希望这篇深入的分析文章能够为您提供深刻的见解,帮助您步入机器人领域,在未来解决那些令我们这些机器人专家感到兴奋的问题。

我们欢迎每一位RVSU挑战赛的参赛者。无论您是语义场景理解领域的业余爱好者还是专业爱好者,是这一领域的学术研究者还是从业人员,也无论您是第一次参赛还是已参加过多次比赛,我们相信使用BenchBot系统参加挑战赛都将给您带来丰富的体验。您可以报名参加挑战赛并通过EvalAI挑战赛页面提交参赛作品。

如果您正在探索BenchBot和Omniverse的下一步发展方向,可以参考以下建议:

  • 按照我们的教程开始使用BenchBot。
  • 创建一些自定义附加组件并在BenchBot官方频道中分享。
  • 使用wrapping library,开始以编程的方式运行Omniverse和NVIDIA Isaac Sim。
  • 如果您希望开展研究方面的合作或者对BenchBot的应用领域存在疑问,可以联系BenchBot的作者。

在QCR,我们十分高兴看到机器人技术的发展方向。随着BenchBot和Omniverse驱动的全新NVIDIA Isaac Sim等工具的出现,现在正是“入坑”机器人技术的最佳时机。

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息