Genesis:一个革命性的物理学和具身人工智能平台
最近一个新的AI框架横空出世,可以结合物理现象与人工智能生成更真实的视觉效果。在这篇文章中,将对 Genesis 进行概述。
Genesis 是一个前沿的物理平台,旨在推动通用机器人、具身人工智能和物理人工智能应用的进步。作为一个多功能工具集,包含:
- 通用物理引擎:一款从头开始精心重新设计的最先进物理引擎,用于模拟多种材料和复杂的物理现象。
- 机器人仿真平台:一个轻量级、超快速、Pythonic 和用户友好的界面,旨在实现无缝的机器人仿真。
- 照片真实感渲染系统:一个强大且快速的渲染系统,能够提供高质量的视觉效果。
- 生成数据引擎:一个变革性工具,将自然语言提示转换为各种数据模式。
在其核心,Genesis 将多个先进的物理求解器集成到一个统一的框架中,提供无与伦比的仿真能力。这一强大的基础得到了一个生成代理框架的补充,旨在自动化数据生成,推动机器人研究及其他领域的边界。
主要特点
- 统一物理模拟:基于通用物理引擎,Genesis 汇集了最先进的求解器,以卓越的准确性和保真度模拟各种物理场景。
- 生成框架:生成代理框架作为一个模块化系统运作,结合了各种生成模块以处理多样的数据模式。这些模块由一个高级代理进行路由, seamlessly 整合现有研究和正在进行的开发。
- 开源无障碍:物理引擎和模拟平台是开源的,允许研究人员和开发者自由探索、实验和创新。生成特性将逐步推出以便更广泛的访问。
- 照片级真实感渲染:Genesis 结合了超快速的渲染能力和视觉上令人惊叹的结果,使模拟更加身临其境和真实。
使命
Genesis 受到一套远见卓识的目标的指导:
- 可及性:降低物理模拟的障碍,民主化机器人研究,促进创新的包容性环境。
- 统一:在一个统一的框架内整合多种物理求解器,以虚拟方式复制物理世界,具有无与伦比的物理、视觉和感官真实感。
- 自动化:最小化人类在数据生成中的努力,促进机器人和其他领域的自主和自我维持的数据生态系统。
安装
先决条件
- Python:
3.9+
- Pytorch
各个系统支持的功能如下:
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
,可以从形状原语、网格、URDF
、MJCF
、地形或软机器人描述文件创建 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 代表着一个不断发展的生态系统。虽然基础物理引擎和仿真平台已经作为开源工具可用。请继续关注创世纪的发展,以塑造物理仿真和机器人技术的未来。