Genesis:一个革命性的物理学和具身人工智能平台

Genesis:一个革命性的物理学和具身人工智能平台

最近一个新的AI框架横空出世,可以结合物理现象与人工智能生成更真实的视觉效果。在这篇文章中,将对 Genesis 进行概述。

Genesis 是一个前沿的物理平台,旨在推动通用机器人、具身人工智能和物理人工智能应用的进步。作为一个多功能工具集,包含:

  • 通用物理引擎:一款从头开始精心重新设计的最先进物理引擎,用于模拟多种材料和复杂的物理现象。
  • 机器人仿真平台:一个轻量级、超快速、Pythonic 和用户友好的界面,旨在实现无缝的机器人仿真。
  • 照片真实感渲染系统:一个强大且快速的渲染系统,能够提供高质量的视觉效果。
  • 生成数据引擎:一个变革性工具,将自然语言提示转换为各种数据模式。

在其核心,Genesis 将多个先进的物理求解器集成到一个统一的框架中,提供无与伦比的仿真能力。这一强大的基础得到了一个生成代理框架的补充,旨在自动化数据生成,推动机器人研究及其他领域的边界。

主要特点

  • 统一物理模拟:基于通用物理引擎,Genesis 汇集了最先进的求解器,以卓越的准确性和保真度模拟各种物理场景。
  • 生成框架:生成代理框架作为一个模块化系统运作,结合了各种生成模块以处理多样的数据模式。这些模块由一个高级代理进行路由, seamlessly 整合现有研究和正在进行的开发。
  • 开源无障碍:物理引擎和模拟平台是开源的,允许研究人员和开发者自由探索、实验和创新。生成特性将逐步推出以便更广泛的访问。
  • 照片级真实感渲染:Genesis 结合了超快速的渲染能力和视觉上令人惊叹的结果,使模拟更加身临其境和真实。

使命

Genesis 受到一套远见卓识的目标的指导:

  • 可及性:降低物理模拟的障碍,民主化机器人研究,促进创新的包容性环境。
  • 统一:在一个统一的框架内整合多种物理求解器,以虚拟方式复制物理世界,具有无与伦比的物理、视觉和感官真实感。
  • 自动化:最小化人类在数据生成中的努力,促进机器人和其他领域的自主和自我维持的数据生态系统。

安装

先决条件

  • Python: 3.9+
  • Pytorch

各个系统支持的功能如下:

Genesis各个系统支持的功

pip install genesis-world

代码示例

import genesis as gs
gs.init(backend=gs.cpu)

后端设备

Genesis 本质上是跨平台的,支持各种后端设备。默认情况下,它使用 gs.cpu,如果需要 GPU 加速的并行仿真,可以切换到其他后端,例如:

  • gs.cuda:支持 CUDA 的 NVIDIA GPU。
  • gs.vulkan:基于 Vulkan 的后端
  • gs.metal:针对苹果硅设备进行了优化。
  • gs.gpu:一个方便的快捷方式,Genesis 为系统选择最佳后端(例如,如果可用则为 gs.cuda ,或对于 Apple Silicon 则为 gs.metal )。

精度等级

Genesis 默认为 f32 精度。对于需要更高精度的应用,可以通过在设置中指定 precision='64' 来选择 f64

日志级别

一旦初始化,Genesis 将在终端中提供日志输出,分享详细的系统信息和与 Genesis 相关的更新,例如其当前版本。可以控制此输出的详细程度:

  • Default:详细日志
  • Reduced output:将 logging_level='warning' 设置为抑制详细日志,仅显示警告和错误。

配色方案

Genesis 的日志记录器支持可自定义的颜色主题,以适应不同的终端环境:

  • dark:默认主题,针对深色背景终端进行了优化。
  • light:适用于明亮背景的终端的较浅色调。
  • dumb:适合喜欢简约风格用户的黑白输出。

通过这些灵活的选项,Genesis 确保在多样化的环境和工作流程中提供无缝且个性化的用户体验。

scene = gs.Scene()

场景是一个封装两个关键组件的包装器:

  • 模拟器对象 Simulator Object:处理所有底层物理求解器以管理物理模拟。
  • 可视化对象 Visualizer Object:管理与可视化相关的概念和渲染。

在设置场景时,可以配置各种物理求解器参数以自定义模拟。以下是一个演示更复杂配置的示例:

scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=0.01,
        gravity=(0, 0, -10.0),
    ),
    show_viewer=True,
    viewer_options=gs.options.ViewerOptions(
        camera_pos=(3.5, 0.0, 2.5),
        camera_lookat=(0.0, 0.0, 0.5),
        camera_fov=40,
    ),
)

plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(
    gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)

在 Genesis 中,所有对象和机器人都被表示为实体。Genesis 是完全面向对象的,允许通过这些实体对象的方法直接与它们交互,而无需依赖句柄或全局分配的 ID。

add_entity 的第一个参数是 morph。在 Genesis 中,morph 是一个混合概念,封装了实体的几何形状和姿态信息。通过使用不同的 morph,可以从形状原语、网格、URDFMJCF、地形或软机器人描述文件创建 Genesis 实体。

franka = scene.add_entity(
    gs.morphs.MJCF(
        file  = 'xml/franka_emika_panda/panda.xml'
        pos   = (0, 0, 0),
        euler = (0, 0, 90), # we follow scipy's extrinsic x-y-z rotation convention, in degrees,
        # quat  = (1.0, 0.0, 0.0, 0.0), # we use w-x-y-z convention for quaternions,
        scale = 1.0,
    ),
)

scene.build()
for i in range(1000):
    scene.step()

一旦所有内容都添加完毕,就可以开始模拟。在运行之前,需要通过调用 scene.build() 来构建场景。此步骤至关重要,因为 Genesis 使用即时编译 (JIT) 技术动态编译每次模拟运行的 GPU 内核。 scene.build() 过程通过以下方式初始化这一点:

  • 将所有组件放到位。
  • 分配设备内存。
  • 创建模拟所需的数据字段。

构建场景后,将启动一个交互式查看器以可视化模拟。查看器提供各种键盘快捷键以增强可用性,包括以下选项:

  • Video recording 视频录制。
  • Taking screenshots 截屏。
  • 在不同的可视化模式之间切换。

在不同的可视化模式之间切换。

Genesis 代表着一个不断发展的生态系统。虽然基础物理引擎和仿真平台已经作为开源工具可用。请继续关注创世纪的发展,以塑造物理仿真和机器人技术的未来。