代理式 AI/生成式 AI

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

一直以来,为机器人仿真构建逼真的 3D 环境是一项非常耗费人力的工作,往往需要数周的手动建模与配置。如今,借助生成式世界模型,开发者只需输入文本提示,就能在极短时间内生成一个逼真、可直接用于仿真的虚拟世界。将开源机器人参考框架 NVIDIA Isaac Sim 与生成式模型,比如 World Labs 推出的 Marble 等相结合,即可通过文本或图像提示,为机器人开发创建完整的 3D 场景。

World Labs 近期发布了题为“借助 Marble 实现机器人仿真规模化”的案例研究,展示了研究人员如何利用 Marble 的生成式虚拟世界,加速机器人的训练、测试及仿真到现实的迁移。

本教程将带你完成一套端到端工作流:

  1. 场景导出:从 Marble 资源库中导出 Gaussian splats(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)”下载场景的 Gaussian splat 表示文件。Marble 提供的 Gaussian splat 文件为 .ply 格式,内含数百万个半透明粒子,可高精度还原场景细节。
    • 选择“Collider Mesh(GLB)”下载场景的三角网格文件。该文件为标准 glTF 模型格式,包含厨房场景的完整几何结构。

注意:在 World Labs Marble 中导出 PLY 与 GLB 文件需订阅付费套餐。若暂未订阅,可使用 Marble 资源库提供的示例 PLY 与 GLB 文件。本教程将以厨房场景的示例 PLYGLB 文件进行演示,建议将文件分别命名为 MarbleKitchenwithLight.ply 和 MarbleKitchenwithLight_collider.glb 保存。

至此,我们已获取两种格式的厨房环境文件——Gaussian splats(PLY)与三角网格格式(GLB),二者功能各有侧重:PLY 文件负责呈现场景的完整视觉细节,GLB 文件则提供仿真所需的物理碰撞几何结构。

视频 1. 浏览 Marble 示例场景并下载 PLY GLB 文件

步骤 2:将下载的 PLY 文件转换为 USDZ 格式

NVIDIA Isaac Sim 采用通用场景描述(USD)作为标准场景格式。若要在 Isaac Sim 中使用 Marble 生成的场景,需先将导出的 PLY 文件转换为 USD 格式,导入后,再借助 NVIDIA Omniverse NuRec 的功能,高效渲染基于点云的场景。

NuRec 的核心是基于高斯模型的重建与渲染算法 3DGUT。NVIDIA 3DGRUT 代码库中提供了将 .ply splat 文件转换为 USDZ 文件的脚本,USDZ 是一种基于 ZIP 压缩的 USD 专用归档格式。具体转换步骤如下:

1. 配置 3DGRUT 环境:克隆 3DGRUT 代码库并完成环境部署。本教程将在名为“3dgrut”的独立 Conda 环境中进行配置。

      该环境需运行于 Linux 系统,且需配备 NVIDIA GPU、CUDA 11.8 及以上版本、GCC 11 及以下版本。若你已拥有包含 PyTorch 等必要依赖库的 Python 环境,也可直接在该环境中运行格式转换脚本。

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

      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 的扩展)存储 Gaussian splats 数据,确保 Omniverse 可对其进行高效渲染。本质上,该格式将点云嵌入为体素基元,完整保留 Marble 场景的视觉逼真度。关于 NuRec 神经体渲染技术及其在 Omniverse 中的实现细节,可参考 NuRec 渲染技术文档

      此时,我们已获得两个关键文件:

      • MarbleKitchenwithLight.usdz——用于呈现视觉效果的 splat 场景文件
      • MarbleKitchenwithLight_collider.glb——用于物理仿真的碰撞网格文件

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

      生成 USDZ 文件后,下一步需将厨房场景导入 Isaac Sim,完成网格与 Gaussian splats 的对齐,并添加物理属性与光照系统,使其具备机器人交互条件。

      由于需要编辑场景内容,我们需先解压 USDZ 归档文件,打开生成的 default.usda 文件,再按以下步骤操作:

      高斯体素模型几何对齐:

      为确保导入场景的原点与缩放比例适配 Isaac Sim,需执行以下对齐操作:

      1. 在场景中创建一个地面平面,作为导入高斯体素模型的地面参考基准,同时充当平滑的碰撞面。
      2. 导入的高斯体素模型包含在“xform”基元中,可通过该基元调整模型位置。选中 xform 基元,修改其“平移”参数,使厨房场景的地面与创建的地面平面完全贴合。以地面平面为视觉参考,移动高斯体素模型,直至点云模型的地面与参考平面重合。
      3. 生成的场景可能与真实世界比例存在偏差,可借助一个边长为 1 米的默认立方体作为参考,调整场景在 X、Y、Z 三个轴向上的缩放比例。在本教程的厨房场景示例中,将缩放因子设为 2 时,橱柜、炉灶等物体的尺寸基本符合真实比例。
      4. 调整 xform 基元的旋转参数,确保高斯点云模型与地面平面精准对齐。一个简便的验证方法是:以厨房墙面瓷砖为参考,旋转高斯模型,使瓷砖与地面平面保持完全平行。对齐完成后,将地面平面下移至与厨房地面完全贴合的位置。

      视频 2. 高斯体素模型几何对齐操作演示

      为场景添加物理属性与光照:

      完成高斯模型对齐后,需为场景添加物理属性与光照系统,确保阴影效果与物体交互符合物理规律。

      我们可再次使用之前创建的立方体,调整场景缩放比例,同时测试阴影与物理效果:

      1. 在地面平面的碰撞网格设置中,启用“无光物体”属性,确保其能正常接收阴影。
      2. 在场景中添加穹顶光源。
      3. 在场景窗口中选中“gauss”体素基元,在属性窗口中向下滚动至“原始 USD 属性(Raw USD Properties)”,点击展开更多设置;找到“代理(proxy)”字段,点击“添加目标(Add Target)”;最后选择地面平面的碰撞网格(GroundPlane CollisionMesh)作为关联目标。

      视频 3. 物理属性与光照系统添加教程

      移动立方体,确认阴影效果是否符合预期。

      将立方体设置为带碰撞体的刚体,点击仿真运行按钮,此时立方体应能与地面平面产生符合预期的交互。但需注意,此时立方体会“直接穿过”高斯模型,因此我们还需为高斯模型配置物理属性。

      高斯体素模型的碰撞信息存储在 GLB 文件中,需导入该网格文件并与高斯体素模型对齐,同时启用其碰撞体功能:

      1. 将 MarbleKitchenwithlight_collider.glb 文件拖拽至高斯体素模型的层级下,确保层级结构正确,此时碰撞网格将显示在场景中。
      2. 适当缩小场景视图,将碰撞网格的 X 轴旋转角度设为 -90°,使其坐标系统与高斯体素模型保持一致,完成渲染模型与碰撞网格的精准对齐。
      3. 为导入的碰撞网格启用物理碰撞体预设。
      4. 关闭碰撞网格的可见性(因其与高斯体素模型重叠)。此操作仅影响场景视觉效果,物理仿真仍会使用已配置的碰撞体。

      https://www.youtube.com/watch?v=cTLl2jBY8zA
      视频 4. 碰撞网格导入操作演示

      至此,场景的几何结构、物理属性与光照系统均已配置完毕:高斯体素模型负责呈现逼真的视觉效果,GLB 碰撞网格与地面平面则处理物理碰撞与阴影计算。现在,场景已具备添加机器人的条件。

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

      完成厨房场景的对齐与物理属性配置后,最后一步是添加机器人,通过操控机器人验证场景搭建效果:

      1. 将 NVIDIA Nova Carter 机器人拖拽至场景中。
      2. 为机器人添加差分控制器,并启用键盘控制功能。系统将自动生成所需的动作图谱,支持通过键盘操控机器人移动。
      3. 切换至机器人搭载的视角,点击播放按钮。使用 WASD 键操控机器人移动,同时验证其是否遵循厨房场景的几何约束:机器人应能稳定停留在地面上,与操作台及家具发生碰撞,且不会穿透场景模型。

      此时,Marble 厨房场景已作为支持物理仿真的环境,完全集成至 Isaac Sim 中,你可通过交互方式操控机器人在场景内移动。

      视频 5. 机器人添加与场景导航演示

      总结

      本教程演示了如何下载一个包含完整几何结构的 AI 生成 3D 环境,并将其导入 Isaac Sim 构建可直接用于仿真的场景,最终在 AI 生成的虚拟世界中完成机器人部署。这套端到端流程仅需数小时即可完成。这种快速生成多样化逼真虚拟世界的能力,为机器人仿真开发的规模化落地提供了可能。借助 Marble 与 Isaac Sim,只要你能描述出目标场景,当天即可开展机器人测试工作。

      想要探索更多功能,可尝试以下操作:

      • 使用 World Labs Marble 创建自定义环境:支持通过文本描述、单张图片、多角度照片甚至粗略的 3D 布局作为输入,生成专属仿真场景。
      • 基于输入图像创建自定义环境并用于 Isaac Sim:可借助 NVIDIA 研究项目 Lyra 实现——该项目基于视频扩散模型,提供生成式 3D 场景重建能力。

      更多仿真技术创新,敬请关注 SIGGRAPH Asia 的有关信息,与 NVIDIA 技术专家深入交流。SIGGRAPH Asia 于 12 月 15 至 18 日在香港会议展览中心举办。

      标签