首页 > 科技周边 > 人工智能 > 创世纪物理引擎:设置创世纪的分步指南

创世纪物理引擎:设置创世纪的分步指南

Christopher Nolan
发布: 2025-03-01 09:54:09
原创
334 人浏览过

去年,Genesis是一种令人兴奋的新工具,用于创建现实的物理模拟,Interactive 4D Worlds等。我渴望尝试,但是让它上班并不容易。我必须承认,在设置过程中,我面临很多挑战。 

>在本教程中,我将简要分享我遇到的问题,并展示我最终如何使用Google Colab和几个技巧来运行它。>

如果您只想概述Genesis,请查看我以前的文章《 Genesis Physics Engine:一个带有示例的指南》。

我最初的创世纪的设置经验

>当我刚开始使用Genesis时,我遵循文档中的安装步骤。马上,我遇到了依赖性问题。 Genesis需要一个名为Taichi(1.7.x)的模块的特定版本,但我的MacOS不支持它。作为参考,我的Mac已8岁…。

> 经过一番研究,我意识到,即使使用更好的计算机,其他用户也遇到了相同的问题。经过数小时的努力,发现Genesis仅适用于某些Python版本,我终于安装了它。

>但新问题弹出了。它不会渲染任何东西,我在OpenGL上遇到了几个问题。即使我尝试从他们的github运行示例文件时,我也面临更多的错误和冲突。

> 然后,当我以为我已经整理出来时,我开始遇到诸如“统一找不到”之类的错误,这意味着某些渲染设置缺失了。

> 在此过程中,我在网上进行了研究,以查看其他人是否遇到了同样的问题。事实证明,我不是唯一的人 - 许多人面临着同样的困难,许多人似乎找不到解决方案来使他们的脚本正常工作。

我如何使创世纪起作用:Google Colab进行救援

最初的挫败感后,我决定尝试使用一个Pro帐户的Google Colab,事实证明这正是我所需要的。使用COLAB的GPU资源,我能够:

安装所有必需的依赖项,没有任何问题。

>

使用GPU后端实现出色的性能和现实渲染。

最后,运行基本示例并探索创世纪的潜力。

我选择了NVIDIA A100-SXM4-40GB,事实证明,它足够强大,可以有效地处理创世纪模拟。 
  • >设置了Google Colab环境并安装了Genesis,我尝试从文档中运行最简单的示例:
  • 这个示例应使用CPU后端初始化创世纪并显示基本场景。但是,我立即遇到以下错误:
  • >
错误消息表明Genesis正在尝试创建一个图形窗口来渲染场景,但是Google COLAB不支持实时可视化。 COLAB在无法访问本地显示的远程环境中运行,因此show_viewer = gs.scene()初始化中的true参数不起作用。

>

>正如错误消息所建议的那样,我修改了代码以禁用查看器:>

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
登录后复制
登录后复制
>这使脚本可以执行而不会崩溃。但是,这种方法意味着无法直接可视化结果。

>

在网上查看后,我发现其他人遇到了同样的问题。许多提出的解决方案涉及配置远程OpenGL环境或使用XVFB创建虚拟显示。不幸的是,我无法获得这些方法可以在COLAB中可靠地工作,这可能是由于依赖性冲突和环境的局限性。 在这一点上,我需要更实用的解决方法!

>

>由于COLAB不是实时渲染,因此我决定按框架作为图像保存渲染的输出。有了这些想法,我能够生成一系列图像,这些图像后来可以合并为动画。

>实现和输出

在本节中,我将引导您完成代码的实现和我获得的输出。

设置GPU环境

首先,我安装了创世纪:>

然后,我用CUDA后端初始化了GPU加速度的Genesis。

这是我得到的输出:

>
GenesisException: No display detected. Use show_viewer=False for headless mode.
登录后复制
登录后复制

创建和构建场景

scene = gs.Scene(show_viewer=False)
登录后复制
登录后复制
创建一个目录以保存结果

我需要的第一件事是一个文件夹,创世纪可以保存其呈现的图像。 

pip install genesis-world
登录后复制
登录后复制
os.makedirs()函数在指定路径中创建一个称为simulation_frames的文件夹,并且eSTEN_OK = true参数可确保如果文件夹已经存在,则不会引起错误。

以这种方式,我有一个专门的位置来保存模拟中的所有帧和输出。

初始化场景

接下来,我需要创建一个可以添加对象并与它们进行交互的场景。

>
import genesis as gs
gs.init(backend=gs.cuda)
登录后复制

gs.scene()初始化了一个新的仿真空间,而show_viewer = false disable dis time实时可视化。在这一点上,我准备了一个空的场景来开始建造。

添加一个平面和一个盒子

>

>准备好场景后,我开始添加对象。我首先添加了一架飞机,该飞机充当地面。

该平面是模拟的平坦基础。默认情况下,它是无限的,沿x-y轴平坦。
[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB.
[Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
登录后复制
>

接下来,我在场景中添加了一个盒子:

>我将盒子设置为(0、0、0),就在场景的中心,然后将其调整为0.5个单位宽,高且深,使其小于默认值。>>>>>>

现在,我有一个简单的设置:一架平面作为地面,一个放在其顶部的盒子。

import os
save_dir = "/content/simulation_frames"
os.makedirs(save_dir, exist_ok=True)
登录后复制
添加一个摄像头

为了捕获场景中发生的事情,我添加了一个相机。

>

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
登录后复制
登录后复制

>我将图像分辨率设置为320x240像素,这是测试的实用选择,并将相机定位在(3.5、2.0、2.5),从而使其从略微上方和侧面清晰地看到了场景。为了确保盒子保持在焦点中,我将相机的瞄准位于盒子中心的上方(0、0、0.5)。具有30度的视野(FOV),摄像机捕捉了场景的狭窄而专注的视角。 

构建场景

下一步是构建场景以准备模拟和渲染。

>
GenesisException: No display detected. Use show_viewer=False for headless mode.
登录后复制
登录后复制

此步骤至关重要,因为创世纪使用了即时(JIT)汇编来优化仿真。当我构建场景时,创世纪:

  • >为场景中的对象分配内存。
  • 准备用于渲染和物理计算的GPU内核。
  • 设置所有必要的数据结构,以使模拟平稳运行。
现在一切都准备就绪 - 我的飞机,盒子和相机已经建立了,场景是建造的。

>渲染和保存输出

为了可视化模拟,我呈现并逐帧保存了输出。每个帧都作为图像存储在Simulation_Frames目录中。 

在渲染过程中,我观察到前几个帧迅速呈现(最高2297 fps),但是随着模拟的进行,性能下降。 FPS最终按照帧25降至0.33 fps。这可能是由于模拟的计算复杂性增加或较大场景的GPU资源约束。

这是我得到的输出:

scene = gs.Scene(show_viewer=False)
登录后复制
登录后复制

这些是我得到的图像:

pip install genesis-world
登录后复制
登录后复制

创世纪物理引擎:设置创世纪的分步指南

创世纪物理引擎:设置创世纪的分步指南

创世纪物理引擎:设置创世纪的分步指南

创世纪物理引擎:设置创世纪的分步指南>如通过相机所示,盒子如何随着时间的推移而与平面相关。模拟以步骤运行,每个步骤都会改变框的位置,使其看起来像框在移动。

这个示例强调了创世纪如何模拟和显示简单的物理相互作用。尽管此设置是基本的,但它很好地了解了对象在场景中的行为方式。但是,您可以通过创世纪完全创建更复杂和现实的场景!我们将在下一部分中探索其中的一些功能。创世纪物理引擎:设置创世纪的分步指南>

探索创世纪:功能和功能

对象和场景创建

创世纪使您可以通过添加各种对象和变形来创建复杂的场景。物体的范围可以从平面,盒子和球等简单的原始范围到机器人和地形等更复杂的实体。

形状原语:

    gs.morphs.plane
  • gs.morphs.box
  • gs.morphs.cylinder
  • gs.morphs.sphere
>外部文件支持:

    mjcf:gs.morphs.mjcf for Mujoco XML机器人配置。
  • urdf:gs.morphs.urdf for Unified机器人说明格式文件。
  • 网格:gs.morphs.messss,用于3D资产,例如.obj,.ply,.stl,.glb和.gltf。
  • Genesis使用了一个称为“变形”的统一概念,封装了几何图形和姿势信息。这种面向对象的设计允许使用其方法直接与实体进行交互。
  • 渲染和可视化
Genesis的关键优势之一是它使用高级相机功能创建详细的视觉输出的能力。相机以“无头模式”工作,这意味着它们可以生成图像而无需显示屏幕。它们可以产生各种类型的视觉效果,包括常规颜色图像(RGB),深度图显示了对象有多远,标记场景不同部分的分割掩模以及代表表面细节的正常地图。

录制视频

>您可以通过让摄像头自动记录模拟的每个帧来创建视频。您甚至可以在录制过程中移动相机,以使视频更具动态性和沉浸式。 例如,您可以在捕获帧时配置相机以在场景周围的圆形路径中移动。 CAM.START_RECORDING()函数开始录制,在模拟的每个步骤中,相机的位置都会更新。捕获所有帧后,CAM.STOP_RECORDING()将视频保存为“ video.mp4”。

最终视频提供了模拟的平滑视图,显示了对象如何相互作用和随时间移动。

运动任务的地形生成

>您还可以为机器人技术和AI培训创建不同类型的地形。您可以使用其内置的地形选项,或者通过使用gs.morphs.terrain提供自定义高度图来设计自己的地形。这些地形非常适合测试和训练机器人如何移动,使创世纪成为机器人研究的绝佳工具。

可扩展性

>您还可以通过多种方式自定义模拟。您可以向对象添加逼真的纹理,从而使它们看起来更加栩栩如生。它还支持许多用于导入模型的文件格式,如果不支持格式,则可以要求将其添加。此外,您可以使用个性化文件和设置来创建自己的自定义对象形状(称为morphs)。

结论

本教程提供了一个简单的示例,可以帮助您开始创世纪。我们介绍了基础知识,例如创建场景,添加对象和渲染输出,以说明这种功能强大的物理引擎如何工作。 但是,这只是创世纪可以做的事情的开始。有了正确的硬件,例如强大的GPU和足够的内存,就有很多可能性。您可以将其用于复杂的机器人模拟或创建用于AI培训的高质量数据集。尽管设置它可能很棘手,但它绝对是一种具有巨大潜力的工具!

>

以上是创世纪物理引擎:设置创世纪的分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板