Substeps
子步AdvancedSplitting one simulation step into several smaller integration steps, trading extra computation for more stable, accurate physics.
Substeps are a setting inside a physics simulator: each time the simulator advances by one step, the engine internally divides that time span into a number of smaller pieces and does integration and constraint solving (the step that computes contact forces and joint constraints) once per piece, in sequence. Isaac Gym's SimParams has both a dt and a substeps parameter; Genesis's SimOptions also has substeps, and its documentation says it means how many times the solver integrates within each scene.step() call. More substeps means a smaller effective timestep, which makes high-speed collisions and stiff contacts less likely to tunnel through geometry or blow up numerically, but the computation cost also grows proportionally. It is not the same thing as control decimation: decimation means the policy only issues a new action every few simulation steps, while substeps subdivide inside a single simulation step. Substeps, together with control decimation and the simulation timestep, jointly determine the physics frequency and the control frequency.
Examplelegged_gym's default configuration uses a simulation timestep dt=0.005 seconds, substeps=1, and decimation=4 — physics at 200 Hz and the policy at 50 Hz; changing substeps to 2 makes the engine integrate internally every 2.5 milliseconds while the policy's frequency stays the same.
- Also called
- Substepping, Physics Substeps
- Related
- Simulation Timestep · Control Decimation · Numerical Integrator (Semi-implicit Euler / RK4) · Simulation Instability · Solver Iteration Count (Position / Velocity Iterations) · Physics Engine
- Sources
- Genesis SimOptions 源码(dt / substeps 说明) (Chinese)
legged_gym 默认配置 legged_robot_config.py (Chinese)
Isaac Gym Python API: SimParams(dt / substeps)