物理引擎#

Genesis 将多个物理 solver 集成到统一的框架中,支持多种物理现象的仿真,包括刚体、软体、流体及其相互作用。

架构概览#

Scene
└── Simulator
    ├── Solvers (物理计算)
    │   ├── RigidSolver - 刚体动力学
    │   ├── MPMSolver - Material Point Method
    │   ├── FEMSolver - Finite Element Method
    │   ├── PBDSolver - Position Based Dynamics
    │   ├── SPHSolver - Smoothed Particle Hydrodynamics
    │   ├── SFSolver - String/Fiber 动力学
    │   └── ToolSolver - 运动学约束
    │
    └── Couplers (物理交互)
        ├── LegacyCoupler - 基于脉冲的耦合
        ├── SAPCoupler - 空间加速
        └── IPCCoupler - Incremental Potential Contact

仿真循环#

典型的仿真步包括:

  1. Pre-step: 准备 solver 状态

  2. Solver steps: 每个 solver 推进其物理计算

  3. Coupling: 处理不同物理类型之间的交互

  4. Post-step: 更新渲染状态、传感器

import genesis as gs

gs.init()

scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=0.01,          # 时间步长
        substeps=4,       # 每步的物理子步数
        gravity=(0, 0, -9.81),
    ),
)

# 添加 entities...
scene.build()

# 每个 step() 执行完整的仿真循环
for i in range(1000):
    scene.step()

Solver 选择#

Solvers 根据 entity 类型和 materials 自动选择:

Entity/Material

Solver

RigidEntity, URDF, MJCF

RigidSolver

MPMEntity, MPM materials

MPMSolver

FEMEntity, FEM materials

FEMSolver

PBDEntity, cloth/soft materials

PBDSolver

SPHEntity, SPH liquid

SPHSolver

String/fiber materials

SFSolver

Solver 配置#

每个 solver 有专用的配置选项:

scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=0.01,
        substeps=4,
    ),
    rigid_options=gs.options.RigidOptions(
        enable_collision=True,
        enable_joint_limit=True,
    ),
    mpm_options=gs.options.MPMOptions(
        lower_bound=(-1, -1, 0),
        upper_bound=(1, 1, 2),
    ),
)

组件#

另请参阅#