It seems dividing by substeps is not correct in this case as per the IsaacGym documentation:
What is the difference between dt and substep?
dt is the time increment of the simulation. Every time you step the simulation via gym.simulate(...) you more the sim forward in time by dt. The substep is how many slices this dt is split into in order to do the simulation. The more substeps, the finer the slicing of time and the greater the accuracy of the simulation, but the more computationally intensive it becomes. For example: say your dt is 1/60 and your substep is 2. When you call gym.simulate(...) the physics is propagated forward 1/60th of a second in two time steps of 1/120th of a second each. You do not have access to the results of these 1/120th of a second time steps, only the total result at 1/60th of a second can be retrieved by calling gym.fetch_results(...). This is probably a consequence of certain numerical integration methods.
It seems dividing by
substeps
is not correct in this case as per the IsaacGym documentation:https://github.com/clvrai/furniture-bench/blob/cd22d7b5b83afce94b197b18a49816ab1c04fcff/furniture_bench/envs/furniture_sim_env.py#L729
The fix should be to just delete this line if you believe this issue to be correct. I'd be happy to make a simple PR for this as well if preferable!
Best, Lars