Bug Description
Issue: Genesis rigid solver NaN / object slips through fingertips in LEAP hand grasp
Cross-posted to genesis-world for investigation. This issue documents a reproducible instability when using Genesis 1.3.2 to simulate a LEAP hand grasping a small sphere, while the identical MJCF/URDF scene is stable in MuJoCo.
Problem summary
In a dexterous-hand grasping benchmark, the same LEAP-hand / sphere configuration that is stable under MuJoCo fails under Genesis:
- Even with the hand held at a fixed grasp pose via
control_dofs_position, the sphere slowly slides through the fingertips (≈1.5–2 mm per 2 ms step).
- When a computed-torque controller (QP-based) is applied, the object loses contact within ~10 steps, joint torques explode, and the solver throws:
genesis.GenesisException: Invalid constraint forces causing 'nan'.
Please decrease Rigid simulation timestep.
Decreasing dt or increasing substeps does not prevent the slip; it only changes the speed at which the object falls.
Steps to Reproduce
Reproduction 1: minimal position-control slip
Run from the plugin root:
python docs/issues/repro_genesis_grasp_slip.py
The hand joints are locked at the target grasp configuration with control_dofs_position. The sphere is initialized inside the fingertip cage. In MuJoCo this configuration supports the 50 g sphere; in Genesis the sphere falls through the fingers within a few dozen steps.
Observed output (Genesis 1.3.2)
step=0 obj_z=0.0800
step=1 obj_z=0.0768
step=2 obj_z=0.0711
step=3 obj_z=0.0642
...
step=49 obj_z=-0.2946
Reproduction 2: closed-loop benchmark NaN
Run the full benchmark with the Genesis backend:
python examples/benchmark.py --backend genesis --headless
It fails after ~9 steps with:
genesis.GenesisException: Invalid constraint forces causing 'nan'.
Please decrease Rigid simulation timestep.
The MuJoCo backend completes 500 steps successfully with the same config:
python examples/benchmark.py --backend mujoco --headless
What has been tried
dt reduced from 0.002 to 0.001.
substeps increased to 8 (makes timeconst smaller but does not stop the slip).
RigidOptions.friction_cone set to gs.friction_cone.elliptic to honor the MJCF declaration.
- Hand material friction raised to
1.0 and object friction kept at 0.8.
- Position actuators neutralized /
set_dofs_kp(0) to ensure the computed torque is the only control input.
None of these prevent the object from slipping through the fingertips.
Expected Behavior
Expected behavior
With the hand locked in a closed grasp pose around the sphere, the sphere should remain supported by fingertip contacts (as it does in MuJoCo), and the closed-loop QP benchmark should complete without NaN.
Actual behavior
The sphere slides through the fingertips, contact count drops to zero, and the subsequent control torques cause the rigid solver to produce NaN constraint forces.
Attachments
repro_genesis_grasp_slip.py — minimal standalone reproduction.
- Default grasp config:
configs/leap_sphere_grasp.yaml.
- Full benchmark script:
examples/benchmark.py.
Screenshots/Videos
No response
Relevant log output
Environment
- OS: [e.g. Ubuntu 24.04, Windows 11 24H2]
- GPU/CPU [e.g. A100, RTX 4090, M3pr, Intel I9-9900k, Ryzen 5900x] (N/A if no GPU/CPU)
- GPU-driver version (N/A if no GPU)
- CUDA / CUDA-toolkit version (N/A if non-Nvidia)
Release version or Commit ID
genesis-world | 1.3.2
Additional Context
No response
Bug Description
Issue: Genesis rigid solver NaN / object slips through fingertips in LEAP hand grasp
Problem summary
In a dexterous-hand grasping benchmark, the same LEAP-hand / sphere configuration that is stable under MuJoCo fails under Genesis:
control_dofs_position, the sphere slowly slides through the fingertips (≈1.5–2 mm per 2 ms step).Decreasing
dtor increasingsubstepsdoes not prevent the slip; it only changes the speed at which the object falls.Steps to Reproduce
Reproduction 1: minimal position-control slip
Run from the plugin root:
The hand joints are locked at the target grasp configuration with
control_dofs_position. The sphere is initialized inside the fingertip cage. In MuJoCo this configuration supports the 50 g sphere; in Genesis the sphere falls through the fingers within a few dozen steps.Observed output (Genesis 1.3.2)
Reproduction 2: closed-loop benchmark NaN
Run the full benchmark with the Genesis backend:
It fails after ~9 steps with:
The MuJoCo backend completes 500 steps successfully with the same config:
What has been tried
dtreduced from0.002to0.001.substepsincreased to8(makestimeconstsmaller but does not stop the slip).RigidOptions.friction_coneset togs.friction_cone.ellipticto honor the MJCF declaration.1.0and object friction kept at0.8.set_dofs_kp(0)to ensure the computed torque is the only control input.None of these prevent the object from slipping through the fingertips.
Expected Behavior
Expected behavior
With the hand locked in a closed grasp pose around the sphere, the sphere should remain supported by fingertip contacts (as it does in MuJoCo), and the closed-loop QP benchmark should complete without NaN.
Actual behavior
The sphere slides through the fingertips, contact count drops to zero, and the subsequent control torques cause the rigid solver to produce NaN constraint forces.
Attachments
repro_genesis_grasp_slip.py— minimal standalone reproduction.configs/leap_sphere_grasp.yaml.examples/benchmark.py.Screenshots/Videos
No response
Relevant log output
Environment
Release version or Commit ID
genesis-world| 1.3.2Additional Context
No response