NVIDIA Isaac Sim与Marble加速机器人仿真环境构建

3 阅读9分钟

使用 NVIDIA Isaac Sim 和 World Labs Marble 更快地仿真机器人环境

构建用于机器人仿真的逼真 3D 环境传统上是一个劳动密集型过程,通常需要数周的手动建模和设置。现在,借助生成式世界模型,您可以在极短的时间内从文本提示转换到一个逼真、可用于仿真的世界。通过结合开源机器人参考框架 NVIDIA Isaac Sim 与 World Labs 的 Marble 等生成模型,您可以从文本或图像提示创建用于机器人开发的完整 3D 场景。

World Labs 最近发布了案例研究“使用 Marble 扩展机器人仿真”,展示了研究人员如何利用 Marble 的生成式世界加速机器人训练、测试和仿真到现实的迁移。

在本教程中,我们将逐步介绍一个端到端的工作流程:

  1. 场景导出:从 Marble 画廊将现有场景导出为高斯泼溅(PLY)和碰撞体网格(GLB)。
  2. 场景转换:使用 NVIDIA Omniverse NuRec 将 Marble 输出转换为 USD 格式。
  3. 场景导入与构建:导入到 NVIDIA Isaac Sim。
  4. 在 Isaac Sim 中仿真:添加机器人并运行仿真。

通过本教程,您将获得一个逼真的虚拟环境,机器人可以在其中进行物理交互,并且其生成速度远远快于传统方法。让我们开始吧。

步骤 1:从 World Labs Marble 获取 3D 厨房场景

World Labs Marble 生成丰富的视觉细节和几何数据,如深度和表面法线,以及可用于物理仿真的可导出碰撞体网格。本教程中,我们不会从头生成一个新的厨房,而是使用 Marble 示例库中提供的预制的厨房场景。这可以节省时间,并确保我们有一个现成的逼真环境。所选场景是一个详细的厨房和客厅内部,配有家具和典型的厨房物品。

从 Marble 导出厨房世界的步骤:

  1. 登录 Marble:在网页上登录您的 Marble 帐户。登录后,导航到预制的厨房场景。
  2. 打开场景:点击该世界,在 Marble 的 3D 查看器中加载它。您可以使用 WASD 和鼠标像在游戏中一样探索它,以确认其效果。
  3. 下载世界:在 Marble 界面底部的工具栏中找到下载按钮。
    • 选择“Splats (PLY)”下载高斯泼溅表示。Marble 的高斯泼溅以 .ply 文件形式提供,其中包含数百万个代表场景的半透明粒子,具有高保真度。
    • 选择“Collider Mesh (GLB)”下载场景的三角形网格。这将包含作为标准 glTF 模型的厨房几何体。

请注意,在 World Labs Marble 中导出 PLY 和 GLB 文件需要付费计划。如果没有,World Labs 从其画廊提供示例 PLY 和 GLB 文件。本教程中,我们将使用厨房场景 PLY 和 GLB 文件作为示例。将文件保存为 MarbleKitchenwithLight.plyMarbleKitchenwithLight_collider.glb

至此,我们有了两种形式的厨房环境——高斯泼溅和三角形网格。每种形式服务于不同的目的:PLY 捕获场景的完整视觉细节,而 GLB 提供仿真中物理和碰撞所需的网格几何体。

步骤 2:将下载的 PLY 转换为 USDZ

NVIDIA Isaac Sim 使用通用场景描述(USD)作为其场景格式。为了在 Isaac Sim 中使用我们由 Marble 生成的世界,我们需要将导出的 PLY 转换为 USD 格式。然后,我们将利用 NVIDIA Omniverse NuRec 的能力来高效渲染基于点的场景。

NuRec 的核心是基于高斯的重建和渲染算法 3DGUT。NVIDIA 3DGRUT 仓库包含一个脚本,用于将 .ply 泼溅文件转换为 USDZ 文件,这是一个包含 USD 特定数据的 zip 压缩包。我们将使用它来转换我们的 Marble PLY:

  1. 设置 3DGRUT:克隆 3DGRUT 仓库并安装其环境。在本教程中,我们在一个名为 “3dgrut” 的专用 Conda 环境中设置 3DGRUT。

    git clone --recursive https://github.com/nv-tlabs/3dgrut.git
    cd 3dgrut
    chmod +x install_env.sh
    ./install_env.sh 3dgrut
    conda activate 3dgrut
    

    该环境需要配备 NVIDIA GPU、CUDA 11.8+ 和 GCC 11 或更低版本的 Linux 系统。如果您已经拥有一个包含所需库(如 PyTorch 等)的 Python 环境,也可以选择在该环境中直接运行转换 Python 脚本。

  2. 将 PLY 转换为 USDZ:设置好 3DGRUT 后,使用提供的转换脚本将 Marble 点云转换为 USDZ:

    $ python -m threedgrut.export.scripts.ply_to_usd \
          /path/to/MarbleKitchenwithLight.ply \
          --output_file /path/to/MarbleKitchenwithLight.usdz
    

    此命令将读取 .ply 文件并生成一个 .usdz 文件。USDZ 使用自定义 USD 模式(UsdVolVolume 的扩展)来表示高斯泼溅,以便 Omniverse 能够渲染。本质上,它将点云嵌入为体积图元,保留了 Marble 场景的视觉保真度。

现在,我们有了一个 USDZ 文件和一个 GLB 文件:

  • MarbleKitchenwithLight.usdz – 视觉泼溅世界
  • MarbleKitchenwithLight_collider.glb – 用于物理的碰撞体网格

步骤 3:将 USDZ/GLB 导入 Isaac Sim 并构建场景

生成 USDZ 文件后,下一步是将厨房场景导入 Isaac Sim,将网格与高斯泼溅对齐,并添加物理和光照,使其为交互做好准备。由于我们要编辑场景内容,需要解压 USDZ 归档文件。解压文件并打开生成的 default.usda 文件,然后执行以下步骤:

几何对齐高斯体积: 我们想确保导入场景的原点和比例与 Isaac Sim 匹配。为此:

  • 向场景添加一个地面平面。这将用作导入高斯体积的地面参考,并作为一个光滑的碰撞体。
  • 导入的高斯体积包含在一个 “xform” 图元中,用于变换体积。为了使体积与地板对齐,选择 xform 图元并调整其“平移”值,使厨房地板正好位于地面平面上。使用地面平面作为视觉参考,移动高斯体积,直到点云的地板与其重合。
  • 生成的场景可能比现实世界的比例更小或更大。为了大致匹配现实世界的比例,我们可以使用一个默认的立方体作为视觉参考,其边长为 1 米。插入一个立方体对象后,我们可以相应地调整 X、Y 和 Z 的整体缩放。对于我们的厨房场景示例,缩放因子为 2 即可得到大致合适的尺寸(例如,对于橱柜和炉灶)。
  • 最后,微调 xform 图元的旋转,以确保高斯点云尽可能准确地与地面对齐。验证这一点的一个简单方法是使用厨房墙上的瓷砖作为参考,并旋转高斯,使它们与创建的地面平面完全平行。对齐后,将地面平面移回下方,使其正好位于厨房地板水平。

为场景添加物理和光照: 现在我们已经对齐了导入的高斯,我们希望添加物理和光照,以便阴影和物体交互按预期工作。 我们将使用之前创建的立方体再次调整场景比例,以测试阴影和物理。

  • 在地面平面的碰撞网格中,打开“matte object”属性。这确保它能正常作为阴影接收器工作。
  • 向场景添加一个穹顶光。
  • 在“stage”窗口中选择“gauss”体积图元,然后在“property”窗口中向下滚动到“Raw USD Properties”,点击三角形以显示其他设置。然后,滚动到“proxy”字段,点击“Add Target”。最后,选择 GroundPlane CollisionMesh 作为目标。
  • 移动立方体以确保阴影按预期显示。
  • 将立方体设置为带有碰撞体的刚体,并在仿真中点击播放,立方体按预期与地面平面交互。但是,它会“穿过”高斯。现在让我们继续设置高斯表示的物理。

高斯的碰撞信息在 GLB 文件中。导入此网格,将其与高斯体积对齐,并将其启用为碰撞体。

  • MarbleKitchenwithlight_collider.glb 文件拖放到高斯体积下。确保它位于高斯体积下,因为层级结构很重要。碰撞体将显示在场景中。
  • 将场景稍微缩小一点,并将 X 旋转设置为 -90 度以匹配高斯体积的坐标约定。现在渲染的体积和碰撞网格完全对齐。
  • 为导入的碰撞网格启用物理碰撞体预设。
  • 关闭碰撞体的可见性,因为它与高斯体积重叠。这仅影响场景的视觉效果;物理将使用我们刚刚在场景中设置的碰撞体。

场景的几何、物理和光照现在都已就绪:高斯体积提供逼真的视觉效果,而 GLB 碰撞体和地面平面处理物理和阴影。场景现在已准备好添加机器人。

步骤 4:添加机器人并运行仿真

厨房场景对齐并启用物理后,最后一步是添加机器人并驾驶它以验证设置。

  • 将 NVIDIA Nova Carter 机器人拖放到场景中。
  • 为机器人添加一个差分控制器并启用键盘控制。这将创建必要的动作图,使我们能够使用键盘移动机器人。
  • 切换到安装在机器人上的摄像头,然后点击播放。使用 WASD 移动机器人,并验证它是否遵守厨房的几何约束:它应停在地板上,与台面和家具碰撞,而不是掉落到场景中。

至此,Marble 厨房场景已完全集成到 Isaac Sim 中,成为一个启用物理的环境,您可以交互式地驾驶机器人穿过其中。

总结

在本教程中,我们下载了一个包含几何结构的 AI 生成的 3D 环境,然后将其带入 Isaac Sim 作为一个可用于仿真的场景。我们在一个 AI 生成的世界中设置了机器人。这里的端到端工作流程现在只需几个小时即可完成。这种快速生成各种高保真世界的能力,为仿真中的机器人开发解锁了更高的可扩展性。借助 Marble 和 Isaac Sim,只要您能描述一个世界,您很可能就能在同一天开始测试它。

要了解更多信息,请尝试以下操作:

  • 使用 World Labs Marble 创建您自己的自定义环境 – 您可以从文本描述、单张图像、不同角度的多张照片,甚至是粗略的 3D 布局开始。
  • 使用输入图像创建您自己的自定义环境,并将其用于 Isaac Sim,配合 Lyra(NVIDIA 的一个通过视频扩散模型进行生成式 3D 场景重建的研究计划)。

了解有关仿真创新的更多信息,并与 NVIDIA 专家在 SIGGRAPH Asia 会面,该会议于 12 月 15 日至 18 日在香港会议展览中心举行。FINISHED