子步
Substeps进阶把一个仿真步再切成几段小步积分,换取更稳定、更准的物理。
子步是物理仿真器里的一个设置:每调用一次仿真步进,引擎内部把这段时间均分成若干份,依次做积分和约束求解(计算接触力、关节约束的那一步)。Isaac Gym 的 SimParams 里有 dt 和 substeps 两个参数;Genesis 的 SimOptions 也有 substeps,文档写明它表示每次 scene.step() 里求解器积分几次。子步越多,等效时间步越小,高速碰撞和刚度大的接触越不容易穿模或数值爆炸,但计算量也成倍增加。它和控制降频不是一回事:降频是策略每隔几个仿真步才出一次动作,子步是在一个仿真步内部再细分。两者加上仿真步长,共同决定物理频率和控制频率。
例子legged_gym 的默认配置是仿真步长 dt=0.005 秒、substeps=1、decimation=4,即物理 200 Hz、策略 50 Hz;若把 substeps 改成 2,引擎内部就按 2.5 毫秒一步积分,而策略频率不变。
- 也叫
- substepping、物理子步
- 相关
- 仿真步长、控制降频、积分器、仿真爆炸、求解器迭代次数、物理引擎
- 来源
- Genesis SimOptions 源码(dt / substeps 说明)
legged_gym 默认配置 legged_robot_config.py
Isaac Gym Python API: SimParams(dt / substeps)